xsd的语法



xsd的语法,

一、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关联后验证,得到以下的错误提示:

image

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验证,提示错误:

image

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验证,提示以下错误:

image

 

 

 

 

 

 

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验证,提示以下错误:

image

 

 

 

 

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验证,提示以下错误:

image

在枚举选项组中,定义重复的元素是无意义的,定义的顺序没有要求。

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”/>