WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Связи в XML: XLink (часть 2)

Связи в XML: XLink (часть 2)


Дата публикации: 08-02-2008

Расширенные связи

Можно сказать, что простые связи в большей или меньшей степени напоминают связи 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.  

Правила навигации (элементы типа arc)

По сравнению с простыми связями расширенные связи являются несколько более сложными концепцией, поскольку они предоставляют множество различных путей обхода. Например, в расширенной связи с тремя ресурсами A, B и C возможны девять различных обходов:

  • A --> A
  • B --> B
  • C --> C
  • A --> B
  • B --> A
  • A --> C
  • C --> A
  • B --> C
  • C --> B

Каждый из этих потенциальных путей между ресурсами может иметь различные правила определения того, когда связь должна обходиться и что должно происходить при ее обходе. Эти потенциальные обходы называются ребрами (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.   

Первый элемент 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>
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Жизнь – как сидение в интернете: смысла нет, а уходить не хочется."

Опрос

Ваша техника?

Настольный компютер
Ноутбук
Смартфон
iPad
iPhone
другое