XML Schema错误,限制了将xs:all与一个元素组合在一起

时间:2015-09-09 08:24:35

标签: xml xsd

我有一个包含以下内容的模式文件。我收到错误

  

cos-all-restricted.1.2:'all'模型组必须出现在粒子中   '{'min occurrence'}'='{'max恰好'}'= 1,那个粒子必须   成为一对的一部分构成a的'{'内容类型'}'   复杂类型定义。

我该如何解决这个问题?

<?xml version="1.0"?>`enter code here`
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:group name="custGroup">
  <xs:all>
    <xs:element name="customer" type="xs:string"/>
    <xs:element name="orderdetails" type="xs:string"/>
    <xs:element name="billto" type="xs:string"/>
    <xs:element name="shipto" type="xs:string"/>
  </xs:all>
</xs:group>

<xs:element name="order" type="ordertype"/>

<xs:complexType name="ordertype">
<xs:choice>
  <xs:group ref="custGroup"/>
  <xs:element name="status" type="xs:string"/>
  </xs:choice>
</xs:complexType>

</xs:schema>

2 个答案:

答案 0 :(得分:1)

不要以这种方式使用all,这违反了XSD的确定性原则。你可以通过接受你想要一个固定的元素顺序(通常是最好的东西)来解决这个问题,或者通过将它更改为具有4..4序列的choice并将每个元素作为自身来定义它们(全局定义它们以获得这个)。

这是实现此目的的一种方法:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:group name="custGroup">
        <xs:sequence>
            <xs:element name="customer" type="xs:string"/>
            <xs:element name="orderdetails" type="xs:string"/>
            <xs:element name="billto" type="xs:string"/>
            <xs:element name="shipto" type="xs:string"/>
        </xs:sequence>
    </xs:group>

    <xs:element name="order" type="ordertype"/>

    <xs:complexType name="ordertype">
        <xs:choice>
            <xs:element name="status" type="xs:string"/>
            <xs:group ref="custGroup"/>
        </xs:choice>
    </xs:complexType>

</xs:schema>

答案 1 :(得分:0)

你无法解决&#34;它没有改变规格,这将不会发生。您可以将内容模型更改为XSD支持的模型,也可以使用其他验证技术。