XSL

XSL

可扩展样式表语言
是一种用于以可读格式呈现XML(标准通用标记语言的子集)数据的语言。XSL是一种标记语言,表示如何将XML文档的内容转换成另一种形式的文档。标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。[1]
  • 中文名:可扩展样式表语言
  • 外文名:eXtensible Stylesheet Language
  • 适用领域:程序编写、数据库技术
  • 所属学科:
  • 外语缩写:XSL

定义

XSLT是一种基于模式匹配的语言。该方法首先通过构造转换树,将XML文档的结构信息和XSLT转换要求结构起来,然后从转换树建立流处理模型;扫描XML源文档,通过流处理模型,将一个XSLT转换程序转换成很多个事件处理器,对应于扫描过程中触发的每一类事件,都有一个对应的事件的输出片断被添加到已产生的结果文档后面;扫描结束后,即得到最终完整的结果文档。

用途

XSL在设计时有几个目标用途,这些用途使它成为某些开发情况下的完美解决方案,而对另一些开发情况则毫无用处。

XSL专门用于处理XML文档,并且遵循XML语法。因此,它只能在支持XML的应用程序中与XML结合使用。最合适使用XML和XSL的情况是:Web门户、新闻聚合器、社区网站或其它任何需要向各种设备及大量客户端提供信息的Web应用程序。

XSLT是一种基于模式匹配的语言。它会查找匹配特定条件的节点,然后应用相应的规则。因此,它不具备大多数编程语言的计算能力。例如,XSL无法在运行时更改变量的值。它不应该用于从使用复杂公式的动态数据源(例如在线商店)来计算值。Web编程语言更适于此用途。

XSL不能代替或补充CSS。它不应(也不能)用于设置HTML的样式。但是,您可以将其用于需要频繁重新设计可视化效果、频繁更换布局以及以灵活格式处理数据的网站。

XSL不是内容管理工具。它不应(也不能)用于更改XML文档的内容或者编辑信息。但是,您可以将XML和XSL用于需要处理几种不同格式文档的内容管理系统。

应用

数据库技术领域,具体为一种快速执行可扩展样式表单语言转换(XSLT)的方法。该方法首先通过构造转换树,将XML文档的结构信息和XSLT转换要求结构起来,然后从转换树建立流处理模型;扫描XML源文档,通过流处理模型,将一个XSLT转换程序转换成很多个事件处理器,对应于扫描过程中触发的每一类事件,都有一个对应的事件的输出片断被添加到已产生的结果文档后面;扫描结束后,即得到最终完整的结果文档。

该发明方法完全避免了现有转换引擎需要预先将整个源文档载入内存的缺点,减少了内存消耗,大大提高了执行效率。即使对于非常大的XML数据,也能通过一趟扫描完成转换过程。

一种快速执行XSLT转换的方法,其特征在于通过一个流处理模型来执行XSLT转换,具体步骤如下:

(1)首先通过构造转换树,将XML源文档的结构信息和XSLT转换要求结合起来,其步骤为:构造XML文档类型定义的DTD树T;考察XSLT转换程序L的每一条转换规则r,在T中找到r的匹配节点n;继续考察r的输出模板序列中的每一个元素o,如果o是一个常数字符串,为树T创建一个叶子节点n’,添加一条从n到n’的边;如果o是调用模板命令,从树T中找到o的选中节点n’,同样添加一条从n到n’的边;

(2)从转换树建立流处理模型,它是一个递归过程,其步骤为:对转换树的任一节点n,end(n),start(n)初始值为空串;如果n是叶子节点,则令end(n):=pcdata+end(n);以c1,c2,...,cp表示节点n下面所有来自于DTD树的孩子节点,以d1,d2,...,dq表示节点n下面所有来自于XSLT转换程序的孩子节点,如果d1是一个常数字符串节点,则令start(n):=start(n)+d1,并且设置计数器i为2,否则,设置计数器i为1;

当i不大于q的时候,重复以下步骤:假设c是位于从节点n到节点di这条路径上的n的孩子节点,如果从n到c的边没有被星号标记,并且di+1是常数串节点,则令end(c):=end(c)+di+1和i:=i+2,否则令i:=i+1;如果di+1是常数串节点,假设c′是位于从节点n到节点di+2这条路径上的n的孩子节点,则令start(c′):=di+1+start(c′)和i:=i+2,否则令i:=i+1;对每一个孩子节点dj,递归调用以上过程;

(3)扫描XML源文档,通过流处理模型,将一个XSLT转换程序转化成很多个事件处理器;在从头到尾读XML取源文档的过程中会触发很多事件,对每一类事件,都有一个对应的输出片断;最开始的时候,结果文档为空,随着对源文档的扫描过程的进行,相应事件的输出片断被逐渐添加到已产生的结果文档的后面;在扫描过程结束后,用户马上就可以得到最终完整的结果文档;其中,end(n)为元素结束事件的输出片段,start(n)为元素开始事件的输出片段,pcdata为当前叶子节点的PCDATA值。

相关词条

相关搜索

其它词条