Начинаем работать с Freebase при помощи Apache Jena

1. Resource Description Framework (RDF)

1.2. Что это такое?

Resource Description Framework (RDF, "среда описания ресурса") — это разработанная консорциумом Всемирной паутины модель для представления данных, в особенности — метаданных. RDF представляет утверждения о ресурсах в виде, пригодном для машинной обработки. RDF является частью концепции семантической паутины.

Ресурсом в RDF может быть любая сущность — как информационная (например, веб-сайт или изображение), так и неинформационная (например, человек, город или некое абстрактное понятие). Утверждение, высказываемое о ресурсе, имеет вид "субъект — предикат — объект" и называется триплетом.

Утверждение "небо голубого цвета" в RDF-терминологии можно представить следующим образом: субъект — "небо", предикат — "имеет цвет", объект — "голубой". Для обозначения субъектов, отношений и объектов в RDF используются URI.

Множество RDF-утверждений образует ориентированный граф, в котором вершинами являются субъекты и объекты, а рёбра отображают отношения.

1.3. Форма хранения триплетов

RDF сам по себе является не форматом файла, а только лишь абстрактной моделью. Для записи и передачи RDF используется несколько форматов, в том числе:

  • RDF/XML — запись в виде XML-документа;
  • RDF/JSON — запись в виде JSON-данных;
  • RDFa (англ. RDF in attributes) — запись внутри атрибутов произвольного HTML или XHTML документа;
  • N-Triples, Turtle, N3 — компактные формы записи утверждений.

Пример N-Triples(Freebase https://developers.google.com/freebase/data):

<http://rdf.freebase.com/ns/g.11vjz1ynm> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.date> "2001-02"^^<http://www.w3.org/2001/XMLSchema#gYearMonth>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.source> <http://rdf.freebase.com/ns/g.11x1gf2m6>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/type.object.type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 4.5 .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .

Для обработки данных, представленных в RDF, могут использоваться языки запросов: SPARQL (стандарт W3C), RQL, RDQL.

1.4. Полезные ссылки по этому разделу

Оригинал на википедии: https://ru.wikipedia.org/wiki/Resource_Description_Framework
Ещё статья на хабре: http://habrahabr.ru/post/94707/

2. Freebase

2.1. Что это такое?

Freebase — большая коллаборативная база знаний, содержащая метаданные, собранные, в основном, интернет-сообществом. Это онлайн-коллекция структурированных данных, собранных из множества источников, например, отдельных вики-проектов.

Целью Freebase является создание глобального ресурса, который позволит людям (и машинам) иметь более эффективный доступ к общеизвестной информации. Разрабатывается американской софтверной компанией Metaweb и работает публично с марта 2007 г. Metaweb была куплена Google (проанонсировано 16 июля 2010).

Ссылка: https://www.freebase.com
Лицензия: Creative Commons Attribution License(https://creativecommons.org/licenses/by/3.0/)

2.2. Архитектура Freebase(Моё видение)

В данном разделе я хочу рассказать, как я воспринимаю устройство Freebase. Моё воспринимание может отличаться от действительности.

2.2.1. Базовые понятия

  • Домен — группа/пакет/раздел объединяющий структуры.
  • Структура — это набор параметров описывающих какой-то объект. Стоит также отметить, что каждый параметр в структуре может иметь множество значений.
  • Схема — описывает набор параметров входящих в структуру.
  • Экземпляр объекта — это набор структур описывающих данный экземпляр объекта объединённых общим id.

2.2.2. Устройство

Используемые во Freebase триплеты объектов полностью скрыты за объектной парадигмой. Итак, Freebase позволяет нам думать о том, что внутри него лежат объекты. Каждый объект состоит из пар "параметр-значение". Однако эти объекты не похожи на объекты парадигмы ООП. Лучше всего думать о них, как о неупорядоченных множествах пар.

Например, у нас есть объект структуры Object с id "g.11vjz1ynm", затем у нас ещё есть структура Dated_percentage с тем же самым id "g.11vjz1ynm". Таким образом, объект с id "g.11vjz1ynm" описывается двумя структурами: Object и Dated_percentage.

2.2.3. Пример

Давайте рассмотрим, как описывается Украина(https://www.freebase.com/m/07t21) во Freebase. Украина имеет следующий id "m.07t21".

Как мы видим из рисунка с id "m.07t21" ассоциируется множество структур.

2.2.4. Структуры и Домены

В моём понимании тип во Freebase это структура с параметрами.

Система типов, а в моём понимании структур, не включает в себя механизм наследования. Структура /type/object не является некоторым супертипом который наследуется другими типами. Эта структура — просто набор весьма общих параметров, которые полезны на любом объекте.

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

                      +--/type/id
                      |
                      +--/type/int
                      |
                      +--/type/float
                      |
                      +--/type/boolean
                      |
      +--Value Types--+--/type/text
      |               |
      |               +--/type/rawstring
      |               |                     +--/restaurant domain
      |               +--/type/uri          |
      |               |                     +--/location domain
      |               +--/type/datetime     |
      |               |                     +--/film domain   +-/music/track
Types-+               +--/type/key          |                 |
      |                                     +--/music domain--+-/music/album
      |                                     |                 |
      |               +--Freebase Types-----+--/book domain   +-/music/artist
      |               |                     |
      |               |                     +--etc.
      |               |
      +--Object Types-+--Core Types (/type domain)    
                      |                     
                      +--Common Types (/common domain)
                      |                     
                      +--User-defined types-+--/user/joe/default_domain
                                            |
                                            +--/user/joe/music

2.3. Полезные ссылки по этому разделу

3. Apache Jena

3.1. Что это такое?

Apache Jena это опенсорс Semantic Web фрэймворк на Java. Этот фрэймворк предоставляет API для чтения/записи даннных из/в RDF графы. Графы в этом фрэймворке представлены абстрактной "моделью". Модель может быть создана из различных источников с данными — файлов, бд и т.д.. С моделью можно работать при помощи SPARQL и SPARUL.

Ссылка: https://jena.apache.org/
Лицензия: Apache License, Version 2.0

3.2. Models, Graphs

В Java терминах, Jena использует класс Model в качестве основного контейнера информации RDF, содержащейся в форме графа. В свою очередь Graph является более общим интерфейсом для низкоуровневых RDF хранилищ.

В целом есть несколько отличных друг от друга понятий RDF контейнеров в Jena:

  • Model имеет богатое Java API которое имеет много удобных методов для разработчиков приложений Java
  • Graph имеет простое Java API предназначеное для расширения функциональности Jena.

Также разработчики Jena обнаружили, что Model/Statement/RDFNode (API) работает в качестве интерфейса приложения, но это не то, что нужно для абстрагирования от хранения и Graph/Triple/Node (SPI) работает лучше, где «регулярность, независимость» является более ценным фактором. Таким образом разработчики разбили дизайн на application-facing (SPI) и sub-system-facing (API).

По моим наблюдениям индексы в Graph организованы иным способом, что сказывается на скорости получения данных из хранилищя когда мы работаем с ним как с графом.
Так создание списка Location’ов(кол-во 1.529.914) из Freebase в случае использования Model заняло у меня 36.4795242 часа. Тоже самое, но с использованием Graph заняло у меня 0.866116667 часа.

3.3. Чтение данных из модели

Итак, из раздела про RDF, мы уже знаем, как выглядят утверждения(триплеты): субъект — предикат — объект.
Для работы с триплетами Jena подразумевает следующие понятия:

Триплет(утверждение) Субъект Предикат Объект
Statement Resource Property RDFNode

Каждый statement(утверждение) заявляет факт о ресурсе. Иногда statement называют ещё triple из-за того, что он остоит из трёх частей.
Каждое утверждение состоит из:

  • Resource(субъект) — это в какой-то степени id объекта
  • Property(предикат) — параметр этого объекта
  • RDFNode(объект) — значение параметра. Значением может быть как id объекта(Resource), так и какое-то значение(Literal)

RDFNode имеет несколько методов, название которых говорит само за себя RDFNode.asResource и RDFNode.asLiteral.

3.4. Пример чтения данных из модели

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

<http://rdf.freebase.com/ns/g.11vjz1ynm> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.date> "2001-02"^^<http://www.w3.org/2001/XMLSchema#gYearMonth>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.source> <http://rdf.freebase.com/ns/g.11x1gf2m6>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/type.object.type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 4.5 .
<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .

Как мы видим, все триплеты относятся к одному субъекту(Resource), а именно "g.11vjz1ynm".

Давайте рассмотрим каждую строчку в этом наборе statements(утверждений).

3.4.1. Строка 1

<http://rdf.freebase.com/ns/g.11vjz1ynm> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.date> "2001-02"^^<http://www.w3.org/2001/XMLSchema#gYearMonth>  .

Данная строка утверждает следующие: субъект(Resource) "g.11vjz1ynm" имеет параметр(Property) "dated_percentage.date" у которого значение(Literal) "2001-02" это значение ничто иное как дата формата год-месяц(XMLSchema#gYearMonth) 2001-02.

3.4.2. Строка 2

<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.source> <http://rdf.freebase.com/ns/g.11x1gf2m6>  .

Данная строка утверждает следующие: субъект(Resource) "g.11vjz1ynm" имеет параметр(Property) "dated_percentage.source" который хранит id объекта(Resource) "g.11x1gf2m6".

3.4.3. Строка 3

<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/type.object.type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .

Данная строка утверждает следующие: субъект(Resource) "g.11vjz1ynm" имеет параметр(Property) "object.type" который хранит id объекта(Resource) "measurement_unit.dated_percentage".

Стоит отметить, что в данной строке значние параметра очень напоминает параметр, однако зная архитектуру Freebase можно утверждать, что это просто id объекта. Объектом в данном случае является структура "measurement_unit.dated_percentage"

3.4.4. Строка 4

<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 4.5 .

Данная строка утверждает следующие: субъект(Resource) "g.11vjz1ynm" имеет параметр(Property) "dated_percentage.rate" который хранит значение(Literal) типа double 4.5.

3.4.5. Строка 5

<http://rdf.freebase.com/ns/g.11vjz1ynm>  <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage>  .

Данная строка утверждает следующие: субъект(Resource) "g.11vjz1ynm" имеет параметр(Property) "22-rdf-syntax-ns#type"
который хранит id объекта(Resource) "measurement_unit.dated_percentage".

Данная строка повторяет факт описанный в строке 3, но этот факт описан по стандарту rdf-syntax-ns.

3.4.6. Что описывает этот набор утверждений?

Зная как устроена Freebase можно сказать следующие:

  • Существует субъект(объект) с id "g.11vjz1ynm" который имеет тип "dated_percentage"
  • Согласно описанию типов, тип dated_percentage принадлежит домену measurement_unit
  • Согласно схеме https://www.freebase.com/measurement_unit/dated_percentage?schema= типа "dated_percentage" субъект(объект) с id "g.11vjz1ynm" имеет параметры со следющими значениями: rate — "4.5", date — "2001-02", source — id "g.11x1gf2m6"

3.4.7. Пример кода по получению значения rate

Model

Resource object_res;
object_res = jena_model.getResource( "http://rdf.freebase.com/ns/g.11vjz1ynm" );

NodeIterator values_iter;
values_iter = jena_model.listObjectsOfProperty( object_res, "http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate" );

if( values_iter.hasNext() )
    return values_iter.next().asLiteral().getDouble();

Graph

Node object_node;
object_node = NodeFactory.createURI( "http://rdf.freebase.com/ns/g.11vjz1ynm" );

Node property_node;
property_node = NodeFactory.createURI( "http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate" );

ExtendedIterator<Triple> object_iter;
object_iter = graph.find( object_node, property_node, Node.ANY );

if( object_iter.hasNext() )
  return NodeFactoryExtra.nodeToDouble( object_iter.next().getObject() );

3.5. Полезные ссылки по этому разделу

The core RDF API: http://jena.apache.org/documentation/rdf/
Более подробная статья на английском про то, как работать с RDF моделями при помощи Apache Jena: https://jena.apache.org/tutorials/rdf_api.html#ch-Introduction

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s