這些更改基本上是抽取描述的一部分并將其編碼為 RDF 序列化。正如 RDF Model and Syntax 1.0
Recommendation (RDF M&S)(請(qǐng)參閱參考資源)所要求的那樣, 這個(gè)部分包括在 rdf:RDF 元素中。如果將它輸入 RDF
處理器,您將獲得大量信息,這些信息勾劃出組成 WSDL 說(shuō)明的限制條件和關(guān)系。 我使用可用的每個(gè) RDF 序列化技巧將對(duì)原始 XML 結(jié)構(gòu)的更改減到最少。
它很好地說(shuō)明了 RDF 工作組必須對(duì) RDF M&S 進(jìn)行多么艱苦的處理,才能使現(xiàn)有的 XML 格式歸結(jié) 到有效的 RDF
形式中。請(qǐng)注意,這一點(diǎn)也是引起極大爭(zhēng)議的原因,因?yàn)橛性S多可用的技巧使得從各種語(yǔ)法和所生成的 RDF 抽象模型的轉(zhuǎn)換具有一定的脆弱性。
我未將 types 元素包括在 RDF 部分。主要問(wèn)題是這部分內(nèi)容實(shí)際上完全超出了 WSDL 的范圍。W3C 或其他 Web
標(biāo)準(zhǔn)組織可能提出一個(gè)將 XML 方案映射到 RDF 的標(biāo)準(zhǔn),并且其他數(shù)據(jù)分類(lèi)方法可能完成相同的工作,但它實(shí)際上屬于完全不同的另一范疇的工作。 types
描述可能仍然可通過(guò)指定 parseType="Literal" 屬性完全插入 RDF 模型中,但我們同時(shí)必須面對(duì)隨 parseType="Literal"
而來(lái)的所有問(wèn)題: 尤其是,RDF M&S 明確禁止包含標(biāo)記的文字之間的等價(jià)定義(例如,它可能這樣規(guī)定,如果帶有標(biāo)記的兩段文字約簡(jiǎn)到正規(guī) XML
以后完全相同,則它們等價(jià))。這意味著我們永遠(yuǎn)無(wú)法對(duì)以 RDF 模型存儲(chǔ)的數(shù)據(jù)與任何其他數(shù)據(jù)進(jìn)行可靠的比較。在實(shí)際應(yīng)用中,這使得
parseType="Literal" 毫無(wú)用處,所以我也就沒(méi)管它。
在被轉(zhuǎn)換為 RDF 的部分中,最顯著的更改是在核心 WSDL 元素中添加了 rdf:ID 屬性。 這是 RDF 對(duì) WSDL
作者對(duì)屬性中的限定名執(zhí)行的操作的處理方式:建立抽象實(shí)體之間的關(guān)系。通過(guò)使用 rdf:resource
屬性就可以看到在何處生成對(duì)這些已標(biāo)識(shí)資源的引用。
您會(huì)注意到的另一個(gè)更改是,所有以前無(wú)前綴的屬性現(xiàn)在都添加了一個(gè)前綴。RDF 縮寫(xiě)允許將 namespace-resolved
屬性當(dāng)作特性名對(duì)待。屬性值則成為語(yǔ)句的文字值。 在清單 1 中我大量使用了此縮寫(xiě)。RDF
并不嚴(yán)格要求特性名的名稱(chēng)空間,但極力建議將它作為消除這些名稱(chēng)的歧義的方法。如果您準(zhǔn)備將此 WSDL 元數(shù)據(jù)放入包含其他信息的模型中,則常用的標(biāo)簽(如
"name")很有可能與另一個(gè)特性表示(比如說(shuō),人名或組織名)發(fā)生沖突。因?yàn)?XML Namespaces 1.0
不允許應(yīng)用程序?qū)⑷笔∶Q(chēng)空間用作屬性,所以我們必須明確地指定前綴來(lái)消除歧義。
在某些情況下(如消息部分),我使用匿名資源。請(qǐng)注意,message/part 元素有 property 屬性,但沒(méi)有
rdf:ID 或 rdf:about
屬性。我選擇這樣做是因?yàn)樵谖铱磥?lái),很少需要引用消息上下文之外的消息部分,而且只有此操作才需要讓它為非匿名。否則,我就不得不構(gòu)造一個(gè)唯一的
ID(不像頂級(jí)資源那樣自然),并在 rdf:about 屬性中使用 XPointer,或某個(gè)其他技巧。我只是跟著最自然的感覺(jué)走。
最后幾點(diǎn)注意事項(xiàng)。您可以看到,我在 service 元素中使用 rdf:about
添加了一條語(yǔ)句,這條語(yǔ)句涉及我以前作為其主題說(shuō)明的那個(gè)端口。這是利用 RDF 語(yǔ)法的靈活性將對(duì)原始 WSDL 的更改減至最少的另一個(gè)示例。此外,您可以看到
RDF 描述的任意嵌套是多么有用,它允許我們的 binding 元素版本保留它原始的結(jié)構(gòu)。
WSDL 的詳細(xì)圖形表示,多虧 RDF
最后,根據(jù)我們分析過(guò)的 WSDL 1.0
規(guī)范,我上面的示例并不是有效的 WSDL。幸運(yùn)的是,從正式語(yǔ)法生成 RDF 非常簡(jiǎn)單,既可以通過(guò)提供 WSDL 文檔中數(shù)據(jù)的同一來(lái)源中的自動(dòng)化處理生成,
也可以使用 XSLT 生成(我的下一篇關(guān)于 WSDL 的文章將提供其實(shí)現(xiàn)方式的示例)。我在本文中提供的 RDF 表示仍然有用,因?yàn)樗峁┝擞?WSDL
編碼的元數(shù)據(jù)的一個(gè)具體 RDF 模型。我認(rèn)為這離掌握全部相關(guān)和實(shí)用的語(yǔ)句已相當(dāng)接近了。這樣,使用從 WSDL 中抽取的任何特定 RDF
語(yǔ)法來(lái)構(gòu)造相同的模型就是一件簡(jiǎn)單的事了。
WSDL 的 RDF 模型的一大優(yōu)點(diǎn)是它直接導(dǎo)致 WSDL 模型所指定內(nèi)容的方便可視化。通過(guò)將元數(shù)據(jù)映射到
RDF,我已將它套進(jìn)一種形式化中,RDF M&S 為此形式化提出了一種有用的表示作為定向圖。如要看實(shí)際操作,請(qǐng)轉(zhuǎn)到 Dan Brickley 的卓越的
RDF 可視化工具(請(qǐng)參閱“參考資源”),并在 URL 文本框中輸入下面的 URL:
http://www-4.ibm.com/software/developerWorks/library/ws-rdf/endorse.rdf。
我已將要查看的文檔的一個(gè)副本列在清單 1 中。
請(qǐng)快速瀏覽一下生成的圖形。如果使用可視化工具的 GIF 輸出,看它需要費(fèi)點(diǎn)勁,所以如果您有諸如 Adobe SVG
Plug-in(請(qǐng)參閱參考資源)之類(lèi)的查看器,我建議使用 SVG 輸出。此外,您也可以從這個(gè)觀測(cè)器站點(diǎn)生成 2 維虛擬現(xiàn)實(shí)標(biāo)記語(yǔ)言
(VRML)。請(qǐng)注意,已為匿名資源分配了一個(gè)生成的統(tǒng)一資源標(biāo)識(shí)符 (URI),這個(gè)標(biāo)記符對(duì)于 RDF 工具很有用,盡管它與 RDF M&S
中給出的圖形樣例有所不同,在 RDF M&S 中匿名資源用空橢圓表示。例如,分配到的 URI 包含在第一個(gè) message
元素中的匿名端口資源是:
http://www-4.ibm.com/software/developerWorks/library/ws-rdf/endorse.rdf#genid3。
另請(qǐng)注意,顯式繪制的 rdf:type 屬性,在清單 1 中是使用分類(lèi)節(jié)點(diǎn)隱式繪制的,而沒(méi)有使用 rdf:description
元素。
XML 的多個(gè)方面
臨時(shí)搭起傳道者的講壇,這正是 XML
及其相關(guān)技術(shù)如此激動(dòng)人心的原因。不老到的數(shù)據(jù)處理人員很少會(huì)認(rèn)識(shí)到 WSDL、RDF
和其他這類(lèi)技術(shù)中驚人的洞察力和獨(dú)創(chuàng)性。具有革命性的不是數(shù)據(jù)格式、抽象模型或介于二者之間的任何東西,而是在各種適合的系統(tǒng)之間協(xié)作的能力,這使得如此多的人聚集在
XML 數(shù)據(jù)處理的旗幟之下。
這意味著我,一個(gè)自稱(chēng)懶惰的程序員,可以很快熟悉一個(gè)新的服務(wù)描述語(yǔ)言,WSDL,并快速將它揉合為 RDF
中的一種形式。在某些情況下(如 RSS),這一點(diǎn)已經(jīng)實(shí)現(xiàn)了。通過(guò)使用現(xiàn)成的工具,我可以創(chuàng)建原來(lái)所描述的抽象的一種全面可視化。
針對(duì) RDF 和 W3C 對(duì)它的聲明存在一些爭(zhēng)論,但我們對(duì) WSDL 的剖析應(yīng)該能夠表明,不管您對(duì) RDF
及其眾所周知的不足有什么看法,它是可用于使元數(shù)據(jù)會(huì)談?wù)_開(kāi)始的一個(gè)大型圓桌會(huì)議。使 XML
團(tuán)體第一次變得非常重要的一件事情似乎是對(duì)跨企業(yè)的可擴(kuò)展性的承諾,這使得這種協(xié)作變得更現(xiàn)實(shí)。好了,我們現(xiàn)在閑言少敘,言歸正傳。
用于 WSDL 的 RDF Schema?
圖中揭示的類(lèi)型特性暗示了一種用于
WSDL 的 RDF Schema,該方案可用作轉(zhuǎn)換為一種 RDF 模型的形式框架。WSDL 規(guī)范仍然不提供任何 RDF Schema,但在清單 2
中我對(duì)其中的原因提出了最恰當(dāng)?shù)慕ㄗh。它并不是 WSDL 的一個(gè)完整 RDF Schema;它只包含清單 1 中的示例的一個(gè)子集,而此子集又只使用了 WSDL
的一個(gè)子集,但這可望成為進(jìn)一步工作的基礎(chǔ)。
應(yīng)注意的第一點(diǎn)是,大小寫(xiě)與 RDF Schemas Candidate Recommendation (RDF Schemas)
中使用的約定不一致。這是為了避免改變 WSDL 所用的元素類(lèi)型名。除此之外,它還是循環(huán)的方案。只要 WSDL 對(duì)描述元素之間的內(nèi)部關(guān)系有相應(yīng)的限制,我就使用
domain- 和 range- 約束。因此,舉例來(lái)說(shuō),因?yàn)?WSDL 輸入元素中的消息屬性的值必須是消息名,所以 RDF Schema 使用清單 3
中代碼段的等價(jià)范圍約束。
清單 3. RDF Schema 的范圍約束
上面的范圍約束確保輸入特性只能在操作元素中使用,這也是 WSDL
的一個(gè)約定。
但是,請(qǐng)注意,其中許多約束并不是它們所能達(dá)到的最強(qiáng)約束。例如,元素屬性指明消息部分使用的類(lèi)型部分中的特定元素。該特性的值實(shí)際上應(yīng)該是一個(gè)有效的
qname。例如,我們不能將字符串 "!!42xyz??" 設(shè)置為該特性的值,因?yàn)樗踔敛皇且粋€(gè)有效的 XML 元素類(lèi)型名,但是因?yàn)槲覀儗?
rdfs:Literal 用作該特性的范圍,所以 RDF 處理器將會(huì)容忍這種錯(cuò)誤。不幸的是,RDF Schema
幾乎沒(méi)有提供對(duì)數(shù)據(jù)分類(lèi)的支持,這個(gè)任務(wù)留給了以后的版本,那個(gè)版本將能夠利用 XML Schema 小組的工作。
出于策略方面的考慮,為了保持簡(jiǎn)單,我選擇我的子集不包括 SOAP 操作。為了使特定于 SOAP
的語(yǔ)句處在它們自己的名稱(chēng)空間中,看來(lái)很可能必須有另一個(gè) RDF Schema 文件用于這些類(lèi)和特性,而且必須借助發(fā)布這些方案的 WSDL
作者的一些幫助。但是,再?gòu)?qiáng)調(diào)一次,RDF Schema 的任何使用,包括我在本文中設(shè)置的框架,都需要擁有基準(zhǔn) "http://schemas.xmlsoap.org/wsdl" URL(請(qǐng)參閱參考資源)的
WSDL 作者的某些幫助。大多數(shù) RDF 處理器,包括我在本文中使用的 4RDF,可以幫助開(kāi)發(fā)人員避開(kāi)這個(gè)問(wèn)題,它允許開(kāi)發(fā)人員映射和覆蓋基準(zhǔn) URI。其他
RDF 處理器或許也可以完成這一工作。
掌握 XSLT...
正如本文所述,通過(guò)將 WSDL 映射到
RDF,就可將服務(wù)描述自動(dòng)合并到識(shí)別 RDF 的搜索引擎和分類(lèi)系統(tǒng)中。W3C 已經(jīng)利用它的巨大影響力鼓勵(lì)廠商和網(wǎng)站管理員使用 RDF
對(duì)他們的內(nèi)容進(jìn)行分類(lèi),這將提高嵌入式服務(wù)描述的價(jià)值。如果是這樣,那么 "services Web"(盜用 XML 評(píng)論員 Len Bullard
的一個(gè)術(shù)語(yǔ))的白頁(yè)和黃頁(yè)就會(huì)變得像限制為 WSDL 方案的 RDF 搜索一樣簡(jiǎn)單。比 UDDI
用戶(hù)拼裝的巨大框架簡(jiǎn)單得多,但這完全是另一個(gè)話題。
文本可望使您對(duì)如何借助可用于 RDF 的現(xiàn)有工具來(lái)體驗(yàn) WSDL 有所領(lǐng)悟。我們看過(guò)了用 WSDL
編碼的元數(shù)據(jù)關(guān)系的內(nèi)部結(jié)構(gòu),RDF 轉(zhuǎn)換使這一點(diǎn)更加清晰。我們也了解了從非 RDF 的 XML 語(yǔ)匯表導(dǎo)出 RDF Schema 和實(shí)例的一般過(guò)程。
在下一篇文章中,我們將會(huì)看到 W3C 的另一項(xiàng)核心技術(shù)(即 XSLT)能為 WSDL 開(kāi)發(fā)人員和用戶(hù)做哪些工作。
參考資源
我的前一篇文章,
Using WSDL with SOAP Applications,說(shuō)明了 WSDL 的工作方式以及它如何應(yīng)用到基于 SOAP 的應(yīng)用程序編程
回顧 Web
服務(wù)描述語(yǔ)言 (WSDL) 規(guī)范。
W3C 維護(hù)著一個(gè) RDF 信息網(wǎng)頁(yè),您可以從該網(wǎng)頁(yè)獲得進(jìn)一步的信息。
要進(jìn)一步提高您的 RDF 水平,請(qǐng)?jiān)囈辉囘@篇教程。
我使用 Dan Brickley 的令人驚奇的 RDF
visualizer 生成了我們剛討論過(guò)的 WSDL 描述的圖像,格式為 GIF
(141 KB) 和 SVG (27 KB)(要查看該文件請(qǐng)下載 Adobe SVG plug-in。安裝插件程序后,在插件程序或 Web
瀏覽器中打開(kāi)任一個(gè) RDF 文件來(lái)以圖形方式查看它)。RDF 源代碼是本文中的清單 1,我也提供了它的一個(gè)副本。
您可能也對(duì)將 RDF 方案可視化工具用于清單 2 感興趣。
W3C 的 SVG 網(wǎng)頁(yè)上有許多 SVG 資源。
我使用 4RDF 處理并測(cè)試本文的 RDF
文件和方案,圖形生成除外。
關(guān)于作者
Uche Ogbuji 是 Fourthought 公司的顧問(wèn)和創(chuàng)始人之一,該公司是一家專(zhuān)門(mén)研究企業(yè)知識(shí)管理應(yīng)用程序的
XML 解決方案的咨詢(xún)公司。Fourthought 開(kāi)發(fā)出 4Suite,這是一個(gè) XML 中間件的開(kāi)放源碼平臺(tái)。Ogbuji
先生是一位計(jì)算機(jī)工程師和作家,它出生于尼日利亞,現(xiàn)在居住在美國(guó)科羅拉多州的 Boulder,并在那里工作??梢酝ㄟ^(guò) uche@fourthought.com 與他聯(lián)系。