1.3 XML 的约束模式

1.3.1 格式良好的(Well-formed)XML

遵循 XML 基本语法规则和规范的 XML 文档就可以称之为 “Well-formed XML”,中文意思就是“格式良好的XML”。一个 XML 文档首先必须是格式良好的。为什么要强调这一点呢?因为处理 XML 文档的第一步就是解析 XML 文档,将解析出来的元素信息再交给下游程序 进行下一步的处理。用于解析 XML 文档的解析器程序对应的英文术语叫做 Parser。Parser 可以独立使用,也可以称为编辑软件或浏览器的一部分。

1.3.2 XML 的约束模式

我们先看一个 XML 文档:

<?xml version="1.0" encoding="GB2312"?>

<书架>

  <书>

    <书名>Java 就业培训课程</书名>

    <作者 姓名="张孝祥"/>

    <售价 单位="元">39.00</售价>

    <售价 单位="元">28.00</售价>

  </书>

</书架>

这个 XML 文档是格式良好的,用 IE 浏览器打开它不会出现任何问题。但是,一本书出现两种售价,这在逻辑上是说不通的,是不允许的。因此,XML 文档的约束模式就是定义出一套规则对 XML 文档中的内容作出限制。

XML 的约束模式定义了 XML 文档中允许出现的元素名(标记名)、元素中的属性、内容类型,以及元素之间的嵌套关系和出现顺序。如果把一个 XML 文件看做一个数据库中的表,那么 XML 约束模式就相当于数据库表结构的定义,在创建一个表时可以为其中的字段定义约束规则,XML 约束模式则是为 XML 文档标签定义约束规则。

如果没有为一个 XML 文档指定约束模式,那么该文档可以包含任何类型的标记;如果为一个 XML 文档指定了约束模式,那么它必须满足约束模式所规定的的结构、数据类型和数据关联等内容。

1.3.3 XML 的约束模式语言

XML 约束模式语言就是定义 XML 约束模式的语法规则。换句话说,XML 约束模式语言是用来创造(限制)XML 标记语言的语言。这种定义另一种语言的语言,我们称之为元语言。XML 约束模式语言就是一种元语言。约束模式通常都是在一个单独的文件中定义,我们称这个文件为模式文档。那么,依照模式文档编写的 XML 文档被称为实例文档,实例文档是真正包含 XML 数据的地方。

在这里,我们先了解一下 XML 约束模式语言有哪些?后面会详细介绍 XML 约束模式语言的语法规则。

先后出现的 XML 约束模式语言有 XML DTD、XDR、SOX、XML Schema 等,其中应用最广泛和最具有代表性的是 XML DTD 和 XML Schema。

XML DTD:XML Document Type Definition,文档类型定义;

XDR:External Data Representation,外部数据表示法;

SOX:(没有找到资料)

下面介绍一下 XML DTD 和 XML Schema。

XML DTD 是最早出现的一种 XML 约束模式语言,也是目前使用最广泛的一种 XML 约束模式,它用于定义 XML 文档中允许出现的元素名、元素数据类型和元素所能包含的内容类型、元素中的属性,以及元素之间的关系和出现顺序。

XML Schema 是对 XML 文档内容进行约束的另一种模式,其出现的目的是克服 DTD 的局限性,为 XML 文档提供丰富的语法结构。XML Schema 已经成为 W3C 的正式推荐标准,由于它比 DTD 具有更多功能和灵活性,而且采用的全是 XML 语法,XML Schema 已逐步呈现出替代 XML DTD 的趋势。

问题:XML DTD 的局限性在哪呢?学习了 XML DTD 之后思考这个问题。

1.3.4 有效的(Valid)XML

一个遵循 XML 基本语法规则,且符合为其指定的某个 XML 约束模式的 XML 文档就可以称之为 “Valid XML” 文档,即 “有效的 XML” 文档。一个 XML 文档必须是格式良好的,但并也不一定是有效的。

将一个 XML 文档和它所引用的 XML 约束模式进行比较分析,看其中的内容是否符合 XML 约束模式的过程叫做校验(validation),校验过程也是通过解析器程序软件(Parser)来处理的。根据能否对 XML 文档进行约束模式校验,可以将 XML 解析器分为两类:非校验类解析器和校验类解析器。非校验类解析器只检测 XML 文档是否是格式良好的,即是否遵循 XML 的语法规则;校验类解析器不但检测 XML 文档是否是格式良好的,还验证 XML 文档是否符合相应的约束模式。IE 浏览器属于非校验类解析器,它只检测 XML 文档是否是良好的,并不能验证 XML 文档是否符合某个约束模式。

====== 以上内容来源于 张孝祥老师的《深入体验Java Web开发内幕 》,记录下来,只作为个人读书笔记。===========

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值