Определение синтаксиса CURIE в RDF

Ключевым компонентом RDF является IRI, но такие идентификаторы обычно длинные и неудобные. Поэтому RDFa поддерживает механизм сокращения IRI, называемый компактными URI-выражениями (CURIE).

6. Определение синтаксиса CURIE

Примечание
Рабочая группа в настоящее время анализирует приведённые ниже правила формирования CURIE с учётом недавних замечаний от RDF Working Group и участников RDFa Working Group. Возможны незначительные изменения в правилах в ближайшем будущем, которые могут оказаться обратно несовместимыми. Однако любые такие несовместимости будут ограничены крайними случаями.

Основные положения

Ключевым компонентом RDF является IRI, но такие идентификаторы обычно длинные и неудобные. Поэтому RDFa поддерживает механизм сокращения IRI, называемый компактными URI-выражениями (CURIE).

При раскрытии CURIE ДОЛЖЕН получаться синтаксически корректный IRI ([RFC3987]). Подробнее см. Обработка CURIE и IRI. Лексическое пространство CURIE определяется правилом curie, приведённым ниже. Пространство значений — это множество IRI.

CURIE состоит из двух компонентов: префикса и ссылки. Префикс отделяется от ссылки двоеточием (:). В общем случае префикс можно опустить, создав CURIE, использующий отображение префикса по умолчанию. В RDFa отображение префикса по умолчаниюhttp://www.w3.org/1999/xhtml/vocab#. Также можно опустить и префикс, и двоеточие, создав CURIE, содержащий только ссылку, использующую отображение без префикса. Данная спецификация НЕ определяет отображение без префикса. Языки-хосты RDFa НЕ ДОЛЖНЫ определять отображение без префикса.

Примечание
Префикс по умолчанию в RDFa не следует путать с пространством имён по умолчанию, определённым в [XML-NAMES]. Процессор RDFa НЕ ДОЛЖЕН обрабатывать объявление пространства имён по умолчанию в XML-NAMES так, как если бы оно устанавливало префикс по умолчанию.

Общий синтаксис CURIE

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

prefix      ::=   NCName  
reference   ::=   ( ipath-absolute / ipath-rootless / ipath-empty ) 
                 [ "?" iquery ] [ "#" ifragment ] (как определено в [[!RFC3987]])  
curie       ::=   [ [ prefix ] ':' ] reference  
safe_curie  ::=   '[' [ [ prefix ] ':' ] reference ']'  

Контекст обработки CURIE

При обычной обработке CURIE требуется следующая контекстная информация:

  1. Набор отображений префиксов в IRI.
  2. Отображение для префикса по умолчанию (например, :p).
  3. Отображение для случая без префикса (например, p).
  4. Отображение для префикса _, который используется для генерации уникальных идентификаторов (например, _:p).

В RDFa эти значения определяются следующим образом:

  • Набор отображений префиксов в IRI предоставляется текущими активными объявлениями префиксов элемента во время разбора.
  • Отображение для префикса по умолчанию — текущее отображение префикса по умолчанию.
  • Отображение для случая без префикса НЕ определено.
  • Отображение для префикса _ не указано явно, но, поскольку он используется для генерации blank nodes, его реализация должна быть совместима с определением RDF и правилами из Ссылки на Blank Nodes. Документ НЕ ДОЛЖЕН определять отображение для префикса _. Соответствующий требованиям процессор RDFa ДОЛЖЕН игнорировать любые определения отображений для префикса _.

Правила преобразования CURIE в IRI

CURIE представляет собой полный IRI. Правила его определения:

  1. Если CURIE состоит из пустого префикса и ссылки, IRI получается путём конкатенации текущего отображения префикса по умолчанию и ссылки. Если отображение префикса по умолчанию отсутствует, CURIE считается невалидным и ДОЛЖЕН игнорироваться.
  2. Если CURIE состоит из непустого префикса и ссылки, и для префикса существует активное отображение (сравнение без учёта регистра), то IRI создаётся путём конкатенации этого отображения и ссылки.
  3. Если для префикса нет активного отображения, значение не является валидным CURIE.

6.1 Почему CURIE, а не QNames?

(Этот раздел является не нормативным.)

Во многих случаях разработчики языков пытались использовать QNames в качестве механизма расширения [XMLSCHEMA11-2]. QNames действительно позволяют управлять коллекцией имён независимо и могут сопоставлять имена с ресурсами. Однако QNames в большинстве случаев не подходят, потому что:

  1. Использование QName в качестве идентификаторов в значениях атрибутов и содержимом элементов проблематично, как обсуждается в [QNAMES].
  2. Синтаксис QNames избыточно строг и не позволяет выразить все возможные IRI.

Пример проблемы: попытка определить коллекцию имён для книг. В QName часть после двоеточия должна быть валидным именем элемента, что делает следующий пример недопустимым:

isbn:0321154991  

Это невалидный QName, потому что 0321154991 не является допустимым именем элемента. Однако в данном случае нам и не нужно определять валидное имя элемента — цель использования QName заключалась в ссылке на элемент в частной области видимости (ISBN). Более того, мы хотим, чтобы имена в этой области видимости сопоставлялись с IRI, раскрывающим смысл ISBN. Как видно, определение QNames противоречит этому (довольно распространённому) сценарию.

Данная спецификация решает проблему, вводя CURIE. Синтаксически CURIE являются надмножеством QNames.