7.4 XML Base
   

在HTML链接中,当指定链接的相对路径时,基础路径一般是当前路径,但人们可以用BASE元素显式指定相对路径的基路径,在进行路径解析时,浏览器将BASE指定的路径与相对路径连接起来,形成资源的绝对路径。例如:

……
<BASE href = "http://www.htmllink.com/">
……
<A href = "student.htm">Student List</A>
……

当链接Student List激活时,将显示资源"http://www.htmllink.com/student.htm"。

在XML链接中,可以发现实现相同的功能的类似机制,这就是XML Base,简称为XBase。但是XML Base不仅限于XML链接领域,它还可以用于指定相对URI的其他应用。

XML Base的指定是通过元素的xml:base属性指定的,前缀xml是用于表示命名空间http://www.w3.org/XML/1998/namespace,类似地,可以用其他前缀代替该命名空间,但考虑到文档的可读性,不提倡这样做。XML Base的作用范围是包括其所有后代节点的整个元素,除非在后代元素指定了新的XML Base。

作为一个有效的(validated)XML文件,xml:base属性应该在DTD中声明。下面是一个可能的DTD声明。

<!ELEMENT BOOK ANY>
<!ATTLIST BOOK xml:base CDATA #IMPLIED……>

下面是一个利用上面的DTD定义的元素实例。

<BOOK xml:base = "http://www.xml.net.cn/book/">
XML初学进阶
……
<CHAPTERxml:base = "http://www.xml.net.cn/book/chapters/">
……</CHAPTER>
……
</BOOK>

在上面的例子中,BOOK元素内的CHAPTER子元素的XML Base是"http://www.xml.net.cn/book/chapters/",而在BOOK元素的其他地方,无论是CHAPTER元素前后,XML Base仍然是"http://www.xml.net.cn/book/"。此时BOOK元素的xml:base作用范围出现了一个洞,这与许多程序设计语言中非局部变量的作用范围是一致的。

由于xml:base是作为元素的属性存在的,作用范围是整个元素,而一个格式良好的XML文件的元素不能交叉,因此xml:base的作用范围也不会出现交叉。