8.1 XML 概述
可扩展标记语言(xml)是标准通用标记语言(SGML)的一个子集;可以用XML来开发一种标记语言,它的元素和属性多是为专门行业和产业而定义的。
支持统一字符编码 UCS,使得 XML 成为了国际标准,XML 和 HTML 都支持 样式表(style sheet)。
8.1.2 标签语法
XML 元素的结构与 HTML基本相同,使用尖括号来界定标签,但二者相同点也就仅此而已。
与 HTML 不同,几乎所有的 XML 标签 都是大小写敏感的,主要是满足 XML 国际化的设计目标和简化处理过程的需要。
非英语字母可能没有对应的大小写,合并会存在许多缺陷。
1、字符
XML 指定的字符 均在16位的 Unicode 2.1 字符集。
2、命名
XML 命名必须以字母、下划线或冒号 开头,后面跟着的是 有效命名字符(数字、减号、点)。
实际应用中不应该使用冒号,除非是用作命名空间修饰的分隔符。
字母并非局限于 ASCII 码,这一点是非常重要的。
8.1.3 文档部分
格式正规的 XML:
1、一个可选的序言(prolog)
2、文档的主体(body)
3、可选的“繁杂”的尾声(epilog),包括:注释、处理指令(Processing Instruction,PI) 和/或 紧跟在元素后面的 空白。
8.1.4 元素
元素是 XML 标签的基本组成部分。
元素使用标签(tag)进行分隔:尖括号围住元素类型名。每一个元素 都必须 由一个起始标签 和 一个结束标签 分隔开。
空元素<WebService></WebService>
只是指定一个点,而不是提供一个包容器,空元素可以用缩略形式表示,起始和结束 标签的混合体。
<WebService/>
文档元素,每个文档 有且只有一个 根节点,称为 文档实体(document entity) 或 文档根(document root),它们的根被称为 文档元素(document element)。
XML 对元素 必须正确地嵌套。
如果字符串中包含单引号,分隔符必须使用双引号,反之亦然。
8.1.5 字符数据
字符数据就是任何不是标记的文本,小于号、大于号、&号 是标记分隔符,因此他们绝不能以字符串的形式出现在字符数据中(CDATA部分除外),必须使用转义字符 “&It;”等。
8.1.6 属性
元素是 XML 中的名词,属性是它的形容词。
attribute name = "attribute alue"
attribute name = 'attribute alue'
起始标记或空标记中 属性只允许有一个实例存在。
非法的:<img src="abc.jpg" src="edf.jpg">
XML 数据中,只有 4个字符 可以作为 空白使用,09 水平指标(HT),0D 回车(CR),0A 换行(CF),20 空格。
8.1.7 注释
<!--comment text-->
8.1.8 CDATA 部分
是一种用来包含文本的方法,对希望在自己的文档中 包含 XML 标记的使用举例 的作者来说是最有用的。
使用这些部分时 XML 几乎所有的优势都丧失殆尽。
<![DATA[...]]>,“...”可以是任何字符串,只要不包含字符串“]]>”。
8.1.9 格式正规的文档
元素和元素之间唯一的直接关系就是 父子关系;
兄弟关系是通过数据结构推断出来的,既不直接也不可靠,因为元素可能被插入到 某个元素和它的一个或多个子元素之间。
数据对象 如果满足下列条件 就是各市正规的文档。
1、语法合乎 XML 规范。
2、元素构成一个层次树,只有一个根节点。
3、没有对外部实体的引用,除非提供了 DTD。
任何 XML 解析器 发现 不是个是正规的结构,就报告一个“致命”错误,致命错误不一定导致解析器终止操作,但它不再会以正常的方式向应用程序传递字符数据 和/或 XML结构。
8.2 XML 命名空间
8.2.1 命名空间
XML 命名空间 是 解决多个 义性和名字冲突问题的方案。
命名空间是一组具有结构的名称的集合。
8.2.2 定义和声明 命名空间
命名空间 推荐标准为我们提供了 xmlns属性,属性值就是 URI。
命名空间前缀经常被提及为前缀,而名称本身是基本名。
默认的命名空间(没有声明别名的,形式为 xmlns="..."),在声明作用域里 所有没有经命名空间前缀修饰的 名称 被假定属于默认的命名空间。
8.3 DTD
一个 XML 文档是有效的,则它必须满足:文档 和 文档类型 相关联。
8.3.1 什么是 DTD
DTD 文档类型定义。
主要 用来查看 XML 文档的格式,出现在 XML 文档的序言中,DTD 声明不是必须出现的。
DTD 中 主要定义以下几个方面的内容:
1、元素声明。
2、实体声明。
3、属性的种类。
8.3.2 为什么引入 DTD
提供一种验证的手段,对 XML 来说是一大贡献,确保 XML 文件确实地遵守了 指定的格式,而这个格式可能是 一个 标准,或者是数据交换双方 所共同定制 的 协议。
实现了 文件格式 的统一化,提高了文件的重用性。
使用 DTD 进行验证,增加了操作时间。
8.3.3 DTD 的声明
略。
8.3.4 元素的声明
略。
8.3.5 实体的声明
实体(entity)是一些预先定义好的数据。
存储部位,内部实体,外部实体;
组成内容,可分解实体,不可分解实体。
引用方式,一般型实体,参数型实体。
不同类型的实体声明和使用方法略有不同。
略。
8.3.6 属性的声明
良构 XML 文档中,属性只要满足命名规则就可以了,但是在一个有效的 XML 文档中,属性要经过 DTD 的属性声明。
DTD 声明中,属性的声明语法可以归纳为如下形式:
<!ATTLIST 元素名称 属性名称 属性类型 属性默认值类型>
元素名称指的是 属性所属的元素名称。
8.4 XML Schema
DTD 尽管进行了很大的简化,但还是一门 风格 和XML完全不同的语言,而 schema 文档是一种特殊的 XML 文档,容易学习和使用。
DTD 的另一个缺点是 数据类型相当有限。DTD 中根本不提供 数值数据 类型。
一个 XML 文档只能使用一个 DTD 文档,schema 则采用了 名域空间的机制,使得一个 XML 文档可以调用多种 schema 文档。
8.4.1 逻辑 XML Schema 的文档结构
略。
8.4.2 元素的定义
略。
8.5 可扩展样式表语言
(eXtensible Stylesheet Language,XSL)是描述 XML 文档样式信息的一种语言,W3C 制订。
XML 的一个优点就是 形式与内容相分离,XSL 就是它的两种样式表单之一,
另一种是 层叠样式表(CSS),是一种静态的样式描述格式,其本身不遵从 XML 的语法规范。
而 XSL 是一个 XML 文档。
是 XML 的一种具体应用。
它有两大部分组成:
第一部分描述了 如何将 XML 文档进行 转换、转换为可浏览或可输出的格式;
第二部分定义了 格式对象(Fomatted Object,FO)源树转换为可以显示的结果树,称为树转换,按照FO分析结果树,产生一个输出结果,这个过程称为 格式化。
转换树 日趋成熟,已从 XSL 中分离出来,另取名为 XSLT(XSL Transformations),现在一般所听说的 XSL 大多是指 XSLT。
一同退出的还有 配套标准 Xpath(XML Path Language,XML 路径语言)
在 XML 中 声明 XSL 样式单:
<?xml-styleshee type = "text/xsl" href = "mystyle.xsl" ?>
XSL 在网络中的应用大体分为两种模式:
1、服务器端转换模式
XML 文件下载到 浏览器前先转换成 HTML。
1.动态方式,接到转换请求时再进行实时转换。
2.批量方式。
2、客户端转换模式
XML 和 XSL 文件都传送到客户端,浏览器必须支持 XML+XSL 的工作方式。
8.5.2 XSLT 的常用语法和函数
略。
8.6 其他相关规范
8.6.1 XPath
采用简洁的、非 XML 语法,基于 XML 文档的 逻辑结构,在该结构中进行导航。
XPath 表达式 通常出现在 URL 和 XML 属性值里。
XPath 将 XML 文档描绘为 树或节点 的模型,节点的类型有 根节点、元素节点、属性节点、文本节点、注释节点、名称空间节点、处理指令节点 7种。
XPath 规范定义了两个主要部分:一部分是表达式语法,另一部分是一组名为 XPath核心库 的基本函数。
指向某个 XML 文档中一个特定节点的路径 由三部分信息构成:一个轴类型、一个节点测试 和 谓词。
轴类型 有多种,指定所选节点和环境之间的关系。节点测试 查找什么类型的节点,测试包括通配符“*”、text()、node()、comment()、processing-instruction()等。
谓词以“[”开始,以“]”结束,谓词通过使用内部函数来 过滤不需要的节点。
<轴>::<节点测试>[<谓词表达式>]
8.6.2 XLink 和 XPointer
XLink 指定一个文档如何连接到另一个文档,XPointer 指定文档内部的位置,都是基于 XPath 推荐标准。