Основы Linked Data

22 июля 2010 года

Linked Data — это гибкий способ публикации данных в Интернете. Посмотрим, каковы его особенности и что нового он позволяет сделать.

Содержание

  1. Публикация данных в Паутине
  2. Ответ Linked Data
  3. Документы
  4. Логический вывод
  5. Подводя итоги
  6. Дальше

Публикация данных в Паутине

Традиционно данные во Всемирной паутине публикуются в виде гипертекста в формате HTML. Но HTML совершенно не приспособлен для автоматической обработки данных: в нём есть элементы «заголовок», «абзац», «цитата», но нет элементов «имя», «цена», «руководитель», «широта», «долгота» и тому подобных. Поэтому извлекать факты из HTML-документов трудно.

Гораздо лучше для данных подходят такие форматы, как XML или JSON — их легко обрабатывать программно. Существует множество сайтов и служб, дающих доступ к данным таким образом. К примеру, у сайта Last.fm есть API, через который можно получить сведения о музыкальных коллективах.

Но у XML и JSON (если их использовать сами по себе) есть недостатки.

Во-первых, в разных местах одни и те же понятия записываются по-разному. Например, на сайте example.org свойство «автор книги» может обозначаться атрибутом author у элемента book, а на сайте example.com — элементом bookauthor внутри элемента book. Поэтому программы-клиенты приходится «затачивать» под схемы каждого источника данных. Хотя в XML есть механизм пространств имён (namespaces), позволяющий создавать общие схемы, применяется он далеко не всегда. В JSON нет и этого.

Во-вторых, нет единого способа обозначать предметы, о которых идёт речь — товары, города, файлы и так далее. Например, в двух разных источниках могут быть элементы book, описывающие одну и ту же книгу, но мы этого не узнаем — по крайней мере, без специальных действий (вроде сравнения ISBN), которые не всегда возможны или очевидны.

В-третьих, нет общего способа делать ссылки между данными. Например, имея сведения о книге, мы, возможно, захотим получить больше информации о её авторе — но где её найти? Простой поиск в Google едва ли даст что-то пригодное для автоматической обработки.

Ответ Linked Data

Linked Data — это подход к публикации данных, который решает все эти проблемы. Для этого он использует такую привычную нам вещь, как веб-адреса (URI). Но если обычно в Паутине адреса бывают у документов или каких-то файлов, то в Linked Data они применяются шире.

У каждого понятия в LD есть свой адрес. Например, свойство «автор книги» может обозначаться адресом http://example.net/terms/books/author. Это приводит к появлению словарей — наборов понятий (с адресами), обычно из какой-то одной предметной области. Например, в словаре FOAF можно найти свойства для описания людей и организаций, в SIOC — веб-сообществ и форумов, в Dublin Core — документов. Программы-клиенты программируются на «понимание» популярных словарей, и поэтому могут работать с данными из любых источников, где эти словари используются.

Сами предметы тоже имеют адреса. Например, у человека может быть адрес вроде http://example.org/id/peter, у книги — http://example.com/book.php?id=219, и так далее. Поэтому в разных документах можно описывать одни и те же предметы, просто пользуясь общими адресами для них. Объединение данных из разных источников при этом происходит само собой.

Описания в Linked Data представляют собой ориентированный граф, то есть набор вершин-предметов, соединённых стрелками-свойствами (или отношениями). Также вершинами могут быть строки, числа и тому подобные значения. Вот пример небольшого описания человека по имени Миша, который знает Петю, и возраст которого — 30 лет.

Граф показывает, что Миша (http://example.org/id/misha) знает (http://xmlns.com/foaf/0.1/knows) Петю (http://example.com/employees/peter), а его возраст (http://xmlns.com/foaf/0.1/age) — 30 лет.

Эта модель представления данных — в виде графа с адресами — называется RDF. Важно понимать, что это только модель, а не формат, в котором можно что-то записать. Форматов же для записи RDF довольно много. Скажем, можно такой граф записать в виде XML-документа — это называется RDF/XML. Есть и сокращённые форматы специально для RDF. Например, вот как выглядит это описание в формате Turtle:

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

<http://example.org/id/misha>
    foaf:knows <http://example.com/employees/peter> ;
    foaf:age "30" .

Также можно внедрить RDF-граф в любой HTML- или XML-документ. Это называется RDFa — «RDF в атрибутах» — так как адреса предметов и свойств записываются в атрибутах XML или HTML:

<p about="http://example.org/id/misha" xmlns:foaf="http://xmlns.com/foaf/0.1/">
    Привет, меня зовут Миша, мне <span property="foaf:age">30</span> лет.
    Я занимаюсь проектированием гиперпространственных двигателей вместе с моим
    коллегой <a rel="foaf:knows"
    href="http://example.com/employees/peter">Петром Ивановым</a>.
</p>

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

Пока что мы использовали адреса только для именования предметов и свойств. Но поскольку это полноценные веб-адреса, по ним можно и обращаться — делать HTTP-запросы и что-то получать в ответ. Это приводит к главному принципу Linked Data: имя каждого предмета одновременно является адресом, по которому можно об этом предмете узнать больше.

Например, обратившись по адресу Миши, мы можем получить от веб-сервера example.org как раз то описание, которое показано выше, в каком-нибудь подходящем формате (скажем, Turtle). Из этого описания мы узнаём, что Миша знаком с Петей. Теперь нам интересен Петя, и мы обращаемся по его адресу, чтобы узнать больше уже о нём — от веб-сервера example.com. То есть, отношения между предметами одновременно являются ссылками на другие данные. Так получается огромная распределённая паутина данных — надстройка над привычной паутиной документов.

Кстати, у этой паутины есть свои поисковики — например, Sindice. Если Google ищет слова и фразы в документах, то Sindice ищет адреса и их сочетания в данных.

Документы

Естественно, документы можно и нужно описывать, как и людей, зверей, самолёты, фирмы и любые другие предметы. В Linked Data принято следующее правило: если мы хотим описать веб-страницу по адресу http://example.net/articles/4, в качестве URI для графа мы используем именно этот адрес — тот самый, который видим в адресной строке браузера. К примеру, чтобы сказать, что автором этой страницы является Петя, мы написали бы:

<http://example.net/articles/4> dcterms:creator <http://example.com/employees/peter> .

Тут возникает небольшая загвоздка. Поскольку документы и люди — предметы совершенно разные, то нельзя использовать один и тот же адрес и для страницы, и для человека. Ведь у них совсем разные свойства: у страницы — заглавие, автор, дата создания; у человека — имя, возраст, место жительства. Получается, что по адресу http://example.org/id/misha не должно находиться никакой страницы, иначе у неё был бы тот же адрес, что у Миши. Как же тогда клиент — потребитель данных — сможет по этому адресу получить описание Миши?

Очень просто: мы разместим описание в каком-то другом месте, например http://example.org/about/misha.rdf, и поставим перенаправление (код HTTP 303 See Other) с адреса Миши на адрес описания.

В ответ на запрос Миши (/id/misha) сервер перенаправляет клиента на описание Миши (/about/misha.rdf). Благодаря этому описание Миши можно найти всегда, где бы ни встретилось его упоминание.

Есть и другой подход. Можно назначить Мише адрес http://example.org/about/misha.rdf#this. Обратите внимание на идентификатор фрагмента #this — при обращении к серверу он отбрасывается, остаётся адрес страницы с RDF. И волки сыты (адреса разные), и овцы целы (по адресу Миши можно автоматически получить его описание).

Но в связи с документами есть и ещё одна проблема. Как получить описание статьи http://example.net/articles/4 по её собственному адресу?

Если это веб-страница или любой XML-документ, то можно внедрить его RDF-описание прямо в сам код с помощью RDFa:

<p about="" xmlns:dcterms="http://purl.org/dc/terms/">
    Эту статью написал <a rel="dcterms:creator"
    href="http://example.com/employees/peter">Петя</a>.
    Последнее изменение — <span property="dcterms:modified">2010-07-15</span>.
</p>

Тогда документ описывает сам себя. Есть и другие подходы, позволяющие привязать описание даже к тем объектам, встроить в которые RDF невозможно (например, к изображениям).

Логический вывод

Linked Data является частью инициативы под названием Семантическая паутина, и унаследовала от неё мощную возможность: вывод новых, заранее не известных фактов из имеющихся, по определённым правилам. Многие из этих правил задаются на уровне словарей — в описаниях терминов (поскольку у них есть свои адреса, их можно описывать в LD, как и любые другие предметы). Для этого используются стандарты RDF Schema и OWL.

Вот некоторые популярные направления вывода:

идентичность предметов
если A — то же самое, что B (записывается A owl:sameAs B), то любое утверждение об A применимо также и к B, и наоборот
иерархия классов
если A — хорёк, то A — млекопитающее
иерархия свойств
если A является руководителем организации B, то A является членом B
области определения и значений свойств
если А работает в B, то A — человек, а B — организация
симметричные свойства
если A знаком с B, то B знаком с A
транзитивные свойства
если регион A является частью B, а B — частью C, то A является частью C

Подводя итоги

Итак, Linked Data — это способ публикации данных в Интернете, который обладает следующими важнейшими чертами.

Дальше