xml架构complextype

时间:2012-08-31 15:35:30

标签: xml schema complextype

我正在尝试为类似于此

的xml编写Schema
<?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”会很好,但只有一次。我该如何解决? 编辑:一个xs:选择maxOccurs =“unbounded”很好地完成了这个技巧。

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

<?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>

1 个答案:

答案 0 :(得分:1)

  

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

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

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