扩展链接提供了完全的Xlink的功能,比如它可以链接任意数量的资源,所以它们的结构就相当复杂,包括指向远程资源的元素,包含本地资源的元素,用来定义arc遍历规则的元素和用来指定人类可以阅读的资源的元素等等。
为了说明问题,我们从一个例子说开去,下面是一个复杂链接的例子:

这里关于学生描述、关于学生导师、关于学生的辅修课一、关于学生的主修课一、二等等信息都是在其他不同的资源上,通过扩展链接我们把它们有机的联系在了一起。这里需要注意的是所有的链接是没有方向的,方向需要在遍历 (traversal)规则中指定,如果不提供规则的话,相联系的资源是没有特定顺序的,并且也不知道每一个资源是否可以得到。
扩展类型的链接可以以任意的顺序包含下面的元素:
1 locator类型元素用来指定加入该连接的远程资源的地址
2 arc类型元素提供了在属于该链接的资源之间进行遍历的规则
3 title类型元素对链接提供了人类可以阅读格式的标签
4 resource类型元素提供了加入该链接的本地资源
实际上,一个扩展链接的资源可以只有一个或者一个都没有,这样它就是不可遍历的。
下面是一个扩展类型元素(courseload)和它子元素(person、course、gpa、go)应用的例子。
<courseload xmlns:xlink=http://www.w3.org/TR/2000/PR-xlink-20001220/ xlink:type="extended"
>
<tooltip>Course Load for Pat Jones</tooltip>
<!-- 具有locator类型的元素必须要有属性href -->
<person xlink:type="locator" xlink:href="students/patjones62.xml" xlink:label="student62"
xlink:role="http://www.example.com/linkprops/student" xlink:title="Pat Jones" />
<person xlink:type="locator" xlink:href="profs/jaysmith7.xml" xlink:label="prof7" xlink:role="http://www.example.com/linkprops/professor" xlink:title="Dr. Jay Smith" />
<course xlink:type="locator" xlink:href="courses/cs101.xml" xlink:label="CS-101" xlink:title="Computer Science 101" />
<gpa xlink:label="PatJonesGPA" xlink:type="resource" xlink:role="http://www.example.com/linkprops/gpa">
3.5
</gpa>
<!-这里的label属性在arc元素中用到,用来作为from或者to属性的值 -->
<go xlink:type= "arc" xlink:from="student62" xlink:to="PatJonesGPA"
xlink:show="new" xlink:actuate="onRequest" xlink:title="Pat Jones's GPA" />
<go xlink:type= "arc" xlink:from="CS-101" xlink:arcrole="http://www.example.com/linkprops/auditor" xlink:to="student62"
xlink:show="replace" xlink:actuate="onRequest" xlink:title="Pat Jones, auditing the course" />
<go xlink:type= "arc" xlink:from="student62" xlink:arcrole="http://www.example.com/linkprops/advisor" xlink:to="prof7"
xlink:show="replace" xlink:actuate="onRequest" xlink:title="Dr. Jay Smith, advisor" />
</courseload>
这里我们主要需要分析一下具有arc类型的元素。具有arc类型的元素可能有遍历属性from和to,这里需要注意的是每一个具有arc类型的元素的<from,to>对在所有元素中必须是唯一的。行为属性show和actuate,语义属性arcrole和title。
这些遍历属性定义了在加入到同一个链接的资源之间进行遍历的方法,这里资源是用label属性来作为它们的标识符的。From属性定义了遍历可能起始的地方,也就是上面讲过的开始资源(starting resource)。To属性定义了遍历终止的地方,也就是上面讲过的结束资源(ending resource)。行为属性是为了帮助Xlink应用程序确定当遍历到结束资源的时候所采取的行为。
语义属性描述了开始资源和结束资源之间的关系。Arcrole属性的作用可以用下面一句英文来解析"starting-resource HAS arc-role ending-resource.",举个例子来说,一个资源从广义上讲代表了一个"人",但是从一个特殊的arc的上下文角度去看的时候,它可能表示"母亲",而从另外一个特殊的arc的上下问角度去看的时候,它可能表示"女儿"。
上面的例子所表示的遍历路径情况如下图所示:

上图的虚线表示了遍历的规则。
这里举一个其他的例子,用来进一步加深对扩展链接的理解,假定一个扩展链接包括五个locator,其中两个的标签为说明"parent",另外三个的标签为"child",具体如下:
<extendedlink xlink:type="extended">
<loc xlink:type="locator" xlink:href="..." xlink:label="parent" xlink:title="p1" />
<loc xlink:type="locator" xlink:href="..." xlink:label="parent" xlink:title="p2" />
<loc xlink:type="locator" xlink:href="..." xlink:label="child" xlink:title="c1" />
<loc xlink:type="locator" xlink:href="..." xlink:label="child" xlink:title="c2" />
<loc xlink:type="locator" xlink:href="..." xlink:label="child" xlink:title="c3" />
<!-- arc-type elements would go here -->
</extendedlink>
下面的规则决定了从parent资源到child资源的遍历规则为: p1-c1, p1-c2, p1-c3, p2-c1, p2-c2和p2-c3:
<go xlink:type="arc" xlink:from="parent" xlink:to="child" />
如果对locator元素没有指定from或者to属性的话,缺省的值被解释为表示所有的标签。比如下面的规则决定了从parent资源到child资源的遍历规则为: p1-c1, p1-c2, p1-c3, p2-c1, p2-c2, p2-c3, c1-c1, c1-c2, c1-c3, c2-c1, c2-c2, c2-c3, c3-c1, c3-c2, and c3-c3:
<go xlink:type="arc" xlink:to="child" />
如果在扩展链接中没有提供arc类型的元素的时候,缺省的就表示在链接中的所有标签(你不特别指定,我就把所有的列出来供你参考,就象在SQL查询语句SELECT中不指定where子句的话,就会列出所有的记录一样)。
比如下面的例子:
<go xlink:type="arc" />