为了账号安全,请及时绑定邮箱和手机立即绑定

XSD 两个元素之间的选择

XSD 两个元素之间的选择

绝地无双 2023-03-31 17:13:34
我有四个元素 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 方案不匹配。我究竟做错了什么?
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

您的模式接受 [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>


查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信