XSD 在两个元素之间进行选择



我有四个元素A,B,C,D。我想创建一个XSD,其模式应该是[A&B&C]或[A&D]的选择。

<xs:schema xmlns:w3="http://www.w3.org/TR/xmlschema-1/" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:element name="abcd">
    <xs:complexType>
        <xs:choice>
            <xs:element name="A" type="xs:string"/>
            <xs:sequence>
                <xs:element name="B" type="xs:dateTime"/>
                <xs:element name="C" type="xs:decimal"/>
            </xs:sequence>
            <xs:sequence>
                <xs:element name="D" type="xs:dateTime"/>
            </xs:sequence>
        </xs:choice>
    </xs:complexType>
</xs:element>

这是对的吗?
我通过xjc从xsd生成了java类。
我得到这个文件:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"a",
"b",
"c",
"d"
})
public class abcd {
@XmlElement(name = "a", required = true)
protected String a;
@XmlElement(name = "b")
protected String b;
@XmlElement(name = "c")
protected BigDecimal c;
@XmlElement(name = "d")
protected String d;
// get&set
}

此类与我的 XSD 方案不匹配。
我做错了什么?

Markus 是正确的。您的架构接受 [A]、[B & C] 或 [D] 选项。

考虑[A & B & C] or [A & D]的另一种方法是 [A] followed by either [B & C] or [D] .这可以通过在 XSD 中通过将 A 元素从选择中移出到序列中来表示,如下所示:

<xs:element name="abcd">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="A" type="xs:string"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element name="B" type="xs:dateTime"/>
                    <xs:element name="C" type="xs:decimal"/>
                </xs:sequence>
                <xs:element name="D" type="xs:dateTime"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>

最新更新