陳娟
摘要:為保證標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言、可擴(kuò)展標(biāo)記語(yǔ)言文檔格式正確,可通過(guò)驗(yàn)證判斷文檔是否有效。驗(yàn)證是把 XML 文檔的結(jié)構(gòu)、標(biāo)記名稱(chēng)、數(shù)據(jù)類(lèi)型等與預(yù)先設(shè)定的要求作比較的過(guò)程。預(yù)先設(shè)定的要求被保存在模式文檔中。W3C標(biāo)準(zhǔn)制定了兩種XML的驗(yàn)證機(jī)制(模式文檔):DTD(Document Type Definition)和XSD(XML Schema Definition)。
關(guān)鍵詞:驗(yàn)證; XML; W3C; DTD; XSD
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)13-0082-02
Abstract: In order to ensure the standard generalized markup language, extensible markup language document format is correct, can be verified by the judgment document is valid. Verification is the structure, the tag name, data type of XML document and the preset requirements for comparison process. The preset requirements are stored in the document model. W3C standard authentication mechanism of two kinds of XML (schema) :DTD(Document Type Definition)和XSD(XML Schema Definition)。
Key words: verification; XML; W3C; DTD; XSD
1 問(wèn)題的提出
XML在數(shù)據(jù)描述過(guò)程中,用戶(hù)可以自定義數(shù)據(jù)的結(jié)構(gòu),因此,在使用XML文檔之前需要對(duì)數(shù)據(jù)進(jìn)行篩選,防止無(wú)效的數(shù)據(jù)出現(xiàn),以確保數(shù)據(jù)的結(jié)構(gòu)標(biāo)準(zhǔn)化。不同的用戶(hù)只需定義好標(biāo)準(zhǔn)文檔類(lèi)型定義,各用戶(hù)都能依文檔類(lèi)型定義建立文檔實(shí)例,并且進(jìn)行驗(yàn)證,如此就可以輕易的建立標(biāo)準(zhǔn)和交換數(shù)據(jù),這樣滿(mǎn)足了網(wǎng)絡(luò)共享和數(shù)據(jù)交互。一般教材中會(huì)提到兩種驗(yàn)證機(jī)制:DTD 和 XSD。
2 DTD驗(yàn)證
文檔類(lèi)型定義(DTD)可定義合法的XML文檔構(gòu)建模塊。它使用一系列合法的元素來(lái)定義文檔的結(jié)構(gòu)。是一套關(guān)于標(biāo)記的語(yǔ)法規(guī)則,它說(shuō)明了在XML文檔中可以使用哪些標(biāo)記,哪些標(biāo)記具有屬性,以及所使用的標(biāo)記出現(xiàn)的順序是什么。DTD的文件格式是SGML,因此我們?cè)趯W(xué)習(xí)DTD語(yǔ)法時(shí)需區(qū)分它與XML語(yǔ)法規(guī)則。在XML文檔中的使用DTD主要有三種方式:內(nèi)部引用、外部引用和內(nèi)外結(jié)合引用。
DTD的定義主要包括在DOCTYPE 聲明中,三種方式分別為<!DOCTYPE根元素 [元素聲明]> 、<!DOCTYPE根元素 SYSTEM "文件名">、<!DOCTYPE根元素 SYSTEM "文件名" [元素聲明]>。在講授過(guò)程中一般建議使用外聯(lián)方式,這樣數(shù)據(jù)文檔與驗(yàn)證文檔分開(kāi)更易維護(hù)。
在DTD文檔中,可以對(duì)源XML文檔的元素、屬性及元素出現(xiàn)的順序進(jìn)行描述,在描述的過(guò)程中,包括元素和屬性的類(lèi)型、元素出現(xiàn)的次數(shù)等。這里對(duì)DTD文檔的具體語(yǔ)法就不作詳細(xì)的介紹了。
3 XSD驗(yàn)證
XML Schema 定義(XML Schema Definition,XSD)是一個(gè)XML文檔,用于描述另一個(gè)XML文檔。定義 XML 文檔的合法構(gòu)建模塊,類(lèi)似DTD。它的文件格式是XML。在XML文檔中的使用XSD只有一種方式:外聯(lián)。XSD的引用主要是在XML源文件的根元素中添加noNamespaceSchemaLocation 屬性,而該屬性所在的命名空間為http://www.w3.org/2001/XMLSchema-instance。例如:
在XSD文檔中,對(duì)源XML文件的描述所需的元素所在的命名空間為上述URL。根元素是schema,所有對(duì)源數(shù)據(jù)文件的描述都包括在根元素里,在描述過(guò)程中,幾乎可以實(shí)現(xiàn)在DTD中對(duì)數(shù)據(jù)的所有描述,除此之外,對(duì)元素出現(xiàn)的次數(shù)更具體化。另外,XSD的最大特點(diǎn)就是支持?jǐn)?shù)據(jù)類(lèi)型。XSD標(biāo)準(zhǔn)里有內(nèi)置的數(shù)據(jù)類(lèi)型,而DTD中沒(méi)有。而正是因?yàn)閄SD中的數(shù)據(jù)類(lèi)型,確保了不同的用戶(hù)在理解數(shù)據(jù)同一數(shù)據(jù)時(shí)保持一致。
4 舉例分析
下面對(duì)名為”shiporder.xml”源XML文檔,分別進(jìn)行兩種不同的驗(yàn)證,通過(guò)比較它們之前的區(qū)別,分別對(duì)兩種驗(yàn)證機(jī)制的語(yǔ)法和用法進(jìn)行講解。文檔片段如下:
在XML文檔中shiporder元素包括三個(gè)子元素,其中item元素出現(xiàn)了兩次也許更多次,還包括屬性orderid;三個(gè)子元素又分別包括子元素。在DTD中描述時(shí),shiporder的描述<!ELEMENT shiporder (shipto,item*)>,圓括號(hào)中的列表可以確定其子元素出現(xiàn)的順序,而“item”后面的“*”表示item元素出現(xiàn)的次數(shù)是零次或者多次,而不能確定具體的次數(shù);在XSD中描述時(shí),對(duì)于有子元素的這類(lèi)元素,通常用complexType元素來(lái)描述其結(jié)構(gòu),在該元素中通過(guò)使用三種控制器即:all、sequence、choice來(lái)控制子元素結(jié)構(gòu)。其中sequence來(lái)控制子元素的順序。例子中通過(guò)maxOccurs屬性來(lái)確定元素出現(xiàn)的最大次數(shù)。而這個(gè)屬性在all控制器中,其值只能是“0”或者“1”,其它兩種控制器該值可以任意設(shè)置,與maxOccurs屬性對(duì)應(yīng)的屬性minOccurs,在sequence控制器中其值只能是“1”。通過(guò)這兩個(gè)屬性的設(shè)置可以限制子元素出現(xiàn)的最小和最大次數(shù),且次數(shù)的具體值可以確定。另外,在描述類(lèi)型的過(guò)程中,DTD描述數(shù)據(jù)時(shí),僅限于抽象的類(lèi)型,譬如“#PCDATA”、“CDATA”,它們分別用于描述元素和屬性的文本類(lèi)型,像元素quantity,屬性orderid它們只能被描述為文本類(lèi)型,但是在XSD中,它們分別被描述成string、integer。當(dāng)然,XSD中對(duì)數(shù)據(jù)類(lèi)型的描述不僅僅只有內(nèi)置類(lèi)型,可以通過(guò)在simpleType元素中的restriction元素來(lái)對(duì)數(shù)據(jù)類(lèi)型作更具體的描述,譬如對(duì)數(shù)據(jù)的長(zhǎng)度、數(shù)據(jù)的模式、數(shù)據(jù)的范圍等。
XSD描述中結(jié)構(gòu)和類(lèi)型可以自定義并且重用。源XML文件中的元素根據(jù)其結(jié)構(gòu)不同,一般分成兩種:1)無(wú)屬性且無(wú)子元素的元素;2)有屬性或者有子元素的元素。在XSD描述中,分別使用上述提到的simpleType元素和complexType元素來(lái)進(jìn)行具體的定義,這兩個(gè)元素都包含name屬性,通過(guò)對(duì)該屬性賦值來(lái)分別為兩種結(jié)構(gòu)命名。這樣在XSD描述過(guò)程中,出現(xiàn)與該結(jié)構(gòu)相同的描述,我們可以直接通過(guò)name的名字來(lái)直接引用。而這種類(lèi)型的描述在DTD中是無(wú)法實(shí)現(xiàn)的。
5 總結(jié)
上述通過(guò)一個(gè)簡(jiǎn)單的例子對(duì)XML中的兩種驗(yàn)證機(jī)制,從文檔格式、描述的語(yǔ)法進(jìn)行了分析和比較,突出了XSD中對(duì)數(shù)據(jù)類(lèi)型的描述特點(diǎn)??梢钥闯鯴ML Schema 是基于 XML 的 DTD 替代物。XSD彌補(bǔ)的DTD中的很多不足之處,而今也被用在大部分的網(wǎng)絡(luò)應(yīng)用程序中。
參考文獻(xiàn):
[1] David Hunter,Jeff R.XML入門(mén)經(jīng)典[M]. 4版. 北京: 清華大學(xué)出版社, 2009.
[2] 馬在強(qiáng). XML實(shí)用教程[M]. 北京: 清華大學(xué)出版社, 2008.
[3] Dr Shahram Khosravi.ASP.NET 2.0服務(wù)器控件與組件開(kāi)發(fā)高級(jí)編程[M]. 北京: 人民郵電出版社, 2007.
[4] 韓忠明. XML數(shù)據(jù)查詢(xún)與信息檢索系統(tǒng)[M]. 北京: 中國(guó)水利水電出版社, 2013.
[5] 李秋云, 郝建國(guó). XML及WAP開(kāi)發(fā)手冊(cè)[M]. 北京: 人民郵電出版社, 2002.