文档定义模子为XML文档供应了范例,DTD的引入虽然处理了XML文档的范例化题目,但它文件花样范例和XML文件花样范例不一致,同时DTD供应的数据范例有限有时候没法满足行业的需求,所以引入了Schema。Schema情势能够肯定XML文档的元素和属性的构造、元素的递次、元素和属性的数据值,依据局限、罗列以及款式婚配等。
一、Schema初识
XML Schema言语也被称为XML Schema Definition (XSD),它的作用是定义一份XML文档的正当组件群(XML文档的构造),就像DTD的作用一样。 XML Schema以XML言语作为基础,也能够说XML Schema自身就是XML的一种运用。
1、Schema作用
XML Schema和DTD的作用一样,都是用来定义一个XML文档的构造的情势,那末为何有了DTD还要有XML Schema呢? 由于,XML Schema比DTD作用越发壮大。
Xml Schema 比 DTD的优越性:
(1)情势是可扩大的
(2)情势比 DTD 功用更雄厚且更有效
(3)情势是用 XML 编写的
(4)情势支撑数据范例
(5)情势支撑称号空间
(6)不须要在进修其他的言语
(7)能够直接运用XML编辑器来编写XML Schema
(8)能够直接运用XML剖析器来剖析XML Schema
(9)能够运用XML DOM来天真的操纵XML Schema
(10)能够运用XSLT手艺来转换XML Schema
2、对照进修
1.1 作用上
二者雷同,都是定义了一个XML文档的构造的情势。
1.2 用法上
二者作用雷同,然则语法上有些区分。Schema是DTD的扩大,一样支撑元素和属性的定义,而且定义的语法类似,但Schema能够给元素和属性增加响应的数据范例,同时还引入了全局和部分元素声明的语法,别的依据元素和属性的数据内容引入了简朴范例和庞杂范例。
所谓的简朴范例(SimpleType)和庞杂范例(ComplexType),它们自身并非细致的数据范例,它们只是对节点或许自定义范例的范例作一个笼统的申明。
也就是说Schema的引入使得情势的声明越发类似于我们运用的编程言语。
二、实例详解
2.1 Schema实例
清单1:User.xml文档构造
XML/HTML Code复制内容到剪贴板 <?xml version="1.0"?> <用户列表> <用户> <用户名>xx</用户名> <暗码>123456</暗码> <用户范例>1</用户范例> </用户> </用户列表>
清单2:运用全局组件情势来定义Schema,User.xsd
XML/HTML Code复制内容到剪贴板 <!-- 运用全局组件情势定义 --> <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户列表' type='userlist'/> <xs:complexType name='userlist'><!-- 运用complexType声明该范例为复合范例的元素 --> <xs:sequence><!-- 运用sequence申明下面的元素必需按递次在XML文档中显现 --> <xs:element name='用户' type='user'/> </xs:sequence> </xs:complexType> <xs:complexType name='user'> <xs:sequence> <xs:element name='用户名' type='user'/> <xs:element name='暗码' type='user'/> <xs:element name='用户范例' type='user'/> </xs:sequence> </xs:complexType> </xs:schema>
清单3:运用部分情势定义Schema,User.xsd
XML/HTML Code复制内容到剪贴板 <!-- 运用部分情势定义 --> <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户列表'> <xs:complexType> <xs:sequence> <xs:element name='用户'> <xs:complexType> <xs:sequence> <xs:element name='用户名' type='xs:string'/> <xs:element name='暗码' type='xs:string'/> <xs:element name='用户范例' type='xs:integer'/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
清单2和清单3的都定义了User.xsd,它们的作用是雷同的,都是为了考证XML文档的正当性,但定义的要领差别,清单2是运用全局组件的情势定义,而清单3运用的部分情势定义,细致的区分请看下文。
2.2 基础用法
上文中我们离别从作用和用法上对Schema和DTD进行了对照剖析,Schema和DTD最大的区分在于Schema引入了数据范例,别的的如元素和属性的声明等类似于DTD,在下面议论时就不再详述。
2.2.1 援用语法
当一个情势文件建立好今后,能够用它来考证某一个XML文档的有效性,也就是说磨练某个XML文档是不是遵照了情势文件的定义。 那末,XML文档怎样来援用一个情势文档呢?
Schema模子的援用更类似于前面所说的定名空间的运用要领,细致实例以下:
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <用户列表 xmlns:xsi=http://www.nishishui.org/2000/XMLSchema xsi:noNamespaceSchemaLocation='user.xsd'><!-- 援用user.xsd --> <用户> <用户名>我是谁</用户名> <暗码>123456</暗码> <用户范例>1</用户范例> </用户> </用户列表>
2.2.2 元素范例
(1)根据内容的差别分为简朴和庞杂元素,离别运用simpleType和complexType标示。
简朴元素:元素中内容只能是文本,不包括别的的元素和属性。
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='age'> <xs:simpleType><!-- 运用关键字simpleType声明简朴元素 --> <!--restriction关键字连系minInclusive和maxInclusive掌握了XML中元素可接受的值局限为0~100--> <xs:restriction base="xs:integer"> <xs:minInclusive value='0'/> <xs:maxInclusive value='100'/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
庞杂元素:元素中包括别的的元素和属性。它有四种范例,离别是空元素、只包括其他元素、只包括正文、包括正文又包括其他元素。
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='age'> <xs:complexType><!-- 运用关键字complexType声明庞杂元素 --> <!--sequence掌握XML内容中元素涌现的递次--> <xs:sequence> <!-- 定义细致的元素,这些都是简朴元素--> <xs:element name='firstname' type='xs:string'/> <xs:element name='lastname' type='xs:string'/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
(2)根据定义位置可分为部分和全局元素。
全局元素:<element>元素的父元素必需是<schema>;
部分元素:部分元素声明只能涌现在庞杂范例(<complexType>元素)定义内部。即<element>元素的父元素只能是<all>、<choice>或<sequence>元素。
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户' type='user'/><!-- 全局元素 --> <xs:element name='用户名' type='xs:string'/><!-- 全局元素 --> <xs:element name='暗码' type='xs:string'><!-- 全局元素 --> <xs:complexType name='user'> <!--sequence掌握XML内容中元素涌现的递次--> <xs:sequence> <!-- 定义细致的元素,这些都是简朴元素--> <!-- 定义部分元素,运用ref关键字援用,并运用minOccurs和maxOccurs制订元素涌现的起码和最多的次数--> <xs:element ref='用户名' minOccurs='0' maxOccurs='1'/><!-- 部分元素--> <xs:element ref='暗码' minOccurs='0' maxOccurs='1'/><!-- 部分元素--> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
以上就是XML中的情势Schema代码细致引见(图)的细致内容,更多请关注ki4网别的相干文章!