在定义复合元素(complextype)时指示器也是常用的概念。指示器的作用就是为了控制元素的秩序和方式。
举一个最简单的例子,就是我们用过的sequence指令,这个指令要求元素标记必须按顺序出现,不能随便改变次序。下面是我们举过的例子。
<?XML version=“1.0”encoding=“UTF-8”?>
<xs:schema xmlns:xs=“http://www.w3.org/2001/xmlschema”
targetNamespace=“http://www.w3.cschools.com”
xmls=“http://www.w3cschools.com”
elementFormDefault=“qualified”>
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这里sequence指令就是规定在<xs:sequence> 和</xs:sequence>指令之间所有元素标记不可以改变顺序。
如果希望符合元素之中的元素可以随便调换位置,用all 指令。
例如:
<xs:element name="note">
<xs:complexType>
<xs:all>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
这个all指令,要求所有元素可以按任意顺序出现,但是每个元素必须至少出现一次。
还有一个choice指令,表示非此即彼,两个元素不能同时出现。
例如:
<xs:element name="answer">
<xs:complexType>
<xs:choice>
<xs:element name="right" type="xs:string"/>
<xs:element name="wrong" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
这个例子,在编辑XML文档时,只能适用一个元素。不能两个都出现。
还有一种指示器,可以规定元素出现次数,适用方法与上面的指示器不同,而是出现在具体的元素标记内。这两个指示器就是maxoccurs和minoccurs指令。
例如:
<xs:element name="answers">
<xs:complexType>
<xs:sequence>
<xs:element name="right" type="xs:string" maxoccurs=“3”/>
<xs:element name="wrong" type="xs:string" minOccurs=“2”/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
而maxoccurs表示正确答案最多重复3次;minoccurs表示错误答案最少2次。这两个指示器默认值都是1次。
关于指示器先讲这么多,还有几个,容后再讲。
北荒客
2020.3.7