2012-08-31 38 views
1

我试图写一个XML类似这样XML模式complexType

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

一个模式,我想知道是否有在架构一个复杂类型,允许“书”和“海报”标签显示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

如果您一次只问一个问题,这将有所帮助。你似乎自己回答了第一个问题。在第二种情况下,你不清楚你的问题是什么。但是,xs:sequence不能是xs:element的子元素 - 之间需要有一个xs:complexType。 –

回答

1

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

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

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