"any one or more of these elements but must be at least one"的 XML 架构构造

标签 xml xsd schema

我正在尝试设置类似于“序列”的模式的一部分,其中所有子元素都是可选的,但至少有一个元素必须存在,并且可能还有更多比其中之一。

我尝试执行以下操作,但 XMLSpy 提示“内容模型包含无法唯一确定的元素 。”:

    <xs:choice>
        <xs:sequence>
            <xs:element name="DateConstant"/>
            <xs:element name="TimeConstant"/>
        </xs:sequence>
        <xs:element name="DateConstant"/>
        <xs:element name="TimeConstant"/>
    </xs:choice>

这可以做到吗(如果可以,怎么做)?

一些说明: 我只想允许同名的每个元素之一。可以有一个“DateConstant”和/或一个“TimeConstant”,但不能有两个。 Gizmo 的答案符合我的要求,但对于大量元素来说是不切实际的。 赫斯特的回答允许两个或多个同名元素,这是我不想要的。

最佳答案

试试这个:

<xs:choice>
  <xs:sequence>
    <xs:element name="Elem1" />
    <xs:element name="Elem2" minOccurs="0" />
    <xs:element name="Elem3" minOccurs="0" />
  </xs:sequence>
  <xs:sequence>
    <xs:element name="Elem2" />
    <xs:element name="Elem3" minOccurs="0" />
  </xs:sequence>
  <xs:element name="Elem3" />
</xs:choice>

这样做,你强制要么选择第一个元素,然后其余的元素是可选的,要么是第二个元素,其余的是可选的,要么是第三个元素。

我希望这应该可以满足您的要求。

当然,您可以将子序列分组,以避免在您意识到遗漏一个元素时在每个序列中重复一个元素。

关于 "any one or more of these elements but must be at least one"的 XML 架构构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/100228/

相关文章:

Java XMLType 文件修改

xsd - 将模式值作为参数或引用动态传递

java - 应用程序无法在 Activity 设备(Samsung Galaxy grand 2)上运行

xml - XPath 定位具有特定文本解析 HTML 表格的单元格

Java XML DocumentBuilderFactory 从 null 值写入空标签 <Tag/>

c# - 如何根据架构 (XSD) 验证 XML?出了点问题

json - Newtonsoft Json 模式

schema - 为具有元数据的 super 列创建 Cassandra 模式

java - 如何生成带有 xs :element which is optional using JAXB? 的 XSD

java - swing应用程序、spring应用程序上下文错误