14 RDF
vechur edited this page 7 months ago

RDF

Что ето за слово

The Resource Description Framework (RDF) is a family of World Wide Web Consortium (W3C) specifications[1] originally designed as a metadata data model. It has come to be used as a general method for conceptual description or modeling of information that is implemented in web resources, using a variety of syntax notations and data serialization formats. It is also used in knowledge management applications. Википедия

RDF называется основным стандартом описания и представления метаданных веба, хотя и не является чем-то конкретным. Это совокупность рекомендаций w3c и сторонних словарей или онтологий, некоторые из которых давно и активно используются, например, RSS.

Основной принцип RDF - это предложение моделировать знания о мире в виде графа именованых высказываний. Каждое высказывание состоит из тройки “субъект - предикат - объект”. Субьект в свою очередь также может являться высказыванием, что позволяет уточнять или группировать знания. Также, каждое высказывание имеет свой адрес - URI. Набор таких высказываний образует собой направленый граф.

Могущество RDF заключается в словарях - пространствах имен:

  • rdf - базовый словарь, предоставляющий атрибуты для создания триплетов. В примере ниже используется только атрибут about. Другие атрибуты вам могут быть знакомы - rel, property, link, src, href. Ссылка
  • rdfs - наиболее базовый словарь для построения баз знаний и онтологий. Содержит такие понятия как “Класс”, “Литерал”, “Свойство”. Из свойств или отношений классов он предоставляет необходимое нам subClassOf.
  • owl - словарь веб-онтологий. OWL используется для описания классов и объектов. OWL документ это описание параметров и отношений сущностей вместе с сущностями. Можно сказать, что OWL - это машиночитаемые mindmap'ы. Цикл коротких видеолекций про декстопный OWL-редактор Protege, просто посмотрите первые две-три и вы поймете о чем речь.
  • dc - Dublin Core, Дублинское ядро. Набор тегов для каталогизирования различных сущностей. Немалая часть словарей является расширением DC.

Пример: представление знаний о Тихом Доме в RDF

Предположим, что нам требуется представить в виде RDF такое знание: “Тихий дом это ловушка!". В нашем случае:

  • субъект - “Тихий дом”
  • предикат - “является” (в естественном языке выражается местоимением “это”)
  • объект - “ловушка”

Можно сказать, что важным свойством RDF является, как бы, взгляд на мир со стороны описываемой сущности. В объектном подходе к описанию знаний мы бы сказали, что Объект “Тихий дом” имеет ствойство “являться ловушкой”, здесь отсутствует отношение между понятиями.

Представление в RDF/XML:

<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
	xmlns:owl="http://www.w3.org/2002/07/owl#"
	xmlns:dc="http://purl.org/dc/elements/1.1/">

	<!-- OWL Class Definition Example -->
	<owl:Class rdf:about="onelon://тихий-дом.loki:7967">
        <dc:title>Тихий дом</dc:title>
		<rdfs:subClassOf>Ловушка</rdfs:subClassOf>
	</owl:Class>

</rdf:RDF>

Пример показывает класс, связаный с ресурсом onelon://тихий-дом.loki:7967. У класса есть атрибут - заголовок “Тихий дом” и отношение к множеству объектов-ловушек.

Все словари в примере заданы явно с именоваными пространствами имен, чтоб нагляднее показать, как несколько словарей различного уровня используются в одном документе. Обычно словарь конкретной доменной области используется как словарь по умолчанию. Например, для RSS это xmlns="http://purl.org/rss/1.0/" (чаще всего RDF представляется через XML, потому с пространством имен ассоциируется аттрибут xmlns, XML NameSpace)

XML - не единственный вариант сериализации RDF:

  • JSON-LD может быть более приемлемым для использования в API
  • Notation3 и его подмножество Turtle отличаются относительной человекочитаемостью

То же самое в виде JSON-LD:

{
  "@context": {
    "dc": "http://purl.org/dc/elements/1.1/",
    "owl": "http://www.w3.org/2002/07/owl#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@id": "onelon://тихий-дом.loki:7967",
  "@type": "owl:Class",
  "dc:title": "Тихий дом",
  "rdfs:subClassOf": "Ловушка"
}

Важно отметить, что пример избыточен и намеренно усложнен. Достаточно было бы простого описания "Тихий дом" subClassOf "Ловушка". Кроме того, можно отказаться от словаря OWL и использовать тег rdf:Description. Важно что все это опционально, но не создает конфликтов при обработке. С помощью отдельного RDF-документа мы можем создать правило, устанавливающее оношение нашего описания к какому-то его аналогу.

Как это можно применить

The Open Archives Initiative Protocol for Metadata Harvesting разработали формат XML документа и свое расширение словаря DC для каталогизации и архивирования ресурсов в Интернете. Звучит очень близко к задачам нетсталкинга.

Вся запись о находке в OAI является, по сути, метаданными. Однако эти метаданные разделимы на три класса:

  1. данные непосредственно о находке
  2. данные о процессе поиска
  3. технические данные транспортировки или хранения

Пример описания нетсталкерской находки в формате OAI..

Для нетсталкерских нужд можно определить свой, более строгий словарь-расширение формата OAI. Для описания самой находки вполне достаточно Дублинского Ядра. А вот в секции про её происхождение уместным будет определить теги для источника/нашедшего. Полезным будет возможность явно задать или прилинковать отчет о находке. Тут же уместно хранить отношения к другим находкам, если такое имеется.

Почему это важно

  • в конечном итоге стандартизация нетсталкинга придет к чему-то RDF-подобному. Просто потому что RDF задает атмосферу на празднике метаданных в вебе. link, href, DCMI - все там будем
  • нетсталкер помогает нетсталкеру, занимаясь тем, что ему интересно. Один сканит, второй загоняется по распределенному отказоустойчивому блокчейн хранилищу, третий анализ данных делает и строит диаграммы. Все просто обмениваются каталожными карточками. В формате файлов или в формате сообщений - не суть важно
  • свой формат - это свой xsd как минимум, а значит простая и работающая валидация => type safe код с минимальными вложениями. Но формат этот не авторитарен и его можно расширять своими неймспейсами, причем это будет ломать совместимость с остальным софтом
  • RDF сам по себе - распределенный граф со своим языком запросов (SPARQL), если не лажать и блюсти валидность (а валидатор есть как только есть xsd). Причем RDF-кравлеры это отдельная тема, которая всяким технофрикам будет интересна

TODO: дописать про SPARQL как про фичу.

Ссылки

Статья с примерами. От создания простого rdf-документа до использования различных словарей и справочника по совойствам rdfs в конце.

OAI

Protocol for Web Description Resources (POWDER)