通过使用枚举类型元素的固定值区分xsd中的xs:choices
是否可以使用固定值区分xsd中的xs:choices?我有一个简单的类型:通过使用枚举类型元素的固定值区分xsd中的xs:choices,xsd,enumeration,fixed,choice,Xsd,Enumeration,Fixed,Choice,是否可以使用固定值区分xsd中的xs:choices?我有一个简单的类型: <xs:simpleType name="datatypeCategory"> <xs:restriction base="xs:string"> <xs:enumeration value="SIMPLE"/> <xs:enumeration value="COMPLEX"/> <xs:enumeration
<xs:simpleType name="datatypeCategory">
<xs:restriction base="xs:string">
<xs:enumeration value="SIMPLE"/>
<xs:enumeration value="COMPLEX"/>
<xs:enumeration value="COLLECTION"/>
</xs:restriction>
</xs:simpleType>
我想要实现的是
<xs:element name="datatype">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element id="category" type="datatypeCategory" fixed="SIMPLE"/>
<!-- some fields specific for SIMPLE -->
</xs:sequence>
<xs:sequence>
<xs:element id="category" type="datatypeCategory" fixed="COMPLEX"/>
<!-- some fields specific for COMPLEX -->
</xs:sequence>
<xs:sequence>
<xs:element id="category" type="datatypeCategory" fixed="COLLECTION"/>
<!-- some fields specific for COLLECTION -->
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
当我这样做时,我的XMLSpy会告诉我:
# The content model of complex type definition '{anonymous}' is ambiguous.
# Details: cos-nonambig: <xs:element name='category'> makes the content model non-deterministic against <xs:element name='category'>. Possible causes: name equality, overlapping occurrence or substitution groups.
复杂类型定义“{anonymous}”的内容模型不明确。
#详细信息:cos nonambig:使内容模型不确定。可能原因:名称相等、重复出现或替换组。
ID在文档中必须是唯一的。不能在多个元素上使用相同的值:
你不能完全做到这一点。错误是因为看到
元素的简单验证器不会立即知道选择哪个分支,而XMLSchema1.0支持这种简单验证器
另一种方法是根据类别命名每个元素
<xs:element name="datatype">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="simpleCategory" type="empty"/>
<!-- some fields specific for SIMPLE -->
</xs:sequence>
<xs:sequence>
<xs:element name="complexCategory" type="empty"/>
<!-- some fields specific for COMPLEX -->
</xs:sequence>
<xs:sequence>
<xs:element name="collectionCategory" type="empty"/>
<!-- some fields specific for COLLECTION -->
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
其中,empty
被定义为空类型。或者给他们复杂的类型来保存“特定字段”。根据您的约束,还有其他替代方法,例如使用替换组或派生的复杂类型
但一般来说,XMLSchema1.0不适合基于相关值的约束。为此,您必须转到XMLSchema1.1或外部工具。好的,明白了。但是有没有其他方法可以满足我的需求呢?嗯,怎么样?