我试图完成以下操作,这是我的XML文档:
<TEST>
<A>X</A>
<B>X</B>
<C>Y</C>
</TEST>
所有三个元素A,B和C必须存在且其中只有一个必须具有Y值,其他元素必须具有X.
我使用了以下代码,但显然它不起作用:
<xsd:complexType name="TEST">
<xsd:choice>
<xsd:sequence>
<xsd:element name="A" type="xsd:string" fixed="Y"/>
<xsd:element name="B" type="xsd:string" fixed="X"/>
<xsd:element name="C" type="xsd:string" fixed="X"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="A" type="xsd:string" fixed="X"/>
<xsd:element name="B" type="xsd:string" fixed="Y"/>
<xsd:element name="C" type="xsd:string" fixed="X"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="A" type="xsd:string" fixed="X"/>
<xsd:element name="B" type="xsd:string" fixed="X"/>
<xsd:element name="C" type="xsd:string" fixed="Y"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
我已经坚持了一段时间,尝试了几乎所有的东西,从断言,替代限制,但没有任何工作如此绝望,我尝试了选择声明。 希望有人得到我想要做的事情并解释如何实现它。
答案 0 :(得分:0)
您无法在XSD 1.0中表示此类约束。您使用xs:choice
的尝试违反了唯一粒子归因。如果您仅限于XSD 1.0,则必须在XSD之外强制执行该约束。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="TEST">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="yorn"/>
<xs:element name="B" type="yorn"/>
<xs:element name="C" type="yorn"/>
</xs:sequence>
<xs:assert test="count(* = 'Y') = 1"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="yorn">
<xs:restriction base="xs:token">
<xs:enumeration value="Y"/>
<xs:enumeration value="N"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>