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

SOAP與RDF--超越遠(yuǎn)程過(guò)程調(diào)用

申請(qǐng)免費(fèi)試用、咨詢(xún)電話(huà):400-8352-114

AMTeam.org

SOAP與RDF

--超越遠(yuǎn)程過(guò)程調(diào)用


Uche Ogbuji(
uche.ogbuji@fourthought.com

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

2002 年 2 月

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

SOAP 是用來(lái)在較低層的因特網(wǎng)協(xié)議之上運(yùn)載 XML 有效負(fù)載的傳輸協(xié)議。早于 1.2 版本的傳輸規(guī)范內(nèi)建在所建議的 XML 編碼中,這是為了適應(yīng)編程語(yǔ)言構(gòu)造的序列化。這樣的編碼是被稱(chēng)為遠(yuǎn)程過(guò)程調(diào)用(RPC)系統(tǒng)的主要部分,它們有一個(gè)共同的目標(biāo),就是使對(duì)遠(yuǎn)程計(jì)算機(jī)發(fā)出的請(qǐng)求看起來(lái)象是本地過(guò)程調(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)用程序編程的能力,但是它的用途對(duì)于通用的數(shù)據(jù)交換似乎值得懷疑。

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

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

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

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

好載體 RDF

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


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

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

圖 1:樣本 RDF 模型的圖解


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

使用 SOAP 編碼

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

然后,您不得不找到傳輸這個(gè)新問(wèn)題對(duì)象的方法。您通過(guò)傳輸這個(gè)新對(duì)象的標(biāo)識(shí)及它的屬性來(lái)完成。本質(zhì)上是,您將新問(wèn)題對(duì)象的每個(gè)屬性去掉,并且將其轉(zhuǎn)換成消息參數(shù)。因?yàn)? SOAP 編碼很注重類(lèi)型信息,所以您必須用一個(gè)類(lèi)型修飾每個(gè)參數(shù)(請(qǐng)參閱清單 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ù)類(lèi)型 anyURI。請(qǐng)注意,這允許這些值可以是 URI 引用,也可以是完整的 URI(也就是說(shuō),相對(duì) URI 和片斷都可以)。如果所有這樣的消息都是這種格式,那么通過(guò)給消息元素定義一個(gè) XML 模式定義,您可以避免必須重復(fù)數(shù)據(jù)類(lèi)型,之后,它可以放在“Web 服務(wù)描述語(yǔ)言”(WSDL)元素中,或者以一些其它的非常規(guī)方式進(jìn)行通信。清單 3 和清單 4 是這種模式的片斷(省略了根元素和名稱(chēng)空間聲明)(分別給出是因?yàn)樗鼈冋加貌煌哪繕?biāo)名稱(chēng)空間)。

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













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







可以將這些片斷簡(jiǎn)化為清單 5。

清單 5:沒(méi)有內(nèi)聯(lián)類(lèi)型裝飾的 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

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

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

結(jié)束語(yǔ)

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

參考資料

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

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

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

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

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

Uche Ogbuji 的 Thinking XML 專(zhuān)欄。

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

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

工具等內(nèi)容

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

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

關(guān)于作者

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

發(fā)布:2007-03-25 13:31    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章: