XML 架构复杂类型元素 +顺序的替代方案

发布于 2025-01-03 02:25:45 字数 1632 浏览 1 评论 0原文

我想创建一个 XML 架构(XSD 文件)以应用于 XML 文档。 让我们考虑以下 XML 文档:

<root>
    <a />
    <b />
    <c />
    <a />
    <a />
    <b />
</root>

其中遵守以下所需的约束

  1. :根>是根元素。
  2. <<一个>,< b>且< c>元素可以出现无限次。
  3. <<一个>,< b>且< c>元素未分组。例如,一个元素可以位于 < 之前和之后。 b>元素。

如果我必须创建一个 XML 模式以应用于示例 XML 文档,我将按以下方式开始:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://doesnotmatter.com/"
            xmlns="http://doesnotmatter.com/"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="root"
                min="1"
                max="1">
        <complexType>

            <!-- ? -->

        </complexType>
    </xs:element>

</xs:schema>

我不知道如何填充 <<复杂类型>我的架构中的元素。
我不能使用 <序列>由于第三个约束的元素。
我怎样才能实现我的模式来尊重所有 3 个约束。

编辑

选择元素是我问题的关键。
以下是符合我上述需求的 XML 架构:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://doesnotmatter.com/"
            xmlns="http://doesnotmatter.com/"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="root">
    <xs:complexType>

      <xs:choice maxOccurs="unbounded">
        <xs:element name="a" />
        <xs:element name="b" />
        <xs:element name="c" />
      </xs:choice>

    </xs:complexType>
  </xs:element>

</xs:schema>

I want to create an XML Schema - an XSD file - to apply on XML documents.
Let's consider the following XML document :

<root>
    <a />
    <b />
    <c />
    <a />
    <a />
    <b />
</root>

Where the following desired constraints are respected :

  1. < root > is the root element.
  2. The < a >, < b > and < c > elements can appears an unbounded number of times.
  3. The < a >, < b > and < c > elements are not grouped. For instance, an element can preceded and followed a < b > element.

If I had to create an XML schema to apply on the example XML document I would start as the following :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://doesnotmatter.com/"
            xmlns="http://doesnotmatter.com/"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="root"
                min="1"
                max="1">
        <complexType>

            <!-- ? -->

        </complexType>
    </xs:element>

</xs:schema>

I do not know how to fill the < complexType > element in my schema.
I can not use a < sequence > element because of the 3rd constraint.
How could I achieve my schema to respect all the 3 constraints.

Edit

The choice element was the keystone to my problem.
Here is the XML schema corresponding to my needs described above :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://doesnotmatter.com/"
            xmlns="http://doesnotmatter.com/"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="root">
    <xs:complexType>

      <xs:choice maxOccurs="unbounded">
        <xs:element name="a" />
        <xs:element name="b" />
        <xs:element name="c" />
      </xs:choice>

    </xs:complexType>
  </xs:element>

</xs:schema>

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

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

发布评论

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

评论(1

梦里寻她 2025-01-10 02:25:45

因此,您的 root 模型是:从以下可能性中反复选择:a、b、c。是这样吗?操作词是 select as in choice。也许我错过了一些东西,但答案似乎很明显。

So, your model for root is: repeatedly choose from amongst these possibilities: a, b, c. Is that it? The operative word is choose as in choice. Maybe I am missing something, but the answer seems pretty obvious.

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