這篇文章將為大家詳細講解有關(guān)Schema驗證XML概念的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1.Schema 文件的結(jié)構(gòu)
Schema文件和其它XML文件的樣子非常相似,它是由一組元素構(gòu)成的,其根元素是“Schema”?!癝chema”元素是XML Schema中第一個出現(xiàn)的元素,用于表明該XML文檔是一個Schema文檔,相應(yīng)的,“Schema”的結(jié)束標(biāo)記一般在文檔的末尾。這樣,一個Schema的結(jié)構(gòu)如下:
<Schema name="schema-name" xmlns="namespace" > </Schema>
Schema具有兩個屬性:name指定該Schema的名稱,而xmlns則指定該Schema包含的命名空間。注意,一個XML Schema文檔中可以包含多個命名空間,比如下面的語句指定了三個命名空間:
<Schema name="mySchema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml >
第一個是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文檔是一個XML Schema文檔;第二個是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定義了在本文檔中可以使用的數(shù)據(jù)類型;第三個是xmlns:myNS="http://www.xml_step_by_step.edu\ns.xml",它表明下面可能會用到在myNS中定義的元素或?qū)傩浴?br/>2.用Schema定義元素及其內(nèi)容
在講述Schema中和ETD定義相對應(yīng)的種種定義方法之前,我們先來看看所涉及的三個Schema元素:ElementType、element、group。
1.ElementType元素
在Schema文檔中使用ElementType來聲明XML文件中會出現(xiàn)的元素,ElementType的語法表達如下:
<ElementType name="元素名" content="{ empty | textOnly | eltOnly | mixed }" dt:type="元素類型" order="{ one | seq | many }" model="{ open | closed }" >
在ElementType的幾個屬性中,name的含義不言而喻,是所聲明元素的名稱,它是不可缺少的。content是ElementType的一個重要屬性,它指明ElementType所聲明的元素是否為空、是否包含文本、是否包含子元素、還是既包含文本又包含子元素。dt:type指定該元素的數(shù)據(jù)類型。order指定該元素的子元素的排列順序規(guī)則。最后,model指定該元素是否可以包含未在本Schema中定義的元素和屬性,它主要用于其它Schema的引入,也就是其它“命名空間”的引入?!懊臻g”的概念大家可能還比較生疏,現(xiàn)在你只要了解,在一個XML文件中能夠同時使用幾個不同的DTD或Schema定義。
下表列出了model可能的取值:
取 值 | 釋 意 |
open | 表明該元素可以包含其它未在XML Schema中定義的元素和屬性 |
closed | 表明該元素只能包含在本XML Schema中定義過的元素和屬性 |
缺省狀態(tài)下,XML Schema的model取值"open",也就是說,該元素可以包含其它未在XML Schema中定義的元素和屬性。但是,這并不意味著任何元素和屬性都可在Schema中出現(xiàn),允許出現(xiàn)的前提是這些"異類"元素和屬性必須在單獨的XML Schema中加以定義,并且必須在引用的它們的元素中以命名空間形式指定其出處。
2. element元素
ElementType只是起到聲明元素的作用,至于元素的內(nèi)容究竟是什么,則要靠它的子元素element來說明。element的語法表達如下:
<element type="元素類型" [minOccurs="{ 0 | 1 }"] [maxOccurs="{ 1 | * }"] >
element實際上是對該Schema中ElementType聲明的引用,而具體引用什么元素類型,就要靠type屬性指定了。type屬性不可缺少,并且為了保證type指定的是已經(jīng)聲明過的元素,要求它的取值必須同某個ElementType中的name屬性嚴(yán)格一致。至于其它兩個屬性倒是可有可無。minOccurs指定該元素在其父元素中出現(xiàn)的最小次數(shù),缺省值為1,表明該元素至少出現(xiàn)一次;也可以取值為0,表明該元素是可選的,可以不出現(xiàn)。maxOccurs則指定了該元素出現(xiàn)的大次數(shù),缺省值同樣為1,表明該元素至多出現(xiàn)一次;也可取值為“*”,表明該元素在XML實例文檔中出現(xiàn)次數(shù)不受限制。
3.group元素
DTD中有成組的概念,相應(yīng)的,Schema中也有“group”元素。它的語法表達類似element元素:
<group order="{one | seq | many}" [minOccurs="{ 0 | 1 }"] [maxOccurs="{ 1 | * }"] >
<AttributeType 和DTD的規(guī)定相同,組里的內(nèi)容可以是元素,也可以是另一個子組。屬性order指定該組中的元素或子組的順序,minOccurs和maxOccurs分別指定了該組在其父元素中出現(xiàn)的最小次數(shù)和大次數(shù)。
4.用Schema定義元素屬性
Schema中用來定義屬性的元素有兩個,AttributeType元素是聲明屬性的,attribute元素則是說明一個元素中究竟包含那些屬性。
AttributeType元素
AttributeType元素也是Schema中的重要元素之一,用于定義該Schema文檔中出現(xiàn)的屬性類型。AttributeType的語法表達如下:
name="屬性名" dt:type="屬性類型" dt:values="枚舉值列表" default="缺省值" required="{yes | no}" >
name
name不言而喻,自然是所聲明的屬性類型的名稱。注意,該屬性是必須的。
dt:type
dt:type指定所聲明屬性的數(shù)據(jù)類型,它除了支持DTD中包含的全部十大數(shù)據(jù)類型外,還支持一些擴展屬性。Schema中的十個基本屬性與DTD中屬性的對應(yīng)關(guān)系請見下表:
Schema中基本類型 | DTD中數(shù)據(jù)類型 |
---|---|
string | #PCDATA |
enumeration | ENUMERATED |
id | ID |
idref | IDREF |
idrefs | IDREFS |
nmtoken | NMTOKEN |
nmtokens | NMTOKENS |
entity | ENTITY |
entities | EMTITIES |
notation | NOTATION |
3.dt:value
dt:value只有當(dāng)dt:type取值"enumeration"時才有效,此時,dt:value需列出所有可能的取值。
4.default
default指定該屬性類型的缺省取值。default取值必須是有效的,例如,當(dāng)dt:type取值"enumeration"時,default的取值必須來自dt:value所列出的值。
5.required
required指定該屬性對于引用它的元素是否是必須的。取值yes表明是必須的,取值no則表明并非必須。
6.attribute元素
AttributeType和attribute的關(guān)系與ElementType和element的關(guān)系相同,AttributeType只是起到聲明屬性的作用,而真正指明一個元素具有哪些屬性還需依靠attribute元素。
關(guān)于“Schema驗證XML概念的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
分享標(biāo)題:Schema驗證XML概念的示例分析-創(chuàng)新互聯(lián)
URL鏈接:http://www.rwnh.cn/article0/hdcio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、標(biāo)簽優(yōu)化、網(wǎng)站制作、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容