我试图从w3学校了解关于序列元素的例子。我认为序列中的元素只能显示一次,但w3学校的例子让我相信不然。这是一个例子......
<xs:element name="pets">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="dog" type="xs:string"/>
<xs:element name="cat" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
因此对w3学校的解释说“这个例子显示了一个名为”宠物“的元素的声明,它可以在序列元素中包含零个或多个以下元素,dog和cat。我试着通过这样做来测试....
抱歉第二个例子我错误地粘贴了....这就是我的意思,不会根据顶部的架构进行验证...... <pets>
<dog>something</dog>
<dog>something else</dog>
<cat>else</cat>
</pets>
但验证者给了我错误http://www.corefiling.com/opensource/schemaValidate.html。 我想了解这两个例子。允许有多个相同元素的序列,以及序列中每个元素必须存在且必须只显示一次的序列。
任何示例和建议将不胜感激。
答案 0 :(得分:2)
该架构允许内容为序列“<dog>
后跟<cat>
”的零或更多次重复。换句话说,pets
元素可以是空的,也可以包含狗猫,狗猫猫等,但不能包含狗狗。
如果您想要任意组合中的任意数量的狗或猫元素,那么您可能需要choice
而不是sequence
。
<xs:element name="pets">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="dog" type="xs:string"/>
<xs:element name="cat" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
这将允许X
重复零次或多次,其中X
是一只狗或一只猫元素。
答案 1 :(得分:0)
序列元素中声明了minOccurs
/ maxOccurs
个约束,因此它们适用于sequence
的{{1}},即一个 (dog, cat)
,然后是一个猫。您声明序列可以重复,而不是单个元素。因此,您的架构将验证此类文档,例如:
dog
您发布的文档无法验证,因为它包含的<pets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema6.xsd">
<dog>something</dog> <!-- sequence 1 -->
<cat>else</cat>
<dog>something</dog> <!-- sequence 1 -->
<cat>else</cat>
<dog>something</dog> <!-- sequence 1 -->
<cat>else</cat>
</pets>
元素不属于允许的序列:
dog
您的架构接受空序列(无 <pets>
<dog>something</dog> <!-- not allowed - where is the following cat? -->
<dog>something else</dog> <!-- sequence dog,cat - OK -->
<cat>else</cat>
</pets>
s或cat
s)以及无界序列(任意数量的dog
和cat
s),但必须如果有dog
,则始终为cat
;如果有dog
则为dog
,且cat
必须在dog
之前}。这是一个非常严格的规则。
如果您想以任何顺序接受任意数量的cat
和cat
,则必须在单个元素声明中重新定义这些约束,因为它们使用的是默认值,默认值为dog
minOccurs="1"
:
maxOccurs="1"
现在,您在每个序列中允许0 <xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="dog" type="xs:string" minOccurs="0"/>
<xs:element name="cat" type="xs:string" minOccurs="0"/>
</xs:sequence>
或cat
,因此您可以按任意顺序添加dog
和dog
,只有{{1 s,只有cat
s,有空序列,没有序列...
cat
(您也可以使用dog
获得与其他答案相同的结果。)