XSD 两个元素之间的选择
XSD Choice between two element
我有四个元素 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 class
我得到这个文件:
@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
}
这个class不符合我的xsd方案。
我做错了什么?
马库斯是正确的。您的架构接受 [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>
我有四个元素 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 class
我得到这个文件:
@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
}
这个class不符合我的xsd方案。
我做错了什么?
马库斯是正确的。您的架构接受 [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>