RDFa: перевод W3C пособия

Перевод пособия по RDFa разметке для HTML-верстальщиков.

RDFa представляет собой тонкий слой разметки, который Вы можете добавить на свои веб-страницы, что делает их понятными и для машин, и для людей. Слой можно сделать и на уровне CSS для понимания. Добавив такой слой, бразуеры, поисковые системы и другое программное обеспечение имели бы большее представление о страницах, в итоге стали бы более информативны для пользователя.

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

Этот документ является введением в RDFa и приводит примеры его использования.

Оглавление

Метаданные в HTML

Если вы знакомы с HTML разметкой, вы должны знать, что можете добавлять метаданные в документ HTML, используя <meta> и <link> элементы в <head>.

Например: <meta name="description" content="Сайт о рыбе" /> даёт описание текущего документа. Таким образом, вы можете указать, что текущая страничка имеет description равное значению "Сайт о рыбе".

Аналогичным образом вы можете объявить: <link rel="next" href="thecod.html" />, что текущая страница является одной из серии страниц, а следующая находится по адресу: thecod.html. Другими словами, текущая страница имеет next связь с thecod.html.

Есть и другие места в HTML, где вы могли бы разместить метаданные. Например, элемент <title> или атрибут cite в <blockquote>.

Попутно вы можете поинтресоваться: «Почему нельзя сделать так?»;

<META name="description">Сайт о рыбе</META>,

Ответ на вопрос простой: «Если бы эта функция была добавлена в HTML, то некоторые браузеры не смогли бы корректно отобразить текст в элементе <meta>, хоть он и расположен в <head>. Поэтому, чтобы это предотвратить, содержимое было помещено внутрь атрибута(это, кстати, в настоящий момент исправляется в xHTML2)».

Использование метаданных

Метаданные в HTML используются в основном для следующих целей:

  • Элемент <title> даёт название для окон и закладок,
  • Атрибут title может обеспечить всплывающую подсказку с информацией,
  • Поисковые системы могут использовать содержимое description для вывода результатов поиска,
  • Некоторые браузеры подключают навигационную панель к значениям next, prev и другим свойствам так, что вы можете перемещаться между различными страницами, или узнать информацию об авторских правах.

RDF: обобщенный способ представления метаданных

Изначально элемент <meta> был добавлен в HTML как обобщенный способ представления метаданных, утверждённых W3C. Это называется RDF (resource, грубо говоря, здесь подразумевает document, но вы можете встретить другие интерпретации в поздних документах).

RDF являет собой очень простую структуру. Утверждение о ресурсе, имеет вид «субъект — предикат — объект» или «URI — property — value», называется триплетом.

Утверждение «небо голубого цвета» в RDF-терминологии можно представить следующим образом: субъект — «небо», предикат — «имеет цвет», объект — «голубой». Для обозначения субъектов, предикатов и объектов в RDF используются URI. Множество RDF-утверждений образует ориентированный граф, в котором вершинами являются субъекты и объекты, а рёбра помечены предикатами.

К примеру, приведенный выше документ расположен по адресу URL http://www.example.com/home.html, тогда утверждение RDF, или триплет, как его принято называть, для описания сущности будет выглядеть как:

http://www.example.com/home.html — [html:description] — "Сайт о рыбе"

,а RDF триплет отношения с next связью так:

http://www.example.com/home.html — [html:next] — http://www.example.com/thecod.html.

Значение [html:next] подразумевает "ссылка представляет собой HTML next свойства" и выражается с помощью компактного URI или CURIE для краткости. Но об этом чуть позже.

Расширения метаданных в XHTML

RDFa расширяет возможности метаданных в xHTML путем обобщения атрибутов <meta> и <link> и дают им возможность быть использованными в любом элементе, а не только в <meta> и <link>. Таким образам, вы можете теперь использовать иметь метаданные в <body> также, как и в <head>, а затем указывать, каким образом эти атрибуты могут быть интерпретированы в RDF.

Возьмём простой пример: многие люди добавляют ряд так называемых «Dublin Core» свойств на свои странички. Это title(заголовок) и author (автор, creator в Дублинском Ядре для избежания путаницы т.к. свойства могут быть использованы и для других вещей, например, для описания картин):

<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://dublincore.org/documents/dcq-html/">
<title>Рыба Мира Джона Смита</title>
<meta name="DC.title" content="Рыба Мира"/&gt
<meta name="DC.creator" content="Джон Смит"/&gt
</head>
<body>
<h1>Рыба Мира</h1>
<p>Джон Смит</p>

Инициативной организацией Dublin Core Metadata Initiative были определены эти и другие свойства для обозначения метаданных книг, произведений искусства и т.д. В приведенном выше примере вы можете увидеть, как продублировать информацию в самом документе.

Подобное дублирование можно реализовать по другому:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<head>
<title>Рыба Мира Джона Смита</title>
</head>
<body>
<h1 property="dc:title">Рыба Мира</h1>
<p>автор: <span property="dc:creator">Джон Смит</span></p>

Для начала, объявим, что будем использовать «Dublin Core» свойства, и их префиксы dc:. Тогда «Dublin Core» свойства title и creator можно применить к релевантным частям текста. Конечно, основным преимуществом является то, что видимые версии текста не десинхронизируются в версии с метаданными.

Компактные URI

В последнем примере мы имели свойство property="dc:title". Оно говорит о том, что "свойство title из словаря определено как dc:". Но ранее мы говорили, что свойство подразумевало URI. Формы, такие как dc:title, называют компактный URI или CURIE. В данном случае, URI представляет собой просто сопоставление с декларацией адреса словаря xmlns:dc="http://purl.org/dc/elements/1.1/". Так что в этом примере dc:title является краткой формой полного URI http://purl.org/dc/elements/1.1/title (теперь вы знаете, почему использовать CURIE намного удобнее).

В случае, если нет префикса, как и в случае чего-то вроде rel="index", используется префикс по умолчанию. Для xHTML значением по умолчанию будет http://www.w3.org/1999/xhtml/vocab#.

Использование атрибута property даёт эквивалент элементу <meta>, но уже в тексте страницы. Для получения эквивалента элемента <link> можно использовать атрибут rel.

Для примера возьмем страницу, которая имеет кликабельную ссылку «Далее» для перехода на следующую связанную страницу. Традиционно ссылка будет выглядеть так:

<a href="thecod.html">Далее</a>. Можно выразить её следующим образом: <a href="thecod.html" rel="next">Далее</a>.

Аналогично, <a href="page2.html">Назад</a> может быть оформлена как <a href="page2.html" rel="prev">Назад</a>.

Еще одним примером использования rel является использование его для указания авторских прав или лицензионной информации страницы. Обычно это выглядит так:

<a href="copyright.html">Copyright</a>, а можно записать как: <a href="copyright.html" rel="copyright">Copyright</a>.

Кстати, порядок записи атрибутов rel и href не имеет значения. Возможно, вы уже делали это в HTML. Нет ничего удивительного в том, что это теперь интерпретируется, как RDF, но чуть позже вы узнаете, что применять это можно не только для элементов <a>.

Говоря о других документах

Большинство метаданных в HTML всего лишь позволяет говорить о характере документа, и во всех примерах, до сих пор, мы рассматривали только метаданные страницы. Но Вы вполне можете применить это к другим вещам более широко.

Например, можно использовать атрибут about в элементе-контейнере таком, как <p></p>, тогда about распространится на все содержащиеся отношения.

<p about="rainfall.csv">
The data <strong property="dc:title">Rainfall 1900-1999</strong>
is the property of <em property="dc:creator">Data Be We, Inc</em>
and is available under
<a rel="license" href="license.html">these conditions</a>.
</p>

Применение URI и CURIE в атрибуте about

Обратите внимание на то, что атрибут about содержит URI. Это позволяет указать на что угодно в сети.

<p about="http://www.w3.org/TR/rdfa-syntax">Название RDFa спецификации
<em property="dc:title">RDFa в XHTML: Синтаксис и Обработка</em>...</p>

Иногда вы можете использовать CURIE заместо URI в about и, таким образом, выделить CURIE для URI. В таком случае вы заключите CURIE в квадратные скобки.

Предположим, что вы объявили xmlns:tr="http://www.w3.org/TR/", тогда запись будет выглядеть следующим образом:

<p about="[tr:rdfa-syntax]">Название RDFa спецификации
<em property="dc:title">RDFa в XHTML: Синтаксис и Обработка</em>...</p>

Говоря о людях, местах и абстрактных понятиях

До сих пор мы говорили только о присвоении свойств сущностям с помощью URI. Но есть проблема: не всё, о чём вы можете рассуждать имеет URI. Город Амстердам не имеет URI также, как персона, объект, вроде автомобиля, или такое понятие, как любовь. Несомненно, эти сущности могут иметь страницы about (о них). Но это другое, важно не путать сайт конкретной тематики с абстрактными понятиями.

Приведём пример, чтобы объяснить разницу. Предположим, мы хотим сказать, что Томас Стернз Элиот является автором поэмы Бесплодная Земля. Мы могли бы сделать поиск по стихотворению и найти http://en.wikipedia.org/wiki/The_Waste_Land. Тогда можно было бы отразить это так:

<span about="http://en.wikipedia.org/wiki/The_Waste_Land"
property="dc:creator">T.S. Eliot</span>

К сожалению, это говорит о том, что Т.С.Элиот создал страницу Википедии, что явно не соответствует действительности. Как же нам поступить? В RDFa есть запись, которая позволяет создавать местные названия для тех сущностей, которые не имеют URI (или тех, URI которых вы не знаете). Тогда наша запись будет иметь примерно такой вид:

<link about="[_:TheWasteLand]" rel="foaf:isPrimaryTopicOf"
href="http://en.wikipedia.org/wiki/The_Waste_Land" />

_: — это зарезервированный префикс для такой записи. Можно задать любой идентификатор после двоеточия. Такая запись гласит: «Это что-то такое, что мы будем называть "Бесплодная Земля". И эта запись является главной темой страницы по адресу: http://en.wikipedia.org/wiki/The_Waste_Land

Теперь, когда мы присвоили идентификатор стихотворению, вполне можно констатировать, что его автором был Т.С.Элиот:

<span about="[_:TheWasteLand]" property="dc:creator">T.S. Eliot</span>.

Кстати, свойства FOAF идентифицируются через xmlns:foaf="http://xmlns.com/foaf/0.1/".

Таким образом, мы можем упоминать имена людей, места, организации и другие сущности, не имеющие URI. Например, персона:

<link about="[_:StevenPemberton]"
rel="foaf:isPrimaryTopicOf" href="http://www.cwi.nl/~steven/" />

Место:

<link about="[_:Amsterdam]"
rel="foaf:isPrimarytopicOf" href="http://www.amsterdam.nl/" />

Огранизация:

<link about="[_:W3C]"
rel="foaf:isPrimaryTopicOf" href="http://www.w3.org/" />

Иногда мы можем использовать эти имена, чтобы говорить о них:

<a about="[_:W3C]" rel="foaf:homepage" href="http://www.w3.org/">W3C</a>

Эти специальные CURIE, начинающиеся с _:, называются «чистые узлы» или bnodes(blank nodes). Заметим, что они являются локальными для документа, поэтому вы должны переопределить их в каждом документе, который будет использовать их.

Кстати, важное замечание по поводу bnodes. FOAF: isPrimaryTopicOf является одним способов выражения какого-либо отношения, являющегося уникальным. К примеру:

<link about="[_:StevenPemberton]" rel="foaf:mbox" href="mailto:steven@w3.org" />, указывает на то, что есть человек с адресом электронной почты, поэтому мы должны однозначно указать, что это человек.

Стоит отметить, что пустой URI подразумевает текущую страницу, вы можете добавить код вроде этого:

<link about="[_:StevenPemberton]" rel="foaf:primaryTopicOf" href=""/>, который говорит, что сущность, о которой идёт речь, именуется Стивеном Пембертоном и является главной темой этой страницы.

Преимущественная правда

Иногда документ содержит информацию, которую необходимо пометить, но не всегда в той форме, в которой Вам нужно. Например:

<p>Amsterdam is located
at latitude 52°22'23"N and longitude 4°53'32"E</p>

Хотя существуют свойства для описания широты и долготы, подразумевается, что они будут описаны значениями десятичных чисел. Мы можем оформить это следующим образом:

<p about="[_:Amsterdam]"><span property="dc:name">Amsterdam</span> is located
at latitude <span property="geo:lat" content="52.373">52°22'23"N</span>
and longitude <span property="geo:long" content="4.892">4°53'32"E</span></p>

Это, конечно же, атрибут content, применяемый в элементе <meta>.

Географические свойства содержатся в словаре:
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"

Замена субъекта и объекта

Малоиспользуемые, но полезные связи в HTML — это обратная свзязь (reverse relationship) rev. Она подобна rel, но меняет отношения. Например, если документ doc.html индексируется как index.html, значит отношения doc.html можно выразить ссылкой:

<link rel="index" href="index.html"/>, однако, для index.html можно также описать отношения:

<link rev="index" href="doc.html"/>, подразумевая: «Эта страница индексная для doc.html».

Вы также можете использовать rev отношения RDFa.

<p about="[_:StevenPemberton]">
Name: <span property="foaf:name">Steven Pemberton</span>
Mail: <a rel="foaf:mbox" href="mailto:steven@w3.org">steven@w3.org</a>
</p>

Вложенные сущности

Часто группы свойств объединяют в целые. Например, событие может иметь название, описание, местоположение, а также даты начала и окончания. Если вы хотите сказать, что одна часть разметки содержит такие группы свойств, вы можете использовать атрибут typeof. К примеру, разметка конференции:

<div xmlns:event="http://www.w3.org/2002/12/cal#" typeof="event:Vevent">
<h3 property="event:summary">WWW 2009</h3>
<p property="event:description">18th International World Wide Web Conference</p>
<p>To be held from
<span property="event:dtstart" content="2009-04-20">20th April 2009</span>
until <span property="event:dtend" content="2009-04-24">24th April</span>,
in <span property="event:location">Madrid, Spain</span>.</p>
</div>

Или программа телевидения:

<div typeof="event:Vevent">
<h3 property="event:summary">Have I Got Old News For You</h3>
<p property="event:location">BBC2</p>
<p>
<span property="event:dtstart" content="2008-06-28T21:00:00">Saturday 28 June,
9pm</span>-<span property="event:dtend" content="2008-06-28T21:30:00">9.30pm</p>
<p property="event:description">Team captains Paul Merton and Ian
Hislop are joined by returning guest host Jeremy Clarkson and panellists
Danny Baker and Germaine Greer for the topical news quiz.
<abbr title="in stereo">[S]</abbr></p>
</div>

Обратите внимание на использование content для получения даты в машиночитаемой форме.

Типы данных

В определённый момент вы можете указать что содержимое имеет определённый тип данных. Для этого существует атрибут datatype

<span property="event:dtend" datatype="xsd:date" content="2009-04-24">24е Апреля</span>

Использование этого атрибута потребует указания соотвествующего адресного пространства в элементе <html>.

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

Обзор атрибутов

about
Указывает предмет отношения. Если не задан, то идет тема текущего документа.
rel
Определяет связь между предметом и URL задается либо
href либо resource. Либо субъект указывается посредством ближайшего about, либо с помощью атрибута src
rev
По аналогии с атрибутом rel за исключением того, что субъект и объект меняются местами.
property
Указывает на отношения между объектом или строкой (если
content атрибут указан) или часть разметки, если отсутствует (содержимое элемента имеет атрибут property).
content
Содержит строку для использования в качестве объекта свойства атрибута.
href
Указывает на URI объекта для rev и rel
атрибутов. Имеет более высокий приоритет чем resource
атрибут.
resource
Указывает на URI объекта для rev и rel
атрибутов, если href не объявлен.
src
Указывает предмет отношения.
datatype
Указывает тип данных объекта через property
атрибут (либо через content атрибут, или содержимое элемента с указанным атибутом datattype.) По умолчанию тип данных интерпретируется как string,
и данные в содержимом элемента имеют тип xml:Literal.
если datatype="" явно указан, то для RDF контент лишенный разметки интерпретируется строкой.
typeof
Создает пустой узел, который становится объектом, и утверждает, что текущий элемент содержит отношения, которые соответствуют данному типу RDF.

Контент

Автор: Стивен Пембертон, W3C/CWI.

Перевод: Shift.

Оригинал на английском: RDFa для верстальщиков HTML.

Отправить комментарий