總網頁瀏覽量

搜尋此網誌

2010年9月29日 星期三

Remote Procedure Call XML觀念演進->XML-RPC->SOAP

RPC
遠端程序呼叫(Remote Procedure Call,RPC)是一個電腦通訊協定。該協定允許執行於一台電腦的程式呼叫另一台電腦的子程式,而程式設計師無需額外地為這個互動作用編程。如果涉及的軟體採用物件導向編程,那麼遠端程序呼叫亦可稱作遠端呼叫或遠端方法呼叫。
XML
延伸標示語言(eXtensible Markup Language,簡稱XML),又稱可延伸標記語言,是一種置標語言。置標指電腦所能理解的資訊符號,透過此種標記,電腦之間可以處理包含各種資訊的文章等。如何定義這些標記,既可以選擇國際通用的標記語言,比如HTML,也可以使用像XML這樣由相關人士自由決定的標記語言,這就是語言的可延伸性。XML是從標準通用置標語言(SGML)中簡化修改出來的。它主要用到的有可延伸標示語言、可延伸樣式語言(XSL)、XBRL和XPath等。

XML-RPC是一個遠端過程調用remote procedure call,RPC)的分布式計算協議,通過XML將調用函數封裝,並使用HTTP協議作為傳送機制[
XML是從1995年開始有其雛形,並向W3C(全球資訊網聯盟)提案,而在1998二月發佈為W3C的標準(XML1.0)。XML的前身是SGML(The Standard Generalized Markup Language),是自IBM從1960年代就開始發展的GML(Generalized Markup Language)標準化後的名稱。

GML的重要概念:
檔案中能夠明確的將標示與內容分開
所有檔案的標示使用方法均一致
1978年,ANSI將GML加以整理規範,發佈成為SGML,1986年起為ISO所採用(ISO 8879),並且被廣泛地運用在各種大型的檔案計劃中,但是SGML是一種非常嚴謹的檔案描述法,導致過於龐大複雜(標準手冊就有500多頁),難以理解和學習,進而影響其推廣與應用。
同時W3C也發現到HTML的問題:
不能解決所有解釋資料的問題 - 像是影音檔或化學公式、音樂符號等其他形態的內容。
效能問題 - 需要下載整份檔案,才能開始對檔案做搜尋。
擴充性、彈性、易讀性均不佳。
為了解決以上問題,專家們使用SGML精簡製作,並依照HTML的發展經驗,產生出一套使用上規則嚴謹,但是簡單的描述資料語言:XML。 XML是在一個這樣的背景下誕生的——為了有一個更中立的方式,讓消費端自行決定要如何消化、呈現從服務端所提供的資訊。
XML被廣泛用來作為跨平台之間互動數據的形式,主要針對數據的內容,通過不同的格式化描述手段(XSLT,CSS等)可以完成最終的形式表達(生成對應的HTML,PDF或者其他的檔案格式)。
XML設計用來傳送及攜帶資料資訊,不用來表現或展示資料,HTML語言則用來表現資料,所以XML用途的焦點是它說明資料是什麼,以及攜帶資料資訊。

豐富檔案(Rich Documents)- 自定檔案描述並使其更豐富
屬於檔案為主的XML技術應用
標記是用來定義一份資料應該如何呈現
後設資料(Metadata)- 描述其它檔案或網路資訊
屬於資料為主的XML技術應用
標記是用來說明一份資料的意義
設定檔案(Configuration Files)- 描述軟體設定的參數
例子


XML定義結構、儲存資訊、傳送資訊。下例為張旭發送給陳貞伶的便條,儲存為XML。
<小纸条>

<收件人>陳貞伶

<发件人>張旭

<主题>問候

<具体内容>最近可好?



這XML文檔僅是純粹的資訊標籤,這些標籤意義的展開依賴於應用它的程式。

結構

每個XML文檔都由XML序言開始,在前面的代碼中的第一行便是XML序言,。這一行代碼會告訴解析器和瀏覽器,這個檔案應該按照前面討論過的XML規則進行解析。第二行代碼,,則是文檔元素(document element),它是檔案中最外面的標籤(我們認為元素(element)是起始標籤和結束標籤之間的內容)。所有其他的標籤必須包含在這個標籤之內來組成一個有效的XML檔案。XML檔案的第二行並不一定要包含文檔元素;如果有注釋或者其他內容,文檔元素可以遲些出現。



範例檔案中的第三行代碼是注釋,你會發現它與HTML中使用的注釋風格是一樣的。這是XML從SGML中繼承的語法元素之一。
頁面再往下的一些地方,可以發現標籤裡有一些特殊的語法。代碼用於表示無需進行解析的文字,允許諸如大於號和小於號之類的特殊字元包含在文字中,而無需擔心破壞XML的語法。文字必須出現在之間才能合適地避免被解析。這樣的文字稱為Character Data Section,簡稱CData Section。

下面的一行就是在第二本書的定義之前的:


雖然它看上去很像XML序言,但實際上是一種稱為處理指令(processing instruction)的不同型別的語法。處理指令(以下簡稱PI)的目的是為了給處理頁面的程式(例如XML解析器)提供額外的資訊。PI通常情況下是沒有固定格式的,唯一的要求是緊隨第一個問號必須至少有一個字母。在此之後,PI可以包含除了小於號和大於號之外的任何字串序列。
最常見的PI是用來指定XML檔案的樣式表:
這個PI一般會直接放在XML序言之後,通常由Web瀏覽器使用,來將XML資料以特殊的樣式顯示出來。
XML的結構有一個缺陷,那就是不支援分幀(framing)。當多條XML訊息在TCP上傳輸的時候,無法基於XML協定來確定一條XML訊息是否已經結束。

XML-RPC是一個遠端過程調用remote procedure call,RPC)的分布式計算協議,通過XML將調用函數封裝,並使用HTTP協議作為傳送機制
歷史

XML-RPC發表於1998年,由UserLand Software(UserLand Software)的Dave Winer及Microsoft共同發表[2]。後來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。
XML-RPC協定是已登記的專利項目,由Phillip Merrick、Stewart Allen及Joseph Lapp共同持有,於1998年3月提出申請,指其將用於一個構想中的應用程式,並於2006年4月獲得接納。現時這個專利由位於美國維珍尼亞州費爾法克斯的webMethods使用

SOAP 簡單物件存取協定
是一種標準化的通訊規範,主要用於Web服務(web service)中。SOAP的出現是為了簡化網頁伺服器(Web Server)在從XML數據庫中提取資料時,無需花時間去格式化頁面,並能夠讓不同應用程式之間透過HTTP通訊協定,以XML格式互相交換彼此的資料,使其與程式語言、平台和硬體無關。此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,並得到IBM,蓮花(Lotus),康柏(Compaq)等公司的支持,於2000年提交給全球資訊網聯盟(World Wide Web Consortium;W3C),目前 SOAP 1.1 版是業界共同的標準,屬於第二代的XML協定(第一代具主要代表性的技術為XML-RPC以及WDDX)。

用一個簡單的例子來說明 SOAP 使用過程,一個 SOAP 訊息可以發送到一個具有 Web Service 功能的 Web 站點,例如,一個含有房價資訊的資料庫,訊息的參數中標明這是一個查詢訊息,此站點將返回一個 XML 格式的資訊,其中包含了查詢結果(價格,位置,特點,或者其他資訊)。由於資料是用一種標準化的可分析的結構來傳遞的,所以可以直接被第三方站點所利用。
相關定義

* SOAP 封裝(envelop),它定義了一個框架,描述訊息中的內容是什麼,是誰發送的,誰應當接受並處理它以及如何處理它們;

* SOAP 編碼規則(encoding rules),它定義了一種序列化的機制,用於表示應用程式需要使用的資料類型的實例;

* SOAP RPC表示(RPC representation),它定義了一個協定,用於表示遠程過程調用和應答;

* SOAP 綁定(binding),它定義了SOAP使用哪種協議交換資訊。使用HTTP/TCP/UDP協議都可以。

把 SOAP 綁定到 HTTP 提供了同時利用 SOAP 的樣式和分散的靈活性的特點以及 HTTP 的豐富的特徵庫的優點。在 HTTP 上傳送 SOAP 並不是說 SOAP 會覆蓋現有的 HTTP 語義,而是 HTTP 上的 SOAP 語義會自然的映射到 HTTP 語義。在使用 HTTP 作為協議綁定的場合中, RPC 請求映射到 HTTSOAP曾經代表「Simple Object Access Protocol」,但是這種縮寫已經在標準的1.2版後被廢止了。1.2版在2003年6月24日成為W3C的推薦版本。這種縮寫容易與SOA——Service-oriented architecture產生歧義,雖然它們之間存在非常大的差異。
SOAP是在1998年由Dave Winer, Don Box,Bob Atkinson 和 Mohsen Al-Ghosein 設計的。當時是將其作為一種物件存取協議。現在,SOAP規範是由全球資訊網聯盟的XML工作組進行維護的。
 傳輸方式
SOAP使用網際網路應用層協議作為其傳輸協議。SMTP以及HTTP協議都可以用來傳輸SOAP訊息,但是由於HTTP在如今的網際網路結構中工作得很好,特別是在網路防火牆下仍然工作流暢,所以其更為廣泛地被採納。SOAP亦可以在HTTPS上進行傳輸。
SOAP的訊息格式採用XML。
SOAP 訊息實例

沒有留言:

張貼留言