`

xml的基础知识4

    博客分类:
  • xml
阅读更多

5、XML 与显示的结合
第 1 部分说到过,XML 的设计目标就是把内容与显示格式分离开。其实只有面向文档的应用才有显示的需求,面向数据的应用不需要定义显示格式。把内容与显示格式分离不仅有利于面向文档应用的开发,更有利于面向数据应用的开发。我来举个面向数据应用的例子,假设你做了一个 Web 搜索引擎(或者叫做网络爬虫),如果页面采用 HTML 来开发,当你的程序读到这样的信息:
[code="java"]
XML 高级编程
95.00
[/code]
你的程序能辨别出这其实是一本书的名称和价格吗?尤其是当这些单纯表示格式的 、 以不规则方式嵌套了很多层的时候,开发出一个支持 HTML 全文检索的搜索引擎简直是一场灾难。但是如果这些页面都是采用 XML 来开发的,并且内容与显示格式完全分离,当你的程度读到这样的信息:
[code="java"]<book>
XML 高级编程
<price>95.00</price>
</book>[/code]
就可以非常容易地辨别出这是一本书的名称和价格,尤其是当这个 XML 页面使用了通用的词汇表并且通过了有效性验证时。所以 XML 就是搜索引擎开发者的福音,XML 还会催生出一大堆面向数据的应用,而这类应用在 XML 出现前是根本无法实现的。

言归正传,现在我们来谈谈面向文档的应用。那么显示格式用什么来定义呢?有两种方法,CSS 和 XSLT,XML 文档要在浏览器中显示必须结合 CSS 或者 XSLT 的样式单。XML 文档与 HTML 一样可以用 CSS 来定义显示格式(这里有个例子:http://www.wespoke.com/atom.xml)。
我们先看一下上面这个例子中如何用 CSS 来定义显示格式:
[code="java"]<!---->
<!---->
<feed>
...
<entry>
...
</entry>
...
</feed>[/code]
其中
[code="java"]<!---->[/code]
是与样式单相关的处理指令,指出本文档使用哪一个样式单来定义显示格式,如果用 CSS 来定义,type 就是 "text/css",用 XSLT 来定义,type 就是 "text/xsl"。

下面是其对应的 CSS 文件中的一段:
[code="java"]entry {
display: block;
border: 2px solid black;
margin: 1em;
padding: 0.5em;
}[/code]
可以看出,这段 CSS 与我们在 HTML 中使用的 CSS 没有什么区别。而且通过这段 CSS 可以想象出,浏览器在将在 entry 之外显示 2 个象素宽的边界。浏览器显示的结果与我们想象的完全相同(1.jpg)。


下面我来讲一讲 XSLT,因为在 XML 的世界里 XSLT 是比 CSS 更加重要的技术。现在最流行的 XML 文档的显示方法还是 XSLT。原因与 Schema 一样,XSLT 采用 XML 格式(CSS 采用自己的语法),可以用相同的 XML 解析器解析,便于程序处理。

XSLT 是参考 SGML 中的 DSSSL(定义 SGML 的显示格式)而设计的。最初叫做 XSL,但是后来 W3C 发现工作量实在太大就分成了两个规范:XSLT 和 XSL:FO。XSLT 很快就作为正式规范推出了,主要是面向转换类应用的;XSL:FO 主要是面向精确的格式定义(例如 PDF),正式规范才推出不久。我们主要用到 XSLT,因为 XSLT 目前已经达到了实用的阶段并且被广泛采用。XSLT 其实不完全是为显示目的设计的,XSLT 的主要作用是将 XML 由一种格式转换为另一种格式,例如由 XML 的一种词汇表转换为另一种词汇表,或者由 XML 转换为 HTML 或者 XHTML,便于在浏览器中显示。后一种应用(XML->HTML/XHTML)是目前 XSLT 应用最广的领域,被应用于很多符合 J2EE 标准的表示层框架中。这类框架在服务器端做 XSLT 转换,将生成的 HTML/XHTML 发给浏览器。基于这种技术的框架还可以非常方便地支持各种瘦客户端,例如 PDA 或具有无线上网功能的 WAP 手机(这时候是 XML->WML,也就是由一种词汇表转换为另一种词汇表,WML 本身就是 XML 的一种词汇表),无非就是另外再写一套 XSLT 样式单。在这种应用中,只包含数据的 XML 相当于 MVC 中的 Model,而表示显示格式的 XSLT 相当于 MVC 中的 View。还有一些需要在服务器定期生成静态页面的网站(例如新浪这类新闻网站)也在服务器采用 XML+XSLT 来定期生成静态页面(这类进程一般是以后台方式运行)。

现在 IE 和 Mozilla 两大浏览器都可以很好地支持 XSLT,所以从技术上讲可以完全采用 XML+XSLT 来制作所有的页面。在这里 XML+XSLT 与我们熟悉的 HTML+CSS 的功能大致相同。这也引起了另外的一种思考,究竟是在服务器端做 XSLT 转换好还是在浏览器端做 XSLT 转换好?我的考虑是尽管在服务器端做 XSLT 转换更加灵活,功能更加强大,我却更愿意在浏览器端做转换。因为 XSLT 转换是非常耗费资源的操作,如果在服务器端做大量的转换操作必然会极大地影响服务器的性能。必须要在服务器端做转换的话一个更好的方案是采用后台方式定期生成静态的 HTML 页面(也就是上面说的一些新闻网站所采取的做法),或者在服务器端通过软件实现某种 cache。这也符合我们一贯的思路:浏览器其实能做很多事情,而且现在主流机型(P4 2G、256M 以上内存)的处理能力已经非常强了,所以在浏览器力所能及的情况下应该把尽量多的工作交给浏览器去做。

就象刚才讲的 XML+CSS,我们来直观地看一下 XML+XSLT 是什么样子:

XML 文档 test.xml:
[code="java"]<!---->
<!---->
<产品搜寻>
<摘要>搜寻字串:“滑鼠 键盘”,共找到 2 笔<!---->
<产品>
<货号>12478943<!---->
<品名>手不痛健康滑鼠<!---->
<定价>$234<!---->
<说明页 网址="http://foo.bar/mouse/12478943">上市发表会<!---->
<!---->
<产品>
<货号>83424723<!---->
<品名>打不响静悄悄键盘<!---->
<定价>$567<!---->
<说明页 网址="http://foo.bar/kbd/83424723">产品特性<!---->
<!---->
<!---->[/code]

XSLT 样式单 test.xsl:
[code="java"]<!---->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="gbk">

<xsl:template match="/">
<html>
<head>
产品搜寻结果
</head>
<body>

产品搜寻结果


摘要:<xsl:value-of select="*/摘要">


<xsl:apply-templates select="产品搜寻">
</body>
</html>
</xsl:template>

<xsl:template match="产品搜寻">






<xsl:for-each select="产品">





</xsl:for-each>
品名定价说明页
<xsl:value-of select="品名"><xsl:value-of select="定价"><xsl:value-of select="说明页">

</xsl:template>

</xsl:stylesheet>[/code]

这个例子是一个可以在 Mozilla 中正常显示的 XML 页面(2.jpg),从这个完整的例子中可以对我们刚才学到的知识产生很多感性认识。
a、XML 中的元素、属性名都可以使用中文,只要在 XML 声明中使用了正确的 encoding(这里是 gbk)。
b、在 XSLT 样式单中大量采用 XPath 语法来定位 DOM 中的节点并且对符合条件的节点进行转换。事实上 XPath 的产生最初就是因为 XSLT 的需要。
c、在 XSLT 样式单中同样可以使用名字空间。
d、XML 经 XSLT 转换后输出内容为标准的 HTML 页面,可以在浏览器中正常显示。
e、XSLT 转换是与有效性验证完全无关的操作,只要是满足格式正确的要求的 XML 就可以进行转换。

转换后生成的 HTML 其实是这样的:
[code="java"]<html>
<head>
产品搜寻结果
</head>
<body>

产品搜寻结果


摘要:搜寻字串:“滑鼠 键盘”,共找到 2 笔


















品名定价说明页
手不痛健康滑鼠$234上市发表会
打不响静悄悄键盘$567产品特性

</body>
</html>[/code]

上面这个例子其实是来自于《无废话 XML》这本书。这个例子要在 IE 中正常显示只需要改一点点内容,这个任务留给你们课后去做。
关于 XSLT 首先应该看《无废话 XML》这本书,这本书里对 XSLT 的讲解是很清楚的。XSLT 我们在目前的开发中也用不到,但是 XSLT 在 XML 中是非常基础的知识,所以我在这一部分中用了较大的篇幅来讲述。

知道了这么多,你可能会认为 HTML+CSS 已经是是落后的技术,应该完全被 XML+XSLT 取代。这其实是一个错误的观念,连 W3C 都没有敢肯定 HTML+CSS 一定会被 XML+XSLT 取代。XML+XSLT 的主要缺点是成本和复杂性。由于缺乏所见即所得的(WYSIWYG)页面编辑器的支持,对于实现相同显示效果的复杂页面,XML+XSLT 的工作量要比 HTML+CSS 大得多。而且页面制作人员完全不能适应 XML+XSLT 的工作方式(这是程序员的工作方式),强求他们采用 XML+XSLT 是不现实的。目前 Dreamweaver 已经可以非常好地支持 CSS 了。所以在可预测的未来很长一段时间内,HTML+CSS 仍然是 Web 页面开发的主流技术。当然 HTML 将逐渐被 XHTML 所代替,但是这是另外的问题。XHTML 就是用 XML 来改造 HTML,使 HTML 至少符合 XML 格式正确的要求。符合 XHTML 标准的页面还有一些其它要求,感兴趣的可以看看《XML 高级编程》这本书。

以上这些就是我这次培训的所有内容。这些都是我认为的关于 XML 的基础知识,希望通过这次讲解以及课后的学习能够掌握好。掌握好了这些知识,再去掌握其它与 XML 相关的知识就是轻而易举的了。

 

 

相关资料:
1、《无废话 XML》
2、《W3C XML 规范》
3、《XML 高级编程》
4、《Java 与 XML》
5、《XML Schemas》


术语列表:
HTML:HyperText Markup Language,超文本标记语言
SGML:Standard Generalized Markup Language,标准通用标记语言。
XML:eXtensible Markup Language,可扩展标记语言。
DTD:Document Type Definition,文档类型定义。
XML Schema:XML 模式
RELAX NG:REgular LAnguage description for XML Next Generation,下一代的 RELAX。
DSSSL:Document Style Semantics and Specification Language,文档样式语义和规范语言
XSLT:eXtensible Stylesheet Language——Transformation,可扩展样式单语言转换部分

PI:Processing Instruction,处理指令。
XPath:XML 路径描述。
namespace:名字空间。

DOM:Document Object Model,文档对象模型。
SAX:Simple API for XML,XML 简单 API。
JAXP:Java API for XML Parsing
JDOM:Java Document Object Model
DOM4J:Document Object Model for Java

 

分享到:
评论

相关推荐

    XML基础知识大全

    XML基础知识大全..XML基础知识大全

    XML基础知识

    XML基础知识 一、 XML: a) XML是Extensible Markup Language的缩写,即可扩展标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述数据。 二、 XML的特点: a) XML与操作系统、编程语言的开发平台都...

    XMLBOOK xml基础知识

    XMLBOOK xml基础知识!为网页类型!下载后无需安装,有IE就可以浏览学习。

    JAVA 处理XML 基础知识

    DOM初步 DOM是Document Object Model的缩写,即文档对象模型。...通俗的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。

    xml基础知识文档

    xml基础,xml语言的定义,xml的数据岛,xml结点的设置、获取。

    xml基础知识讲义

    xml基础知识,word文档,免积分直接下载

    自己写的xml基础知识

    写的xml基础知识

    XML相关基础知识集合

    XML相关基础知识集合XML相关基础知识集合XML相关基础知识集合XML相关基础知识集合

    XML基础知识.pdf

    XML基础知识.pdf

    XML技术基础知识

    XML技术基础知识的介绍,适合初学者学习。

    xml基础.pdf

    新手可以查看这个文档,xml基础.pdf

    xml基础知识的ppt

    xml的基础知识,通过学习可以理解java中xml的载入及使用

    c#汇总,包括asp.net xml c#基础知识

    这是我在一家培训公司里面的文档,给和我们一起的新手们看看,要是不好也别喷,不管怎么说我也是好意的呵呵

    xml基础知识测试题

    比较基础简单的xml测试题 适用于笔试 面试 考试

    XML基础实例 数据岛

    XML基础实例 数据岛XML基础实例 数据岛

    xml基础教程ppt

    xml基础教程ppt是xml的一些有关的基础知识和例子,

    XML基础知识,实例代码

    XML的基础知识的实例。 包括DTD,外部 内部,xml的读取,写入。。。 很有用的。

    零基础学Java&cedil;Web开发&nbsp;XML技术基础知识

    本章将对XML基本知识进行详细的分析,然后介绍几种常见的XML文档处理技术,最后用Java对XML文档的解析来结束本章内容的讲解,通过本章的学习,读者将对XML的基础知识有一个比较清楚的认识,并学会使用常见的XML文档...

    web XML安全基础

    本书覆盖XML结构以及与之相关的安全技术基础知识,包括:XML签名、XML加密和XML密钥关联规范;本资源不仅包含你所需要的概念性信息,而且还包含你所需要的实用技术,从而可使你成功运用这一数据结构语言。理解RSA的...

Global site tag (gtag.js) - Google Analytics