【问题标题】:xsd choice with multiple xsd:element with difference MaxOccurs具有多个 xsd 的 xsd 选择:具有不同 MaxOccurs 的元素
【发布时间】:2021-10-05 16:02:32
【问题描述】:

我正在尝试使用 maxOccurs='unbound' 修改包含 xsd 选项的旧版 xsd 文件。我需要将子 xsd:element 更改为仅出现一次。

现有代码示例:我需要将元素“B”限制为仅出现一次,其余部分照常运行。

<xsd:complexType name="test">
    <xsd:choice  minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="A"/>
        <xsd:element name="B"/>
        <xsd:element name="C"/>
        <xsd:element name="D"/>
        <xsd:element name="E"/>
    </xsd:choice>
</xsd:complexType>

以下是我的方法:

一)

<xsd:complexType name="test">
    <xsd:choice>
        <xsd:element name="A" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="B" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="C" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="D" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="E" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:choice>
</xsd:complexType>

b)

<xsd:complexType name="test">
    <xsd:choice>
        <xsd:element name="A" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="B" minOccurs="0" maxOccurs="1"/>
        <xsd:element name="C" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="D" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="E" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:choice>
</xsd:complexType>

有效 XML 示例:“

无效 XML 示例:“

这些都不起作用。请在这里给任何建议,

【问题讨论】:

  • 您需要使用一些示例来解释您的要求 - 至少一个有效的 XML 和一个无效的 XML。
  • 另外...a) 和 b) 在我看来是一样的。
  • 如果A 需要一次,您可以将其置于包含其余元素的两个xsd:choice[@maxOccurs="unbounded"]s 之间的序列中。如果A 是可选的,您需要使用 XSD 1.1 断言来管理它,否则您将违反唯一粒子属性约束。

标签: xml xsd


【解决方案1】:

您实际上是在尝试创建 A、B、C、D、E 对象的集合,但将集合限制为最多包含 B 的一个实例。这是一种笨拙的数据结构,可能会在其他地方引起麻烦。相反,将 B 完全从集合中取出。例如,尝试类似:

<xsd:complexType name="test">
  <xsd:sequence>
    <xsd:element name="B" minOccurs="0" maxOccurs="1"/>
    <xsd:choice  minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="A"/>
      <xsd:element name="C"/>
      <xsd:element name="D"/>
      <xsd:element name="E"/>
    </xsd:choice>
  </xsd:sequence>
</xsd:complexType>

如果您绝对需要保留当前的数据结构,kjhughes 关于 XSD 1.1 断言的建议可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2021-09-22
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多