`

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的基础知识,包括它的结构、语法、解析方式以及在IT行业中的应用。 一、XML简介 XML起源于1998年,由万维网联盟(W3C)制定,它是一种可扩展的标记语言,旨在替代HTML,因为HTML主要...

    XMLBOOK xml基础知识

    XML的设计目标是传输和存储数据,而不是显示数据,因此它的主要焦点在于数据的结构化和标准化,而非数据的外观。...无论你是网页开发者、软件工程师还是数据管理人员,XML基础知识的掌握都将对你的工作带来极大的帮助。

    xml基础知识文档

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

    JAVA 处理XML 基础知识

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

    xml基础知识讲义

    总结来说,XML基础知识涉及XML文档的结构、实体的使用、特殊字符的实体引用以及不受解析的CDATA段。理解这些概念对于创建和处理XML文档至关重要,因为它们确保了数据的准确性和一致性。在实际应用中,XML广泛用于...

    xml基础.pdf

    ### XML基础知识详解 #### 一、XML概述 **XML**(可扩展标记语言,Extensible Markup Language)是一种标记语言,其设计目的是为了传输和存储数据。与HTML相比,XML更侧重于数据的描述而非展示。XML的核心优势在于...

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

    【C#基础知识】 C#(读作"C sharp")是一种面向对象的编程语言,由微软公司为.NET框架开发。它的设计目标是提供一种简洁、类型安全、高效且现代的编程语言,用于构建Windows桌面应用程序、Web应用程序以及移动平台...

    xml基础知识测试题

    根据提供的文件信息,我们可以整理出一系列关于XML的基础知识点,这些...以上就是从题目中提取出来的XML基础知识要点。这些知识点覆盖了XML的基本概念、语法、元素定义、属性使用等方面,对于理解和掌握XML非常有帮助。

    XML相关基础知识集合

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

    XML技术基础知识

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

    自己写的xml基础知识

    XML基础知识 XML(Extensible Markup Language)是一种标记语言,主要用于存储和传输数据。它与HTML相似,但有着不同的功能和特点。XML的主要应用场景是在企业开发中用于数据交换和配置文件。 XML的功能 * 用于...

    快速学习XML基础知识

    XML的基础知识主要包括以下几个方面: 1. **XML文档结构**:XML文档由三部分组成:声明、元素和属性。声明部分通常以`&lt;?xml version="1.0" encoding="UTF-8"?&gt;`开始,定义文档的版本和字符编码。元素是XML的核心,...

    xml基础知识的ppt

    XML的发展伴随着一系列相关技术,如XPath用于查询XML文档中的数据,XSLT用于转换XML文档,以及DOM(Document Object Model)用于解析和操作XML文档。这些技术共同构成了XML生态系统,使得XML成为现代软件开发中不可...

    XML基础实例 数据岛

    在本主题“XML基础实例 数据岛”中,我们将深入探讨XML的基础概念,以及如何使用XML创建数据岛,这是一个在网页中嵌入XML数据的技术。 1. **XML的基本结构** - XML文档由元素组成,元素是XML文档的构建块。每个...

    XML基础教程与实验指导

    学习XML基础教程与实验指导,应掌握以上基本概念,并通过实践操作加深理解。PPT.rar 文件可能包含了关于这些主题的演示文稿,可以帮助深入学习和讲解XML的相关知识。通过实际编写和解析XML文档,以及使用XPath进行...

    XML基础知识,实例代码

    4. XML Schema: XML Schema是另一种定义XML文档结构的更现代的方式,相比DTD提供了更强大、更复杂的验证功能,支持数据类型和命名空间。 5. XML解析: 读取XML文档的过程称为解析。解析器有两种类型:DOM...

    XML基础知识.pdf

    XML(Extensible Markup Language)即可扩展标记语言,是互联网上用于标记文档的语言,用于描述数据的结构和内容。其设计目标是传输和存储数据,特别是跨不同系统和平台。XML的核心优势在于能够通过其标记让数据在...

Global site tag (gtag.js) - Google Analytics