我正在尝试为类似于此
的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>
答案 0 :(得分:1)
我也不明白为什么像这样的简单重复需要一个序列
这是你的实际问题吗?简单的答案是specification需要它。
更详细的答案是验证器想要明确说明它应该寻找什么。 <xs:sequence>
明确告诉验证者其内容表示实例文档中预期的元素序列。就像<xs:choice>
告诉验证器它应该只看到一个包含的元素。