|
|
||
|
7.2.2.4 链接弧
链接弧(arc)用于表示扩展XML链接中资源之间的连接关系,它是扩展XML链接元素的子元素,xlink:type属性值为"arc",称之为链接弧元素。在用有向图描述扩展XML链接时,链接弧是连接资源的有向边,不过后面我们将要讲到,一个链接弧元素未必只表示一条有向边。在有向图中,随着结点个数的增加,其边的数目将指数级增加。因此在扩展XML链接中,随着资源的增加,连接的数量也会指数级增加。例如:如果一个扩展XML连接的资源由3个增加到4个,可能的连接数目将从9个上升到16个。 如果一个链接弧的起始资源在本地,而目标资源是远程的,那么这个链接弧称为出站(outbound)链接弧;反之,如果起始资源是远程的,而目标资源在本地,则称为入站(inbound)链接弧;如果起始资源和目标资源都不在本地,则称为第三方(third-party)链接弧。虽然没有作明确规定,但一般而言,一个链接一般只包含一类链接弧,因此可称为出站链接、入站链接或第三方链接。对HTML链接和简单XML链接而言,由于链接总是从链接元素到href代表的远程资源,因此都属于出站链接。扩展XML链接可以包括三种链接中的任意一种。 链接弧元素本身必须作为扩展XML链接元素的直接子元素,否则该元素将失去其链接意义。元素中可以包含任何内容,在一般情况下,这些内容不具有链接意义。链接弧元素中的属性可以有遍历属性(xlink:from和xlink:to)、行为属性(xlink:show和xlink:actuate)和语义属性(xlink:arcrole和xlink:title)。 xlink:from和xlink:to属性用于描述资源之间的连接,资源元素的标识通过其xlink:label属性识别。xlink:from定义了链接弧的起始资源,在有向图中是边的起点,xlink:to定义了链接弧的目标资源,在有向图中是边的终点。遍历属性的取值必须是资源元素(包括本地资源元素和远程资源元素)的xlink:label属性已经定义的值。总之,链接弧表示从xlink:from所代表的资源元素到xlink:to代表的资源元素之间的连接。由于xlink:from、xlink:to和xlink:label属性用于链接的遍历,因此这三个属性常被称为遍历属性(traversal attributes)。 如果xlink:from和xlink:to的值对资源元素是唯一的,即只有一个资源元素的xlink:label属性具有xlink:from或xlink:to指定的值,那么这个链接弧只包括一个连接,在有向图中表现为一条边。如果xlink:from和xlink:to的值对资源元素不唯一,即有多个资源元素的xlink:label属性具有xlink:from或xlink:to属性值,那么这个链接弧则表示多个连接,在有向图中表现为多条边。例如,下面例子中,扩展XML链接元素EXTLINK包含一个本地资源RESOURCE元素、三个远程资源LOCATOR元素和两个CONNECTION元素,它表示课程、教师和学生的关系。RESOURCE和LOCATOR元素的xlink:label属性依次定义为"DataStructure"、"teacher"和"student",CONNECTION元素的xlink:from和xlink:to的值必须为上述三个值之一。
用有向图来表示上面的例子,可以看到第一个CONNECTION元素表示了一条有向边,而第二个CONNECTION元素表示了两条有向边,见下图。
xlink:from和xlink:to属性可以省略,这时表示该扩展XML链接元素包含的所有资源元素均参与到链接中。如果省略了xlink:from属性,那么该链接弧表示从所有资源元素到xlink:to代表的资源元素的连接;类似地,如果省略了xlink:to属性,则表示从xlink:from代表的资源元素到该扩展XML链接元素的所有资源元素的连接。如果xlink:from和xlink:to两个属性同时省去,则表示所有链接元素构成的全连接,其中包括了从每个链接元素到自身的链接。 链接弧元素的行为属性xlink:show和xlink:actuate的含义及取值与简单XML链接中的相应属性一样。语义属性xlink:arcrole和xlink:title则是用于描述相对于链接弧的起始资源而言,目标资源所具有的性质,我们可以将xlink:arcrole 理解为自然语言中的谓语,而链接弧起始资源是自然语言中的主语,目标资源是自然语言中的宾语,这样一个链接弧就可以对应于自然语言中的语句。对于同一个资源而言,它对不同的起始资源有不同的性质,因此一个资源在不同的链接弧中可以定义不同的语义属性。 最后需要注意的是:链接弧不能重复定义。也就是说,在同一个扩展XML链接中,不能定义多个链接弧元素,它们的xlink:from的值和xlink:to的取值都相同。 |