xml - XSD 序列选择

标签 xml xsd jaxp

我想要一个元素<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>

关于xml - XSD 序列选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721104/

相关文章:

xml - 从哪里获取 Google 搜索 XSD

java - XML DOM 创建混合内容

xml - 在另一个xpath表达式中使用XPATH的结果

java - 使用导入和包含在 Java 中解析模式?

c# - DataContractSerializer - 命名空间问题

java - 如何在Android中动态检索textField中的字符串输入?

java - 如何在 Android 的字符串中定义函数?

c++ - 停止 xsd.exe 从 xsd 模式自动生成 C++ 头文件

xml - project.parent.name 和parent.name 之间的区别以及在pom.xml 中使用finalName

.net - WCF数据合约需求中需要maxOccurs ="unbounded"