从 DTDs 转换到 XML Schemas 时元素和属性的变化
DTD
XML Schema
<!ELEMENT ROOT (A,B) >
<element name="ROOT">
<complexType content="elementOnly">
<element ref="t:A">
<element ref="t:B">
</complexType>
<element>
<!ELEMENT ROOT (A|B) >
<element name="ROOT">
<complexType content="elementOnly">
<choice>
<element ref="t:A">
<element ref="t:B">
</choice>
</complexType>
<element>
<!ELEMENT ROOT (A|(B,C)) >
<element name="ROOT">
<complexType content="elementOnly">
<choice>
<element ref="t:A">
<sequence>
<element ref="t:B">
<element ref="t:C">
</sequence>
</choice>
</complexType>
<element>
<!ELEMENT ROOT (A?,B+,C*) >
<element name="ROOT">
<complexType content="elementOnly">
<element ref="t:A" minOccurs="0">
<element ref="t:B" maxOccurs="unbounded">
<element ref="t:C" minOccurs="0" maxOccurs="unbounded">
</complexType>
<element>
DTD
XML Schema
<!ATTLIST ROOT
a CDATA #REQUIRED>
<element name="ROOT">
<complexType content="elementOnly">
<attribute name="a" type="string" use="required"/>
</complexType>
<element>
<!ATTLIST ROOT
a CDATA #IMPLIED>
<element name="ROOT">
<complexType content="elementOnly">
<attribute name="a" type="string" use="optional"/>
</complexType>
<element>
<!ATTLIST ROOT
a (x|y|z) #REQUIRED;>
<element name="ROOT">
<complexType content="elementOnly">
<attribute name="a">
<simpleType base="string">
<enumeration value="x"/>
<enumeration value="y"/>
<enumeration value="z"/>
</simpleType>
</attribute>
</complexType>
<element>
<!ATTLIST ROOT
a CDATA #FIXED "x">
<element name="ROOT">
<complexType content="elementOnly">
<attribute name="a" type="string" use="fixed" value="x"/>
</complexType>
<element>