xml schema 描述xml文档结构

来源:互联网 发布:淘宝真人秀大尺度 编辑:程序博客网 时间:2024/05/22 19:56

XML Schema 简介
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
什么是 XML Schema?
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XML Schema:
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值
XML Schema 是 DTD 的继任者
我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。
理由如下:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
XSD 如何使用?
XML Schema
下面这个例子是一个名为 “note.xsd” 的 XML Schema 文件,它定义了上面那个 XML 文档( “note.xml” )的元素:

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.w3schools.com"xmlns="http://www.w3schools.com"elementFormDefault="qualified"><xs:element name="note">  <xs:complexType>    <xs:sequence>      <xs:element name="to" type="xs:string"/>      <xs:element name="from" type="xs:string"/>      <xs:element name="heading" type="xs:string"/>      <xs:element name="body" type="xs:string"/>    </xs:sequence>  </xs:complexType></xs:element></xs:schema> 

note 元素是一个复合类型,因为它包含其他的子元素。其他元素 (to, from, heading, body) 是简易类型,因为它们没有包含其他元素。
对 XML Schema 的引用
此文件包含对 XML Schema 的引用:

<?xml version="1.0"?><notexmlns="http://www.w3schools.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3schools.com note.xsd">  <to>Tove</to>  <from>Jani</from>  <heading>Reminder</heading>  <body>Don't forget me this weekend!</body></note> 

XSD -<schema> 元素
<schema> 元素是每一个 XML Schema 的根元素。

<?xml version="1.0"?><xs:schema>......</xs:schema> 

<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.runoob.com"xmlns="http://www.runoob.com"elementFormDefault="qualified">......</xs:schema> 

xmlns:xs=”http://www.w3.org/2001/XMLSchema:显示schema中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema“。
同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:
targetNamespace=”http://www.runoob.com”:显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间:”http://www.runoob.com“。
xmlns=”http://www.runoob.com”:指出默认的命名空间是 :”http://www.runoob.com“。
elementFormDefault=”qualified”:指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
在 XML 文档中引用 Schema
此 XML 文档含有对 XML Schema 的引用:

<?xml version="1.0"?><note xmlns="http://www.runoob.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.runoob.com note.xsd"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note> 

xmlns=”http://www.runoob.com”:规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 “http://www.runoob.com” 这个命名空间。

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” :一旦您拥有了可用的 XML Schema 实例命名空间
xsi:schemaLocation=”http://www.runoob.com note.xsd”:您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
什么是简易元素?
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
不过,”仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。
定义简易元素的语法:

<xs:element name="xxx" type="yyy"/> 

此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。
最常用的类型是:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
实例
这是一些 XML 元素:

<lastname>Refsnes</lastname><age>36</age><dateborn>1970-03-27</dateborn> 

这是相应的简易元素定义:

<xs:element name="lastname" type="xs:string"/><xs:element name="age" type="xs:integer"/><xs:element name="dateborn" type="xs:date"/> 

简易元素可拥有指定的默认值或固定值。
当没有其他的值被规定时,默认值就会自动分配给元素。

<xs:element name="color" type="xs:string" default="red"/><xs:element name="color" type="xs:string" fixed="red"/> 

如何声明属性?
定义属性的语法是
<xs:attribute name="xxx" type="yyy"/>
在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。
实例
这是带有属性的 XML 元素:
<lastname lang="EN">Smith</lastname>
这是对应的属性定义:
<xs:attribute name="lang" type="xs:string"/>
属性的默认值和固定值

<xs:attribute name="lang" type="xs:string" default="EN"/>
<xs:attribute name="lang" type="xs:string" fixed="EN"/>

在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 “use” 属性:
<xs:attribute name="lang" type="xs:string" use="required"/>

原创粉丝点击