我需要要求前n个元素在一个序列中,后跟几个可以按任何顺序排列的元素。
例如,让我们说我有这个xml:
<root>
<person>
<fn>First name</fn>
<ln>Last Name</ln>
<gender>F</gender>
<age>33</age>
<middleName>Middle</middleName>
</person>
</root>
我需要要求有2个第一个元素,必须是 按照确切的顺序, 其次是3个元素,这3个可以按任意顺序排列。
我尝试了这个,但它似乎不是一个有效的架构xml:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="fn" minOccurs = "1" maxOccurs="1" type="xsd:string"/>
<xsd:element name="ln" minOccurs = "1" maxOccurs="1" type="xsd:string"/>
</xsd:sequence>
<xsd:all>
<xsd:element name="gender" minOccurs = "1" maxOccurs="1"/>
<xsd:element name="age" minOccurs = "1" maxOccurs="1"/>
<xsd:element name="middleName" minOccurs = "1" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
答案 0 :(得分:2)
无法直接完成。
您可以使用xsd:choice替换xsd:all,该选项允许三个元素的可能的8个排列,这对于三个元素来说几乎可以管理,但是很快就变得难以处理。
在XSD 1.1中,我建议使用xsd:all内容模型,然后使用断言限制它。
但是,我也会质疑为什么你想用这种方式设计你的文档。在XSD不允许你做某事的地方,通常是因为XSD的设计者并不认为这是一件非常聪明的事情。