【问题标题】:XSD: reuse sub-elements of complexType?XSD:重用 complexType 的子元素?
【发布时间】:2011-02-09 11:01:44
【问题描述】:

我在我的 XSD 文件中定义了以下两种类型:

<complexType name="primitive">
  <attribute name="seq_num" type="int"/>
  <element name="prim_to" type="int"/>
</complexType>


<complexType name="configdata">
  <sequence>
    <element name="enable" type="boolean"/>
    <element name="type" default="int"/>
   </sequence>
</complexType>

这两种类型都在许多定义中使用,即我宁愿不更改它们。我想定义一个新元素set 扩展primitive 并包含configdata 的所有子元素。此元素的 XML 文件如下所示(请注意,enabletypeprim_to 处于同一级别):

<set seq_num="1234">
  <prim_to>22</prim_to>
  <enable>true<enable>
  <type>42</type>
</set>

我可以通过以下方式声明set

<element name="set">
  <complexType>
    <complexContent>
      <extension base="primitive">
        <sequence>
          <element name="config" type="configdata"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
</element>

在这种情况下,XML 文件将如下所示:

<set seq_num="1234">
  <prim_to>22</prim_to>
  <config>
    <enable>true<enable>
    <type>42</type>
  </config>
</set>

我的挑战是定义set,使其扩展primitive并包含configdata的所有子元素——但不包含configdata类型的元素。基本上对于上面的 XML 文件,问题是没有两个“配置”标签。这在 XSD 中可能吗?我将非常感谢任何提示。

提前致谢,
威泰克

【问题讨论】:

  • 我一定是误会了:为什么不用configdata类型定义set,eg element name="set" type="configdata"?
  • 与真实代码相比,我已经简化了代码示例。在我的真实代码中,set 是另一个 complexType 的扩展。 set 包含其他元素 - 我希望它也包含 configdata 的所有子元素。
  • 那么你在这里真正要求的是拥有 set 元素,扩展多种复杂类型?
  • 抱歉不清楚 - 也许我过度简化了代码示例。我试图改写这个问题以使其更清楚。我希望这会有所帮助。我正在通过这样做来学习 XSD——所以这也许是我的问题的根本原因。 ;-)

标签: xml xsd


【解决方案1】:

一个类型只能扩展另一个类型(换句话说,没有多重继承)。因此,您的 set 元素可以扩展 configdata(使用 xsd:extension)并具有其他元素,或者它可以扩展另一种类型,您可以复制 configdata 元素来扩展它。您可以使用组来避免冗余。

【讨论】:

  • 如果您不想为 configdata 元素定义多个定义,它可以帮助您:您可以定义一个包含所有 configdata 元素的命名组,使用它来定义具有 tree 元素的 configdata>complexType>group ,然后用它来扩展set元素中的原始类型,树元素>complexType>complexContent>extension>group。
  • 那行得通……而且我已经了解了有关 XSD 的更多信息! ;-) 非常感谢您的帮助!
【解决方案2】:

您应该像这样定义set 元素:

<element name="set" type="configdata" />

使用这种结构,set 元素将包含 configdata 复杂类型中的两个子元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2012-06-24
    • 2012-06-06
    • 2019-07-28
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多