Примечания.
Было решено оставить текст на странице RDF as is. Он кроме лёгкой правки соответствует RDF 2004, а здесь из него будет сделан RDF-1.1 (2014).
29.2.2020 было решено зафиксировать этот текст а дальнейшие наработки проводить в гу-док RDF 1.1 essence (-:PUBLIC:-) Добро пожаловать комментировать!
Сначала цитаты:
году в 2005: "RDF--the Resource Description Framework--is a universal format for data on the Web."
в 2010: "RDF—the Resource Description Framework—is a standard model for data interchange on the Web." (http://www.w3.org/2001/sw/SW-FAQ#TechieQuestions).
важно что от формата RDF продвинулся к модели (данных).
И в 2014 в Primer RDF 1.1 имеем "The RDF Data Model is described in this section in the form of an "abstract syntax..."
Основные ссылки:
http://en.wikipedia.org/wiki/Resource_Description_Framework
Очень интересный документ: P. Hayes. RDF Semantics, February 10 2004. http://www.w3.org/TR/rdf-mt/
где в том числе описано логическое следование в RDF[S].
Validation Service: http://www.w3.org/RDF/Validator/
(идея) RDF использует частично помеченные орграфы для наглядного(!) представления "описания ресурсов". При этом ресурсом может быть всё чему можно присвоить глобальный идентификатор (в данном случае - IRI).
Далее РВ-множество это множество строк заданное регулярным выражением (РВ).
строение RDF-орграфа
RDF-орграф есть частично помеченный орграф, что означает что на узлах и стрелках задана функция label в String.
- узлы делятся на два вида:
-- "ресурсный"
-- литеральный
Ресурсный узел может быть не помечен (blank node), а если он помечен, то IRI'ем. И это единственная частичность функции label.
Литеральный узел помечен строкой специального вида - типизированной величиной.
Стрелка обязательно помечена IRI'ем.
Требования:
- все помеченные ресурсные узлы должны иметь разные метки. Даже если это прямо не сказано в документации это следует из рисования графа по его RDF-документу: каждый раз когда IRI встретится в первой или третьей позиции он будет соотнесён с одним и тем же узлом, помеченным этим IRI.
Замечание. Литеральные узлы могут иметь одну и ту же метку, хотя и для них как для IRI меток можно было бы потребовать уникальность. Тогда количество стрелок входящих в литерал говорило бы о его "популяронсти". Кажется принято литералы с одним значением дублировать на графа и тогда мы имеем ещё одно правило:
- в литеральный узел есть одна и только одна входящая стрелка! см. рисунок нарисованный валидатором в конце.
- из литеральных узлов нет исходящих стрелок.
- нет изолированных узлов.
Замечание о типизации узлов. если мы различаем строки IRI и типизированного значения, то узел ресурсный если он помечен IRI или не помечен, и литеральный если он помечен типизированным значением.
Замечание. RDF-орграф не должен быть связным.
Чтобы превратить граф в высказывания надо каждому непомеченному узлу приписать уникальный идентификатор (по сути - идентификатор переменной (Var)).
Каждая стрелка задаёт предложение (высказывание) имеющее вид в зависимости от свойств начального и конечного узлов:
RDF-st ::= IRI|Var IRI-a IRI|Var|Literal '.'
т.е. на место субъекта может быть IRI или Var, а на месте объекта ещё и Literal.
!IRI и Var используются вполне себе одинаково см.
Можно записать и одной XBNF: RDF-doc ::= (IRI|Var IRI-a IRI|Var| Literal '.')+
При этом подразумевается что:
- IRI узла идентифицирует объект "о котором сказывается",
- IRI стрелки идентифицирует бинарный предикат.
- каждая переменная связана квантором существования на всей совокупность высказываний.
Замечание: остроумное применение графа состоит в том, что непомеченный узел очень органично представляет неизвестный (не идентифицированный!) объект. Для которого в тексте приходится вводить уникальную переменную.
Подобная техника (граф вместо переменных) была использована Н.Бурбаки для высказываний первого порядка и называется "формативная конструкция" [1] стр.35.
В RDF простейшим языком записи высказываний является N-Triples см. http://www.w3.org/TR/rdf-testcases/#ntriples, где приведен, в том числе и EBNF-синтаксис.
Важность N-Triples в том, что:
- несмотря на простоту в него транслируются остальные языки Semantic Web, в том числе OWL;
- тесты для RDF нормативно записаны на N-Triples.
- он используется в RDF Primer (http://www.w3.org/TR/rdf-primer/).
Замечание: тесты для OWL (http://www.w3.org/TR/owl-test/) написаны на RDF/XML и N3 (см. дальше).
Вот пример текста N-Triples документа:
<http://www.w3.org/2001/08/rdf-test/> <http://purl.org/dc/elements/1.1/creator> "Dave Beckett".
<http://www.w3.org/2001/08/rdf-test/> <http://purl.org/dc/elements/1.1/creator> "Jan Grant".
<http://www.w3.org/2001/08/rdf-test/> <http://purl.org/dc/elements/1.1/publisher> _:a.
_:a <http://purl.org/dc/elements/1.1/title> "World Wide Web Consortium".
_:a <http://purl.org/dc/elements/1.1/source> <http://www.w3.org/>.
В угловых скобках конструкция называющаяся absoluteURI - некоторый специальный вид глобальных ("всемирных") идентификаторов. В то же время "a" в конструкции "_:a" называется name и является, по сути, идентификатором локальной переменной внутри данного документа.
В приведенном тексте пять высказываний, вида субъект предикат объект точка.
В том же разделе об N-Triples указывается, что язык N-Triples является подмножеством языка N3 (http://www.w3.org/DesignIssues/Notation3), на котором тот же пример может быть записан еще более наглядно:
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdftc: <http://www.w3.org/2001/08/rdf-test/> .
rdftc: dc:creator "Dave Beckett"@en .
rdftc: dc:creator "Jan Grant"@en .
rdftc: dc:publisher _:a .
_:a dc:title "World Wide Web Consortium"@en .
_:a dc:source <http://www.w3.org/> .
При этом мы использовали только одну из возможностей N3 - объявление префиксов.
Значением префикса является строка в угловых скобках. Можно сказать, что эти скобки используются для сериализации значения префикса.
Подстановка значения префикса: обнаружив префикс в тексте и выделив часть после ":" надо эту часть конкатенировать со значением префикса (сначала префикс потом "часть") и то что получится сериализовать (угловыми скобками) в текст на место конструкции с префиксом, которая в N3 называется qname.
На вольном русском эти 5 предложений выглядят так:
Dave Beckett автор http://www.w3.org/2001/08/rdf-test/.
Jan Grant автор http://www.w3.org/2001/08/rdf-test/.
Некая организация является издателем http://www.w3.org/2001/08/rdf-test/.
Эта организация называется World Wide Web Consortium.
http://www.w3.org/ это сайт этой организации.
ИПЛ это исчисление предикатов с литералами.
Глобальные идентификаторы (см. грамматику N-Triples) применяются для идентификации: объектов предметной области, терминов некоторого (формального логического) языка и типов данных. Локальные идентификаторы обозначают свободные переменные "пробегающие" предметную область. Термины формального логического языка состоят из констант, унарных предикатов (понятий) и бинарных предикатов (ролей).
В формальной логике формула аналог пяти высказываний из примера выглядит так:
creator(RDFTC,"Dave Beckett") and creator(RDFTC,"Jan Grant") and
Ea (publisher(RDFTC,a) and title(a,"World Wide Web Consortium") and source(a,WWWW3ORG))
Здесь:
E - квантор существования; a - переменная; creator, publisher, title, source - бинарные предикаты; RDFTC, WWWW3ORG - константы.
Конечно, с точки зрения RDF надо добавлять, что предикаты и константы глобальны. Формально пока единственное новшество - использование литералов.
Замечание: использование инфиксной формы записи для бинарных операторов (в том числе предикатов) считается классическим и естественным в математике. При такой записи формула будет иметь вид:
(RDFTC creator "Dave Beckett") and (RDFTC creator "Jan Grant") and
Ea ((RDFTC publisher a) and (a title "World Wide Web Consortium") and (a source WWWW3ORG))
Термины формального языка самого RDF перечислены, например в http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/#section-Namespace.
А именно, не указывая общую начальную часть всех глобальных идентификаторов "словаря" RDF, которая равна http://www.w3.org/1999/02/22-rdf-syntax-ns# получим:
Унарные предикаты (Понятия)
Seq Bag Alt Statement Property List
Бинарные предикаты (Роли)
subject predicate object type value first rest _n
where n is a decimal integer greater than zero with no leading zeros.
Константы (Предметы)
nil
Типы данных
XMLLiteral
То, что XMLLiteral - тип данных описано, например в RDF Primer.
Допустимыми или известными считаются также типы данных XML схемы (XML Schema Part 2: Datatypes) их обычный префикс - xsd:
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
Смысл терминов rdf словаря, еще раз описан в http://www.w3.org/TR/rdf-schema/, где также описаны предикаты rdfs словаря.
Там же (http://www.w3.org/TR/rdf-schema/#ch_summary) приведены ВСЕ термины RDF словаря, который разбит на два: собственно rdf, приведенный выше, и rdfs (см. ссылку).
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
Унарные предикаты (Понятия)
Resource Literal Class Datatype Container ContainerMembershipProperty
Бинарные предикаты (Роли)
subClassOf subPropertyOf domain range label comment member seeAlso isDefinedBy
Далее везде:
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
"Первый элемент некоторого списка равен 2"
будет на N-Triples с префиксами выглядеть так:
_:c rdf:type rdf:List .
_:c rdf:first "2"^^xsd:integer .
"rdf:type это бинарный предикат."
rdf:type rdf:type rdf:Property .
Замечание: в классической нотации математической логики то же самое высказывание выглядело бы более "логично": rdf:Property(rdf:type). И означало декларацию того, что rdf:type - бинарный предикат.
[1] Н. Бурбаки, Теория множеств, Мир, Москва, 1965