XSD 序列的选择
XSD choice of sequences
我想要一个元素 <aaa>
包含一个元素序列 <bbb>
或两个元素序列 <bbb>,<ccc>
。例如,以下是有效的:
<aaa>
<bbb>
<bbb>
</aaa>
和
<aaa>
<bbb>
<ccc>
<bbb>
<ccc>
</aaa>
但以下无效:
<aaa>
<bbb>
<ccc>
<bbb>
</aaa>
我试过下面的方案
<xs:complexType name="aaa">
<xs:choice minOccurs="0">
<xs:sequence minOccurs="0" maxOccurs="15">
<xs:element name="bbb" type="xxx" />
<xs:element name="ccc" type="xxx"/>
</xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="15">
<xs:element name="bbb" type="xxx" />
</xs:sequence>
</xs:choice>
</xs:complexType>
但是我在使用 JAXP 验证时收到此错误消息:cos-nonambig: bbb and bbb (or elements from their substitution group) violate "Unique Particle Attribution"
有什么方法可以实现我的目标吗?提前致谢
我认为如果您使用 XSD 1.1(现在无法测试)就不会出现该错误。 编辑:谢谢 user Michael Kay评论说在 XSD 1.1 中模式仍然必须是明确的,所以(不像我想的那样)在 XSD 1.1.
中仍然会出现唯一粒子归因错误
无论如何你可以像下面的例子那样做。使用这个你是说 aaa 元素的内容总是以 bbb 元素开头,然后是
a)从0到无穷大bbb个元素
或
b) 一个 ccc 元素和可选的 n 次序列 bbb, ccc
<xs:element name="aaa">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="bbb" type="xxx" />
<xs:choice>
<xs:element name="bbb" type="xxx" minOccurs="0" maxOccurs="unbounded" />
<xs:sequence>
<xs:element name="ccc" type="xxx" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="bbb" type="xxx" />
<xs:element name="ccc" type="xxx" />
</xs:sequence>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
我想要一个元素 <aaa>
包含一个元素序列 <bbb>
或两个元素序列 <bbb>,<ccc>
。例如,以下是有效的:
<aaa>
<bbb>
<bbb>
</aaa>
和
<aaa>
<bbb>
<ccc>
<bbb>
<ccc>
</aaa>
但以下无效:
<aaa>
<bbb>
<ccc>
<bbb>
</aaa>
我试过下面的方案
<xs:complexType name="aaa">
<xs:choice minOccurs="0">
<xs:sequence minOccurs="0" maxOccurs="15">
<xs:element name="bbb" type="xxx" />
<xs:element name="ccc" type="xxx"/>
</xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="15">
<xs:element name="bbb" type="xxx" />
</xs:sequence>
</xs:choice>
</xs:complexType>
但是我在使用 JAXP 验证时收到此错误消息:cos-nonambig: bbb and bbb (or elements from their substitution group) violate "Unique Particle Attribution"
有什么方法可以实现我的目标吗?提前致谢
我认为如果您使用 XSD 1.1(现在无法测试)就不会出现该错误。 编辑:谢谢 user Michael Kay评论说在 XSD 1.1 中模式仍然必须是明确的,所以(不像我想的那样)在 XSD 1.1.
无论如何你可以像下面的例子那样做。使用这个你是说 aaa 元素的内容总是以 bbb 元素开头,然后是
a)从0到无穷大bbb个元素
或
b) 一个 ccc 元素和可选的 n 次序列 bbb, ccc
<xs:element name="aaa">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="bbb" type="xxx" />
<xs:choice>
<xs:element name="bbb" type="xxx" minOccurs="0" maxOccurs="unbounded" />
<xs:sequence>
<xs:element name="ccc" type="xxx" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="bbb" type="xxx" />
<xs:element name="ccc" type="xxx" />
</xs:sequence>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>