是否可以从我的 XML 模式中删除这种冗余?

发布于 2024-11-28 13:33:25 字数 780 浏览 0 评论 0原文

我有以下问题:

我有两个复杂类型,foobar 以及成员 foobar

<xs:complexType name="foo">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="bar">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

为了减少冗余,我想声明一个foob​​ar 作为复杂类型,在 foobar 中都被引用,如下所示:

<xs:complexType name="foobar">
  <xs:sequence>
    <xs:element type="xs:string />
  </xs:sequence>
</xs:complexType>

但这似乎不是正确的方式。这在 XML 模式中实际上可能吗?

I have the following problem:

I have two complexTypes, foo and bar with both the member foobar:

<xs:complexType name="foo">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name="bar">
  <xs:sequence>
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
  </xs:sequence>
</xs:complexType>

To reduce redundancy, I want to declare a foobar as a complexType, which gets referenced in both foo and bar, something like this:

<xs:complexType name="foobar">
  <xs:sequence>
    <xs:element type="xs:string />
  </xs:sequence>
</xs:complexType>

But this doesn't seem to be the right way. Is this actually possible in XML Schema?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪我闹别瞎闹 2024-12-05 13:33:25

为此,您最好使用 xs:group 元素,而不是复杂类型:

<xs:complexType name="foo">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:complexType name="bar">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:group name='foobarGroup'>
    <xs:sequence>
        <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
    </xs:sequence>        
</xs:group>

您无法将序列直接表示为 xs:complexType 的一部分。

You are probably better off using an xs:group element for that rather than a complex type:

<xs:complexType name="foo">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:complexType name="bar">
    <xs:group ref="foobarGroup"/>
</xs:complexType>

<xs:group name='foobarGroup'>
    <xs:sequence>
        <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" />
    </xs:sequence>        
</xs:group>

You can't express the sequence directly as part of an xs:complexType.

丘比特射中我 2024-12-05 13:33:25

我还没有检查以下内容的正确性,但我相信你可以这样做:

  <xs:complexType name="hasFoobar" abstract="true">
    <xs:sequence>
      <xs:element name="foobar" … />
    </xs:sequence>
  </xs:complexType>

然后“扩展”这个抽象类型:

  <xs:complexType name="foo">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="bar">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

I have yet to check the following for correctness, but I believe you can do it like this:

  <xs:complexType name="hasFoobar" abstract="true">
    <xs:sequence>
      <xs:element name="foobar" … />
    </xs:sequence>
  </xs:complexType>

And then "extend" this abstract type:

  <xs:complexType name="foo">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="bar">
    <xs:complexContent>
      <xs:extension base="hasFoobar">
        …
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文