元素顺序的支持
XML DTD与XML Schema 都支持对子元素节点顺序的描述,但XML DTD没有提供对于无序情况的描述,也就是如果以XML DTD来描述元素的无顺序出现情况,它必须采用穷举元素各种可能出现的排列顺序的方式来实现,这种方法不仅繁琐,有时甚至是不现实的。例如对于table的a,b子元素,如果希望它们以任意的顺序出现,用XML DTD来描述:
源码6 a,b子元素任意顺序出现的XML DTD定义
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT ENTER_NAME_OF_ROOT_ELEMENT_HERE EMPTY>
<!ELEMENT table ((a,b)|(b,a))>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b (#PCDATA)>
XML Schema提供了<all>标记来描述这种情况:
源码7 a,b子元素任意顺序出现的XML Schema定义
<xsd:element name="a" type="xsd:string"/>
<xsd:element name="b" type="xsd:string"/>
<xsd:element name="table">
<xsd:complexType>
<xsd:all>
<xsd:element ref="a"/>
<xsd:element ref="b"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
可见,用XML Schema来实现子元素的无序描述要简单的多。