XML技术预览——XML技术系列讲座(2)
北京邮电大学 张剑
应用与开发
显示XML
XML文档本身只描述数据内容,它的显示功能由样式单来完成。利用样式单技术时,输出平台不局限于显示器,可以是打印机、绘图仪或者是多媒体播放器。使用独立的样式单文件制定显示格式的一大优势在于:对同一份数据文件可以制定不同的样式风格,应用在不同的场合,使数据能够更合理、更有针对性地表现出来,提高了数据的重用性。
目前,W3C正式推荐的样式单标准有两种: 一种是层叠样式单CSS(Cascading Style Sheets);另一种是可扩展样式单语言XSL。
CSS最初是用于制定HTML文档显示格式的,现在也可用来对XML文档进行简单的样式规划。CSS在HTML中的应用极为广泛,但它在文本置换、依据文本内容而决定显示方式、对数据进行排序等智能化的显示功能上略显不足。
而XSL则较好地解决了CSS的这些问题,它最常用的功能是将XML的置标转换成为HTML的置标并显示输出。而且XSL还可以将XML文档向任何其他格式的结构文档进行转换。这种功能在B2B的商务模式中有着很好的应用前景。
XSL利用模式匹配的方法,选择XML文档中需要处理的元素/属性,再针对这些特定的对象制定相应的转换规则。借助XSL,我们还可以添加新的元素/属性,对所有元素/属性进行重新排序、循环处理、条件判断等程序化的控制,使其适应各种复杂的需求。
在XML文档中引用XSL的格式如下: <?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?>
一个XML文档只能引用一个XSL样式单。XML解析器在处理XML文档时,遇到处理指令后,会载入指定的XSL样式单,然后根据其中的规则进行相应的转换处理。
绑定XML
Web服务器与客户机之间的数据传递方式有三种: HTML页面、XML文档以及XML数据岛。其中,XML数据岛通过特定的标签把XML数据直接嵌入到HTML文档中。采用数据岛作为交互手段,不仅可以使数据具备一定的语义信息,同时还能保持HTML原有的一些特色,如利用用户端脚本程序实现动态信息交换等。
XML数据岛的实现方法是在HTML文档中使用<XML>标签。代码的嵌入方式有两种: 直接嵌入(如例1)和外部引用(如例2)。
例1:
<XML ID=“MyXMLData”>
<?xml version=“1.0” ?>
……XML definitions……
</XML>
例2:
<XML ID=“MyXMLData” SRC=“http://www.microsoft.com/MyXMLData.xml”>
</XML>
在插入数据岛之后,就可以把XML中的元素同HTML元素链接在一起,利用HTML的表现手法显示XML数据,这种链接关系被称为绑定。绑定的方式按照HTML元素的性质可以分为两种:单值对象和表格对象。
单值对象的数据绑定需要在HTML元素中设置DATASRC属性和DATAFLD属性。DATASRC属性是区分XML数据岛对象的唯一标识,并且必须加上前缀“#”;DATAFLD属性则标识了数据岛中的元素对象。例3就是把一个HTML文本输入框与<salary>元素进行了绑定。
例3:
<INPUT TYPE=“TEXT”
DATASRC=“#MyXMLData”
DATAFLD=“salary”>
至于表格对象,主要是与HTML中的<TABLE>标签绑定。一般地,可以借助DSO(Data Source Object,数据源对象)等ActiveX控件更方便、有效地处理表格数据。具体使用方法在以后的内容中将做详细介绍。
访问XML
Document Object Model(文档对象模型)简称为DOM,是对Web文档进行应用开发、编程的应用程序接口(API),是W3C公布的一种跨平台的、与语言无关的接口规范。
DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:
● 描述文档表示和操作的接口;
● 接口的行为和属性;
● 接口之间的关系以及互操作。
DOM对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有个体都可以用对象模型表示。整个文档的逻辑结构类似一棵树,生成的对象模型就是树的节点,每个对象同时包含了方法和属性。
利用DOM,开发人员可以进行动态地创建XML文档、遍历结构、添加/修改/删除内容等操作。DOM面向对象的特性,使人们在处理和XML解析相关的事务时节省大量精力,是一种符合代码重用思想的强有力编程工具。
验证XML
XML文档必须严格遵守语法规范,即都必须是“格式良好的”。同时,XML文档还应当符合语义方面的规范,即是“有效的”。对XML文档有效性的检查称为对XML的“验证”(Validation)。
“格式良好的”是对XML文档最基本的要求。凡是“格式良好的”XML文档都可以被XML解析器解析,进而生成对象树,以便接受进一步的处理。而且“有效的” XML必定是“格式良好的”。在此基础上,还要遵守DTD或XML Schema的语法规定,只有这样才能保证XML文档的易读性,同时还能充分地体现数据信息之间的关系,从而更好地描述数据。
DTD可以定义XML文档的词汇和语法。利用正则表达式,DTD除了可以说明XML文件中哪些元素是必需的、哪些是可选的、元素所能包含的属性等元素本身信息外,还可以描绘元素之间的结构信息。比如,某个元素可以嵌套哪些子元素、子元素的个数以及出现次序、是否可选等等。
典型的DTD格式如下:
● 以DOCTYPE声明为起始标志,告诉解析器以下内容属于DTD;
● 位于DOCTYPE后的DTD名称,必须与XML文档中的根元素完全一致,后面再跟着一个“[”号,接下来才是DTD正文。
DTD有两种使用方式: 内嵌式(如例4)和引用式(如例5)。它们在XML文档中的位置都必须位于根元素出现之前。
例4:
<?xml version=“1.0”?>
<!DOCTYPE employees [
……ELEMENT and ATTLIST definitions……
]>
<employees>
……XML data……
</employees>
例5:
<?xml version=“1.0”?>
<!DOCTYPE employees SYSTEM “Employees.dtd”>
<employees>
……XML data……
</employees>
目前,DTD是W3C推荐的验证XML文档有效性的唯一正式规范,但它也有着许多不足:
● DTD过于复杂,要熟悉它的语法、标记集合需要一定的时间和精力,而且DTD采用的是非XML语法规则,不能用XML工具进行操作处理;
● DTD对数据类型定义支持不够,所定义的数据类型有限,并且都是针对属性而设立,无法满足电子商务等Web应用所需要的丰富数据类型;
● 扩展机制复杂,也很脆弱,最大的弊病在于不能表达元素之间的相互关系;
● DTD不支持名称空间的机制。
以上种种缺陷,促使W3C组织致力于寻求一种新的机制来取代DTD。在众多的标准之中, Microsoft公司为主提出的XML Schema较为引人注目。它具有完全符合XML语法、丰富的数据类型、良好的可扩展性以及易被DOM等XML解析器处理等优点。
最后介绍一个用于XML验证的小工具:xmlint.exe。它可以用来验证XML文档是“格式良好的”以及“有效的”,用法如下:
xmlint c:/my_xml/*.xml
<!--验证所有XML文档是否是“有效的”-->
xmlint -w c:/my_xml/*.xml
<!--仅验证是否是“格式良好的”-->
可以访问下面的网址下载该软件: