XSD抱怨“具有不同类型的名称为'B'的多个元素出现在模型组中。”

时间:2009-05-07 15:47:34

标签: xsd

我有以下XSD:

<xs:complexType name="typeBroken">
  <xs:choice>
    <xs:element name="B">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="FOO|BAR" />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:sequence>
      <xs:element name="A">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="5" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="B">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="3" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:choice>
</xs:complexType>

所以,我希望'A'的存在使'B'有不同的验证。这可能吗?例如:

<test><B>FOO</B></test>
<test><A>HELLO</A><B>BAZ</B><test>

两者都应该验证。虽然:

<test><B>BAZ</B></test>

不应该验证。但是,我来自xsd:

cos-element-consistent: Error for type 'typeBroken'. Multiple elements with name 'B', with different types, appear in the model group.

1 个答案:

答案 0 :(得分:0)

我是否正确理解您的要求?您希望在此之前拥有<B>...</B>和可选的<A>....</A>(但不是必需的)?

那么这个架构怎么样?

<xs:complexType name="typeBroken">
  <xs:sequence>
    <xs:element name="A" minOccurs="0">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="5" />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name="B">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="FOO|BAR" />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    </xs:sequence>
  </xs:choice>
</xs:complexType>

定义一个序列,其中第一个元素<A>是可选的(minOccurs="0"),而第二个元素不是可选的。

这能解决您的要求吗?

马克