XML 架构复杂类型元素 +顺序的替代方案
我想创建一个 XML 架构(XSD 文件)以应用于 XML 文档。 让我们考虑以下 XML 文档:
<root>
<a />
<b />
<c />
<a />
<a />
<b />
</root>
其中遵守以下所需的约束
- :根>是根元素。
- <<一个>,< b>且< c>元素可以出现无限次。
- <<一个>,< 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 :
- < root > is the root element.
- The < a >, < b > and < c > elements can appears an unbounded number of times.
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因此,您的 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.