[文章信息]
作者: kissjava.com轉
時間: 2005-05-12 12:31:15
出處: KissJava.com
責任編輯: Icy
[文章導讀]
目前訪問XML文檔的API分成兩種訪問方式:順序的和任意的訪問,分別是:SAX和DOM。確認XML的合法性的規范是DTD (最初的機制,作為XML規范被定義)和不同的概要標準提案(一種更新的機制,它使用XML語法來做描述合法性準則的工作)。
XML和相關規格:消化字母湯(“字母湯”alphabet soup是一種罐頭湯,里面是切成ABC字母圖案的細面條,讓小朋友邊喝湯邊把里面的字母排成單詞來玩)
現在,你已經對XML有了一個基本的理解,需要對與XML相關的縮寫單詞代表的意義有一個更深的認識。有很多的基于XML的工作要做,所以你需要學習很多的知識。
目前訪問XML文檔的API分成兩種訪問方式:順序的和任意的訪問,分別是:SAX和DOM。確認XML的合法性的規范是DTD (最初的機制,作為XML規范被定義)和不同的概要標準(Schema Standards)提案(一種更新的機制,它使用XML語法來做描述合法性準則的工作)。
其它的一些未來的標準已經接近完成,包括XSL標準(一種建立XML文檔轉換-例如XML文檔轉換到HTML或其他的XML文檔, 和指示文檔如何提交的機制)。XSL標準的轉換部分(XSLT (+XPATH))已經完成并且包含在本指南中。其他的接近完成的成果是XML連接語言(XML Link Language)規范(XML Linking),這個規范可以在XML文檔之間做連接。
以上這些就是你將要了解的初步內容。這部分也縱覽了一些其它的感興趣的提案,包括HTML類似標準(HTML-lookalike standard)-- XHTML 和描述XML包含的信息的元標準-- RDF。有些標準成果擴展了XML的能力,比如Xlink和Xpointer。
最后,有很多的感興趣的標準和標準提案建立在XML之上,包含同步的多媒體綜合語言(Synchronized Multimedia Integration Language)-- (SMIL),數學標記語言(Mathematical Markup Language)-- MathML ,可伸縮的向量圖形(Scalable Vector Graphics)-- SVG,DrawML和許多的電子商務標準。
余下的部分使你了解這些初步的更詳細的細節。為了保持連貫性,這部分被分為如下方面:
1. 基本標準
2. 概要標準
3. 連接和顯示標準
4. 知識標準
5. 建立在XML上的標準
基本標準
一些你需要熟悉的基本標準。
SAX
針對XML的簡單API(Simple API for XML)
這個API實際上一個協作產品,它不是W3C的產品。它被包含在里面是因為它擁有W3C建議的特征。
你也可以把這個標準想象為XML的連續訪問協議。它擁有在服務器中讀寫XML數據的最快的執行機制。也可以稱它為事件驅動協議,因為這個技術將在SAX parser中注冊你的操作,注冊完后,當parser看到一個新的XML標記時(或者遇到一個錯誤,或者parser想告訴你其他的事情),parser就會調用你的回調方法。
DOM
文檔對象模型(Document Object Model)
文檔對象模型協議將一個XML文檔轉換成一個對象集。然后你可以操作隨意的操作這個對象模型。這個機制被稱為“隨意訪問”協議,因為你能夠在任何時候訪問數據的任意部分。然后,你可以修改、刪除和插入數據。
JDOM and dom4j
當文檔對象模型(DOM)提供非常強大的面向文檔的處理的時候,它卻不能提供更多的面向對象的簡化。Java開發者會做更多的面向數據處理,而不是面向書籍、文章和其他的完全的文檔,他們發現面向對象的API(如:JDOM和dom4j)更容易使用和符合他們的需要。
下面是JDOM和dom4j的不同:
1. JDOM是更整齊、更小巧的API。在代碼風格(coding style)重要的時候,JDOM是一個不錯的選擇。
2. JDOM是一個Java團體處理(Java Community Process--JCP)初步。當完成時,它將是一個認可的標準。
3. dom4j是一個更小巧、更快的實現,它使用的范圍很廣。
4. dom4j是一個基于制造商(factory-based)的實現。它更容易修改復雜的、特殊目的的應用程序。在dom4j編寫的時候,JDOM還沒有使用利用工廠(factory)來事例化分析器對象。所以,使用JDOM,你總是得到原始的分析器。
關于JDOM的更多的信息:http://www.jdom.org/.
關于dom4j的更多的信息:http://dom4j.org/.
DTD
文檔類型定義(Document Type Definition)
DTD規范是XML規范的一部分,而不是一個單獨的實體。另一方面,它是可選的?你可以一個沒有DTD的XML文檔。有很多的概要(Schema)標準提案來提供更靈活的規范。所以,你完全可以將它看成是單獨的部分。
一個DTD規范了不同種類的XML標識和合法的標識的布局。你能夠使用DTD來確定你不能產生一個非法的XML結構。你也能夠使用它來確定你正在讀取得XML結構是合法的。
不幸的是,為一個復雜的文檔指定一個DTD是非常的困難的。所以構建一個DTD在某種意義上講是一門藝術。DTD可以出現在文檔的前端,作為序的一部分。它也可以作為單獨的一個實體,或者在文檔的序和外部的實體中同時存在。
命名空間
命名空間標準允許你用兩個或更多的XML標記集合編寫XML文檔。例如你產生一個基于XML的列表,這個列表使用的標記是另一個廠商提供的。在整個XML文檔中“price”數據可能會很多,然而,你只是想顯示針對一個結構的“price”數據。命名空間規范定義了一個限定名稱的機制,這樣可以避免混淆。這樣我們寫的程序就可以正確的處理文檔中的信息。
最新的命名空間信息:http://www.w3.org/TR/REC-xml-names.
XSL
擴展樣式表語言(Extensible Stylesheet Language)
XML標準指定怎樣識別數據,而不是怎樣顯示數據。從另一方面來說,HTML是告訴數據怎樣顯示而不是怎樣識別數據。XSL標準有兩部分,XSLT和XSL-FO。XSL-FO為你提供頁面上的多區域定義并將他們連接到一起。當一個文本流被導向這個集合,它首先流向第一個區域,在第一個區域被充滿后會導向第二個區域。像這樣的對象被使用在新聞組、一覽表和雜志出版中。
最新的XSL標準:http://www.w3.org/TR/WD-xsl
XSLT(+XPATH)
針對轉換的擴展樣式表語言(Extensible Stylesheet Language for Transformations)
XSLT的轉換標準本質上來講是一個轉換機制,它讓你指定將一個XML標記轉換成什么并用來顯示。例如,轉換成HTML標識。不同的XSL格式能夠以不同的方式顯示同樣的數據。(XPATH標準是一個尋址機制,當你構造轉換指令示會用到它。)
概要標準
一個DTD使驗證相關的簡單XML文檔是否合法成為可能,但是做起來很難。
一個DTD不能限制元素中的內容,不能指定復雜的關系。例如,指定一個<book>中的<heading>必須包含有<title>和<author>,而一個<chapter>中的<heading>緊緊需要一個<title>。在DTD中,你只能一次的指定<heading>的結構。DTD不是上下文敏感的,因為DTD規范不是層次的。
例如,一個郵件地址包含幾個“解析的字符數據(PCDATA)”元素,DTD可能會像下面這樣:
<!ELEMENT mailAddress (name, address, zipcode)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT zipcode (#PCDATA)>
像你看到的那樣,這個規范是線性的。所以,在DTD中,如果你需要另一個“name”元素,那么你需要為它定義一個不同的識別符。你不能簡單的稱它為“name”,因為它會和<mailAddress>元素中使用的“name”沖突。
另一個問題是DTD的無層次性使得理解其中的注解很困難。一個在最上面的注解看起來更像是針對全文結構的注解,但也可能它只是對第一條的注解。最后,DTD不允許你形式上的指定合法域準則,例如對郵政編碼域中的5位數限制。
最后,一個DTD使用的語法不同于XML,所以它不能被一個標準的XML分析器解析。這就意味著你不能將DTD讀進DOM,和編輯、修改它。
為了修補這些缺點,很多的提案已經被提交。像層次性的“概要--schema”,它指定了合法性準則。后面介紹了一些主要的提案。
XML概要(Schema)
一個大而復雜的標準,它擁有兩部分。一部分指定結構聯系(這是最大最復雜的部分)。另一部分指定XML元素中的內容的合法性機制,可以通過為每個元素指定一個數據類型。一個好消息是,XML概要可以指定任何設想的關聯。壞消息是他很難實現也很難學習。
XML概要的更多的信息,可以查看W3C specs XML Schema(Structures) and XML Schema(Datatypes).
http://www.w3c.org/XML/Schema.
RELAX NG
XML的規則語言描述(下一代)--(Regular Language description for XML(Next Generation))
RELAX NG是一個新興標準,它要比XML結構概要簡單。再不遠的將來它也可能成為一個ISO標準。
RELAX NG使用規則表達式來表達結構關系上的限制,它使用XML概要數據類型機制來表達內容上的限制。這個標準也使用XML語法,它包含一個DTD到RELAX的轉換器。(說它是“next generation”是因為它是結和TREX 的RELAX概要機制的新版本)。
關于RELAX NG的更多的信息:http://www.oasis-open.org/committees/relax-ng/
TREX
針對XML的樹型規則表達式(Tree Regular Expressions for XML)
它是一個通過為XML文檔中的結構和內容描述一個模版來表達合法性準則的手段。現在作為RELAX NG的一部分。
SOX
面向對象的概要(Schema for Object-oriented XML)
SOX是一個概要提案,它包括擴展數據類型、命名空間和嵌入的文檔。
SOX更多的信息:http://www.ascc.net/xml/resource/schematron/schematron.html.
連接和表現標準
可以證明,HTML中的文檔之間的連接和簡單的文檔格式是最大的優點。下面的標準定位于在XML中保留HTML的好處并增加額外的功能。
XML Linking
這些規范提供一個不同的連接能力,但對XML的使用上形成了一次很大的沖擊。
XLink
Xlink協議是一個在XML文檔間處理連接的規范。這個規范允許一些恰當的改進連接,包含雙向連接、連接到多文檔、展開連接、內部指向連接等。
XML 基礎
這個標準定義一個XML文檔屬性,這個屬性定義一個“基礎”地址,“基礎”地址在查找一個關聯的地址時被使用。(例如,一個簡單的文件名可以在一個基礎地址目錄中被找到)
XPointer
一般情況下,Xlink規范是將使用它的ID的文檔或文檔片斷作為目標的。XPointer規范定義的機制是針對“在一個XML文檔內部結構的尋址”的。XPointer規范不需要文檔的作者為一個文檔片斷定一個ID。
XML連接的更多的信息:http://www.w3.org/XML/Linking.
XHTML
XHTML規范是XML文檔的一個用途,只不過XML文檔更像HTML文檔。既然XML文檔可以包含任意的標識,那么為什么不能定義一個很像HTML標識的XML標識集呢?這就是XHTML的想法。這個規范的結果是一個文檔既能在瀏覽器中顯示,又能作為XML文檔被處理。盡管它并不是純正的XML,但是它比HTML更容易被處理。
例如,在一個格式良好的XML文檔中,每一個標識必須有一個結束標識。所以在XHTML中,你可能看到<p>..</p>,或<p/>。但你絕對看不到單獨的<p>。
XHTML規范是一個HTML4.0到XML的再形成。最新的信息在:http://www.w3.org/TR/xhtml1.
知識標準
RDF
資源描述框架(Resource Description Framework)
RDF是一個定義元數據的標準,元數據是描述一個特殊的數據條目是什么的信息并指定怎么樣來使用這個數據條目。例如,聯合XHTML規范或HTML頁面來使用,RDF被用來描述頁面的內容。例如,如果你的瀏覽器存儲你的ID信息像FIRSTNAME、LASTNAME和EMAIL,一個RDF描述傳輸傳輸個需要NAME和EMAILADDRESS的應用程序相應的信息。想象一下,到那一天,你可能不需要在每個網站里輸入你的名字和郵件地址。
關于RDF更多的信息:http://www.w3.org/TR/REC-rdf-syntax
RDF概要
RDF概要允許相容性原則和附加信息的規范。
更多的RDF概要信息:http://www.w3.org/TR/rdf-schema.
XTM
XML主題映射(XML Topic Maps)
在許多方面,主體映射標準是一個比RDF更簡單的、更容易使用得知識表示,它更應該值得被關注。迄今為止,RDF是一個W3C標準,但是,主題映射可能只能作為一種開發者選擇的標準。
XML主題映射更多的信息:http://www.topicmaps.org/xtm/index.html.
建立在XML上的標準
下面的標準和提案都是建立在XML之上的。因為XML基本上是一個定義語言的工具,所以這些標準使用它定義特殊目的標準語言。
擴展文檔標準(Extended Document Standards)
這些標準定義了使用XML產生極端復雜的文檔的機制。
SMIL
同步的多媒體綜合語言(Synchronized Multimedia Integration Language)
SMIL是一個W3C建議的標準,它涵蓋了音頻、視頻和動畫。
更多關于SMIL的信息:http://www.w3.org/TR/REC-smil.
MathML
數學標記語言(Mathematical Markup Language)
MathML是一個W3C建議的標準,它處理數學公式的顯示。
更多關于MathML的信息:http://www.w3.org/TR/REC-MathML.
SVG
可伸縮的向量圖像(Scalable Vector Graphics)
SVG是一個W3C工作草案,它覆蓋了向量圖像的顯示。
更多關于SVG的信息:http://www.w3.org/TR/WD-SVG.
DrawML
繪制元語言(Drawing Meta Language)
DrawML是一個W3C的附注,它涵蓋了技術圖表的2D圖像。
更多的關于DrawML的信息:http://www.w3.org/TR/NOTE-drawml.
電子商務標準(eCommerce Standards)
這些標準定位于在B2B和B2C的范圍里使用XML。
ICE
信息和內容交換(Information and Content Exchange)
ICE是一個被內容經營者使用的協議。它的焦點在“在傳統出版和B2B聯系上自動化內容轉換和重用”
更多關于ICE的信息:http://www.w3.org/TR/NOTE-ice.
ebXML
基于XML的電子交易(Electronic Business with XML)
這個標準定位在使用XML建立模塊化的電子交易框架。它是UN/CEFACT的一個起步產品。
更多關于ebXML的信息:http://www.ebxml.org/.
cxml
商業XML(Commerce XML)
cxml是一個RosettaNet(www.rosettanet.org)標準,它的目的是為了不同的買主建立一個在線的名單。
更多關于cxml的信息:http://www.cxml.org/
CBL
通用交易庫(Common Business Library)
CBL是一個元素和屬性定義的庫。
更多關于CBL的信息:http://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.html.
UBL
統一商業語言(Universal Business Language)
一個OASIS初步定位在編譯一個XML交易文檔的標準庫。
更多關于UBL的信息:http://www.oasis-open.org/committees/ubl.
總結
XML是一個正在被廣泛的應用的標準,它正在被用在不同的領域。