疯狂XML学习笔记(7)-----------XML Schema
来源:互联网 发布:战友情歌 网络歌手 编辑:程序博客网 时间:2024/05/14 06:01
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
您应当具备的基础知识
在继续学习之前,您需要对下面的知识有基本的了解:
- HTML / XHTML
- XML 以及 XML 命名空间
- 对 DTD 的基本了解
如果您希望首先学习这些项目,请在 首页 访问这些教程。
什么是 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 支持命名空间
为什么使用XML Schema?
XML Schema 比 DTD 更强大。
XML Schema 支持数据类型
XML Schema 最重要的能力之一就是对数据类型的支持。
通过对数据类型的支持:
- 可更容易地描述允许的文档内容
- 可更容易地验证数据的正确性
- 可更容易地与来自数据库的数据一并工作
- 可更容易地定义数据约束(data facets)
- 可更容易地定义数据模型(或称数据格式)
- 可更容易地在不同的数据类型间转换数据
编者注:数据约束,或称 facets,是 XML Schema 原型中的一个术语,中文可译为“面”,用来约束数据类型的容许值。
XML Schema 使用 XML 语法
另一个关于 XML Schema 的重要特性是,它们由 XML 编写。
由 XML 编写 XML Schema 有很多好处:
- 不必学习新的语言
- 可使用 XML 编辑器来编辑 Schema 文件
- 可使用 XML 解析器来解析 Schema 文件
- 可通过 XML DOM 来处理 Schema
- 可通过 XSLT 来转换 Schema
XML Schema 可保护数据通信
当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的“期望值”。
通过 XML Schema,发送方可以用一种接受方能够明白的方式来描述数据。
一种数据,比如 "03-11-2004",在某些国家被解释为11月3日,而在另一些国家为当作3月11日。
但是一个带有数据类型的 XML 元素,比如:<date type="date">2004-03-11</date>,可确保对内容一致的理解,这是因为 XML 的数据类型 "date" 要求的格式是 "YYYY-MM-DD"。
XML Schema 可扩展
XML Schema 是可扩展的,因为它们由 XML 编写。
通过可扩展的 Schema 定义,您可以:
- 在其他 Schema 中重复使用您的 Schema
- 创建由标准类型衍生而来的您自己的数据类型
- 在相同的文档中引用多重的 Schema
形式良好是不够的
我们把符合 XML 语法的文档称为形式良好的 XML 文档,比如:
- 它必须以 XML 声明开头
- 它必须拥有唯一的根元素
- 开始标签必须与结束标签相匹配
- 元素对大小写敏感
- 所有的元素都必须关闭
- 所有的元素都必须正确地嵌套
- 必须对特殊字符使用实体
即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。
请考虑下面的情况:您订购的了 5 打激光打印机,而不是 5 台。通过 XML Schema,大部分这样的错误会被您的验证软件捕获到。
如何使用XML Schema
XML 文档可对 DTD 或 XML Schema 进行引用。
一个简单的 XML 文档:
请看这个名为 "note.xml" 的 XML 文档:
<?xml version="1.0"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>
DTD 文件
下面这个例子是名为 "note.dtd" 的 DTD 文件,它对上面那个 XML 文档的元素进行了定义:
<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>
第 1 行定义 note 元素有四个子元素:"to, from, heading, body"。
第 2-5 行定义了 to, from, heading, body 元素的类型是 "#PCDATA"。
XML Schema
下面这个例子是一个名为 "note.xsd" 的 XML Schema 文件,它定义了上面那个 XML 文档的元素:
<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.w3school.com.cn"xmlns="http://www.w3school.com.cn"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) 是简易类型,因为它们没有包含其他元素。您将在下面的章节学习更多有关复合类型和简易类型的知识。
对 DTD 的引用
此文件包含对 DTD 的引用:
<?xml version="1.0"?><!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">
<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>
对 XML Schema 的引用
此文件包含对 XML Schema 的引用:
<?xml version="1.0"?><notexmlns="http://www.w3school.com.cn"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3school.com.cn note.xsd"
><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>
本文借鉴w3Cschool
- 疯狂XML学习笔记(7)-----------XML Schema
- 疯狂XML学习笔记(8)---------schema 的简单类型
- 疯狂XML学习笔记(9)-------------Schema内置类型
- XML schema学习笔记
- XML Schema学习笔记
- XML schema 学习笔记
- XML-Schema学习笔记
- xml学习笔记(7)Schema约束
- XML Schema学习笔记(一)
- XML Schema学习笔记(二)
- XML Schema学习笔记(二)
- XML Schema学习笔记(一)
- XML Schema学习笔记(二)
- XML学习笔记(三) -- Schema
- 疯狂XML学习笔记(1)------------初识
- 疯狂XML学习笔记(12)------------XPath
- XML Schema学习笔记(一)
- XML Schema教程 学习笔记
- HttpClient使用详解
- iOS打包相关--遇到的问题
- 【zendframework+javascript】数据的传输
- 计算机网络中的物理层
- 服务器 Push 技术
- 疯狂XML学习笔记(7)-----------XML Schema
- Linux常用命令(一)
- java final 关键字
- android 实现画虚线的二维坐标
- 信息汇总
- 恋青春面膜招代理——威 616628874
- 日拱一卒(五十九)
- 使用 libevent 和 libev 提高网络应用性能
- 设计模式在游戏中的应用--代理模式(四)