来源:远方网络 | 2006-2-28 | (有1900人读过)
举个例子说,假如你想找到所有的lowfat hamburger price元素。为了用标准的DOM API来完成这一切,你必须通过手工地书写代码遍历整颗树来找寻符合条件的元素(在本例中,条件是指在hanburger元素中lowfat=yes的price元素)。再看另一个例子,假设你想将所用的hamburger元素和相关的数据转换为简单的HTML表格以供用户交互使用。使用标准的DOM API,你得手工遍历整棵树来获得HTML表格中所需的数据。
我为了标准化及简化人们完成这些任务所需做的工作,W3C推荐使用XSL(Extensible Stylesheet Language)和一种叫做XSL Patterns的简单查询语言。
XSL Patterns
一个模式就是一个字符串,通过它来选取XML树中的节点。这样的选取取决于模式所关连的当前节点。元素的名字是最简单的模式,这个模式选取了当前节点所有具有该名字的子节点。例如,hamburger模式选取了当前节点的所有hamburger子节点。
模式的语法非常完备。它允许你标识某个指定元素在文档中所处的上下文(例如,price元素在hamburger元素之中),同时它还提供了强大的筛选句法,使得我们可以标识出符合给定条件的节点(例如,lowfat=yes)。为了找出一个hamburgers元素中的所有lowfat hamburger price元素,你可以使用以下的模式字符串:
/hamburgers/hamburger[@lowfat="yes"]/price
当某个模式被应用于给定的节点时,它仅返回符合指定模式的节点列表。这大大简化了开发者的操作,不再需要遍历整棵树。
MSXML 2.0对模式语法的支持和Extensible Stylesheet Language (December 18th Working Draft)中2.6节的定义是相同的。MSXML 2.0中的IXMLDOMNode接口提供了两个方法,SelectNodes和SelectSingleNode。这两个方法都以一个模式串为参数。例如,下面的一行代码将返回满足条件的所有price节点。
Set nodeList = rootNode.selectNodes("hamburger[@lowfat="yes"]/price")
XSL
XSL模式可以帮助我们标识一篇给定XML文档中的某些节点,但对这些节点的操作最终还是有赖于开发者来完成。XSL可以帮助我们简化完成通常XML任务的过程:将XML节点从一种格式转化到另一种格式。这种对格式转化的需求起源于Web开发者需要将他们的XML数据转化为HTML数据以供用户浏览。
实际上,XSL所能做得远比以上描述多得多。XSL能够有效的定义从一种XML格式到另一种XML格式之间的转换,这极大的增强了互操作性。假如某个人向你的系统发送了一篇XML文档,而你的系统不认识它所采用的XML词汇,你只要进行一次简单的XSL转换就可以得到自己熟悉的词汇。正是由于XML这种简单的特点,开发者才不用为了描述某种类型的数据而采用通用的词汇。
一个XSL文件中包含了一系列定义转换规则的声明模板。每一个模板都明确定义了怎样将源文档中的指定节点转换为输出文档中的节点(或其它类型的数据)的方法。你可以使用XSL模式来决定一个模板应用于一篇文档中的那些部分。
作为一个示例,下面转换hamburger XML文件:
<?xml version="1.0"?> <hamburgers> <hamburger lowfat="dream on"> <name>CowBurger</name> <description>Greasy and good.</description> <price>2.99</price> </hamburger> </hamburgers>
转换到HTML文件:
<html> <body> <h1>hamburgers</h1> <ol> <li>CowBurger, $2.99, Greasy and good.</li> </ol> </body> </html>
你使用的XSL文件如下:
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl "> <xsl:template match="/"> <html> <body> <h1>hamburgers</h1> <xsl:for-each select="hamburgers[@lowfat="dream on"]> <li><xsl:value-of select="name"/>, <xsl:value-of select="price"/>, <xsl:value-of select="description"/></li> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
注意到了吗,我们是怎样在不同XSL元素的match和select属性中使用XSL模式来标识元素集的?在<xsl:template>标签中定义了一组节点的转换规则。XSL使用了一套标准的XML词汇来定义转换的过程,是不是很有趣呢?
链接技术
很多人都认为,HTML真正强劲的地方在于它的锚元素。
<A HREF = "http://www.someserver.com">some link</A>
锚元素使开发者可以建立从一个HTML页面到另一个页面的链接,定义两个文档之间的关系。这给用户提供了一种从当前页面中获取更多相关数据的途径。同时,这也是用户在查询数据中所使用的典型方法。为了查找数据,他们浏览某一页面,同时他们在这篇该页面中可能会发现更符合他们要求的内容。而这些内容通过一个链接,存放在不同的页面上。
整个Web就是基于这样一个在不同的数据文件之间建立关系(链接)的基石上的。随着IT行业不断的向前发展,我们自然会想到用类似的机制来描述不同XML文档或是相同文档中不同元素之间的联系。
XLink
XML Linking 1.0 (XLink)是W3C主导的定义XML链接的语法。根据XLink 1.0文档的要求,一个XML链接,或XLink的描述信息,显式的指定了资源或部分资源之间的关系。在XLink中,我们并不涉及标示不同类型数据位置的方法(例如URIs、XPointers和图形坐标)。
这里是一个XML连接的简单例子:
<hamburger xml:link="simple" HREF = "http://fastfood.org/hamburger.asp"> </hamburger>
XPointer
在前面的章节中你已经读到,XLink需要依靠不同的机制来标识你想要链接的资源(例如统一资源标识符)。W3C推出了另一种叫做XPointer的机制用于构造XML文档的内部结构。具体地说,它决定了一篇XML文档中的元素、字符串或其它部分是否具有某个具体的标识。
一个XPointer包括一系列描述位置的术语,它们中的任何一个都指定了一个特定的位置信息,通常这样的位置信息总是和前一个术语所指定的位置信息相关联。每一个位置术语都有一个关键字(例如id,child,ancestor等等)和若干变量,诸如实例的序列号、元素类型或属性。看下面的例子:
child(2,hamburger)
指的是第二个类型为hamburger的元素。
其他XML相关的技术和词汇
目前为止我们所谈到的已经代表了XML的核心技术。可能你觉得这些东西已经足够了,但如果我们不深入下去对眼下一些正流行起来的XML相关技术和词汇作一些介绍的话,这篇文章探讨XML的文章就显得不是很完整了。目前,这些新技术正在W3C的开发小组的努力下一步步走向成熟。
MathML(Mathematical Markup Language)
MathML是一种用来描述数学符号、纪录其结构和内容的XML应用。MathML的目标是在Web上实现能像HTML处理文本一样,处理数学问题。下面是由W3C提供的的MathML例子。数学方程:
x2 + 4x + 4 =0
在MathML中可以用以下的XML词汇表示:
<apply> <plus/> <apply> <power/> <ci>x</ci> <cn>2</cn> </apply> <apply> <times/> <cn>4</cn> <ci>x</ci> </apply> <cn>4</cn> </apply>
SMIL
SMIL(Synchronized Multimedia Integration Language,它的发音和"smile"一样)是一种基于XML的表述多媒体演示的语言。SMIL允许将一组独立的多媒体对象整合为一个多媒体演示。作为另一种行业趋势,HTML+TIME依靠SMIL功能在你的HTML页面中加入多媒体"时间"特性。现在IE 5提供了一个HTML+TIME的实现。下面例子中的页面中包含了一个时间序列。位于时间段中的每一个P元素会等到前一个P元素消失后再出现。
|