技术开发 频道

XSLT标准库

    【IT168 信息化

    有一句古老的编程格言说:“优秀的程序员写优秀的代码﹔伟大的程序员偷别人的代码。”撇开伦理道德不谈,这句话道出了软件重用的重要性,用它来形容XSLT开发再贴切不过了。创建通用和可重用转换(Transformation)的能力对于一个XML项目的成功具有非常重要的作用。XSLT标准库(XSLTSL)是一个SourceForge(开发源码)的项目,目的在于提供一个标准的转换集合,方便开发者的使用。

    概述

    XSLTSL项目的目标似乎够简单的了:提供标准化的转换集合,让产品厂商可以将它们包在他们的软件之中,设计一种用于创建XSLT样式表(Stylesheet)的模型,并提供可以用于开发样式表的技巧。这些目标可能从表面上看似乎没什么意义,但其实它们具有非常重要的潜在价值。该项目根本性的目标是提供一种类似于C的标准库或者C++的STL(标准模板库)的东西。如果工具厂商们都包括这个库的话,那么开发者就能够更快速的开发,而不必亲自创建这些样式表,同时他们开发出来的产品还将具备在所有支持该库的工具之间的可移植性。不幸的是,他们也可能会失去一些在不支持该库的平台上的移植能力。

    该库提供了几类函数,包括字符串、结点、日期、时间、URI(统一资源标识符)以及XML标记等好几方面的函数。在这里面的每一类中,都包含有一些用来解决XML开发中可能遇到的许多常见问题的操作。

    字符串(String)函数

    字符串函数在XML中是很常见的,因为XML从本质上是说就是一个文本字符串。不仅文档文本是字符串,而且每个元素中的数据也都是字符串。字符串函数的价值在于它为生成更加匹配应用需求的新字符串提供了解析、重组和删除部分子串的能力。XSLTSL字符串函数包括的基本操作如大写、小写、camel-casing、提取子串、字符串替换和模式匹配等。

    许多遗留应用要求数据全以大写形式表达,特别是名字和地址等。下面是一个如何使用XSLTSL函数将一个字符串转换成大写的例子程序:

    <xsl:call-template name="str:to-upper">
    <xsl:with-param name="text">Brian Schaffner</xsl:with-param>
    </xsl:call-template>

    结点(Node)函数

    结点函数对XML文档中的结点进行操作。结点基本上是文档中粒度很小的部分(如一个元素或者一个备注)。XSLTSL只包括两个结点函数,分别用于判断结点的XPath定位和结点的类型。

    XPath函数用于把一个定位从XSLT语法转换成XPath语法。结点类型函数用于判断一个结点是元素类型、备注类型、处理指令,还是文本。
 
    日期(Date)和时间(Time)函数

    在使用计算机处理日期和时间数据的时候总会产生问题。因为表达日期和时间可以有许多不同的方式,建立标准一直很困难。幸运的是,XML提供了一种相当有预见性的格式表达日期和时间的粒度层次,如下:

    <date>
    <year>2002</year>
    <month>02</year>
    <day>15</year>
    </date>

    一旦给出这一信息,我们就可以按照自己喜欢的方式改换格式了。XSLTSL日期函数为此目的提供了format-date-time(格式化日期时间)。其它的日期时间函数还包括calculate-day-of-the-week、get-day-of-the-week-name、get-day-of-the-week-abbreviation、get-month-name、get-month-abbreviation、calculate-julian-day、format-julian-day和 calculate-week-number等。下面是调用get-month-name函数将“2”转换成二月(February)的例子程序:

    <xsl:call-template name="dt:get-month-name">
    <xsl:with-param name="month">2</xsl:with-param>
    </xsl:call-template>

    URI函数

    一个URI就是一个指向网络上某一地址(或资源)的标识符。它由影响着应用程序访问资源方式的好几部分组成。XSLTSL包含了几个解析和操作URI的函数。

    is-absolute-uri函数判断判断某一特定的URI是一个绝对的URI(如http://www.builder.com/index.html)还是一个相对的URI(如/index.html)。你可以分别使用get-uri-schema、get-uri-authority、get-uri-path、get-uri-query和get-uri-fragment函数提取出URI的某些片段。下面是如何从URI中抽取模式(Schema)的例子:

    <xsl:call-template name="uri:get-uri-scheme">
    <xsl:with-param name="uri" select="'http://www.builder.com'"/>
    </xsl:call-template>

    标记生成函数

    XSLT样式表常常用于创建XML文档输出和相关的标记信息。XSLTSL提供了几个函数,可以帮助生成XML标记。这些函数包括xml-declaration、doctype-declaration、element-declaration、attlist-declaration、attribute-definition、entity-declaration、quote-value、external-identifier、entity-reference、notation-declaration、cdata-section和as-xml等。

    创建一个新的DTD可能包括声明新的元素。下面是一个阐述如何声明包括年、月和日组成部分的日期元素的例子:

    <xsl:call-template name="markup:element-declaration">
    <xsl:with-param name="type">Date</xsl:with-param>
    <xsl:with-param name="content-spec" select="'(Year, Month, Day)'"/>
    </xsl:call-template>

    小结

    XSLTSL是一种很有价值的工具,它可以帮助开发者减少工作量、提高效率。通过提供一个标准函数集给开发者使用,XSLTSL项目已经帮助开发者从优秀的程序员演变成伟大的程序员。更进一步的信息可以参考XSLTSL的在线网站。

0
相关文章