我有一个元素“Method”和“Name”,如下所示: 我想根据“方法”中的值将“名称”中的引用从“group1”更改为“group2”,因为我想更改限制。
有可能吗?
<xs:element name="Method" type="xs:string" />
<xs:element name="Name">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element ref="group1" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="group1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="ABC" />
<xs:enumeration value="PQR" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="group2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="XYZ" />
<xs:enumeration value="ABC" />
</xs:restriction>
</xs:simpleType>
</xs:element>
答案 0 :(得分:1)
对于XSD 1.0 ,您必须在XML Schema之外验证此类约束。考虑使用XSLT进行额外验证或Schematron。
对于XSD 1.1 ,您可以使用条件类型分配。见xs:alternative
。但请注意,您必须进行一些重组。 xs:alternative
测试可以引用元素本身和常量的属性,而不是文档中的任意元素;它甚至不允许相对引用其他元素或属性。