允许XML元素以任何顺序通过XSD以任意数量出现?

时间:2016-10-07 00:45:49

标签: xml xsd jaxb xsd-validation xml-validation

我无法使用这些约束编写XSD:名称元素是必需的; 元素可能会出现0次或多次; 类别元素是可选的。我现在有这样的XSD:

<xs:element name="Detail" maxOccurs="unbounded" minOccurs="0"> <!-- 0 or more Details -->
  <xs:complexType>
    <xs:sequence>
      <xs:element type="xs:string" name="Name"/> <!-- Name element is required -->
      <xs:element type="xs:string" name="Value" maxOccurs="unbounded" minOccurs="0"/> <!-- 0 or more occurences of Value element -->
      <xs:element type="xs:string" name="Category" minOccurs="0" maxOccurs="1"/> <!-- optional (0 or 1) Category element -->
    </xs:sequence>
  </xs:complexType>
</xs:element>

问题是输入XML可能不遵循架构中的顺序。 xs:choice xs:all 的外观约束对我来说不够好。

任何人都可以帮我解决这个问题,允许任何次序的XML元素出现任何次数吗?

附加示例输入XML:

<Detail>
    <Category />
    <Name> Thanks </Name>
    <Value> 1 </Value>
    <Value> 2 </Value>
</Detail>

1 个答案:

答案 0 :(得分:0)

XSD 1.0

不可能。要么强制执行订单,要么放宽发生限制。

XSD 1.1

可能,因为在XSD 1.1中,xs:all的孩子现在可能有@maxOccurs="unbounded"

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           elementFormDefault="qualified"
  vc:minVersion="1.1">
  <xs:element name="Detail"> 
    <xs:complexType>
      <xs:all>
        <xs:element type="xs:string" name="Name"/>
        <xs:element type="xs:string" name="Value" 
                    minOccurs="0" maxOccurs="unbounded" />
        <xs:element type="xs:string" name="Category" 
                    minOccurs="0" maxOccurs="1"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>