XML簡(jiǎn)明圖文詳細(xì)教程第6課 使用XML Schema
發(fā)表時(shí)間:2023-08-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]什么是XML Schema? XML Schema是一個(gè)基于XML的語(yǔ)法或schema規(guī)范,用來(lái)定義XML文檔的標(biāo)記方式。XML Sc hema是一個(gè)由Microsoft建議的schema規(guī)范,它與...
什么是XML Schema?
XML Schema是一個(gè)基于XML的語(yǔ)法或schema規(guī)范,用來(lái)定義XML文檔的標(biāo)記方式。XML Sc
hema是一個(gè)由Microsoft建議的schema規(guī)范,它與文檔類型定義(DTD)相比具有很大的
優(yōu)勢(shì),而DTD是最初用來(lái)定義XML模型的schema規(guī)范。DTD存在很多缺點(diǎn),包括使用非XML
語(yǔ)法,不支持?jǐn)?shù)據(jù)類型定義,不具有擴(kuò)展性等。例如,DTD不允許把元素內(nèi)容定義為另外
一個(gè)元素,或字符串。想了解更多有關(guān)DTD的內(nèi)容,可以參考W3C XML建議書。 XML Sch
ema從幾個(gè)方面改善了DTD,包括使用XML語(yǔ)法,支持?jǐn)?shù)據(jù)類型定義和名域。例如,XML S
chema允許你把一個(gè)元素說(shuō)明為一個(gè)integer, float,Boolean, URL等類型。
在Internet Explorer 5中的XML解析器可以解析使用DTD或XML Schema的XML文檔。
如何建立XML Schema?
請(qǐng)?jiān)谙旅娴腦ML文檔中找一找每個(gè)節(jié)點(diǎn)的schema聲明。
<class xmlns="x-schema:classSchema.xml">
<student studentID="13429">
<name>Jane Smith</name>
<GPA>3.8</GPA>
</student>
</class>
你會(huì)注意到在上面文檔中默認(rèn)的名域是“x-schema:classSchema.xml”。這告訴解析器
根據(jù)URL(“classSchema.xml”)上的schema(x-schema)來(lái)解析整個(gè)文檔。
下面是上面那個(gè)文檔的完整的schema。注意schema的根元素中的名域聲明。第一個(gè)(xml
ns=”urn:schemas-microsoft-com:xml-data”)表明這個(gè)XML文檔是一個(gè)XML Schema。第
二個(gè)(xmlns:dt=”urn:schemas-microsoft-com:datatypes”)允許schema處理者在Elem
entType和AttributeType聲明中的type屬性前加dt前綴來(lái)說(shuō)明元素的類型和內(nèi)容的特征
。
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mi
crosoft-com:datatypes">
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
<ElementType name='student' content='mixed'>
<attribute type='studentID'/>
<element type='name'/>
<element type='GPA'/>
</ElementType>
<ElementType name='class' content='eltOnly'>
<element type='student'/>
</ElementType>
</Schema>
用來(lái)定義元素和屬性的聲明元素如下所示:
元 素
說(shuō) 明
ElementType 把類型和條件賦給一個(gè)元素,可以包含子元素
AttributeType 把類型和條件賦給一個(gè)屬性
attribute 聲明以前定義過(guò)的屬性類型可以出現(xiàn)在名為ElementType的元素的作用域中
element 聲明以前定義過(guò)的元素類型可以出現(xiàn)在名為ElementType的元素的作用域中
Schema的內(nèi)容以最深層的元素的“AttributeType”和“ElementType”聲明開頭。
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
ElementType聲明后接著就是它的屬性和子元素,如果一個(gè)元素有屬性或子元素,必須把
這種方法包含在它的ElementType聲明中,或者是必須在它們自己的 ElementType 或 A
ttributeType聲明中進(jìn)行前導(dǎo)聲明。
<ElementType name='student' content='mixed'>
<attribute type='studentID'/>
<element type='name'/>
<element type='GPA'/>
</ElementType>
不同于DTDs,XML Schema允許有一個(gè)開放的內(nèi)容模式,你可以進(jìn)行定義數(shù)據(jù)類型、使用
默認(rèn)值等等操作而不必限定內(nèi)容。
在下面的schema中,<GPA> 元素的類型被定義并有一個(gè)默認(rèn)值,但在 <student> 元素中
沒有其他節(jié)點(diǎn)被聲明。
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-mic
rosoft-com:datatypes">
<AttributeType name="scale" default="4.0"/>
<ElementType name="GPA" content="textOnly" dt:type="float">
<attribute type="scale"/>
</ElementType>
<AttributeType name="studentID"/>
<ElementType name="student" content="eltOnly" model="open" order="many
">
<attribute type="studentID"/>
<element type="GPA"/>
</ElementType>
</Schema>
上面的schema允許你只驗(yàn)證你所關(guān)心的區(qū)域,這使你對(duì)文檔的驗(yàn)證級(jí)別有更多的控制,
并允許你使用schema提供的一些特性而不必嚴(yán)格確認(rèn)。
嘗試一下!
試著處理一下下面的XML文檔的schema。
<order>
<customer>
<name>Fidelma McGinn</name>
<phone_number>425-655-3393</phone_number>
</customer>
<item>
<number>5523918</number>
<description>shovel</description>
<price>39.99<price>
</item>
<date_of_purchase>1998-10-23</date_of_purchase>
<date_of_delivery>1998-11-03</date_of_delivery>
</order>
如果你處理完schema,在XML Validator中運(yùn)行 .
下載MSDN Online的區(qū)域中提供了一套 XML sample files, 包括一個(gè)有相關(guān)schema的XM
L文檔。下載這些示例程序可以與XML文檔和schema一起運(yùn)行。如果你想要根據(jù)一個(gè)sche
ma來(lái)測(cè)試XML的有效性,可以從XML Validator 處下載文檔或查看Mime Type Viewer中的
XML文件。
一些說(shuō)明:
ElementType和 AttributeType 聲明必須放在attribute和element內(nèi)容聲明之前。例如
,在上面的schema中,<GPA>元素的ElementType聲明必須放在<student>元素的Element
Type聲明之前!
order屬性的默認(rèn)值是建立在content屬性的值上的。當(dāng)content值為“eltOnly”時(shí),or
der默認(rèn)值是seq。當(dāng)content值為“mixed”時(shí),order默認(rèn)值是“many”。see 如果想了
解有關(guān)這些缺省值的信息,可以查看 XML Schema Reference。