您的位置:寻梦网首页编程乐园XML 编程XML技术讲座
XML 编程

XML 技术讲座之十

XML链接语言

方正技术研究院 XML中国论坛网(www.xml.net.cn)王绪胜

本讲和下一讲将讨论XML规范的另一个重要组成部分--XML链接规范,XML链接规范分为三个部分:XLink语言、XML Base和XPointer语言。其中,XLink语言用于建立资源之间的链接;XML BASE提供与HTML中BASE标记相似的功能,用于指定相对URL的绝对路径;XPointer用于定位XML文档中的片断。需要指出的是,XML Base和XPointer语言的使用并不局限于链接,它们的主要功能在于资源的定位。本讲主要介绍XLink语言和XML Base,XPointer语言将在下一讲介绍。

当前的主流浏览器Netscape Navigator和Internet Explorer 对XLink的支持非常弱,在Netscape Navigator 6.0的预览发行版中可以发现对简单XML链接的支持,但是其支持的部分并不完全符合最新的规范;Internet Explorer 5.5没有提出对XLink的支持。如果要在浏览器中显示链接,可以利用XSLT 将XML链接转化为 HTML链接加以显示。

XML链接与HTML链接

在HTML中,常用标记表示链接。通过标记,可以从一个文件链接到另一个文件,或者链接到文件的某一部分。另外,标记<IMG>和<OBJECT>允许图形等对象直接嵌入文件。XML链接完全不同,它没有专门的链接元素,需要通过指定元素属性来表示链接,只要元素包含xlink:type属性,且取值为"simple"或"extended",该元素就是链接元素,其中xlink是代表XLink命名空间的前缀,当前版本的URI是"http://www.w3.org/1999/xlink",根据xlink:type属性的取值,可以将XML链接划分为简单XML链接和扩展XML链接。简单XML链接的xlink:type固定取值为"simple",扩展XML链接的xlink:type固定取值为"extended"。

简单XML链接

简单XML链接与HTML链接非常相似,它在链接元素和目标资源间建立链接。下面是一个简单XML链接的元素定义,其中包含xlink前缀的属性都是链接属性,在链接属性外,链接元素还可以有任意属性和任意内容。


<!ELEMENT SimpleLink (#PCDATA)>
<!ATTLIST SimpleLink
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (simple) #FIXED "simple"
xlink:href CDATA #REQUIRED
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (embed | replace new) "replace"
xlink:actuate (onLoad | onRequest) "onRequest"
>

xlink:href属性是目标资源的URL,可以是绝对URL、相对URL或文件片段,相对URL必须接收XML Base中指定的绝对路径,XLink处理程序将XML Bae和相对URL合并起来形成目标资源的URL,而文件片段则由XPointer指定。xlink:role和xlink:title是用于描述目标资源的属性,统称为语义属性。xlink:role用于机器阅读,如搜索引擎的爬虫等,而xlink:title用于人工阅读;xlink:show和xlink:actuate用于描述链接激活时的行为,统称为行为属性。xlink:show表示链接激活时的目标资源的显示环境,取值"embed"表示在当前窗口嵌入显示,"replace"表示在当前窗口显示目标资源,替换原来的显示内容,"new"表示新开窗口显示目标资源,xlink:actuate是指链接的激活时机,"onLoad"是指文件加载时直接激活链接资源,"onRequest"是指在文件加载后,用户发出链接激活的命令才激活,如用户点击了链接等。

利用上面的元素声明,定义元素SimpleLink的实例如下。


<SimpleLink >
xmlns:xlink = "http://www.w3.org/1999/xlink"
xlink:href = "http://www.xlinksample.com/simplelink.xml"> This is a simple xlink!
</SimpleLink>

扩展XML链接

扩展XML链接可以在多个资源(尤其是只读资源)之间建立多向的链接。扩展XML链接元素的构造,很大程度取决于用户,但通常包括一个资源集合和一个连接集合,连接集合元素表示资源集合元素间的连接。资源集合中可以包括本地资源和远程资源,如果资源是XML链接元素的组成部分,该资源是本地资源;否则就是远程资源,如其他的XML文件或本文件的其它元素。

下例是一个扩展XML链接的DTD声明,其中ExtendedLink元素是扩展XML链接元素,它包含零到多个Local元素、Remote元素和Arc元素。其中Local元素表示本地资源;Remote元素表示远程资源;Arc元素表示这些资源间的连接,称为链接弧。需要指出的是,这些元素的名称并不重要,真正对链接起作用的并不是元素名称,而是这些元素所具有的XLink属性。

<!ELEMENT ExtendedLink (Local | Remote | Arc)*>
<!ATTLIST ExtendedLink
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (extended) #FIXED "extended"
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED>
<!ELEMENT Local ANY>
<!ATTLIST Local
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (resource) #FIXED "resource"
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT Remote ANY>
<!ATTLIST Remote
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (locator) #FIXED "locator"
xlink:href CDATA #REQUIRED
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT Arc (#PCDATA)>
<!ATTLIST Arc
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (arc) #FIXED "arc"
xlink:from NMTOKEN #IMPLIED
xlink:to NMTOKEN #IMPLIED
xlink:arcrole CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (embed | replace | new ) "replace"
xlink:actuate (onLoad | onRequest) "onRequest">

从上面我们可以看出,无论是链接元素自身、资源元素还是链接弧元素,都包含了XLink命名空间的属性,另外它们也可以包含其他内容和属性。对于本地资源元素,xlink:type属性固定取值为"resource",远程资源元素的xlink:type属性固定取值为"locator",链接弧的xlink:type属性固定取值为"arc"。其中xlink:role(xlink:arcrole)和xlink:title属性的含义与简单XML链接中相类似,只不过描述的是自己所在的资源元素或链接弧。Remote元素中的xlink:href属性是指远程资源的URL。Local和Remote中的xlink:label是指资源的标识,在Arc元素中的xlink:from和xlink:to属性的取值必须是某个xlink:label的取值,表示从xlink:from标识的资源到xlink:to标识的资源的链接。由于xlink:label并不是唯一标识,所以一个Arc元素可能表示了多个资源间的链接。xlink:from和xlink:to属性都可以省略,表示链接包含的所有资源都参与链接,xlink:from、xlink:to和xlink:label称为遍历属性。

利用上面的元素声明,定义元素ExtendedLink的实例如下。

<ExtendedLink xmlns:xlink = "http://www.w3.org/1999/xlink">  
<Local   
xlink:role="department" xlink:title = "系别" xlink:label="department">   
计算机系 
/Local>  
Remote   
xlink:href = "http://www.xlinksample.com/teacher.xml"   
xlink:role = "teacher" xlink:title = "老师:张三" xlink:label = "teacher">   
张三 
</Remote>  
<Remote   
xlink:href = "http://www.xlinksample.com/DataStructure.xml"   
xlink:role = "course" xlink:title = "数据结构" xlink:label = "course">   
数据结构 
</Remote>  
<Remote   
xlink:href = "http://www.xlinksample.com/OperatingSystem.xml"   
xlink:role = "course" xlink:title = "操作系统" xlink:label = "course">   
操作系统 
</Remote>  
<Arc   
xlink:from = "teacher" xlink:to = "department"   
xlink:arcrole = "belonged" xlink:title = "属于">   
教师所属系 
</Arc>  
<Arc   
xlink:from = "teacher" xlink:to = "course"   
xlink:arcrole = "teach" xlink:title = "教师开课">   
教师开课安排 
</Arc>
</ExtendedLink>

XML Base

XML Base是用于指定相对URL的绝对路径,与HTML中的BASE标记功能相似,不同的是,XML Base的指定是通过元素的xml:base属性指定的,前缀xml是用于表示命名空间"http://www.w3.org/XML/1998/namespace"。XML Base的作用范围是包括其所有后代元素的整个元素,除非在后代元素指定了新的XML Base。

来源:网络世界