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

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

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

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