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