XML Schema是以XML语言为基础的,它用于可替代DTD。
一份XML schema文件描述了XML文档的结构。 XML Schema语言也被称为XML Schema Definition (XSD)(XML Schema定义). 1.什么是XML Schema? XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的作用一样,一份XML Schema: 定义了可以出现在文档里的元素 定义了可以出现在文档里的属性 定义了哪些元素是子元素 定义了子元素的顺序 定义了子元素的数量 定义了一个元素应是否能包含文本,或应该是空的 定义了元素和属性的数据类型 定义了元素和属性的默认值和固定值 2.XML Schema 是DTD的“接任者” 我们认为XML Schema很快就会替代DTD在大多数的网络应用程序中被广泛使用。 XML Schema针对将来的额外内容是可扩展的 XML Schema内容比DTD丰富,作用也更大 XML Schema是以XML语言编写而成的 XML Schema支持数据类型 XML Schema支持名称空间(namespaces) 3.XML Schema是W3C定义的标准 XML Schema于2001年5月2日成为W3C推荐使用的标准在W3C 教程中你能阅读到更多关于XML Schema标准。
例如,我可以定义一个student的xml文档如下:
这是一个schema 文档的定义 student.xsd
1<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2<!--W3C Schema 由 XMLSpy v2006 U 创建 (http://www.altova.com)--> 3<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 4 <xs:element name="student"> 5 <xs:complexType> 6 <xs:sequence><!-- 以下的元素是顺序出现的--> 7 <xs:element name="name" type="xs:string"/> 8 <xs:element name="age" type="agetype"/> 9 <xs:element name="sex" type="sextype"/>10 <xs:element name="mobile" type="mobiletype"></xs:element>11 </xs:sequence>12 </xs:complexType>13 </xs:element>14 15 <!--定义一个简单类型 年龄 使它的最大值和最小值在0--150之间-->16 <xs:simpleType name="agetype">17 <xs:restriction base="xs:int">18 <xs:maxInclusive value="150"/>19 <xs:minInclusive value="0"/>20 </xs:restriction>21 </xs:simpleType>22 23 <!--定义一个简单类型 列出两个枚举型,只能是男或女-->24 <xs:simpleType name="sextype">25 <xs:restriction base="xs:string">26 <xs:enumeration value="男"></xs:enumeration> 27 <xs:enumeration value="女"></xs:enumeration> 28 </xs:restriction>29 30 <!--定义一个简单类型 列出正则表达式验证手机号码--> 31 </xs:simpleType>32 <xs:simpleType name="mobiletype">33 <xs:restriction base="xs:string">34 <xs:pattern value="13[0,2,9]\d{8}"></xs:pattern>35 </xs:restriction>36 </xs:simpleType>37</xs:schema>38
下面添加一个xml文件来引用这个schema:student.xml
1<?xml version="1.0" encoding="UTF-8"?>2<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\测试项目\XML_Traning\student.xsd">3 <name>tomin</name>4 <age>20</age>5 <sex>男</sex>6 <mobile>13242215110</mobile>7</student>
这时候当出现任何一个子元素与定义的不同时,就会报错。