本文考察了一些頂尖的 XML 模式,這些模式為各種各樣的問題提供了解決方案,從基本的 Web 服務到數(shù)據(jù)描述等等。其中包括涉及到通訊錄和發(fā)票的類似數(shù)據(jù)庫的解決方案。本文選擇模式的標準是根據(jù)其實用性和用途,及其在 XML 信息共享和交換方面對 XML 社區(qū)的影響。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
![]() |
|
簡單對象訪問協(xié)議(Simple Object Access Protocol,SOAP)實際上是一種 Web 服務技術(shù),但 Web 服務中客戶機和服務器之間的數(shù)據(jù)交換格式是通過靈活的 XML 模式實現(xiàn)的。
Web 服務的主要優(yōu)點是客戶機和服務器通過網(wǎng)絡進行信息和數(shù)據(jù)交換的互操作性的層次。SOAP 標準使用 XML 以一種體系結(jié)構(gòu)中立的格式來構(gòu)造數(shù)據(jù),定義數(shù)據(jù)類型和信息。
對于編程語言來說,只需要提供數(shù)據(jù)類型和需要在遠程服務器上調(diào)用的函數(shù)名稱即可。SOAP 庫將用主機語言編寫的信息和格式轉(zhuǎn)化成 XML 格式的消息,其中包括調(diào)用的函數(shù)和提供的參數(shù)。
通過 W3C 的例子就可以了解 SOAP 的結(jié)構(gòu)。調(diào)用遠程 SOAP 函數(shù)
GetEndorsingBoarder()
的時候,客戶機上的調(diào)用程序生成清單 1 所示的 XML 消息。
清單 1. 調(diào)用遠程 SOAP 函數(shù)
GetEndorsingBoarder()
|
SOAP 客戶機發(fā)送的整個消息都放在 SOAP 信封中。信封的內(nèi)容就是消息的詳細內(nèi)容。
被調(diào)用的函數(shù)顯然是
GetEndorsingBoarder
,它包括兩個參數(shù):manufacturer 和 model。由此可見,它把本地的可能采用二進制編碼的字符串轉(zhuǎn)化成了 XML 字符串。由于 XML 是平臺獨立的,主機使用 SOAP 系統(tǒng)不需要復雜的二進制編碼和解碼就可以交換消息。
服務器通過另一個 XML 編碼的 SOAP 信封返回響應,這一次是函數(shù)的返回值。SOAP 請求的響應格式與函數(shù)相同,只不過在信封內(nèi)容的后面加上了
Response
,如清單 2 所示。
清單 2. SOAP 請求的響應
|
通常不需要自己編寫 SOAP 消息,SOAP 庫會自動生成。不過 SOAP 信封的結(jié)構(gòu)和簡單性表明使用 SOAP 標準共享信息很簡單。
SOAP 大大簡化了交換消息和調(diào)用遠程函數(shù)的工作。遠程過程調(diào)用(Remote Procedure Call,RPC)標準需要復雜的方法來處理二進制數(shù)據(jù)的序列化,發(fā)送結(jié)構(gòu)化更高的信息需要詳細的聲明和雙向的信息轉(zhuǎn)換。
使用 SOAP,XML 序列化大大降低了這種復雜性,使得跨平臺、跨語言集成和數(shù)據(jù)交換更加簡單。
![]() ![]() |
![]()
|
Web 服務描述語言(Web Services Description Language,WSDL)提供了一種描述 Web 服務(大多使用 SOAP)的簡單方法。WSDL 允許您描述利用 SOAP 標準所提供的服務和接口。
比 方說,可以創(chuàng)建描述某臺服務器上提供的服務的 WSDL 文件,然后把該文件分發(fā)給需要這些服務的 Web 服務消費者。通過閱讀和解析 WSDL 文件,消費者能夠了解到使用這些 Web 服務需要知道的所有信息,包括可以交換的數(shù)據(jù)類型、參數(shù)以及返回的各種錯誤和其他信息。
再次使用來自 W3C 的例子,可以看到不同遠程函數(shù)的聲明和交換的數(shù)據(jù)都是通過結(jié)構(gòu)的 XML 定義處理的,如清單 3 所示。
清單 3. 不同遠程函數(shù)和交換數(shù)據(jù)的 XML 定義
|
WSDL 聲明了消息類型、默認數(shù)據(jù)類型和內(nèi)容以及交換的數(shù)據(jù)結(jié)構(gòu)。
訪問服務器上 SOAP 結(jié)構(gòu)需要使用的一切信息都可以在這個 WSDL 中找到。大多數(shù)語言和環(huán)境都提供一種閱讀和解析 WSDL 的機制,以確定可用的函數(shù)和數(shù)據(jù)交換。
WSDL 不僅定義了用于交換信息的 SOAP 接口,通過適當?shù)?WSDL 生成程序,還可用于創(chuàng)建發(fā)送請求、生成并格式化響應所需要的代碼。
WSDL 和 SOAP 組成了一個強大的遠程過程調(diào)用系統(tǒng)。
![]() ![]() |
![]()
|
語 義 Web(Semantic Web)和語義網(wǎng)格(Semantic Grid)技術(shù)都依賴于資源描述框架(Resource Description Framework,RDF)這種靈活的描述語言。RDF 格式實際上是一個標準家族的成員之一。它用于描述信息和資源,使得系統(tǒng)很容易連接和關(guān)聯(lián)不同的資源。
RDF 是另一種經(jīng)過 W3C 批準的標準,它用于定義信息和資源。RDF 不需要 XML,但一種用于描述信息的序列化格式采用了 XML。
定義資源需要指定一個包含主語、謂詞和賓語的表達式。比方說,如果描述一個網(wǎng)站的內(nèi)容,主語就是該網(wǎng)站,謂詞是 “包含信息”,賓語就是內(nèi)容的類型。建立該網(wǎng)站和其他資源的聯(lián)系,可使用 Friend of a Friend (FOAF) 標記建立兩個資源之間的鏈接。
RDF 的目的是將關(guān)于資源和信息的自然語言的陳述轉(zhuǎn)化為機器可解析的格式。比如可將
The MCSLP.com Website is authored by Martin C Brown
這句話改寫為清單 4 所示的 RDF XML。
清單 4. RDF XML 格式的陳述
|
采用 RDF 標準的另一個例子是新聞站點和博客早期提供的連鎖系統(tǒng),它們使用 RDF 規(guī)范定義提要內(nèi)容和不同的新聞。清單 5 提供了一個例子。
清單 5. 利用 RDF 規(guī)范定義提要內(nèi)容和不同的新聞
|
RDF 標準最初設計的目的是描述 Web 上的資源、內(nèi)容和關(guān)系。但是 RDF 現(xiàn)在變成了用于描述一般信息、資源和關(guān)系的標準。
語義 Web 和網(wǎng)格技術(shù)都需要定義資源及其之間的關(guān)系,使應用程序能夠使用不同的信息,并且可以把數(shù)據(jù)捆綁在一起。
![]() ![]() |
![]()
|
記錄聯(lián)系方式對所有商務應用程序都非常重要,通過有效的 XML 結(jié)構(gòu)來捕獲這些信息可以簡化此類數(shù)據(jù)的處理。
聯(lián)系信息變化可能很大,因此應該選擇 XML 。比如,有些公司和個人可能有多個地址、電話號碼和電子郵件帳戶。在 XML 結(jié)構(gòu)中很容易聲明多個此類信息片段。
vCard 結(jié)構(gòu)經(jīng)常在 Internet 上用于表示聯(lián)系信息,它獨立于平臺,很容易生成和導入不同的應用程序。它支持 XML 結(jié)構(gòu)的某些靈活性,但實際上是一種基于文本的簡單格式,使用聲明性字段和擴展來提供信息。不同于 XML,vCard 格式是扁平文本,就是說不能直接向各種元素增加信息。電話號碼是一個很好的例子,它不一定和某個地址關(guān)聯(lián),而僅僅作為記錄中的另一個電話號碼。
W3 聯(lián)盟提出一種 vCard 格式的 XML,它采用 RDF XML 標準,以便于格式化和交換聯(lián)系信息。采用 RDF 框架可以在聲明過程中保留一些結(jié)構(gòu)化信息。比如,RDF 標準支持使用包、序列和替代來描述數(shù)據(jù)。包支持多次聲明一個對象(比如多種角色),并且可以在序列不重要時使用包。序列用于定義對象的次序,比如機構(gòu)中人 員角色的層次結(jié)構(gòu)。替代允許從列表中選擇一項,比如多個電子郵件地址。
清單 6 顯示了虛擬人物 Charles Perston 的 vCard。
清單 6. Charles Perston 的 vCard
|
采用 vCard XML 標準,可用清單 7 中的結(jié)構(gòu)表示同樣的信息。
清單 7. 使用 vCard XML 標準表示 Charles Perston
|
XML 格式更長,但容易理解所看的內(nèi)容以及各部分之間的關(guān)系。這種格式可以了解更詳細的信息和細節(jié)。比方說,很容易在地址中找到需要的國家,在標準 vCard 輸出中該信息是比較隱含的。
再比如,很容易使用 XPath 或者 SAX 事件提取國家的列表,以便了解位于不同地區(qū)的聯(lián)系人的數(shù)目。
![]() ![]() |
![]()
|
能夠編寫文檔,然后以多種不同的輸出格式創(chuàng)建它,這曾是許多開發(fā)團隊多年來的夢想。通過 DocBook XML 就可以實現(xiàn),它不僅保持了語義標記,也保持了對資料格式化與輸出的控制。
控制語義可以指定組成文檔的章節(jié)和段落。在段落中可進一步詳細規(guī)定包含的項。比方說可以將命令和函數(shù)名放在單獨的標簽中,如清單 8 所示。
清單 8. 使用單獨的標簽包裝命令和函數(shù)
|
顯示不同的元素時可以選擇不同的輸出樣式和格式,也可選擇相同的樣式。更重要的是,因為語義信息回會被返回(比如文檔可能包含對類名的引用),所以可以在編寫索引時用它生成一個列表(該列表包含文檔中詳細描述的所有類名)。
除了語義標記外,文檔的章節(jié)和不同部分還可以用特殊的 ID 標記,用這些 ID 建立文檔不同部分的鏈接。有些類型可自動完成(章節(jié)、部分以及其他生成目錄的類型),其他則需要明確建立到其他部分的鏈接。
轉(zhuǎn)化成目標格式的時這些鏈接可以自動轉(zhuǎn)換成適當?shù)母袷?。比如,這個鏈接會轉(zhuǎn)換為適當?shù)?HTML 頁面或頁面中錨的鏈接。如果要生成 PDF,則可以包含目標章節(jié)的頁碼。
這種轉(zhuǎn)換由 XSLT 樣式表完成?,F(xiàn)有的標準 DocBook XSLT 樣式表支持到標準 HTML、XHTML、PDF(通過 FO 標準)、Texinfo、Java? Help 和 Man 頁面的轉(zhuǎn)換。使用標準樣式表還可以將數(shù)據(jù)轉(zhuǎn)化成各種不同的大小和風格,書籍、A4 頁面和幻燈片。
各種輸出格式和標記的靈活性意味著:當創(chuàng)建文檔時,可以使用相同的文檔源代碼提供打印的手冊、內(nèi)嵌式的幫助、man 頁面、在線和上下文感知的信息。使用更傳統(tǒng)的模型,可以分別編寫這些元素。
DocBook XML 在技術(shù)文章社區(qū)得到了廣泛的認可,很多公司所有的文檔全部采用 DocBook XML 標準(或它的一個子集)。
![]() ![]() |
![]()
|
FIX 是眾多企業(yè)間數(shù)據(jù)交換格式之一,用于在商業(yè)活動中交換信息。此類交換信息通常很重要,比如交易支付數(shù)據(jù)、股票價格和商業(yè)信息的交換。
這些需要傳輸?shù)男畔⒂袝r候是非常小的包,有時候又是大段的數(shù)據(jù)。此類信息交換的傳統(tǒng)格式是鍵/值對,這種形式的信息交換效率非常低。使用 XML 可以簡化傳遞的數(shù)據(jù)結(jié)構(gòu),尤其是復雜的數(shù)據(jù)。
在基于 XML 的優(yōu)化版本中,開發(fā)人員設法壓縮了數(shù)據(jù)文件的大小,同時使數(shù)據(jù)更易于閱讀。股票數(shù)據(jù)被壓縮到了舊格式的四分之一大小。
除了典型的商業(yè)應用外,F(xiàn)IXML 不適合用于其他領域。但如果使用 FIXML 可以提高商業(yè)效率,結(jié)果是每個人都會受益。
![]() ![]() |
![]()
|
可縮放向量圖形(SVG)是一種描述繪圖的 XML 標準。使用 SVG 可以描述線條、形狀、位置及其之間的關(guān)系。最有吸引力的是這些信息可以輸出為需要的格式,包括可縮放的圖形和固定的圖片。
SVG 解決了傳統(tǒng)繪圖過程中的一些重要問題。一般是使用專門的繪圖程序完成的。在不同程序之間共享信息和繪圖一般來說非常困難。保存為 SVG 意味著任何支持 SVG 的應用程序都能讀取和處理這些文件。
繪圖的另一個問題是,將它輸出為最常用的(尤其是 Web 上)格式時,必須在顯示或者結(jié)合到其他文檔前翻譯為位圖格式(比如 JPEG 或 PNG)。這種傳統(tǒng)的方法存在一些問題。首先,原始繪圖必須明確(通常是手工)導出為位圖格式。
其 次,由于位圖格式以原始繪圖的逐像素表示為基礎,為保證圖像的質(zhì)量必須小心選擇和輸出目標匹配的尺寸和分辨率。比如,屏幕顯示的分辨率需要 72dpi(或 96dpi)以便和多數(shù)監(jiān)視器的標準分辨率匹配。打印輸出則需要 300 到 2400 DPI。因此和原始文件相比生成的圖像文件可能非常大。
雖然在 PostScript 和 Encapsulated PostScript 之前已經(jīng)存在基于向量的格式,但是對 CPU 的要求非常高,不適合屏幕顯示。
和其他任何向量圖像格式一樣,SVG 也采用各種形狀的列表來描述圖像內(nèi)容,而不是生成像素表示。比如矩形只需要給出左上角作為起點,再加上兩條邊的長度就行了。圖像的描述用 XML 表示。標簽包括直線、矩形、多邊形、圓等等,可以控制這些元素的樣式和格式。
清單 9 給出了一個例子。這里繪制了一個矩形、一個透明的圓和一個三角形。
清單 9. 簡單的圖形
|
圖 1 顯示了生成圖像的位圖。
圖 1. 圖像的位圖版本

SVG 格式描述圖像的文件只有 500 多字節(jié),PNG 接近 9 KB。
SVG 使繪圖變得更小、更容易使用以及更容易兼容不同的應用程序。
![]() ![]() |
![]()
|
Dublin Core 標準是一種信息分類方法,常用于圖書館。Dublin Core 標準有一個 XML Schema 定義了如何使用 XML 描述這類信息。Dublin Core 可以有效地對各種信息編目,并且使它們易于修改、查詢和使用。
Dublin Core 目前在信息描述和定義中的應用使語義 Web 得以現(xiàn)實。通過使用一種統(tǒng)一的標準來描述數(shù)據(jù),同時,更重要的是使用精心設計并經(jīng)過實踐檢驗的解決方案,可以詳細描述其他 XML 文檔中的數(shù)據(jù),從而可以在不同來源之間有效地交換和比較信息。
Dublin Core 規(guī)范有自己的模式,但其目的是嵌入更大的 XML 文檔,使用 XML 名稱空間定義描述文檔中其他數(shù)據(jù)所需要的 DC 元素。作為一個例子,閱讀清單 10 看看如何在 RDF XML 模式中使用 DC 分類系統(tǒng)描述 RDF 實體的內(nèi)容,比如網(wǎng)站。為此,可以擴展前面的 RDF 模式 示例中的結(jié)構(gòu)。
清單 10. 在 RDF XML 模式中使用 DC 分類系統(tǒng)描述 RDF 實體的內(nèi)容
|
清單 10 中使用 DC 元素添加描述、主題、發(fā)布者、版權(quán)和標識符信息以便對 RSS 提要分類。
完整的 Dublin Core Metadata Elements Set 包括 15 個元數(shù)據(jù)元素。
- Title
- Creator
- Subject
- Description
- Publisher
- Contributor
- Date
- Type
- Format
- Identifier
- Source
- Language
- Relation
- Coverage
- Rights
這為描述信息提供了一個廣闊的范圍。
![]() ![]() |
![]()
|
XForms XML 標準用于定義表單中的不同成分(字段、單選按鈕和列表等輸入控件)以及希望在表單中提供的信息驗證。
XForms XML 標準和 Web 開發(fā)人員熟悉的 HTML、XHTML 表單標記非常相似,并將成為 XHTML 2.0 標準的一部分。
XForms XML 基于簡單的模型、視圖、控制器格式。模型是表單的整體描述,包括字段、輸入約束以及數(shù)據(jù)提交方式。視圖定義了出現(xiàn)在表單中的控件、分組及其引用的模型字段。表單控件的格式和呈現(xiàn)由 CSS 控制。
XForms 標準通過更詳細地劃分表單信息擴展了傳統(tǒng)的 HTML 表單定義。填充表單的過程中可使用動態(tài)元素(目前一般只能通過 JavaScript 或 Ajax 元素實現(xiàn))。
清單 11 中可以看到一個簡單的文本輸入框和彈出式的選擇框。
清單 11. 簡單的文本輸入框和彈出選擇框
|
可以通過 Firefox XForms 擴展來查看該 XForms 表單。結(jié)果如圖 2 所示。
圖 2. 使用 Firefox XForms 擴展查看 XForms 表單

![]() ![]() |
![]()
|
很多商業(yè)活動中的一個老問題是從紙質(zhì)的客戶發(fā)票系統(tǒng)遷移到計算機處理。創(chuàng)建發(fā)票結(jié)構(gòu)需要認真考慮各種不同的類型和重復元素。
過去,發(fā)票這類商業(yè)信息的交換必須建立非常龐大的結(jié)構(gòu)和定義,國際發(fā)票信息交換標準包括數(shù)百個字段。如果沒有交換數(shù)據(jù)的有效方法,共享發(fā)票、訂單和其他數(shù)據(jù)會非常困難。
由于沒有統(tǒng)一的標準,很多組織開發(fā)出了核心發(fā)票標準的各種版本。其中,OASIS 組開發(fā)的標準可能是最知名的,也是大量公司和組織認可的一種。
這種結(jié)構(gòu)是 OASIS 開發(fā)的 更龐大的框架 Universal Business Logic(UBL)的一部分,包括多種模式和工作流,從訂單、打印發(fā)票到支付。這個系統(tǒng)非常復雜,不可能在本文中討論,不過如果需要一種靈活、互操作的系統(tǒng),UBL 是不錯的起點。
![]() ![]() |
![]()
|
本 文考察多種不同的 XML 模式,從簡單的描述框架(RDF)到圖形格式(SVG)再到商業(yè)工作流的完整結(jié)構(gòu)(UBL)。無論哪一種,XML 結(jié)構(gòu)和內(nèi)容的靈活性都大大簡化了這些系統(tǒng)的開發(fā)。此外,如果需要在不同的平臺和環(huán)境之間共享數(shù)據(jù),XML 的跨平臺兼容性使得它成為一種理想的選擇。對 WSDL 和 SOAP 而言,這是最重要的特性之一。
學習
-
您可以參考本文在 developerWorks 全球站點上的
英文原文
。
-
XML.org
:該網(wǎng)站提供了各種 XML 模式和標準的信息,包括 SOAP、WSDL 和 SVG。
-
The OASIS Universal Business Logic (UBL)
:了解使用 XML 的完整訂單處理系統(tǒng)和工作流。
-
XForms 標準
:了解這種由 W3C 定義的 XML 標準。
-
Dublin Core Metadata Initiative (DCMI)
:訪問這個組織的主頁,它負責開發(fā)和說明用于在 XML 文檔中描述信息的 Dublin Core 系統(tǒng)。
-
Scalable Vector Graphics (SVG)
:了解以向量格式描述圖像這種 XML 標準。
-
vCard XML
:支持互操作的以 XML 描述聯(lián)系人信息的標準。
-
XML 入門
(Doug Tidwell,developerWorks,2002 年 11 月):通過這篇經(jīng)典的教程了解 XML 基礎知識。
-
Using WSDL in SOAP applications
(Uche Ogbuji,developerWorks,2000 年 11 月):針對 WSDL 和 SOAP 程序員的入門資料。
-
Introduction to Scalable Vector Graphics
(Nicholas Chase,developerWorks,2004 年 3月):了解建立 SVG 文檔需要的基本概念,比如基本形狀、路徑、文本、繪制模型以及動畫和腳本。
-
理解 XForms
(Kurt Cagle,developerWorks,2007 年 7 月):了解 XForms 的基礎。
-
An introduction to RDF
(Uche Ogbuji,developerWorks,2000 年 12 月):了解 RDF 的歷史、模式和應用場景等。
-
SVG 和 XForms:基礎知識
(Antoine Quint,developerWorks,2003 年 11 月):了解這兩種可能聯(lián)合在一起的技術(shù)。
-
IBM XML 認證
:了解如何才能成為一名 IBM 認證的 XML 及相關(guān)技術(shù)的開發(fā)專家。
-
XML 技術(shù)庫
:developerWorks XML 專區(qū)提供了大量技術(shù)文章和技巧、教程、標準以及 IBM 紅皮書。
-
developerWorks 技術(shù)活動和網(wǎng)絡廣播
:隨時關(guān)注解技術(shù)動態(tài)。
-
技術(shù)書店
:瀏覽關(guān)于這個主題和其他技術(shù)主題的圖書。
- developerWorks podcasts :收聽針對軟件開發(fā)人員的有趣訪談和討論。
獲得產(chǎn)品和技術(shù)
-
IBM 產(chǎn)品評估試用軟件
:使用可直接從 developerWorks 下載的 IBM 試用軟件構(gòu)建您的下一個項目,包括來自 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere? 的應用程序開發(fā)工具和中間件產(chǎn)品。
討論
-
XML 專區(qū)討論論壇
:參加關(guān)于 XML 的討論。
-
developerWorks XML 專區(qū):分享您的觀點:
閱讀本文后,請把您的建議和觀點發(fā)表到這個論壇上。XML 專區(qū)的編輯主持這個論壇,歡迎您的參與。
-
developerWorks blog
:看看這些 blog,并加入
developerWorks 社區(qū)
。
![]() |
||
![]() |
Martin Brown 作為一名專業(yè)作家有八年多了。他撰寫了不少書和文章,內(nèi)容涉及很多主題。他的特長涉獵很多開發(fā)語言和平臺,包括:Perl、Python、Java、 JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、Shellscript、Windows、 Solaris、Linux、BeOS、Mac OS/X、Web 編程以及系統(tǒng)管理和集成等。Martin 是 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 專欄作家,定期在 Computerworld、The Apple Blog 和其他站點上發(fā)表博客文章,同時也是微軟的 Subject Matter Expert(SME)。 |
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
