猿问

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 方案不匹配。

我究竟做错了什么?


绝地无双
浏览 104回答 1
1回答

慕斯709654

您的模式接受 [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>
随时随地看视频慕课网APP

相关分类

Java
我要回答