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