-- 作者:lmxalqb -- 发布时间:2006-3-31 22:29:58 -- XML学习笔记(学习XML语言必读)
Chapter 1. XML简介XML(eXtensible Markup Language,可扩展标记语言)是SGML的一个子集,但比SGML简单,用以创建可相互转换的结构化文本文档和数据文档。下面说明一下与XML相关的一些概念。
XML文档是什么?它有时是一个文件,有时是关系数据库中的一条记录,有时是由Object Request Broker(对象请求代理程序)传送的一个对象,有时是到达网络接口的一个字节流。XML文档可使不同系统、不同平台的数据实现统一接口,这就是XML 真正的威力所在。下面列举几个使用XML的领域:
XML不是什么?
| ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:30:14 --
Chapter 2. XML语法Table of Contents 创建一个简单的index.xml文档: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="basic.xsl"?> <basic>Hello World</basic> 下面创建一个名为basic.xsl的XML样式表(XSL),以便在浏览器中显示XML文档内容: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>a basic stylesheet</title> </head> <body> <xsl:value-of select="/" /> </body> </html> </xsl:template> </xsl:stylesheet> 接着在浏览器中打开index.xml文档,则可显示“Hello World”。上面两个文档都是合法的XML文件,具体的语法规则下面会详细介绍,上例可先给大家一个感性的认识。 合法的XML文档可有种意思,一个是良构文档(well-format),即符合XML规则书写的文档;另一种是有效文档,是已验证符合一个DTD的文档。 2.1. 基本语法规则
| ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:30:28 --
2.2. 良构XML文档和有效XML文档符合XML语法规则的XML文档称为良构文档,这些规则如下:
通过某个DTD或Schema验证的文档称为有效XML文档。 2.3. XML文档的组成
| ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:30:49 --
2.4. XML文档树XML文档是一种结构化的文档,可用树的形式表示出来。树是一种由节点和分支组成的简单结构,两个节点间由分支连接。上端的节点称为父节点,下端的 节点称为子节点。一个节点如果没有父节点,则称为树的根节点(根),每个树必须有且只能有一个根节点。一个节点如果没有子节点,则称为树的叶节点。只有一 个节点的树也是允许的。 由于XML可自定义标签,所以每个人定义的标签集都会不同,如果没有一套标准来规定标签的定义原则,则应用程序就不能对XML文档进行处理。解决该 问题的方案采用DTD,DTD(Document Type Definition,文档类型定义),用于定义XML文档的编写规则。如哪些元素可出现在文档中,及元素的内容和属性的要求等。应用程序会利用这个 DTD对文档进行检验,符合DTD约束规则的XML文档称之为有效文档,可以进行下一步处理,否则会报错,应用程序可捕获该错误进行相应的异常处理。检验 过程是可选,这要视具体应用而定。 3.1. 文档类型声明要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如: <?xml version="1.0" standalone="no"?> <!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd"> <portal> <name>Jims</name> <email>Jims@163.com</email> <email>Jims@21cn.com</email> </portal> 文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档的位置。portal.dtd的内容如下: <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> 上面的内容也可直接写到XML文档内,这种dtd声明方式叫内部dtd子集,如: <?xml version="1.0" standalone="no"?> <!DOCTYPE portal [ <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <portal> <name>Jims</name> <email>Jims@163.com</email> <email>Jims@21cn.com</email> </portal> 如果dtd位于XML文档外,则叫外部dtd子集。我们可以结合内外dtd,共同组成一个dtd来为XML文档作验证。如: <!DOCTYPE portal SYSTEM "external.dtd" [ <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> 注意,使用内外dtd时,这两个dtd要互相兼容,不能有冲突。 3.2. 元素声明上节文档类型声明中的每一项都是元素声明,定义了每个元素的约束。元素声明的格式为: <!ELEMENT element_name (content_model)> 有效文档中使用的每个元素都必须在文档的DTD中用元素声明进行声明。element_name可是任何合法的XML名称,content_model(内容模型)指定元素可以或必须包含的子元素以及子元素的顺序。下面具体介绍内容模型的内容。
3.3. 属性声明一个有效的XML文档,必须对元素的属性进行声明。使用ATTLIST声明来完成,一个ATTLIST可以为一个元素类型声明多个属性。 <!ATTLIST image src CDATA #REQUIRED> 上例声明image元素必须有一个src属性,该属性的值是字符数据。可用ATTLIST声明为一个元素声明多个属性,如: <!ATTLIST image src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED alt CDATA #IMPLIED > 上述声明指出src、width、height属性是必须的,alt属性是可选的。 | ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:31:30 --
3.3.1. 属性类型
3.3.2. 属性缺省值每个ATTLIST声明除了要提供一种数据类型外,还要声明属性的缺省行为。
3.4. 实体
| ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:31:49 --
Chapter 4. XML名称空间
Chapter 5. XHTMLXHTML是W3C推荐的一种标准,它定义了一种与XML兼容的HTML版本。XHTML文档是一个有效的XML文档,所以编写格式比HTML严格。如果需从HTML文档转换成XHTML文档,需作以下更改:
下面是一个标准的XHTML文档的示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns:"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>xhtml example</title> </head> <body> ... </body> </html> 由HTML转到XHTML是一种枯燥而乏味的工作,现在有一种叫tidy的开源工具可帮我们完成大部份的工作,它是一个C程序,使用方法如下: % tidy --output-xhtml yes test.html test.xml XHTML 1.1把XHTML的三种DTD分成独立模块。我们可根据实际情况包含或省去某些模块。这些模块是:
| ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:32:22 -- 样式表可帮我们解释XML文档中各元素的具体意思,所以通过样式表可直接在浏览器上显示XML文档。目前主要的样式表语言有:
在XML文档在序言部分通过xml-stylesheet处理指令可指定关联的样式表。xml-stylesheet指令必须有一个href属性和 type属性。href指向样式表的URL,type指定样式表的MIME类型:对CSS为text/css,对于XSLT为text/xml或 application/xml。下面是一个简单的使用样式表的XML文档: <?xml version="1.0"?> <?xml-stylesheet href="test.css" type="text/css"?> ... 除以上两个必须的属性外,还有4种可选属性:
样式表现在已成为Web应用中的一个关键技术,它的作用主要体现在以下三个方面:
6.1. CSS2CSS2是层叠样式表,它是一种排版技术,能让元素按特定的样式显示,如字体大小,颜色、布局等。在网页中有三种使用方法:
按作用域来分,有三类的样式表,分别是网页解释器样式表、作者样式表和浏览者样式表。网页解释器样式表也叫默认的样式表,当没有另外的样式表加载时使用。作者样式表就是网页设计师设计的样式表。浏览者样式表是浏览网页的用户在浏览器上另外设置的样式表。 CSS的基本数据类型
inherit参数值 <style> body {width: 600px;} .div1 {width: 120%;} .div2 {width: inherit;} 说明: div1的宽度是600px*120% div2的宽度继承父元素body的参数,是600px 选择符的作用是指定哪些元素使用哪些样式。选择符可以分为简单选择符和复合选择符两类,简单选择符是类型选择符、通用选择符加上零个或多个属性选择 符、ID选择符、伪类等组成。复合选择符是用">"和"+"号结合多个简单选择符组成。">"和"+"号两边要加上空格。下面介绍各种选择 符:
样式表的主要功能是指定同一个文件在不同媒体上按不同的样式显示。通过在种方式可指定不同媒体
!important规则会改变应用样式的优先级,有!important参数样式的优先级最高,会优先显示。 <style> h1 {color:red;} h1 {color:green !important;} </style> <h1>字体为绿色</h1> | ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:32:33 --
6.2. XSLTXSLT是XSL的一部份,它是XML的一种应用,指定将一篇XML文档转换成另一种XML文档的规则。XSLT文档即是一篇XML文档,也是一个 样式表,里面包含一系列的模板。XSLT处理器对输入XML文档中的元素和样式表中的模板进行比较,如果匹配,则将该模板的内容写入一个输出树中。完成处 理后,将输出树串行化成一篇XML文档或其它格式的文档,如HTML或者rtf。 XSLT几个关键术语
XSLT定义了35个元素,分为三类: 两个根元素
13个顶级元素,可直接作为根元素的子元素,包括:
20个指令元素
XSLT函数 6.3. XPathXPath是一种用来从文档树中选择节点和节点集的语言。从XPath的角度来看,共有七种节点:
CDATA部份,实体引用和文档类型声明不包括在内,XPath在所有这些项都并入文档之后才起作用。根节点和根元素是不同的两个概念,根节点包含整篇文档,包括根元素。 | ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:32:53 --
6.3.4. XPath表达式位置路径是XPath的一个最常用的表达式,用以标识XML文档的节点集。除此之上,XPath表达式还可返回数字、布尔和字符串。非节点集的 XPath表达式不能用于xsl:template元素的match属性中。它们用于xsl:value-of元素的select属性值或用于位置路径的 谓词中。 每个XPath位置路径可分为一步名多步,每步以“/”号分隔,如: room[//@name=$root]/date[year=$year and month=$month]/meeting 上下文节点即当前正在处理的节点,也就是位置路径定位的当前节点。上下文在XPath表达式计算前被创建,由XSLT处理器创建。处理每一步后,上下文都会改变。 位置路径中的步可分为三部份:轴(axis)、节点测试(note test)和谓词(predicate),它的写法如下: axis::note-test[predicate] 轴和节点测试之间用“::”分开,每个谓词由括号[]括起来。 要设计好一个位置路径,需确保在每一步选择最少的节点,使用最严格的轴,用最严格的节点测试。避免使用谓词,因为由轴和节点测试选择的节点集的每个节点都会用作谓词的上下文节点。对于位置路径的三步,最节省的是节点测试。 XPath中的所有数字都是8个字节的IEEE754浮点双精度类型,与java的double类型相同。可表示正无穷大、负无穷大和NaN(零除零)值。支持五种运算符,分别是加(+)、减(-)、乘(*)、除(div)、取余(mod)。 XPath中的字符串是Unicode字符,用单引号或双引号定界。可以使用=和!=对字符进行比较,也可用<,>,<=,>关系运算符,但比较的两个字符必须是数字,否则比较结果没有意义。 XPath中的布尔值常用于位置路径的谓词中,如/person[name="debian"]。布尔值还常用于xsl:if和xsl:when元素的test属性中。如: <xsl:template match="home"> <xsl:if test = ".=/'debian/' or .=/'redhat/'"> <xsl:value-of select = "." /> </xsl:if> </xsl:template> 6.3.5. XPath函数XPath还提供很多函数,用于表达式和谓词。XPath函数的返回值有四种类型,分别是:
6.4. XLinkXLink是一种基于属性的语法,用来在XML文档中添加链接。XLink链接可以是单向的,如HTML中的A元素,它也可以是双向的,在两个方向 上链接两篇文档,因此能够从A到B或从B到A。每个XLink元素必须具有一个xlink:type属性,指出连接类型。属性xlink:href指向所 链接的资源URI。下面是一个简单链接的示例: <test xmlns:xlink = "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "http://www.ringkee.com/xml.html"> <author>Jims</author> <date>2005/02/18</date> </test> xlink:type属性类型共有六种,分别是:simple,extended,locator,arc,title,resource。 xlink:show属性可告诉浏览器或应用程序在激活链接时应该做什么,它有五种可能的动作,分别是:
xlink:actuate属性可告诉浏览器何时显示链接,它有四种可能值:
一个和HTML中的A元素作用一样的示例: <test xmlns:xlink = "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "http://www.ringkee.com/xml.html" xlink:actuate = "onRequest" xlink:show = "replace" > <author>Jims</author> <date>2005/02/18</date> </test> 一个在页面嵌入图像的示例: <image xlink:type = "simple" xlink:actuate = "onLoad" xlink:show = "embed" xlink:href="http://www.ringkee.com/flower.png" width = "320" height = "240" /> xlink:actuate和xlink:show是可选的。 xlink:title和xlink:role属性可指定资源之间的描述,xlink:title包含少量描述远程资源的文本,xlink:role包含URI,指向资源的较长描述。 | ||||
-- 作者:lmxalqb -- 发布时间:2006-3-31 22:33:07 -- 分析XML文档可通过程序来做,分析器有两大类,一种是事件驱动的,一种是基于树模型的。
7.1. 分析器工具现有的分析器种类有上百种,但常用的是两个标准的工具库,一个是XML简单API(SAX,Simple API for XML)和文档对象模型(DOC,Document Object Model)。SAX是事件驱动分析器的标准,而DOM是基于树的分析器标准。另外,Expat虽然不是标准,但它是脚本语言中处理XML时最常用的分析 器。Expat由James Clark编写,是事件驱动分析器。 7.2. Unicode计算机并不能正真理解文本内容,它无法识别诸如a,b,c这类的字母,更不用说中文了。计算机所能理解的只有数字,如60,80等。字符集 (character set)规定了字母到数字的映射关系,如65代表大写字母A。65称为码点(code point),字符编码(character encoding)决定码点如何用字节表示。是用多了节还是单字节,高字节位表示什么,低字节位表示什么。 不同国家使用不同的语言,不同程序使用不同的编码规范,在进行世界范围内的数据交换就要统一表示数据的字符编码规范。传统的ASCII字符集只定义 了127个字符,其中前31个是控制符。127位之后的字符随平台不同而不同。大多数平台只能表示前127位,单字节(8位),使得字符集中最多只能提供 256个字符。这些标准字符称为罗马或拉丁字符集,用ASCII来表示中文、日文是远远不够的。 为了解决字符集问题,出现了Unicode字符集。它可用多字节格式编码字符,目前标准允许2字节字符,支持65536个不同字符。标准的Unicode字符集为Latin-1(或ISO-8859-1)。有关Unicode的介绍可访问Unicode的官方网站:http://www.unicode.org Unicode字符集为字符分配码点,即编号。这些编号可以用多种模式编码,如UCS-2、UCS-4、UTF-8、UTF-16。
在Unicode流行以前,出现了一系列处理特定语言的单字节字符集,ISO将14种这样的字符集标准化成ISO 8859标准,分别是ISO-8859-1~14。ISO-8859-15是ISO-8859-1的修订版本。这些字符集统称ISO字符集。 Cp1252是依赖于Windows平台的一种编码,是Windows的缺省字符集。该种编码不支持跨平台特性,尽量不要使用。 MacRoman是Mac OS使用的一种非标准、单字节编码。在非Mac平台下使用也会有问题,尽量不要使用。 在XML文档中,如果需输入编辑器不支持的字符,我们可用字符引用的方式,以十进制或十六进制给出它所代表的Unicode字符编号, 如њ(十进制)或者њ(十六进制)。字符引用可用于元素内容、属性和注释,不能用于元素名和属性名、处理指令或 XML关键字。如果有一些字符需经常使用,则我们可为这些字符定义实体,这样,在文档中就可方便地引用该实体了。专门定义字符实体的DTD我们可独立出 来,形成以.ent为后缀的外部DTD。在需要时使用外部参数实体引用将这些定义引入文档的DTD中。 XHTML 1.0 DTD包含有三个有用的字符引用实体可在文档中使用。
在XML文档中可以使用xml:lang属性规定元素内容采用的语言。这样就可在一篇文档中同时使用多种语言,这是XML跨平台和跨语言的重要特性 之一。如:xml:lang="CN-CHN"。语言代码是一个两个字母的语言代码,语言代码后还可跟一个子代码,语言代码可在这里找到http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt。下面是xml:lang属性声明的示例: |
XML学习笔记(学习XML语言必读)
最新推荐文章于 2023-12-29 11:00:00 发布