定义schema文档的简单元素(simpletype)就是基础入门。实际上使用更多的是复合元素(complextype)。复合元素就是包含其他元素的元素。例如:学校作为标记元素,学校下还有子元素,老师,学生等等。写schema文档就是定义具有结构的复合元素。复合元素比较难理解,我们从最简单学起。
我们定义一个电话通讯录:
<xs:element name="phonebook">
<xs:complexType>
<xs:sequence>
<xs:element name=“name” type=“xs:string”/>
<xs:element name=“phone” type=“xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
这就是简单的电话本,只有名字和电话号码。其中:sequence意思是子元素必须按顺序出现。在XML文档中可以这样写:
<phonebook>
<name>张三</name>
<phone>18800335588</phone>
</phonebook>
如果我们再复杂一点,带有属性的简单元素如何定义?使用扩展(extension)指令或者使用约束(restriction)指令来达到目的。
我们使用官网的例子,如果在XML文档中实现下面带属性的元素,例如:
<shoesize country=“法国”>35</shoesize>
在schema文档上可以使用extension也可以使用restriction这两个指令。见下面的例子:
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base=“xs:integer”>
<xs:attribute name=“country” type=“xs:string”/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
好像很复杂,其实就是框架复杂了点,实际众星拱月,就中间的是定义属性,上下都是基本不变的。
而simplecontent是内部简单文本指令。类似sequence顺序指令的用法。extension是扩展指令。
这个定义,还可以有另外的方法。大同小异。增加了复杂性,但是如果元素多了,子元素都可以引用,比较方便,所以这里需要知道这种方法。
<xs:element name="shoesize" type=“shoetype”/>
<xs:complexType name=“shoetype”>
<xs:simpleContent>
<xs:extension base=“xs:integer”>
<xs:attribute name=“country” type=“xs:string”/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
复合元素定义比较难理解,要一点一点的学。先学简单的。如怎么定义简单元素(simpletype),怎么定义简单的属性,然后在接受复合元素(complextype)。这里大家一定要分清,约束(facets)与属性的区别。
约束(facets)使用限定(restriction)限定用基础(base)设定,约束的是值(value),而且是类型(type)的值。今天,我们又看到了使用扩展(extension)也使用基础(base)。
属性(attribute)是与元素(element)同档次的指令,使用名称(name)来设定。
北荒客
2020.3.6