監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

SOAP與RDF--超越遠程過程調(diào)用

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

SOAP與RDF

--超越遠程過程調(diào)用


Uche Ogbuji(
uche.ogbuji@fourthought.com

首席顧問,F(xiàn)ourthought, Inc

2002 年 2 月

本文研究了 SOAP 可以用來傳遞 RDF 模型中的信息的方式。它討論了為了便于進行像 PC 這樣的交換,或者直接以 RDF/XML 序列化形式傳輸這個模型的部分數(shù)據(jù),將 RDF 模型中的基本數(shù)據(jù)轉(zhuǎn)換成 SOAP 編碼的方法。

SOAP 是用來在較低層的因特網(wǎng)協(xié)議之上運載 XML 有效負載的傳輸協(xié)議。早于 1.2 版本的傳輸規(guī)范內(nèi)建在所建議的 XML 編碼中,這是為了適應(yīng)編程語言構(gòu)造的序列化。這樣的編碼是被稱為遠程過程調(diào)用(RPC)系統(tǒng)的主要部分,它們有一個共同的目標(biāo),就是使對遠程計算機發(fā)出的請求看起來象是本地過程調(diào)用一樣。RPC 編碼的其它示例是源自“典型”RPC(在 RFC 1014 中定義)的“外部數(shù)據(jù)表示”(External Data Representation(XDR))以及源自 CORBA 的“通用數(shù)據(jù)表示”(Common Data Representation(CDR))。作為以這種關(guān)系捆綁編碼的結(jié)果,SOAP 表現(xiàn)出勿庸置疑的應(yīng)用程序編程的能力,但是它的用途對于通用的數(shù)據(jù)交換似乎值得懷疑。

這些早期的對 SOAP 的偏愛引發(fā)了眾多的爭論。首先,混合傳輸和數(shù)據(jù)編碼規(guī)范似乎是非常雜亂的通信方法,并且似乎公然違背實行幾十年的網(wǎng)絡(luò)互聯(lián)的分層協(xié)議。畢竟,HTML 標(biāo)記的規(guī)范沒有嵌入到 HTTP 規(guī)范中。其次,選擇將像 RPC 這樣的編碼放在突出的地位使 SOAP 處于比較尷尬的境地;它幾乎不比以前的 XML RPC 機制更有表現(xiàn)力,然而由于 XML 的冗長以及 HTTP、SMTP 等這樣的更一般的體系架構(gòu),它實際上只能保證更小的有效性。作為下一代 RPC,SOAP 帶來的唯一好處似乎只是統(tǒng)一了 Microsoft 和 CORBA 陣營;這是很重要的,但是這當(dāng)然不是說 SOAP 看起來很有前途。

SOAP-as-RPC 的一個重要的負面后果是,這樣的系統(tǒng)一般來說完全不適合 Web 服務(wù)的下一代 EDI 的長遠目標(biāo)。如果 Web 服務(wù)成為網(wǎng)絡(luò)上商業(yè)通信新的方法,那么它們似乎將需要在商業(yè)和合法請求級別上進行通信的傳輸機制,而不是在編程語言 API 級別上進行通信的傳輸機制??梢源_信的是,和其它幾個具有影響力的組織使用 SOAP 一樣,ebXML 倡議(其長遠目標(biāo)是使用 XML 來打造用于國際電子商務(wù)通信的系統(tǒng))最初拒絕使用 SOAP。

從那以后事情有所平息。SOAP 1.2 一定程度上減少了對特殊編碼的依賴(將其歸入單獨的“附件”這部分),現(xiàn)在大多數(shù)開發(fā)者都在使用 SOAP,包括 ebXML。大多數(shù) SOAP 實現(xiàn)仍然專門使用特殊的 SOAP 編碼,但是有跡象表明事態(tài)將更開放,由于插件體系結(jié)構(gòu)的緣故將有更廣泛的編碼選擇,能夠解決更多的通信問題。這樣的一個問題是元數(shù)據(jù)的交換,包括幫助確定在其它 XML 文檔(使用 SOAP 傳輸)中用到的語義的元數(shù)據(jù)。

“資源描述框架”(Resource Description Framework(RDF))是一個建模系統(tǒng),該系統(tǒng)具有解決這種元數(shù)據(jù)交換的一些功能。本文將看看怎樣一起使用 RDF 和 SOAP 來編碼這種元數(shù)據(jù),而且要看看在不需要轉(zhuǎn)換成 SOAP 編碼的情況下,怎樣直接傳輸以 RDF 編碼的數(shù)據(jù)實例。本文要求對 SOAP 和 RDF 比較熟悉。請參閱參考資料以獲取關(guān)于這些主題的更多信息。另請參閱 IBM developerWorks XML 專區(qū)的 Thinking XML 專欄,以了解正在進行的與知識管理相關(guān)的 RDF 和其它 XML 技術(shù)的討論。

好載體 RDF

首先,我將說明如果借助 SOAP 將 RDF 從一個系統(tǒng)傳到另一個系統(tǒng),您能做些什么。我將以 XML 專區(qū)(請參閱參考資料)上我的 Thinking XML 專欄中的一個正在討論的問題跟蹤器工程作為示例。假設(shè)我們希望交換添加到通往遠程主機的系統(tǒng)的問題的詳細信息。這可能是分散、分布式問題跟蹤器的基礎(chǔ)。RDF 序列化中,一個問題的示例如清單 1 所示。

清單 1:RDF/XML 序列化


xmlns:dc="
http://purl.org/dc/elements/1.1#"
xmlns:rdf="
http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="
http://www.w3.org/2000/01/rdf-schema#"
xml:base="
http://rdfinference.org/versa/issues">

>
0101
>
2002-01-27
Data type conversions
Not all the data type conversions listed make sense.
In particular the question of how to convert numeric types to resources
and vice versa require much thought.


這是一個由 Web 資源引起的示例問題。問題本身由 URI http://rdfinference.org/versa/issues#0101 標(biāo)識。這個 URI 通過取文檔的基本 URI,再在代表該問題的這個類型節(jié)點添加 rdf:ID 屬性所給的片斷來確定。使用 xml:base 屬性給出文檔的基本 URI(或者更精確地說,是文檔元素的基本 URI,因此是類型節(jié)點元素本身的基本 URI),為 http://rdfinference.org/versa/issues。然后,您要寫幾個關(guān)于問題本身的語句,最重要的是,使用 Dublin Core 的 dc:relation 元數(shù)據(jù)標(biāo)記給出問題引用的資源。您還要提供一個標(biāo)識符(該標(biāo)識符是問題完整的 URI 的縮寫,只是為了友好顯示這個問題)、問題的創(chuàng)建者、提交日期、簡要標(biāo)題以及詳細描述。

請記住這是 RDF,因此 XML 序列化不是最重要的事,最重要的事是這個示例問題怎樣轉(zhuǎn)換為抽象的 RDF 模型。例如,圖 1,由 Triclops(一個 RDF 可視化工具,隨 4Suite 0.12.0 alpha 1 或更近的版本提供)生成(警告:這個工具生成相當(dāng)大的一張圖)。您還可以使用 Dan Brickley 的在線 RDF 可視化程序生成一個類似的圖。

圖 1:樣本 RDF 模型的圖解


現(xiàn)在我來看看在 SOAP 消息中傳輸這種模型的兩種方式:第一種是通過轉(zhuǎn)換為 SOAP 編碼來傳輸,另一種是直接以 RDF 編碼來傳輸。

使用 SOAP 編碼

首先,您必須計劃傳輸?shù)姆椒āDx的 RDF 是數(shù)據(jù)束,其思想是將這個數(shù)據(jù)束放在消息中傳輸,您按照我們期望接收方處理數(shù)據(jù)的方式來命名。在本例中,您通知遠程服務(wù)器:這里有一個新的問題要跟蹤。因此,我把這個方法叫做 newIssue。請注意,由于現(xiàn)在您正在使用 SOAP 編碼,所以您也可能使方法名適合于帶有用于 RPC 的 SOAP 綁定的編程語言。

然后,您不得不找到傳輸這個新問題對象的方法。您通過傳輸這個新對象的標(biāo)識及它的屬性來完成。本質(zhì)上是,您將新問題對象的每個屬性去掉,并且將其轉(zhuǎn)換成消息參數(shù)。因為 SOAP 編碼很注重類型信息,所以您必須用一個類型修飾每個參數(shù)(請參閱清單 2)。

清單 2:newIssue SOAP 消息



env:encodingStyle="
http://www.w3.org/2001/12/soap-encoding"
xmlns:itsoap="
http://rdfinference.org/schemata/issue-tracker/soap"
xmlns:it="
http://rdfinference.org/schemata/issue-tracker/"
xmlns:dc="
http://purl.org/dc/elements/1.1#"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="
http://www.w3.org/2001/XMLSchema">
0101
http://rdfinference.org/versa/0/2
mailto:uche.ogbuji@fourthought.com
2002-01-27
Data type conversions
Not all the data type conversions listed
make sense. In particular the question of how to convert numeric types to
resources and vice versa require much thought.



SOAP 編碼規(guī)則要求,所有的值放在元素的內(nèi)容中,這包括 RDF 中標(biāo)記作為資源的值,因此給定了數(shù)據(jù)類型 anyURI。請注意,這允許這些值可以是 URI 引用,也可以是完整的 URI(也就是說,相對 URI 和片斷都可以)。如果所有這樣的消息都是這種格式,那么通過給消息元素定義一個 XML 模式定義,您可以避免必須重復(fù)數(shù)據(jù)類型,之后,它可以放在“Web 服務(wù)描述語言”(WSDL)元素中,或者以一些其它的非常規(guī)方式進行通信。清單 3 和清單 4 是這種模式的片斷(省略了根元素和名稱空間聲明)(分別給出是因為它們占用不同的目標(biāo)名稱空間)。

清單 3:newIssue SOAP 消息元素的模式片斷













清單 4:newIssue SOAP 消息參數(shù)元素的模式片斷







可以將這些片斷簡化為清單 5。

清單 5:沒有內(nèi)聯(lián)類型裝飾的 newIssue SOAP 消息



env:encodingStyle="
http://www.w3.org/2001/12/soap-encoding"
xmlns:itsoap="
http://rdfinference.org/schemata/issue-tracker/soap"
xmlns:it="
http://rdfinference.org/schemata/issue-tracker/"
xmlns:dc="
http://purl.org/dc/elements/1.1#"
>
0101
http://rdfinference.org/versa/0/2
mailto:uche.ogbuji@fourthought.com
2002-01-27
Data type conversions
Not all the data type conversions listed make sense.
In particular the question of how to convert numeric types to resources
and vice versa require much thought.



發(fā)送原始 RDF

我在本文開始部分討論過,沒有理由為了使用 SOAP,而一定將 SOAP 消息轉(zhuǎn)換為 RPC 形式。如果您不是一定需要將 RPC 集成到其它系統(tǒng)中,那么在恰當(dāng)?shù)臅r候,您可以采用更自然的措施,使用發(fā)送數(shù)據(jù)并且使遠程系統(tǒng)可以自由處理數(shù)據(jù)的聲明性方法。還沒有官方的面向 SOAP 的 RDF 編碼,而本文的討論基于 RDF 和 SOAP 的約定和規(guī)定。

最簡單的方法是僅僅使 rdf:RDF 元素作為 SOAP 體的單個頂層元素,說明見清單 6。

清單 6:


xmlns:it="
http://rdfinference.org/schemata/issue-tracker/"
xmlns:dc="
http://purl.org/dc/elements/1.1#"
xmlns:rdf="
http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="
http://www.w3.org/2000/01/rdf-schema#"
>
>
0101
>
2002-01-27
Data type conversions
Not all the data type conversions listed make sense.
In particular the question of how to convert numeric types to resources
and vice versa require much thought.




所用的編碼標(biāo)識,http://rdfinference.org/rdfws/soap-encoding 是非規(guī)范化的,其本質(zhì)是,直接將 RDF/XML 的嵌入部分編碼到 SOAP 消息體中。消息形式和一般形式的一個關(guān)鍵的區(qū)別是,rdf:about 用來識別問題資源,但是,它沒有內(nèi)聯(lián)地使用標(biāo)識來聲明。這是序列化用于 SOAP 傳輸?shù)?RDF 模型的一個很重要的原則:避免內(nèi)聯(lián)聲明。假如我們可以使用 xml:base 修改標(biāo)識的基本位置,那么這樣的原則看起來并不是必需的,但是很難想象出內(nèi)聯(lián)傳輸?shù)馁Y源的生命周期和所有權(quán)的清晰語義。請注意,內(nèi)聯(lián)聲明并非在所有的情況下都能避免。例如,匿名資源(也就是空節(jié)點)可能需要作為描述的一部分被傳輸,根據(jù)定義,它們沒有恰當(dāng)?shù)臉?biāo)識符。

結(jié)束語

當(dāng)談到 SOAP 和 RDF 怎樣能夠進行互操作時,還有其它的方法和思想,事實上這是人們一直很感興趣的主題,RDF 用戶怎樣發(fā)現(xiàn) Web 服務(wù)以及 Web 服務(wù)怎樣找到 RDF 用戶。在參考資料這一部分提供了對于該討論所涉及的內(nèi)容。更通用的用于序列化基于 XML 數(shù)據(jù)的系統(tǒng)當(dāng)然會使全世界的 Web 服務(wù)更豐富。

參考資料

請單擊文章頂部和底部的討論按鈕參加關(guān)于這篇文章的討論論壇。

Uche Ogbuji 寫的 Introduction to RDF,提供了對 RDF 的基本介紹,并且包括到其它有用參考資料的鏈接。

Dublin Core metadata initiative 保存有描述 Web 上類似庫的元數(shù)據(jù)的詞匯表。

Graham Glass 所著的 The Web services (r)evolution, Part 3: How SOAP Works,對 SOAP(更老的變體)有深入的見解。

SOAP Version 1.2 Part 0: Primer,W3C 的一個關(guān)于 SOAP 的工作草案。這是對 SOAP 1.2 的優(yōu)秀介紹。

Uche Ogbuji 的 Thinking XML 專欄。

RDF 和 Web 服務(wù)之間相互影響的討論

Henrik Frystyk Nielsen 所著的怎樣可以用 SOAP 序列化 RDF 模型的示例。

工具等內(nèi)容

4Suite,Uche Ogbuji 參與開發(fā)的一組 XML 和 RDF 工具。

如果在 Web 上已經(jīng)可以序列化 XML,Dan Brickley 的 RDF 可視化程序是生成 RDF 圖的很方便的工具。

關(guān)于作者

Uche Ogbuji 是 Fourthought, Inc 的顧問兼聯(lián)合創(chuàng)始人,該公司是專為企業(yè)知識管理應(yīng)用提供 XML 解決方案的軟件供應(yīng)商和咨詢公司。Fourthought 開發(fā)了 4Suite,它是 XML 中間件的開放源碼平臺。Ogbuji 先生是一名出生于尼日利亞的計算機工程師和作家,他在美國科羅拉多州的博耳德生活和工作。您可以通過 uche.ogbuji@fourthought.com 與 Ogbuji 先生聯(lián)系。

發(fā)布:2007-03-25 13:31    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢