Schema简单的类型
一、Schema简易元素
XML Schema可以定义XML文件的元素。简易元素之那些只包含文本的元素。它不会包含其他的元素或属性。
1、字符串(string)
字符串是最松散的文本约束。其唯一要求是不能含有特殊字符(如&,<,>).
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="name" type="xs:string"/>
-
</xs:schema>
XML实例:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<name>张三&</name>
将xml文档和Schema关联后验证,得到以下的错误提示:
2、日期型(date)
日期型格式为YYYY-MM-DD.
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="adddate" type="xs:date"/>
-
</xs:schema>
xml实例:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<adddate>2009-12-32</adddate>
在XMLSpy验证,提示错误:
3、数值型(integer)
数值型约束要求文本内容必须为数值,不能包含字母或其他非数字字符。
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="num" type="xs:integer"/>
-
</xs:schema>
xml文档:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<num>123ab</num>
在XMLSpy验证,提示以下错误:
4、布尔型(boolean)
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="isfirst" type="xs:boolean"/>
-
</xs:schema>
-
xml文档:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<isfirst>TRUE</isfirst>
在XMLSpy验证,提示以下错误:
5、枚举型(enumeration)
枚举型可以创建一组基本简单类型的选项,为了给元素更强的约束。
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="color">
-
<xs:simpleType>
-
<xs:restriction base="xs:string">
-
<xs:enumeration value="red"/>
-
<xs:enumeration value="green"/>
-
<xs:enumeration value="blue"/>
-
</xs:restriction>
-
</xs:simpleType>
-
</xs:element>
-
</xs:schema>
-
xml实例:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<color>white</color>
-
在XMLSpy验证,提示以下错误:
在枚举选项组中,定义重复的元素是无意义的,定义的顺序没有要求。
6、列表类型(list)
列表类型是简单类型的一种。不过,它所定义的元素或属性的值可以含有多个原子值。这些并列的原子值之间利用空格分隔。
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="fruitlist">
-
<xs:simpleType>
-
<xs:list itemType="fruitType"/>
-
</xs:simpleType>
-
</xs:element>
-
<xs:simpleType name="fruitType">
-
<xs:restriction base="xs:string">
-
<xs:enumeration value="apple"/>
-
<xs:enumeration value="pear"/>
-
<xs:enumeration value="peach"/>
-
</xs:restriction>
-
</xs:simpleType>
-
</xs:schema>
xml实例:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<fruitlist>apple</fruitlist>
-
<?xml version="1.0" encoding="UTF-8"?>
-
<fruitlist>apple pear</fruitlist>
以上的实例都可以通过验证。
7、联合类型(union)
联合类型所定义的元素或属性可以含有多个原子值。
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="font"> <xs:simpleType> <xs:union memberTypes="color sizelist"/> </xs:simpleType> </xs:element> <xs:simpleType name="color"> <xs:restriction base="xs:string"> <xs:enumeration value="red"/> <xs:enumeration value="green"/> <xs:enumeration value="blue"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="sizelist"> <xs:list itemType="size"/> </xs:simpleType> <xs:simpleType name="size">
-
<xs:restriction base="xs:string">
-
<xs:enumeration value="9px"/>
-
<xs:enumeration value="10px"/>
-
<xs:enumeration value="12px"/>
-
</xs:restriction>
-
</xs:simpleType> </xs:schema>
xml实例:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<font>blue</font>
-
<?xml version="1.0" encoding="UTF-8"?>
-
<font>10px 12px</font>
-
<?xml version="1.0" encoding="UTF-8"?>
-
<font>blue 12px</font>
以上都可以通过验证。
二、XML属性
简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作复杂元素来定义,属性本身是作为简易类型定义的。
-
<xs:attribute name="id"/>
属性的类型和元素一致。
三、Schema限定
1、枚举限定
具体见上面的。
2、限定长度(minLength,maxLength)
Schema定义:
-
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="2"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
注意:无论中文字符还是英文字符,都是当做一个字符来看待。
3、取值范围(minInclusive,maxInclusive,minExclusive,maxExclusive)
-
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="mark"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:maxInclusive value="100"/> <xs:minInclusive value="0"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
定义mark必须在[0,100]之间。
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
<xs:element name="mark">
-
<xs:simpleType>
-
<xs:restriction base="xs:integer"> <xs:maxExclusive value="100"/> <xs:minExclusive value="0"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
定义mark在(0,100)之间,不包括0和100.
4、小数位数限定(totalDigits,fractionDigits)
-
<?xml version="1.0" encoding="UTF-8"?>
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="price"> <xs:simpleType> <xs:restriction base="xs:decimal"> <xs:totalDigits value="8" /> <xs:fractionDigits value="3"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
totalDigits定义总位数,fractionDigits定义小数部分的位数。
5、模式匹配(pattern)
XML 架构正则表达式与 pattern 方面一起使用,提供对符合定义的模式的字符串的约束或限制。
-
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="email"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
四、元素的默认值和固定值
1、默认值(default)
元素的默认值是在Schema中预先设定元素内容,当元素内容为空时,处理器会将该元素的值当做预设值。
-
<xs:element name="elementName" type="eleType" default="defaultValue"/>
默认值是在验证的时候设定其默认值,并不是真正改变xml的文本。
2、固定值(fixed)
固定值限定XML出现时,其值必须和固定值相等。
-
<xs:element name="elementName" type="eleType" fixed="fixedvalue"/>