1

我正在尝试为类似于此的 xml 编写架构

<?xml version="1.0" encoding="ISO-8859-1"?>
<store>
    <book>title1</book>
    <poster>some text</poster>
    <poster>some text</poster>
    <book>title1</book>
    <poster>some text</poster>
</store>

我想知道 Schema 中是否有一个 complexType 允许“book”和“poster”标签出现最少 0 次和无限制的最大次数。我需要它们能够以随意的顺序出现,例如:书籍、海报、书籍海报、海报。

我虽然我不能简单地放一个序列,而是写一个这样的模式

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="store" type="TStore"/>

    <xs:complexType name="TStore">
        <xs:element name="book" type="xs:string" maxOccurs="unbounded"/>
        <xs:element name="poster" type="xs:string" maxOccurs="unbounded"/>
    </xs:complexType>
</xs:schema>

但这只是无效的模式。如果书和海报标签以随意的顺序出现,那么“xs:all”会很好,但只出现一次。我该如何解决?编辑:带有 maxOccurs="unbounded" 的 xs:choice 可以很好地解决问题。

我也不明白为什么像这样的简单重复需要一个序列。我查阅了一些教程,但我找不到这个简单案例的参考。

<?xml version="1.0" encoding="ISO-8859-1"?>
<tags>
    <tag>text1</tag>
    <tag>text2</tag>
    <tag>text3</tag>
</tags>

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="tags" type="complexType">
        <xs:sequence>
            <xs:element name="tag" type="xs:string" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:element>
</xs:schema>
4

1 回答 1

1

我也不明白为什么像这样的简单重复需要一个序列

这是你的实际问题吗?简单的答案是规范需要它。

更详细的答案是验证器想要一个明确的规范,说明它应该寻找什么。明确地告诉验证器它的<xs:sequence>内容代表了实例文档中预期的元素序列。就像<xs:choice>告诉验证器它应该只看到包含的元素之一。

于 2012-08-31T18:28:33.287 回答