|
 |
[Semantic Web](连载)语义网之路--XML文档的显示 |
Lee 发表于 2007/3/5 14:15:44 |
XML文档的显示
由于XML不包括任何显示格式信息,因此XML文档需要借助样式单(Style Sheet)进行显示。这样也有一个优点,那就是同一个XML文档可以用各种不同的方法显示出来。样式单一般以独立的文档形式存在,其内容描述了结构化文档的表现方式,包括结构化文档的显示方式、打印效果等。与描述文档显示方式的HTML相比,样式单具有很多突出的优点,如表现效果丰富多样、简单易读、体积小、可维护性好等。正是由于样式单可以使XML的显示与数据相分离以及样式单的种种优点,所以W3C推荐使用样式单来描述结构化文档的显示。目前主要有两种形式的样式单,一种是层叠样式单,即CSS(Cascading Style Sheets),另一种是可扩展样式单语言,即XSL(eXtensible Stylesheet Language)。
层叠样式单CSS
层叠样式单CSS实际上是一种显示样式描述规范。目前W3C有两个推荐标准:CSS1和CSS2。CSS1于1996年12月通过,CSS2于1998年5月通过。CSS2建立于CSS1基础上之上,基本上涵盖了CSS1,并增加了媒体类型、特性选择符、声音样式等功能,并对CSS1原有的一些功能进行了扩充。
虽然CSS制定之初的服务对象并不是XML,但它现在却可以很好地描述XML文档的显示样式。通过CSS可以定义XML文档中各元素的显示效果,包括显示位置、颜色、字体、背景、边距等等。
下面首先通过一个简单的例子说明CSS如何控制XML文档的显示。假设XML文档名称为se.xml,其内容如下:
代码清单3-42
<?xml version = "1.0" encoding="GB2312"?>
<selist>
搜索引擎列表
<se>
<name>百度</name>
<site>www.baidu.com </site>
</se>
<se>
<name>谷歌</name>
<site>www.google.com </site>
</se>
</selist>
下面我们通过外部引用的方式在该XML文档中加入对CSS文档的如下引用语句:
<?xml-stylesheet type="text/css" href="se.css" ?>
并将该行代码放在xml声明语句的后面,即:
代码清单3-43
<?xml version = "1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/css" href="se.css" ?>
……
新增加的这行代码表明该XML文档以CSS文档se.css指示的显示样式显示。CSS文档se.css的内容如下:
代码清单3-44
selist, se
{
font-size:20pt;
font-weight:bold;
color:blue;
display:block;
margin-bottom:20pt;
margin-top:20pt;
}
name
{
font-weight:bold;
font-size:12pt;
display:block;
color:red;
margin-left:20pt;
}
site
{
font-weight:bold;
font-size:12pt;
display:block;
color:black;
margin-left:20pt;
}
通过这个简单的例子可以看出:CSS的基本思想是通过为XML文档中的各个元素定义相应的一组显示样式来控制XML文档的显示效果。显示样式定义的一般格式为:
元素名称
{
样式属性:取值;
样式属性:取值;
……
}
有关CSS显示样式定义的详细信息,请参阅相关的文档。
可扩展样式单语言XSL
通过上一小节可以看出,CSS只是一个普通的文本文件,本身不遵从XML语法规范。而XSL则不同,它采用XML语法规范,是XML的一种具体应用。因此有趣的是,XML文档要通过其它的XML文档来显示。
XSL由两部分组成:第一部分是格式转换,它描述了如何将一个XML文档转换为可浏览或可输出的格式;第二部分定义了格式化对象FO(fomatted object)。如前所述,XML文档实际上是一种树形结构。在输出时,首先根据XML文档构造一棵源树,然后再按照给定的XSL将这个源树转移为可以显示的结果树,这个过程称为树转换。经过树转换之后,再根据FO解释这棵结果树,并在屏幕、纸张、语音设备或其它媒体上生成输出结果,这个过程称为格式化。
目前描述树转换的协议已经从XSL中分离出来,称为XSLT(XSL Transformations),并成为W3C的推荐标准。与XSLT一同推出的还有其配套标准XPath,该标准用来描述如何识别、选择、匹配XML文档中的各个构件,包括元素、属性、文本内容等。
XSLT的主要功能就是转换,即把XML文档作为一个源树,将其转换为一个包含显示样式信息的结果树。结果树可以是XML文档格式,也可是以HTML、XHTML或SVG文档格式等。
利用XSL控制XML显示方式的基本思想是:通过定义转换模板,将XML文档转换为包含显示样式信息的可浏览文档。转换后的可浏览文档可以是HTML格式、也可以是FO格式,或者是其它面向显示方式描述的XML格式。目前大多数的可浏览文档都采用HTML格式。
转换可以在服务器端进行,也可以在客户端进行。两者分别对应着不同的转换模式。
如果在服务器端转换,则XML文档在下载到浏览器之前首先由服务器将其转换为HTML文档,然后再将HTML文档返回给客户端进行浏览。这时又有两种方式:一种是动态转换,也就是当服务器收到转换请求后再进行转换,还有一种是批量转换,即事先将XML用XSL转换为一批HTML文档,当接收到用户的服务请求后再调用相应的已转换好的HTML文档。
如果在客户端转换,则XML和XSL文档都将被送至客户端,由浏览器完成实时转换。当然,客户端转换的前提是浏览器必须支持XML和XSL。
XML声明引入XSL样式单的方法与声明CSS的引入方法基本相同:
<?xml-stylesheet type="text/xsl" href="se.xsl"?>
这行代码表明当前的XML文档以XSL文档se.xsl指示的显示样式显示。
下面通过一个简单的例子来看看XSL是如何控制XML文档的显示的。XML文档使用上一小节介绍的se.xml,为了使用XSL样式单,将其中第二行的声明语句改为:
<?xml-stylesheet type="text/xsl" href="se.xsl"?>
se.xsl的内容如下:
代码清单3-45
[1] <?xml version="1.0" encoding="gb2312" ?>
[2] <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
[3] xmlns="http://www.w3.org/TR/REC-html40">
[4] <xsl:template>
[5] <xsl:apply-templates/>
[6] </xsl:template>
[7] <xsl:template match="/">
[8] <HTML>
[9] <HEAD>
[10] <TITLE>搜索引擎列表</TITLE>
[11] <STYLE> .title{font-size:20pt; font-weight:bold; color:blue }
.name{ font-size:12pt; color:red}
.site{ font-size:12pt; color:black}
[12] </STYLE>
[13] </HEAD>
[14] <BODY>
[15] <P class="title" >搜索引擎列表</P>
[16] <xsl:apply-templates select="selist"/>
[17] </BODY>
[18] </HTML>
[19] </xsl:template>
[20] <xsl:template match="selist">
[21] <TABLE BORDER="1">
[22] <THEAD>
[23] <TD> <B>名称</B> </TD>
[24] <TD> <B>网址</B> </TD>
[25] </THEAD>
[26] <xsl:for-each select="se" order-by="name">
[27] <TR>
[28] <TD><B><xsl:value-of select="name"/></B></TD>
[29] <TD><xsl:value-of select="site"/></TD>
[30] </TR>
[31] </xsl:for-each>
[32] </TABLE>
[33] </xsl:template>
[34]</xsl:stylesheet>
该文档前三行是XML文档和命名空间声明。[4]-[6]行利用<xsl:template>元素声明XSL模板,并调用该模板。
第[7]行根据<xsl:apply-templates/>,首先匹配XML源树的根节点(用“/”表示),并生成相应的带有显示样式信息的HTML代码([8]-[14]行)。
[15]和[16]行指示处理器按照[20]至[33]行的模板生成selist子树的显示样式。
第[20]行匹配XML文档中的selist节点元素,并生成相应的HTML代码([21]-[25]行),第[26]行则匹配XML文档中的元素se,为每一个se元素生成单独的一行,并按name进行排序。执行完成后,返回第[17]行生成剩下的HTML代码。
有关XSL和XSLT的详细信息,请参阅相关的文档。
[完]
|
|
回复:(连载)语义网之路--XML文档的显示 |
guest(游客)发表评论于2007/6/4 20:35:23 | 应为xmlns:xsl="http://www.w3.org/TR/WD-xsl"
否则会报错的
|
|
» 1 »
| |
 | |
|
Blog 信 息 |
blog名称:风落沙 日志总数:348 评论数量:550 留言数量:52 访问次数:1591471 建立时间:2005年1月28日 |
|
友 情 连 接 |

|
|
|

| |
|