** XLink1.0 ** ** 学习笔记 ** ** **
张小根
1、 XLink 的规格说明书是用来描述和创建在 XML 文档中资源之间的链接语言规范,目前 W 3C 的此工作组由于工作已经完成所以已经解散了。这个规范定义了两种链接声明类型,即简单型的(类型为 simple 的)和扩展型的(类型为 extended ),其实简单型的链接是扩展型的链接的便于书写的简单形式。
2、 要声明一个 XML 文档的链接,必须在这个所声明的链接的元素中定义这个命名空间: http://www.w3.org/1999/xlink 。然后增加相关的属性就可以了。
例如:
1<authors 1999="" example”="" for="" http:="" list="" list”="" www.w3.org="" xlink="" xlink:actuate="“onRequest”" xlink:href="“authors.xml”" xlink:role="“author" xlink:show="“replace”" xlink:title="“Author" xlink:type="“simple”" xmlns:xlink="“" ”=""></authors>
注意:如果你要在自己的元素中增加 XLink 属性并且是使用 DTD 来定义的那么就需要在
中定义链接元素的这些属性,否则,验证处理器将不能识别 xlink:* 。对于上面的例子,在 DTD 中应该为如下这样的形式:
3、 扩展链接也有几种类型,其实是指 arc 的类型: inbound 、 outbound 、 third-party ; outbound( 输出 ) 是指链接的起点是本地资源 (local resource) ,而链接的终点是远程资源 (remote resource) , inbound( 输入 ) 是指链接的起点资源是远程资源,而终点资源是本地资源, third-party 是指起点和终点资源都是远程资源。这里本地资源是指通过具体的值来指定的资源,而远程资源是指通过引用也就是 URI 来指定的资源,即使此资源是在同一个 XML 文档中,如果是通过 URI 来指定的也叫远程资源。
4、 在 simple 、 extended 、 locator 、 arc 、 resource 、 title 这 6 类元素的属性中只有 type 属性是必须需要的,还有就是 locator 元素的 href 属性是必须的,其他所有的属性都是可选的。
5、 声明为扩展链接的链接可以有 locator 、 resource 、 arc 、 title 子元素, locator 用于定义远程资源, resource 用于定义本地资源, arc 用于定义资源之间的方向弧, title 用于定义一些自然语言的描述。
6、 xlink:type :用于指定链接元素的类型,其取值可以是:
² simple :表示元素是简单型的链接
² extended :表示是扩展链接
² locator :表示是远程资源
² resource :表示是本地资源
² arc :表示是链接资源的弧
² title :表示是自然语言的链接描述
7、 xlink:show 用于定义目标内容如何显示给用户,其取值可以是:
² new :目标内容以一个单独的上下文显示(在浏览器中,可能是一个新的浏览器窗口)。
² replace :目标内容应当取代原始上下文中的内容(在浏览其中这是通常的链接行为)。
² embed :这个内容嵌入到文档中的链接位置(代替链接表示本身)。
² other :这个链接没有指定被访问的行为。如果是这个值时,那么这个文档就会包含有关这个链接的其他提示,例如其他描述这个链接目的的标记(文档的专用类型)。
² none :这个链接没有指定被访问的行为。这是,这个文档不会包含有关如何访问这个链接的其他提示。
8、 xlink:actuate 属性定义什么时候触发这个链接,其取值如下:
² onRequest :用户必须采取动作触发这个链接,这是类似于 HTML 中超链接的方式,用户必须点击链接文本来激活这个链接。
² onLoad :这个链接在载入文档时自动激活。在 xlink:show 属性为 embed 时非常有用,而且在它为 new 时也有一些应用(例如:打开源文档时,会自动打开一个另外的上下文窗口,包含了链接的终点资源)。
² other :这个链接没有指定激活链接时的行为。如果 actuate 属性为这个值时,那么文档就会包含如何激活这个链接的其他提示。
² none :这个链接没有指定激活这个链接时的行为。这是,这个文档不回包含如何激活这个链接的其他提示。
9、 resource 元素用于定义本地资源,这个元素包含 xlink:type, xlink:role, xlink:title, xlink:label 四个属性,其中 xlink:type 的值是 resource 。
10、 locator 元素用于定义远程资源,这个元素包含 xlink:type, xlink:href, xlink:role, xlink:title, xlink:label 五个属性,其中 xlink:type 的值是 locator, 并且 href 定义了一个用于找到远程资源的 URI ,注意如果处理器能够理解 XPointer 引用,那么这个 URI 就可以包含一个对于 XML 文档子集的 XPointer 引用。
11、 arc 元素定义了资源间的链接关系,其属性包括 xlink:type, xlink:arcrole, xlink:title, xlink:show, xlink:actuate; xlink:from, xlink:to 。其中 type 的值是 arc, 而 xlink:from 和 xlink:to 两个属性的值是和 resource 和 locator 元素中的 xlink:label 的值匹配的。
12、 如果在一个 xlink 的链接中没有包含任何 arc 元素,那么 xlink 就会假设每个 locator 和 resource 元素之间都将有一个隐式的 arc 元素,所以只有显式的定义 arc 才有意义。
13、 如果有多个 arc 元素都定义了相同的起点资源和终点资源,那么只有第一个会被解析,并且这在某些解析其中是不允许的,所以最好不要定义重复的 arc 元素。
14、 一个链接应用为了从起点资源找到终点资源,它需要定位起点资源的位子和链接的位置,这对于 outbound 的 arc 来说不是个问题,因为起点资源不是链接元素本身就是其子元素,但对于 inbound 和 third-party 类型的 arc 来说,就是一个问题了,为了解决这个问题, xlink 提供了一种链接库的机制,就是将所有的链接定义在一起(一般一个链接文档中,这样便于管理链接 , 而且这个文档必须是 XML 的),并且提供一种 arc ,该 arc 的终点资源就是 xlink 的链接库,并且 show 属性必须忽略,但是这个 arc 的 arcrole 必须是: http://www.w3.org/1999/xlink/properties/linkbase ,例如:
我们有如下链接库 menulink.xml :
1<linkbase 1999="" http:="" menu”="" of="" other="" parts="" www.w3.org="" xlink="" xlink:title="“See" xlink:type="“extended”" xmlns:xlink="“" ”="">
2<endpoint 1”="" xlink:href="”menu1.xml”" xlink:label="”menuPage" xlink:title="”Beverages”" xlink:type="“locator”"></endpoint>
3<endpoint 2”="" xlink:href="”menu2.xml”" xlink:label="”menuPage" xlink:title="”Appetizers”" xlink:type="“locator”"></endpoint>
4<endpoint 3”="" xlink:href="”menu3.xml”" xlink:label="”menuPage" xlink:title="”Sandwiches”" xlink:type="“locator”"></endpoint>
5<endpoint 4”="" xlink:href="”menu4.xml”" xlink:label="”menuPage" xlink:title="”Desserts”" xlink:type="“locator”"></endpoint>
6<link 1”="" 2”="" xlink:actuate="“onRequest”/" xlink:from="“menuPage" xlink:show="“replace”" xlink:to="“menuPage" xlink:type="“arc”"/>
7<link 2”="" 3”="" xlink:actuate="“onRequest”/" xlink:from="“menuPage" xlink:show="“replace”" xlink:to="“menuPage" xlink:type="“arc”"/>
8<link 3”="" 4”="" xlink:actuate="“onRequest”/" xlink:from="“menuPage" xlink:show="“replace”" xlink:to="“menuPage" xlink:type="“arc”"/>
9</linkbase>
然后,我们有如下的 menu1.xml( 可以应用于所有的菜单页面的相同通用格式: )
1<menupage 1999="" http:="" www.w3.org="" xlink="" xmlns:xlink="“" ”="">
2<linkbase xlink:type="”extended”">
3<linkbasestart xlink:label="“linkbaseStart”" xlink:type="“resource”"></linkbasestart>
4<linkbaseend xlink:href="“menulink.xml”" xlink:label="“linkbaseEnd”" xlink:type="“locator”"></linkbaseend>
5<loadlinkbase 1999="" http:="" linkbase="" properties="" www.w3.org="" xlink="" xlink:actuate="“onLoad”" xlink:arcrole="“" xlink:from="“linkbaseStart”" xlink:to="“linkbaseEnd”" xlink:type="“arc”" ”=""></loadlinkbase>
6</linkbase>
7<menuitem <name=""/>Coffee
8<price>$0.99</price>
9
10 </SPAN</menupage>