对于一个看起来像这样的 XML 文档,
<Products>
<productTypes>
<productType name="BigOranges">
<product>
<name>BigOrange1</name>
<quatity>25</quatity>
</product>
<product>
<name>BigOrange2</name>
<quatity>55</quatity>
</product>
</productType>
<productType name="BigApples">
<product>
<name>BigApples1</name>
<quatity>25</quatity>
</product>
<product>
<name>BigApples2</name>
<quatity>55</quatity>
</product>
</productType>
</productTypes>
</Products>
我尝试自动生成 XSD 文件以查看示例,这就是生成的内容。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="T_quatity">
<xs:restriction base="xs:byte">
<xs:enumeration value="25"/>
<xs:enumeration value="55"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="T_name">
<xs:restriction base="xs:string">
<xs:enumeration value="BigApples1"/>
<xs:enumeration value="BigApples2"/>
<xs:enumeration value="BigOrange1"/>
<xs:enumeration value="BigOrange2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AT_1">
<xs:restriction base="xs:string">
<xs:enumeration value="BigApples"/>
<xs:enumeration value="BigOranges"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="T_productTypes">
<xs:sequence>
<xs:element ref="productType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="T_productType">
<xs:sequence>
<xs:element ref="product" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="name" use="required"/>
</xs:complexType>
<xs:complexType name="T_product">
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="quatity"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="T_Products">
<xs:sequence>
<xs:element ref="productTypes"/>
</xs:sequence>
</xs:complexType>
<xs:attribute name="name" type="AT_1"/>
<xs:element name="quatity" type="T_quatity"/>
<xs:element name="productTypes" type="T_productTypes"/>
<xs:element name="productType" type="T_productType"/>
<xs:element name="product" type="T_product"/>
<xs:element name="name" type="T_name"/>
<xs:element name="Products" type="T_Products"/>
</xs:schema>
查看上面的内容,我可以看到正在发生的事情是它们的类型已定义,然后在定义元素时使用这些类型。我不明白的是,元素是一个接一个地定义的,并且不遵循 XML 消息的结构。
如果此模式将用于验证 XML 文档,那么如何验证 XML 文件的结构?例如使用上述模式,它如何知道 productTypes 元素是 productType 标签的内部标签?