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

XML 有很多相关的技术，将这些技术结合起来，才能充分发挥 XML 的强大功能。这些技术包括：Xlink 与 Xpointer（设置 XML 的超链接）、DOM（Document Object Model：文件对象模型，存取、操作文件的内容）、Namespaces（解决不同元素有相同名称的问题）、XHTML（下一代的 HTML）等。
■Xlink 与 Xpointer
在 XML 的规范中，我们看到它并没有规定有关文件链接的问题。为了使 XML 文件也能够有类似 HTML 文件超链接的功能，W3C 制定了 Xlink 和 Xpionter 两种规范，其中 Xlink 是规定 XML 文件之间的链接规范（和 HTML 中的外链接相似），Xpointer 是规定 XML 文件中不同位置之间的链接规范（类似 HTML 中的内链接）。
1.Xlink：Xlink 所设定的链接分为 Simple Link 和 Extended Link。其中，Simple Link 的链接功能和 HTML 的超链接基本上一样，而 Extended Link 则超出了 HTML 超链接的功能，它链接的对象可以一次设定多个，由多个标记来共同制定该链接。
在 XML 文件中使用 Xlink 元素的时候，必须要在 DTD 中声明这个元素。完整的声明样本如下（本样本声明了一个名为 simple 的 Simple Link 类型的 Xlink 元素）：
〈!ELEMENT simple ANY〉
〈!ATTLIST simple
xml:link CDATA #FIXED"simple"
href CDATA #REQUIRED
role CDATA #IMPLIED
title CDATA #IMPLIED
inline (true|false) "true"
content-role CDATA #IMPLIED
content-title CDATA #IMPLIED
show (embed|replace|new) #IMPLIED
actuate (auto|user) #IMPLIED
behavior CDATA #IMPLIED〉
可以看到，Xlink 元素有多种属性，通过对这些属性赋值，可以编制出多种多样的链接方式。下面我们对这些属性作些解释。
编辑推荐阅读
● CSS 与 XSL 简述
Xml:link：指明链接类型是 Simple Link 还是 Extended Link。
href：用来设定链接的地址，与 HTML 中 A 标记中的 href 属性一样。
role：叙述该链接功能，提供给应用程序读取。
title：叙述该链接功能，提供给用户读取，与 HTML 中 A 标记的 alt 属性相似。
inline：有“true”和“false”两种取值，声明建立的链接是否以嵌入方式链接，缺省为“true”。
content-role 和 content-title：和 role、title 类似，但它们叙述的是指向的内容，而不是链接的内容。
show：有三种取值，replace 表示将链接的内容取代当前的内容，new 表示将链接的内容在一个新的窗口打开，embed 表示将链接的内容加入到当前的内容中。
actuate：设置该链接是如何被激活。auto 表示 XML 文件被解读后，链接自动被激活。而 user 表示，该链接必须被用户手动激活，也就是用户必须要用鼠标点击一下该链接。
behavior：设置该链接被激活后，将自动引发一些动作，可用一些指令来设置链接激活后应用程序要作的事情。
当我们在 DTD 中声明 Xlink 元素后，就可以在 XML 文件中使用这个元素。例如：
〈simple href="http://www.cbinews.com/xml.htm" title="这是一篇介绍 XML 的文章"
role="XML article" content-role="good" cont-title="first" show="new" actuate="user"
behavior="goto zero"/〉
另外一种 Xlink 链接方式是 Extended Link，它的特点是可以一次设定多个链接对象。同样，在使用 Extended Link 类型的 Xlink 元素前必须在 DTD 中声明这个元素。声明方式和 Simple Link 类型的 Xlink 元素类似，不同之处有两点，第一，声明 xml:link 属性时，语句变为：xml:link CDATA #FIXED “extended”；第二，没有任何 href 属性和任何目标描述，声明 Extended Link 类型的 Xlink 元素，必须包括一套包含 href 定位的子元素。即在声明了 Extended Link 类型的 Xlink 元素之后，还必须声明一个 xml:link 属性值为 locator 的子元素。例如：
〈!ELEMENT aaa ANY〉
〈!ATTLIST aaa
xml:link CDATA #FIXED "extended"
inline (true|false) "true"
content-role CDATA #IMPLIED
content-title CDATA #IMPLIED〉
〈!ELEMENT bbb ANY〉
〈!ATTLIST bbb
xml:link CDATA #FIXED "locator"
role CDATA #IMPLIED
href CDATA #REAUIRED
title CDATA #IMPLIED
show (embed|replace|new) "replace"
actuate (auto|user) "user"
behavior CDATA #IMPLIED
〉
这样，我们就可以在 XML 文件中使用定义过的 Extended Link 的 Xlink 元素。如：
〈aaa〉文章资料
〈bbb href="http://www.cbinews.com/XML1.htm title="XML 入门"/〉
〈bbb href="http://www.cbinews.com/XML2.htm title="XML 进阶"/〉
〈bbb href="http://www.cbinews.com/XML3.htm title="XML 应用"/〉
〈/aaa〉
当我们通过 CSS 或 XSL 将这个 XML 文件在浏览器中显示出来后，用户点击“文章资料”这个 Extended Link 的 Xlink 链接，将会出现一个选单，列出所有子元素中的标题，并将用户带到相应的位置。
2.Xpointer：Xpointer 用来设定 XML 文件内不同位置的链接，和 HTML 中的内链接类似，但是，Xpointer 提供了 5 种不同的在 XML 文件内定位的方法，可将地址定位到相应的地方，功能上比 HTML 中的内链接更为强大。
绝对定位：root()——将地址定位到 XML 文件中的根元素位置。
属性名(x)——将地址定位到属性值为 x 的特定属性位置。
相对定位：child(x)——将地址定位到当前地址下的第 x 个子标记处。
child(x,y)——将地址定位到当前地址下第 x 个标记名为 y 的标记处。
child(x).child(y,z)——将地址定位到当前地址下的第 x 个标记处，然后将这个标记作为当前地址，再找出该标记下的第 y 个标记名为 Z 的控制标记。
范围定位：span(Xpointer1，Xpointer2)——选择所有的在第一个 Xpointer 开始和第二个 Xpointer 结束之间的内容。其中 Xpointer1、Xpointer2 表示其他的定位方法。
属性定位：attr(x)——找出第一个具有 x 属性的标记。
字符串定位：搜寻特定的字符串，然后将地址定位到特定的字符串处。
合并定位：将上述的定位方法进行组合，产生更多的功能。各种定位方法之间用“.” 符号分隔。
■DOM（Document Object Model）
早在 HTML 中，DOM 就有应用了。DOM 可以看作是一种 ActiveX 对象，它绑定封装了一部分文件存取 API（应用程序编程接口），使用户能够使用脚本语言（VBScript、JavaScript 等）来调用 DOM 对象，达到存取、操作文件内容的目的。以前在 HTML 中，我们利用 DOM 来创建动态网页,在 XML 文件中，我们同样可以利用 DOM 来创建动态网页，并且 DOM 可以用来加载 XML 文件，并加以解析、截取和操作 XML 文件中的信息。
IE 5 支持 XML 和 DOM 的结合应用，提供了四种 DOM 对象：XMLDOMDocument、XMLDOMNode、XMLDOMNodeList、XMLDOMnameNodeMap。这些 DOM 对象提供了很多方法和属性，用法同一般的 ActiveX 对象也没有什么区别。具体的属性、方法可以参阅微软的 Web 站点。
我们下面举个例子，3.htm 这个 HTML 文件用到了 XMLDOM 对象，在这个 HTML 文件中使用 JavaScript 创建了 DOM 对象，然后调用 DOM 对象，将我们前几期讲 XSL 时的 XML 文件、XSL 文件的例子读入，然后将 XML 文件依照 XSL 样式表的设定显示在浏览器中。例：
〈html〉
〈head〉
〈title〉DOM 应用举例〈/title〉
〈SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="onload"〉