只有一个子元素可以具有给定值

Only one child element may have a given value

我正在努力完成以下工作,这是我的 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>

我已经坚持了一段时间,尝试了从断言、替代方案到限制的几乎所有方法,但没有任何效果,所以我绝望地尝试了选择语句。 希望有人能理解我正在尝试做的事情并解释如何完成它。

您无法在 XSD 1.0 中表示此类约束。您使用 xs:choice 的尝试违反了唯一粒子属性。如果您仅限于 XSD 1.0,则必须在 XSD.

之外强制执行该约束

XSD 1.1 解决方案

<?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>