我有以下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.
答案 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"
),而第二个元素不是可选的。
这能解决您的要求吗?
马克