带有必需元素和未知元素的XSD

时间:2010-12-08 13:30:29

标签: xsd

我有以下xml:

<product>
<name>beef</name>
<category>food</category>
<unknownfield1>..</unknownfield1>
<unknownfield2>..</unknownfield2>
</product>

我需要验证此xml以确保根元素是产品,并且它包含所需的元素名称和类别。问题在于,它并不像上面的例子那样完全结构化。可能是这样的。

<product>
<category>food</category>
<unknownfield4>..</unknownfield4>
<name>beef</name>
<unknownfield4>..</unknownfield4>
</product>

如果结构没有改变,我可以使用以下内容:

<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="category" type="xs:string" />
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>

但是当元素序列未知时,这显然不起作用。 对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这是一个示例模式,它将针对您提供的两个示例XML文件进行验证:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unknownfield4"/>
<xs:element name="unknownfield2"/>
<xs:element name="unknownfield1"/>
<xs:element name="product">
    <xs:complexType>
        <xs:choice>
            <xs:sequence>
                <xs:element ref="name"/>
                <xs:element ref="category"/>
                <xs:any maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:sequence>
                <xs:element ref="category"/>
                <xs:any/>
                <xs:element ref="name"/>
                <xs:any/>
            </xs:sequence>
        </xs:choice>
    </xs:complexType>
</xs:element>
<xs:element name="name">
    <xs:simpleType>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
</xs:element>
<xs:element name="category">
    <xs:simpleType>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
</xs:element>

希望有所帮助!!