Обзор синтаксиса

Следующие примеры помогут новичкам быстро понять принципы работы RDFa.

Для более глубокого изучения рекомендуется ознакомиться с RDFa Primer.

Сокращённые IRIs (CURIEs)

В RDF принято сокращать термины словарей с помощью префиксов и ссылок. Этот механизм подробно описан в разделе Compact URI Expressions. В примерах ниже используются следующие предопределённые префиксы словарей:

Префикс IRI
bibo http://purl.org/ontology/bibo/
cc http://creativecommons.org/ns#
dbp http://dbpedia.org/property/
dbp-owl http://dbpedia.org/ontology/
dbr http://dbpedia.org/resource/
dc http://purl.org/dc/terms/
ex http://example.org/
foaf http://xmlns.com/foaf/0.1/
owl http://www.w3.org/2002/07/owl#
rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfa http://www.w3.org/ns/rdfa#
rdfs http://www.w3.org/2000/01/rdf-schema#
xhv http://www.w3.org/1999/xhtml/vocab#
xsd http://www.w3.org/2001/XMLSchema#

Примечание о локальных идентификаторах

В некоторых примерах используются IRI с фрагментными идентификаторами (например, about="#me"), которые ссылаются на сущности внутри текущего документа. Этот подход:

  • Широко применяется в RDF/XML [RDF-SYNTAX-GRAMMAR] и других сериализациях RDF.
  • Позволяет легко создавать новые IRIs для объектов, описываемых через RDFa, значительно расширяя выразительные возможности.

Точная семантика таких IRIs в RDF-графах определена в разделе 7 RDF-SYNTAX-GRAMMAR.


2.1 Атрибуты RDFa

RDFa использует ряд распространённых атрибутов, а также вводит несколько новых. Атрибуты, уже существующие в популярных языках разметки (например, HTML), сохраняют своё исходное значение, хотя в некоторых случаях их синтаксис был немного модифицирован. Например, в (X)HTML нет чёткого способа добавлять новые значения для атрибута @rel; RDFa явно решает эту проблему, разрешая использовать IRI в качестве значений. Также вводятся понятия терминов и “компактных выражений URI” (CURIEs), которые позволяют кратко выражать полные значения IRI. Полный список атрибутов RDFa и их синтаксис приведён в разделе “Атрибуты и синтаксис”.

2.2 Примеры

В (X)HTML авторы могут включать метаданные и отношения, касающиеся текущего документа, используя элементы meta и link (в этих примерах используется XHTML+RDFa [XHTML-RDFA]). Например, автор страницы вместе со ссылками на предыдущую и следующую страницы могут быть выражены следующим образом:

Пример 1

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Страница 7</title>
    <meta name="author" content="Марк Бирбек" />
    <link rel="prev" href="page6.html" />
    <link rel="next" href="page8.html" />
  </head>
  <body>...</body>
</html>

RDFa использует эту концепцию, расширяя её возможностью работы с различными словарями через полные IRI:

Пример 2

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Моя домашняя страница</title>
    <meta property="http://purl.org/dc/terms/creator" content="Марк Бирбек" />
    <link rel="http://xmlns.com/foaf/0.1/topic" href="http://www.example.com/#us" />
  </head>
  <body>...</body>
</html>

Поскольку использование полных IRI, как в примере выше, может быть громоздким, RDFa также разрешает использовать компактные выражения URI (CURIEs), позволяя авторам применять сокращения для ссылок на термины из различных словарей:

Пример 3

<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="foaf: http://xmlns.com/foaf/0.1/
          dc: http://purl.org/dc/terms/"
  >
  <head>
    <title>Моя домашняя страница</title>
    <meta property="dc:creator" content="Марк Бирбек" />
    <link rel="foaf:topic" href="http://www.example.com/#us" />
  </head>
  <body>...</body>
</html>

RDFa поддерживает использование @rel и @rev на любых элементах. Это становится ещё полезнее с добавлением поддержки различных словарей:

Пример 4

Этот документ распространяется по лицензии 
<a prefix="cc: http://creativecommons.org/ns#"
   rel="cc:license"
   href="http://creativecommons.org/licenses/by-nc-nd/3.0/"
   >Creative Commons By-NC-ND License</a>.

RDFa позволяет повторно использовать не только IRI в документе для предоставления метаданных, но и встроенный текст при использовании с @property:

Пример 5

<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="dc: http://purl.org/dc/terms/"
  >
  <head><title>Моя домашняя страница</title></head>
  <body>
    <h1 property="dc:title">Моя домашняя страница</h1>
    <p>Последнее изменение: 16 сентября 2015</p>
  </body>
</html>

Когда отображаемый текст отличается от фактического значения, можно указать точное значение с помощью атрибута @content. Также можно явно указать тип данных через @datatype:

Пример 6

<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="xsd: http://www.w3.org/2001/XMLSchema#
          dc: http://purl.org/dc/terms/"
>
  <head><title>Моя домашняя страница</title></head>
  <body>
    <h1 property="dc:title">Моя домашняя страница</h1>
    <p>Последнее изменение: 
       <span property="dc:modified"
             content="2015-09-16T16:00:00-05:00"
             datatype="xsd:dateTime">16 сентября 2015</span>.
    </p>
  </body>
</html>

RDFa позволяет описывать метаданные не только для текущего документа, но и для других ресурсов:

Пример 7

<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="bibo: http://purl.org/ontology/bibo/
          dc: http://purl.org/dc/terms/"
>
  <head>
    <title>Книги Марко Пьера Уайта</title>
  </head>
  <body>
    Я считаю, что книга Уайта 
    «<span about="urn:ISBN:0091808189" 
           property="dc:title">Кухня столовой</span>»
    стоит того, чтобы её приобрести: хотя рецепты сложные,
    автор объясняет их очень доступно. Вам также может понравиться
    <span about="urn:ISBN:1596913614" 
          property="dc:description">автобиография Уайта</span>.
  </body>
</html>

Для группировки свойств, относящихся к одному объекту, используется атрибут @typeof:

Пример 8

<html
  xmlns="http://www.w3.org/1999/xhtml"
  prefix="bibo: http://purl.org/ontology/bibo/
          dc: http://purl.org/dc/terms/"
>
  <head>
    <title>Книги Марко Пьера Уайта</title>
  </head>
  <body>
    Я считаю, что книга Уайта 
    «<span about="urn:ISBN:0091808189" typeof="bibo:Book"
           property="dc:title">Кухня столовой</span>»
    стоит того, чтобы её приобрести. Также рекомендую
    <span about="urn:ISBN:1596913614"
          typeof="bibo:Book"
          property="dc:description"
    >автобиографию Уайта</span>.
  </body>
</html>

Для небольших фрагментов разметки иногда удобнее использовать полные IRI:

Пример 9

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Книги Марко Пьера Уайта</title>
  </head>
  <body>
    Книга Уайта 
    «<span about="urn:ISBN:0091808189"
          typeof="http://purl.org/ontology/bibo/Book"
          property="http://purl.org/dc/terms/title"
    >Кухня столовой</span>»
    написана очень доступно. Также обратите внимание на
    <span about="urn:ISBN:1596913614"
          typeof="http://purl.org/ontology/bibo/Book"
          property="http://purl.org/dc/terms/description"
    >его автобиографию</span>.
  </body>
</html>

Атрибут @vocab позволяет определить словарь по умолчанию для элементов:

Пример 10

<div vocab="http://xmlns.com/foaf/0.1/" about="#me">
   Меня зовут <span property="name">Иван Иванов</span>, а мой блог —
   <a rel="homepage" href="http://example.org/blog/">«Понимая семантику»</a>.
</div>

Приведённый выше пример (Пример 10) сгенерирует следующие триплеты в формате Turtle:

Пример 11

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<#me> foaf:name "John Doe" ;
      foaf:homepage <http://example.org/blog/> .

В простых случаях атрибут @property может использоваться вместо @rel. Фактически, когда элемент не содержит атрибутов @rel, @datatype или @content, но имеет, например, атрибут @href, эффект от @property аналогичен @rel.

Тот же пример можно переписать следующим образом:

Пример 12

<div vocab="http://xmlns.com/foaf/0.1/" about="#me">
   Меня зовут <span property="name">Иван Иванов</span>, а мой блог —
   <a property="homepage" href="http://example.org/blog/">«Понимая семантику»</a>.
</div>

Особенности обработки:

  • Когда используется только @property с элементом, содержащим @href, система интерпретирует это как отношение (аналогично @rel)
  • Такой подход упрощает разметку в случаях, когда не требуется явное указание типа связи

Это демонстрирует гибкость RDFa в интерпретации различных вариантов разметки как семантически эквивалентных структур.