Правила навигации (элементы типа arc)
По сравнению с простыми связями расширенные связи являются несколько более сложными концепцией, поскольку они предоставляют множество различных путей обхода. Например, в расширенной связи с тремя ресурсами A, B и C возможны девять различных обходов:
Каждый из этих потенциальных путей между ресурсами может иметь различные правила определения того, когда связь должна обходиться и что должно происходить при ее обходе. Эти потенциальные обходы называются ребрами (arc), а в XML они представляются с помощью элементов, у которых значение атрибута xlink:type равно arc. Правила обхода указываются добавлением атрибутов xlink:show и xlink:actuate к элементам типа arc.
Сами элементы типа arc используют атрибуты to и from, для указания направления перехода. Для задания начала и конца перехода применяются атрибуты xlink:label, значения которых сопоставляются для различных ресурсов в расширенной связи. Например, если атрибут xlink:from равен A, а атрибут xlink:to - B, то тогда ребро направляется из ресурса, у которого атрибут xlink:label равен A, в ресурс, чей атрибут xlink:label равен B. Приведенный ниже код демонстрирует сказанное:
<WEBSITE xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" xlink:title="Cafe au Lait"> <NAME xlink:type="resource" xlink:label="source"> Cafe au Lait </NAME> <HOMESITE xlink:type="locator" xlink:href="http://ibiblio.org/javafaq/" xlink:label="us"/> <MIRROR xlink:type="locator" xlink:title="Cafe au Lait Swedish Mirror" xlink:label="se" xlink:href="http://sunsite.kth.se/javafaq"/> <MIRROR xlink:type="locator" xlink:title="Cafe au Lait German Mirror" xlink:label="sk" xlink:href="http://sunsite.informatik.rwth-aachen.de/javafaq/"/> <MIRROR xlink:type="locator" xlink:title="Cafe au Lait Swiss Mirror" xlink:label="ch" xlink:href="http://sunsite.cnlab-switch.ch/javafaq/"/> <CONNECTION xlink:type="arc" xlink:from="source" xlink:to="ch" xlink:show="replace" xlink:actuate="onRequest"/> <CONNECTION xlink:type="arc" xlink:from="source" xlink:to="us" xlink:show="replace" xlink:actuate="onRequest"/> <CONNECTION xlink:type="arc" xlink:from="source" xlink:to="se" xlink:show="replace" xlink:actuate="onRequest"/> <CONNECTION xlink:type="arc" xlink:from="source" xlink:to="sk" xlink:show="replace" xlink:actuate="onRequest"/> </WEBSITE>
Первый элемент CONNECTION описывает ветвь из ресурса с xlink:label, равным "source", в ресурс с xlink:label, равным "ch". Второй элемент CONNECTION описывает ветвь из ресурса с xlink:label, равным "source", в ресурс с xlink:label, равным "us", - и так далее. На рисунке 2 приведена эта связь: овалы показывают ресурсы, а стрелки - ветви. Этот рисунок поход на рисунок 1 с тем исключением, что на нем между ресурсами появились соединения, указанные элементами типа arc.
Рис. 2.
В данном случае каждый элемент типа arc определяет точно одно соединение, поскольку метки (label) адресата и источника не используются совместно многочисленными ресурсами. Однако, такая схема не является обязательной. Отдельный элемент типа arc может на самом деле описывать несколько ветвей.