### XML 与其相关技术(2)

var xmlfile=new ActiveXObject("Microsoft.xmldom");
xmlfile.load("2.xml");
var xslfile=new ActiveXObject("Microsoft.xmldom");
xslfile.load("first.xsl");
document.all.item("DOM 应用").innerHTML=xmlfile.transformNode(xslfile.documentElement);
〈/SCRIPT〉
〈/head〉
〈body〉
〈DIV id="DOM 应用"〉〈/DIV〉
〈/body〉
〈/heml〉
■Namespaces
考虑一下，当我们建立 XML 应用的时候，会为具体的行业应用创建特定的 DTD，规定可用的元素。有时会出现下面情况——两个同名的元素在不同的地方可能会有不同的含义。例如，我们定义〈title〉这个标记，在书店应用中，这个标记中的字符含义是书的名称，而在人事部门中，这个标记中的字符含义却是人的称谓、头衔。如果我们写一个包含书名、作者、作者身份等信息的 XML 文件，将在书名和作者身份两个地方用到同样的〈title〉标记，但它们有不同的含义，计算机程序无法分辨哪一个是书名，哪一个是作者身份。这样就给我们的自动化处理带来了问题，这就是 Namespaces 要解决的问题。Namespaces 的概念非常直接——对于每一套特定应用的 DTD，给它一个独一无二的标志来代表，如果在 XML 文件中使用 DTD 中定义的元素，需将 DTD 的标志和元素名、属性连在一起使用，相当于指明了元素来自什么地方，这就不会和其他同名元素混淆（像我们的电话号码，两个城市可能存在相同的号码，但是我们在前面用区号将它限定了，一个地方的区号在一个国家中是独一无二的）。在 XML 中，采用现成的、在全球范围唯一的“域名”作为 Namespaces，即用 URL 作为 XML 的 Namespaces。前面我们学习 XSL 的时候，实际上就接触到了 Namespaces，XSL 文件中的标记名称前面都有一个“xsl:”，实际上这就是 XSL 中元素的 Namespaces。声明语句就是：〈xsl:stylesheet xmlns:xsl="http://www.w3.org.TR.WD-xsl"〉，后面的 xmlns:xsl="......"。其中，声明中的 xsl 称为前置字符串，在文件中引用元素时要加上前置字符串，如：〈xsl:templed〉。
例：
〈?xml version="1.0" encoding="GB2312"?〉
〈c:客户名单 xmlns:c="http://www.aaa.com/custom.dtd"〉
xmlns:职工="http://www.aaa.com/employee.dtd〉
〈c:客户〉
〈c:姓名〉张三〈/c:姓名〉
〈c:电话〉028-6666666〈/电话〉
〈c:接待人〉
〈职工:姓名〉李四〈/职工:姓名〉
〈职工:电话〉5555555〈/职工:电话〉
〈/c:接待人〉
〈/c:客户〉
.......
这个例子在前面定义了两个 Namespaces——c:和职工:。在应用元素时，前面都加了特定的 Namespaces。那么应用程序在读到同名元素，如：〈姓名〉、〈电话〉时，就能够区分哪一个是客户姓名、电话，而哪一个又是本单位职工的姓名、电话了。
利用 Namespaces，我们还可以在 XML 文件中直接利用 HTML 的标记，不使用 Xlink 或 Xpionter，也让 XML 文件具有超级链接、显示图片的功能。在使用 HTML 标记之前，必须声明它的 Namespaces。下面这个例子就是 XML 和 HTML 的混合使用。
例：
〈?xml version="1.0" encoding="GB2312" ?〉
〈?xml-stylesheet href="first.css" type="text/css" ?〉
〈data xmlns:HTML="http://www.w3.org/TR/XHTM1"〉
〈book〉
〈title〉XML 入门精解〈/title〉
〈HTML:a href="mailto:lionliao@yeah.net"〉
〈author〉作者：张三〈/author〉
〈/HTML:a〉
〈picture〉
〈HTML:img src="zhangsan.jpg" width="80" height="80"〉〈/HTML:img〉
〈/picture〉
〈price unit="人民币"〉价格：$20.00〈/price〉
〈content〉
〈HTML:a href="http://www.cbi.com"〉点击查看主要内容〈/HTML:a〉
〈/content〉
〈/book〉
〈/data〉
注意：在 XML 中使用 HTML 时要严格遵守 XML 的语法规定，元素必须正确关闭。
通过 CSS 或 XSL 可将这个 XML 文件显示出来，如图 1 所示。
■XHTML
XHTML 最早叫 HTML in XML，就是把过去用 SGML 定义的 HTML，用 XML 来重新定义（不要忘了，XML 是一种定义语言的语言）。实际上，XHTML 中的标记基本上还是 HTML 4.0 中的那些标记，各种标记、属性的用法基本不变。只不过因为它是通过 XML 定义的，所以必须严格遵守 XML 的规定，不像过去那样随便。那为什么要发展 XHTML 呢？
现在，手机上网、信息家电等炒得如火如荼，好像什么都应该连到因特网上。XHTML 正是适应这种潮流而出现的。大家知道，现在的 HTML 越来越复杂，而且存在大量的不规范 HTML 网页（并不是能够在 IE、Netscape 正确显示就算是规范的网页），而浏览器为了能够适应这种情况，包容了大量五花八门的 HTML 网页，已经变得非常臃肿（这就是虽然你的 HTML 语法错误，有时还是能够正确显示出来的原因，设计浏览器的工程师绞尽脑汁来适应、包容错误）。对于 PC 来说，这不算什么，因为 PC 的性能已经得到了很大程度的提升，而对于那些掌中设备、信息家电，可没有这么多存储空间可用。XML 标准简单但是非常严格，主要目的就是减轻解析器、浏览器的开发负担以及这些软件的体积。一般的 XML 解析器的体积不过几百 KB。根据 XML 标准定义出来的 XHTML 当然继承了 XML 的特性，同时也保留了 HTML 在表现形式上的优越性，它摒弃了 HTML 中的“不干净”代码，提供了良好的可伸缩性，可大可小。
XHTML 通过将过去的 HTML 功能，按照使用者的需要和浏览器的能力，划分为多个模块，每一组模块仅支持部分 HTML 标记。针对于特定模块开发的解析器、浏览器显然比大而全的解析器、浏览器体积要小得多。这就达到了“可小”的目的。比如说：掌上电脑屏幕本身很小，显然它浏览网页的时候不需要使用 HTML 中的“Frame”功能，那么针对这种设备，有它专门的一套适用的、不包含“Frame”的标记。当然，每个模块都需要有它们的专用 DTD 来声明可以使用哪些标记。现在 W3C 已经定义好了几种专用的 DTD。
“可大”呢？实际上就是利用 XML 的特点，XML 是什么？可扩展标记语言呀！以前，HTML 中的标记是已经定义好了的，是不能够改变，只能拿来使用，而 XHTML 就可以像 XML 一样，能够自定义标记。
使用 XHTML 和使用 HTML 基本上一样，不过要注意的是，我们再不能偷懒了。XHTML 也像 XML 一样，首先必须是 Well-Formed。规则如下：
1. 标记必许正确结束。
2. 标记与标记之间不允许交叉嵌套。像以前的“〈i〉斜体〈b〉粗斜体〈/i〉〈/b〉”这样的语句是不行的，而必须写成“〈i〉斜体〈b〉粗斜体〈/b〉〈/i〉”才合格。
3. 空元素（开始标记与结束标记间无内容）必须按 XML 的规定写成〈元素名/〉。
4. 属性值必须用“ ”号括起来，像以前的“〈td width=100〉”的语句必须改写成“〈td width="100"〉”。
5. 属性都要赋值。以前有些标记的属性如果不赋值，它就取缺省值，在 XHTML 中，必须明确地给它赋值。
6. 标记名称、属性名称都用小写字母。
7. 使用正确的根元素加上 Namespaces。
8. 〈head〉〈body〉不能够省略。〈title〉必须是〈head〉中出现的第一个子元素。
9.原来 HTML 网页中的 VBScript、JavaScript、样式表区域，必须像 XML 的 CDATA 区一样包装起来，如：
〈script language="JavaScript"〉
〈![CDATA[
......
if (i 〈 3 &&&& ......
]]〉
〈/script〉
满足了上述条件，并不表示 XHTML 就是最好的，而仅仅是格式正确的 XHTML 文件，需要正确地引用 DTD，才成为真正正确的 XHTML。W3C 已经定义了三种 XHTML 的 DTD 供大家使用，它们分别是 Strict、Transitional、Frameset。从现在开始，写 HTML 网页时就需要按照 XHTML 的规定来写，并且最好不要用 font 之类的标记，尽量使用 CSS 来表现你的 HTML 网页。等到 XHTML、XML 普及了，你就会暗笑了，因为你实现网页转换是非常容易的。

本系列讲座介绍了 XML 的语法、结构以及相关的一些技术。并非了解这些，就能够使用 XML 了。有关 XML 的具体开发应用现在的讨论也是非常多，如：XML 用于电子商务、XML 用于文档管理、XML 用于数据驱动应用程序等。我们学习 XML，关键就是要在以后的开发中应用它，明白了 XML 的基础知识，将会在应用开发中起到重要作用。