XSD 的 N 个元素的值限制

Restriction on values of N elements with XSD

我正在寻找一种方法来对相互组合的两个元素的值应用限制。我当前的架构是:

<xs:simpleType name="CTKOD_EONE">
    <xs:restriction base="xs:string">
        <xs:enumeration value="1" /> 
        <xs:enumeration value="2" /> 
        <xs:enumeration value="3" /> 
        <xs:enumeration value="4" /> 
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="CTKOD_ETWO">
    <xs:restriction base="xs:string">
        <xs:enumeration value="A" /> 
        <xs:enumeration value="B" /> 
        <xs:enumeration value="C" /> 
        <xs:enumeration value="D" /> 
    </xs:restriction>
</xs:simpleType>


<xs:element name="DATA" minOccurs="0" maxOccurs="unbounded">
    <xs:complexType>
        <xs:all>
            <xs:element name="EONE" type="CTKOD_EONE">
            <xs:element name="ETWO" type="CTKOD_ETWO">
        </xs:all>
    </xs:complexType>
</xs:element>

XML 示例:

<DATA>
    <EONE>1</EONE>
    <ETWO>C</ETWO>
</DATA>
<DATA>
    <EONE>4</EONE>
    <ETWO>D</ETWO>
</DATA>
<DATA>
    <EONE>2</EONE>
    <ETWO>A</ETWO>
</DATA>
<DATA>
    <EONE>3</EONE>
    <ETWO>B</ETWO>
</DATA>

但在我的例子中,每个数据必须对 EONE 和 ETWO 的组合有限制。例如:

1 with C  - valid
4 with D  - valid
2 with A  - valid
3 with B  - INVALID!!

是否可以对N个子元素的值进行一些复杂的限制?或者用 XSD 解决这个问题的其他方法?请帮助我找出可能的解决方案。

在 XSD 1.1 中使用 xs:assert 很容易。

在 XSD 1.0 中是不可能的。