Создание гиперссылок в пользовательском медиа-типе

В настоящее время я создаю набор пользовательских типов мультимедиа для API RESTful (например, application/vnd.mycompany.foo+xml) и пытаюсь определить плюсы и минусы двух разных способов раскрытия гиперссылок.

Если я сначала рассмотрим, что делают другие типы мультимедиа, возможно, лучше всего начать с HTML. HTML позволяет мне создавать ссылки, такие как:

<image src="http://example.com/image.gif"/>
<a href="http://example.com/page.html"/>
<form action="http://example.com/page.html"/>
<link rel="stylesheet" type="text/css" href="theme.css" />

Интересно то, что в некоторых случаях есть некоторые специальные теги, которые имеют атрибут url, а затем есть общий тег link, который использует атрибут rel для определения отношения.

В AtomPub есть также несколько способов, которыми ресурсы связаны друг с другом

<collection href="http://example.org/blog/main" >
         <atom:title>My Blog Entries</atom:title>
         <categories href="http://example.com/cats/forMain.cats" />
</collection>

<atom:category scheme="http://example.org/extra-cats/" term="joke" />
<atom:entry>
   <link rel="edit" href="http://example.org/edit/first-post.atom"/>
</atom:entry>

Вопрос, который я задаю, заключается в том, когда имеет больше смысла использовать элемент ссылки со связью, а когда имеет смысл добавить атрибут к существующему элементу.

например, ссылки AtomPub могли быть сделаны

<collection>
      <link rel="source" href="http://example.org/blog/main"/>
         <atom:title>My Blog Entries</atom:title>
         <categories>
                <link rel="source" href="http://example.com/cats/forMain.cats"/>
         </categories>
</collection>

<atom:category term="joke">
     <link rel="scheme" href="http://example.org/extra-cats/"/>
<atom:category>
<atom:entry edit="http://example.org/edit/first-post.atom"/>

Как это часто бывает, при написании этого вопроса ответ кажется очевидным. Обязательные ссылки отображаются как атрибуты, а необязательные - как элементы. Однако мне было бы очень интересно услышать мнение других людей о том, как, по их мнению, должны быть представлены ссылки.

3 ответа

Решение

Что мне понравилось в XHTML 2, так это то, что каждый элемент мог иметь ссылку.

Почему бы не использовать XLink для включения той же функциональности? Таким образом, нет необходимости выбирать.

Я считаю, что семантически ваши два примера Atom эквивалентны. В спецификации Atom есть несколько мест, где ссылка без отношения считается ссылкой по умолчанию (независимо от того, называют ли они "я" или "источник", я не помню). Лично мне больше нравится второй пример AtomPub, потому что элементы ссылки в записи Atom (которая является наиболее часто используемым объектом при работе с Atom в целом) определяют элементы ссылки с отношениями и используют одну и ту же схему в категории, коллекции и рабочей области. Элемент означает, что анализ легче без необходимости знать много специальных условий.

Я как бы игнорирую первый пример HTML, потому что оригинальный HTML никогда не предназначался для машинного взаимодействия в том виде, в каком он есть в Atom, и поэтому (IMO) семантическое понимание HTML является более сложным и сводит на нет множество конкретных правил для обработки различных видов. тег.

Это интересный вопрос. Один из способов взглянуть на это - разделить ссылки на "информационные" ссылки, которые ссылаются на связанные ресурсы, которые клиент может (или не может) хотеть использовать, чтобы получить больше информации (например, <categories> элемент в atompub).

С другой стороны, есть ссылки, которые "определяют" протокол, то есть "направляют" клиента через последовательность изменений состояния (например, публикация / редактирование / удаление в случае Atompub или заказ / просмотр / оплата в системе покупок).) ресурса, который составляет фактический протокол (например,<link rel="edit">).

В статье Starbucks авторы расширяют всю идею, определяя (гипотетическую) схему для изменений состояния. Они используют <next rel="schema url" uri="uri for next resource state"> вместо атома<link rel="..." href="...">, но общая идея та же самая.

Конечно, можно утверждать, что переход по любой ссылке представляет изменение состояния для клиента. Но я думаю, что это различие имеет смысл.

Другие вопросы по тегам