XML簡明教程第6課
編輯:XML詳解  
作者:佚名 文章來源:不詳 點擊數:
3 更新時間:2007-4-9
Schema?
XML Schema是一個基於XML的語法或schema規范,用來定義XML文檔的標記方式。XML Sc
hema是一個由Microsoft建議的schema規范,它與文檔類型定義(DTD)相比具有很大的
優勢,而DTD是最初用來定義XML模型的schema規范。DTD存在很多缺點,包括使用非XML
語法,不支持數據類型定義,不具有擴展性等。例如,DTD不允許把元素內容定義為另外
一個元素,或字符串。想了解更多有關DTD的內容,可以參考W3C XML建議書。 XML Sch
ema從幾個方面改善了DTD,包括使用XML語法,支持數據類型定義和名域。例如,XML S
chema允許你把一個元素說明為一個integer, float,Boolean, URL等類型。
在Internet Explorer 5中的XML解析器可以解析使用DTD或XML Schema的XML文檔。
如何建立XML Schema?
請在下面的XML文檔中找一找每個節點的schema聲明。
<class XMLns="x-schema:classSchema.XML">
<student studentID="13429">
<name>Jane Smith</name>
<GPA>3.8</GPA>
</student>
</class>
你會注意到在上面文檔中默認的名域是“x-schema:classSchema.XML”。這告訴解析器
根據URL(“classSchema.XML”)上的schema(x-schema)來解析整個文檔。
下面是上面那個文檔的完整的schema。注意schema的根元素中的名域聲明。第一個(XML
ns=”urn:schemas-microsoft-com:XML-data”)表明這個XML文檔是一個XML Schema。第
二個(XMLns:dt=”urn:schemas-microsoft-com:datatypes”)允許schema處理者在Elem
entType和AttributeType聲明中的type屬性前加dt前綴來說明元素的類型和內容的特征
。
<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>
用來定義元素和屬性的聲明元素如下所示:
元 素
說 明
ElementType 把類型和條件賦給一個元素,可以包含子元素
AttributeType 把類型和條件賦給一個屬性
attribute 聲明以前定義過的屬性類型可以出現在名為ElementType的元素的作用域中
element 聲明以前定義過的元素類型可以出現在名為ElementType的元素的作用域中
Schema的內容以最深層的元素的“AttributeType”和“ElementType”聲明開頭。
<AttributeType name='studentID' dt:type='string' required='yes'/>
<ElementType name='name' content='textOnly'>
<ElementType name='GPA' content='textOnly' dt:type='float'/>
ElementType聲明後接著就是它的屬性和子元素,如果一個元素有屬性或子元素,必須把
這種方法包含在它的ElementType聲明中,或者是必須在它們自己的 ElementType 或 A
ttributeType聲明中進行前導聲明。
<ElementType name='student' content='mixed'>
<attribute type='studentID'/>
<element type='name'/>
<element type='GPA'/>
</ElementType>
不同於DTDs,XML Schema允許有一個開放的內容模式,你可以進行定義數據類型、使用
默認值等等操作而不必限定內容。
在下面的schema中,<GPA> 元素的類型被定義並有一個默認值,但在 <student> 元素中
沒有其他節點被聲明。
<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"/>&nbs