XSD验证错误:cos-element-consistent:元素与元素不一致

时间:2016-09-21 12:45:15

标签: xml xsd xsd-validation xml-validation

我有XML Schema应用程序的问题。第一种情况是一个带有元素引用的序列。这种情况有效,但我有一个请求,允许onlyone元素中的一个元素main或元素onlyone中的problem(不在main元素中)。我尝试了很多解决方案,特别是拆分为序列并使元素problem作为新定义的元素引用。这有效,但当我将complexType添加到元素problem时,它会警告我为错误。我需要具有请求条件的新元素problem

XSD:

<xs:sequence>
  <xs:sequence>
    <xs:element ref="el1" minOccurs="1" maxOccurs="1"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="el2" minOccurs="0" maxOccurs="1"/>
      <xs:element name="problem" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:choice>
            <xs:sequence>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="inside1" maxOccurs="unbounded"/>
                <xs:element ref="inside2" maxOccurs="unbounded"/>
              </xs:choice>
            </xs:sequence>
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element ref="onlyone" minOccurs="0" maxOccurs="1"/>
    </xs:choice>
    <xs:element ref="el3" minOccurs="1" maxOccurs="1"/>
  </xs:sequence>
  <xs:sequence>
    <xs:element ref="el1" minOccurs="1" maxOccurs="1"/>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="el2" minOccurs="0" maxOccurs="1"/>
      <xs:element name="problem" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:choice>
            <xs:sequence>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="inside1" maxOccurs="unbounded"/>
                <xs:element ref="onlyone" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="inside2" maxOccurs="unbounded"/>
              </xs:choice>
            </xs:sequence>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:choice>
    <xs:element ref="el3" minOccurs="1" maxOccurs="1"/>
  </xs:sequence>
</xs:sequence>

在保存时,XMLSpy写信给我:

  

元素问题&#39;与元素问题不一致&#39; cos元素一致性1:两种类型定义(&#39; {anonymous}&#39;和#39; {anonymous}&#39;)必须命名。

1 个答案:

答案 0 :(得分:0)

XSD具有Element Declarations Consistent约束,要求内容模型中的相同命名元素具有一致的内容模型。您的problem元素通过在同一优质内容模型中包含两个不同的内容模型而违反此约束,因此确实是一个问题。

分辨率可采用以下形式之一:

  1. 重命名其中一个problem元素。
  2. 使两个problem元素的内容模型保持一致 (更好,通常引用(通过xs:element/@ref)。
  3. 删除两个不一致的problem内容模型之间的兄弟关系。