第七章XML链接《XML实用教程》第2页15:44:03要点及主要内容XLink与HTML链接的区别XLink中的简单链接与扩展链接XLink中几个重要属性的含义和用途使用XPointer定位XML文档片段的方法如何在XML链接中加入XPointer和XMLBase的含义即用法第3页15:44:047.1XLink与HTML链接的区别HTML链接的局限性:•HTML链接的单向性,不知道它有哪些链接源点•HTML不能表现多个链接的关系和结构信息•HTML的链接可能会出现协作问题XML链接的优越性:•XML可以建立除XML文档之外的其他类型数据间的链接•XML允许链接的建立者利用文件结构指定文件内部的资源片断•XML链接具有简单链接和扩展链接•利用XML链接技术可以实现在一个XML文档内部的定位•利用链接库,可以将链接信息从XML文档中分离出来从而简化链接的管理第4页15:44:047.2XLink中的简单链接与扩展链接7.2.1XML链接术语:•链接(Link)•链接元素(Linkingelement)•资源(Resource)•内建链接•定位器(Locator)•参与资源(Participationresource)•本地资源(Localresource)•远程资源(Remoteresource)•游历(Traversal)•弧(Arc)•XLink应用•简单XML链接(SimpleXMLLinks)•扩展链接(ExtendedXMLLinks)第5页15:44:047.2.2简单XML链接•XML的灵活性和可扩展性:•XML链接元素可以包含的属性:1.xlink:type属性2.xlink:href属性3.xlink:title、xlink:role属性4.xlink:show和xlink:actuate属性7.2XLink中的简单链接与扩展链接第6页15:44:047.2.2简单XML链接例?xmlversion=1.0encoding=gb2312?Booksxmlns:xlink=:type=simplexlink:href=:show=newxlink:actuate=onLoad数据库系统概论/bookbookxlink:type=simplexlink:href=:show=newxlink:actuate=onLoad计算机网络/book/Books7.2XLink中的简单链接与扩展链接•为了访问XLink的属性和特性,我们必须在文档的顶端声明XLink命名空间。xmlns指定XLink的名称空间“”;•book元素和description元素中包含了XLink的属性,我们称其为链接元素;•xlink:type属性的取值为“simple”,表示该链接是一个简单XML链接;•xlink:href属性指定要联接的URL。在这一点上,它和HTML一样;•xlink:show属性的取值为“new”,表示链接激活时在新开窗口显示目标资源;•xlink:actuate属性的取值为“onLoad”,表示当初始文档装入时,即载入该资源;第7页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接扩展链接的组成结构:扩展XML链接元素通常由一个资源集合和一个连接集合组成资源集合可以包括本地资源和远程资源,如果资源是XML链接元素的组成部分,则该资源是本地资源,否则就是远程资源,比如另外的XML文档或本文档的其他元素。连接集合中的各元素表示资源集合元素之间的链接。除了资源集合和连接集合以外,扩展XML链接元素还可以包括其他内容或标记,甚至可以包含简单XML链接或扩展XML链接作为其子元素。第8页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接扩展链接的属性:1.xlink:type属性扩展XML链接的xlink:type属性值固定为“extended”。2.xlink:role和xlink:title属性扩展链接也可以具有语义属性,即上节介绍过的xlink:title和xlink:role属性,其意义与简单链接中的相似,只不过是用于描述整个链接。注意:和简单链接不同,扩展链接元素并不包含href属性,为了指明参与链接的不同位置及链接之间的连接,我们有必要使用子元素locator和arc。第9页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接创建本地资源元素:本地资源元素的元素名可以任意,本书我们暂以resource代表本地资源元素。:resource元素的定义如下:!ELEMENT:resourceANY!ATTLISTresourcexlink:typeCDATA#FIXEDresourcexlink:roleCDATA#IMPLIEDxlink:titleCDATA#IMPLIEDxlink:labelNMTOKEN#IMPLIEDresource本地资源元素可以有四个属性第10页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接创建远程资源元素:远程资源元素的元素名可以任意,本书暂以locator代表远程资源元素。locator元素的定义如下:!ELEMENTlocatorANY!ATTLISTlocatorxlink:typeCDATA#FIXEDlocatorxlink:hrefCDATA#REQUIREDxlink:roleCDATA#IMPLIEDxlink:titleCDATA#IMPLIEDxlink:labelNMTOKEN#IMPLIEDlocator远程资源元素可以有五个属性第11页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接创建链接弧元素:链接弧元素的元素名可以任意,本书暂以arc代表链接弧元素。locator元素的定义如下:arc元素的定义如下:!ELEMENTarcANY!ATTLISTarcxlink:typeCDATA#FIXEDarcxlink:fromCDATA#REQUIREDxlink:toCDATA#REQUIREDxlink:arcroleCDATA#IMPLIEDxlink:titleCDATA#IMPLIEDxlink:show(embed|replace|new)#IMPLIEDxlink:actuate(onLoad|onRequest)#IMPLIEDarc链接弧元素可以有七个属性第12页15:44:047.2XLink中的简单链接与扩展链接7.2.3扩展XML链接创建标题元素:标题元素的元素名可任意,本书暂用title代表,title类型元素可以包含任意内容、属性,也可以包含子元素,因此可以实现资源的描述和内部结构。title类型元素可以作为本地资源元素、远程资源元素或链接弧元素的直接子元素出现。下面是title类型元素的一个可能的DTD声明及实例。!ELEMENTtitleANY!ATTLISTtitlexlink:typeCDATA#FIXEDtitlexml:langCDATA#IMPLIED其中一个属性xml:lang,用来指定一种语言。arc链接弧元素可以有七个属性第13页15:44:057.2XLink中的简单链接与扩展链接7.2.3扩展XML链接链接库:一个包含入站链接弧或第三方链接弧集合的文件称为链接库(linkbase),链接库必须是一个XML文档,它使得链接管理相对容易。创建链接库是为了将资源与链接分离开来,可以对它们分别进行编辑和修改。通过链接库文件,可以为一个只读文件增加一个链接,就像XSL文档将XML的数据内容与表现方式分离开来一样。通过将链接库弧的起始资源指向另一个链接库弧,还可以形成一个链接库链。链的长度可以由初始的链接弧限定。也就是说,一个链接库中包含有对另外一个链接库的引用。应用程序可以沿着这些链接,随意往下搜索。第14页15:44:05XPointer(XMLPointerLanguage,XML指针语言)是关于XML指针的规范,它的主要功能是在XML文档中定位片段(fragment),它可以用于需要文档内部定位的任何应用场合,比如在可视化的XML编辑器中用于描述用户选择的节点或字符串等等。但最常见的是使用XPointer描述XLink链接的目标资源,在XML链接中,通常将它加到URL的结尾,更明确地表示目标资源的某个片段。本节将讲述XPointer的语法,以及它如何与XML结构化文档相关联。7.3XPointer语言7.3.1XPointer概述XML是结构化的文档,借助文档结构进行的内部定位即成为可能,这就是XPointer语言的主要功能,它支持在XML文档中定位元素、属性、字符串等内部结构。与HTML的命名锚定位法相比,XPointer的优越性体现在,XPointer可以创建到文档任何部分的链接,而不必在目标文档中放置链接元素。因而,XPointer不仅允许链接本地站点上文档的片段,而且可以链接其它站点的文档。XPointer是XPath表达式语言的扩展,和XPath一样,XPointer用于标识XML文档的部分和片段。当作为XLink的部分使用时,Xpointer表达式称为段标识符。XPointer在XPath语言的基础上进行的扩展包括:除了对节点的定位,还支持对某点或者某个区域的定位。“点”是指文档内容中的某个位置,“区域”是指两“点”中间的连续文档内容;通过字符串匹配来定位资源片段等相应信息;在URI引用中使用定位表达式作为文档片段的标识符。第15页15:44:05在XML链接中加入XPointer的方法很简单,在目标文档的URI结尾加上一个“#”号和一个XPointer段标识符即可。XPointer规范还允许链接到指定文档的一个片段,而忽略文档的其它部分,这时,需要将符号“#”换成符号“|”。本书前面章节已介绍过XPath的基本语法,XPath是通过轴、谓词和函数来对XML文档中树型结构的各部分进行选择的。XPointer的基本思想也是如此。XPointer还可以表达多个这样的选择,而且依次在前面所选的结果中再次进行选择。XPointer语法中,对XML文档的片段进行标识的形式有三种:完整形式(FullXPointer)、无修饰名称(barename)或子节点序列(childSequence)。其中,后两种属于完整XPointer定位的简记形式。7.3XPointer语言7.3.2XPointer的三种形式1.完整形式的XPointer完整形式的XPointer可以包括由一个或多个XPointer部分(XPointerPart),各部分之间可由空格分开,也可以没有任何分隔符。每个XPointer部分以“xpointer”开始,其后紧跟一个表达式,该表达式用括号括起,表示根据此表达式进行定位计算。这个表达式是一个位置路径(LocationPath),我们将在下一小节作具体说明。包含多个部分的XPointer是从左至右逐个部分计算,首先计算第一部分,如果第一个XPointer部分运算失败,将运算第二个XPointer部分,直至得到运算结果或处理完所有的部分。2.无修饰名称在表达式xpointer(id(XX))中,利用id()进行元素定位,表示选取文档中ID属性值等于指定值的元素,由于这种定位方式很常用,因此XPointer语言提供了一种简写方式,可以将xpointer(id(name))简写成name。我们称之为无修饰名称