Зв'язки в XML: XLink (частина 2)

Розширені зв'язку

Можна сказати, що прості зв'язку більшою чи меншою мірою нагадують зв'язку HTML. Розширені зв'язку значно перевершують зв'язку HTML з точки зору що надаються можливостей: вони включають багатонаправлені зв'язку між численними документами і зовнішні (out-of-line) зв'язку. Розширена зв'язок складається з набору ресурсів та їх сполук. Ресурси, що використовуються у зв'язку, можуть бути або локальними (які є частиною елемента розширеної зв'язку), або віддаленими (що не є частиною елемента розширеної зв'язку і які звичайно перебувають, хоча і необов'язково, в іншому документі). Кожен ресурс може бути або адресатом, або джерелом, або тим і іншим. Якщо зв'язок не містить жодного локального ресурсу, а тільки віддалені ресурси, вона називається зовнішньою зв'язком.

Синтаксис розширених зв'язків

Розширені зв'язку поділяються на віддалені і локальні ресурси. Локальний ресурс є частиною елемента розширеної зв'язку, значення атрибуту xlink: type якого одно resource.

Віддалений ресурс знаходиться поза елементом розширеної зв'язку, звичайно в іншому документі. Ці елементи можуть мати будь-яке ім'я, але включають атрибут xlink: type, значення якого дорівнює locator. Кожен елемент типу locator також містить атрибут xlink: target = _blank href, значенням якого є URI, локалізують цей віддалений ресурс.

Самі розширені зв'язку позначаються за допомогою типу extended і можуть вважатися просто обгортками для елементів типу resource, locator і arc (про останнє мова піде нижче).

Припустимо, наприклад, що ми описуємо сторінку зв'язків з сайтами Java. Один з цих сайтів – це Cafe au Lait в http://ibiblio.org/javafaq/. Крім нього існують ще три "дзеркальних відображення" (mirror) у трьох країнах. Частина людей, які зайшли на цей сайт, захоче отримати доступ до основного сайту, інша частина віддасть перевагу вирушити на "сайти-дзеркала". За допомогою XLink можна створити одну зв'язок, яка з'єднує всі чотири сайту, а також сторінку, з якою ми зв'язуємося. При активізації зв'язку браузер зможе вибрати найближчу до користувача зв'язок (повторимося, що цей приклад є виключно теоретичним). Чотири сайту описуються за допомогою елементів типу locator. Текст, який буде показаний користувачеві, на нашій сторінці описується елементом типу resource. Нижче наведено відповідний код XML:

<WEBSITE xmlns:xlink="http://www.w3.org/1999/xlink"
         xlink:type="extended">
  <NAME xlink:type="resource">Cafe au Lait</NAME>
  <HOMESITE xlink:type="locator"
xlink: target = _blank href = "http://ibiblio.org/javafaq/" />
  <MIRROR xlink:type="locator"
xlink: target = _blank href = "http://sunsite.kth.se/javafaq" />
  <MIRROR xlink:type="locator"
xlink: target = _blank href = "http://sunsite.informatik.rwth-aachen.de/javafaq/" />
  <MIRROR xlink:type="locator"
xlink: target = _blank href = "http://sunsite.cnlab-switch.ch/javafaq/" />
</WEBSITE>

Правила навігації (елементи типу 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: target = _blank href = "http://ibiblio.org/javafaq/"
           xlink:label="us"/>
  <MIRROR xlink:type="locator"
         xlink:title="Cafe au Lait Swedish Mirror"
         xlink:label="se"
xlink: target = _blank href = "http://sunsite.kth.se/javafaq" />
  <MIRROR xlink:type="locator"
         xlink:title="Cafe au Lait German Mirror"
         xlink:label="sk"
xlink: target = _blank href = "http://sunsite.informatik.rwth-aachen.de/javafaq/" />
  <MIRROR xlink:type="locator"
         xlink:title="Cafe au Lait Swiss Mirror"
         xlink:label="ch"
xlink: target = _blank 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", – і так далі.

У даному випадку кожен елемент типу arc визначає точно одне з'єднання, оскільки мітки (label) адресата і джерела не використовуються спільно численними ресурсами. Однак, така схема не є обов'язковою. Окремий елемент типу arc може насправді описувати декілька гілок.

Зовнішні зв'язки

Як було зазначено вище, розширені зв'язку також можуть бути і зовнішніми зв'язками. Зовнішня зв'язок не містить будь-якої частини будь-яких ресурсів, які вона поєднує, а зберігається в окремому документі, званому базою зв'язків (linkbase).

Так, список "сайтів-дзеркал", наведений в останньому прикладі, міг би зберігатися в окремому файлі на Web-сервері в певному місці, де його могли відшукувати браузери, щоб запросити місцезнаходження найближчого "Дзеркала", яке вони шукають.

В якості ще одного прикладу розглянемо якийсь навчальний курс з Java, що публікується на Web-сайті. На малюнку 3 показана вступна сторінка цього курсу. Цей курс складається з 13 занять (тижнів – week), кожне з яких охоплює від 30 до 60 сторінок лекційного тексту. Сторінка змісту для кожного заняття включає зв'язку з кожної такої сторінкою тесту, що читається на занятті.

Кожна з декількох сотень станиць, що утворюють весь цей навчальний курс, має зв'язки з попереднім документом (Previous link), наступним документом (Next link) або змістом (Top link) для кожного заняття (див. малюнок 4). Якщо спробувати грубо оцінити цей проект, то в ньому виявляється задіяним більше тисячі внутрішніх з'єднань, що охоплюють всі ці документи.

При збільшенні кількості документів можливі внутрішні з'єднання будуть рости по експоненційної залежності. Кожного разу, як якийсь документ буде видалений, перейменований або розбитий на кілька частин, необхідно вносити відповідні зміни у зв'язку на цій сторінці, на сторінці перед нею і після неї в цій "трійці", а також у змісті для заняття. Очевидно, така робота може відбити будь-яке бажання що-небудь міняти.

Розумне рішення – якщо б HTML дозволяло це – зберігати ці зв'язки в окремому документі. Тоді сторінки можна було б переструктурувати, редагуючи цей єдиний документ. Такий документ описував б зв'язку між головною сторінкою та окремими заняттями і, навпаки:

<COURSE xmlns:xlink="http://www.w3.org/1999/xlink"
        xlink:type="extended">
<TOC xlink: type = "locator" xlink: target = _blank href = "index.xml"
       xlink:label="index"/>
<CLASS xlink: type = "locator" xlink: target = _blank href = "week1.xml"
         xlink:label="class"/>
<CLASS xlink: type = "locator" xlink: target = _blank href = "week2.xml"
         xlink:label="class"/>


<! - Список аналогічних елементів ->

  
         xlink:label="class"/>
<CLASS xlink: type = "locator" xlink: target = _blank href = "week13.xml"
         xlink:label="class"/>
  <CONNECTION xlink:type="arc" from="index" to="class"/>
  <CONNECTION xlink:type="arc" from="class" to="index"/>
</COURSE>

У наступному прикладі наведена ще одна можлива зовнішня розширена зв'язок. Вона забезпечує попередню (previous) і наступну (next) зв'язку між зазначеними тринадцятьма заняттями:

<COURSE xmlns:xlink="http://www.w3.org/1999/xlink"
         xlink:type="extended">
<CLASS xlink: type = "locator" xlink: target = _blank href = "week1.xml"
         xlink:label="1"/>
<CLASS xlink: type = "locator" xlink: target = _blank href = "week2.xml"
         xlink:label="2"/>

<! - Список аналогічних елементів ->

<CLASS xlink: type = "locator" xlink: target = _blank href = "week13.xml"
         xlink:label="13"/>

<! - Зв'язки з попереднім документом ->
<CONNECTION Xlink:type="arc" xlink:from="2" xlink:to="1"/>
<CONNECTION Xlink:type="arc" xlink:from="3" xlink:to="2"/>

<! - Список аналогічних елементів ->

<CONNECTION Xlink:type="arc" xlink:from="13" xlink:to="12"/>

<! - Зв'язки з наступним документом ->
<CONNECTION Xlink:type="arc" xlink:from="1" xlink:to="2"/>
<CONNECTION Xlink:type="arc" xlink:from="2" xlink:to="3"/>

<! - Список аналогічних елементів ->
  
<CONNECTION Xlink:type="arc" xlink:from="12" xlink:to="13"/>
</COURSE>

Нижче приведений код, в якому один з елементів типу arc містить атрибут xlink: arcrole, значення якого дорівнює http://www.w3.org/1999/xlink/properties/linkbase. Атрибут xlink: to цього елемента типу arc повинен ідентифікувати елемент типу locator, який дає URL цієї бази зв'язків. Атрибут xlink: actuate елемента типу arc визначає, завантажуються чи ці зв'язки автоматично або для цього потрібно користувальницький запит. Наприклад, якщо наведені вище два приклади коду перебували б у файлі за URL http://ibiblio.org/javafaq/course/courselinks.xml, цей елемент міг би бути включений в основну сторінку для лекцій за курсом Java:

<LINKBASE xlink:type="xlink:extended"
          xmlns:xlink="http://www.w3.org/1999/xlink">
  <SOURCE xlink:type="resource" xlink:label="source"/>
  <LINKS xlink:type="locator" xlink:label="linkbase"
         xlink:target=_blank href=
"Http://ibiblio.org/javafaq/course/courselinks.xml" />
  <LOAD  xlink:type="arc"
         xlink:arcrole=
          "http://www.w3.org/1999/xlink/properties/linkbase"
         xlink:from="source" xlink:to="linkbase"
         xlink:actuate="onLoad" />
</LINKBASE>

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*