第四页
8. 定义属性
最后,我们再来讲讲元素的属性如何在Schema文档中定义。
比如上面的order.xml实例文档中:
<order>
<orderItem id="7-5058-3496-7" />
</order>
对此,我们在Schema文档中采用一个attribute来定义:
order.xsd
---------
<xsd:element name="orderItem">
<xsd:complexType>
<xsd:sequence> ←空元素
</xsd:sequence>
<!--定义该元素属性-->
<xsd:attribute name="id" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
那么,实例文档中该属性值是必须的还是可有可无的呢?我们可以这样限制:
<xsd:attribute name="id" type="idType" use="required"/>
这里我们讲id属性类型作为一种自定义数据类型idType。
而且,用attribute元素的use属性来定义是否是必须的属性。
required是必须值,optional是可选值,prohibited是无属性值。
那么对于属性的缺省值,我们怎么定义呢?
比如:
<order>
<orderItem id="4-8443-1780-6" quantity="3"/>
</order>
我们还可以用attribute元素的另一个属性default来定义:
<xsd:attribute name="quantity" type="xsd:integer" default="1"/>
所以,我们可以重新写出一个Schema文档:
order2.xsd
--------------
<xsd:element name="orderItem">
<xsd:complexType>
<xsd:sequence></xsd:sequence>
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="quantity" type="xsd:integer" default="1"/>
</xsd:complexType>
</xsd:element>
上面的属性我们定义我们还可以采用属性组的办法来重新改写Schema文档。
order3.xsd
----------------
<xsd:element name="orderItem">
<xsd:complexType>
<xsd:sequence></xsd:sequence>
<xsd:attributeGroup ref="orderItemAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="orderItemAttributes">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="quantity" type="xsd:integer" default="1"/>
</xsd:attributeGroup>
这个属性组就不详细解释了,不过,大家一看就清楚了吧。
最后,我们写一个完整的订书order.xml的Schema文档。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
<xsd:element name="order">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="orderItem" maxOccurs="10"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="orderItem">
<xsd:complexType>
<xsd:sequence></xsd:sequence>
<xsd:attributeGroup ref="orderItemAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="orderItemAttributes">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="quantity" type="xsd:integer" default="1"/>
</xsd:attributeGroup>
<xsd:simpleType name="idType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
其他xml中引用xsd
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Envlope xmlns="gmip" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="gmip_appraise_rep.xsd">
Xsd中对应为:
<?xml version="1.0"?>
<xsd:schema targetNamespace="gmip" xmlns:xsd="
http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
ElementFormDefault=”qualified” 意思是要求element使用的namespace是targetNamespace,它的作用是对元素起"限定与非限定"使用,意思是在文档范例中要求采用命名空间前缀。
进入问吧