Запросы между разнородными тройными хранилищами

Что я на данный момент считаю правдой:

  • Triplestores — это все о «связанных данных»; данные, которые отделены от любого данного приложения и могут быть дополнены через афферентные связи, образованные новыми данными. Эта концепция движет Интернетом.
  • URI позволяют размещать связанные данные в различных гетерогенных средах.
  • Чтобы две машины могли взаимодействовать, обе они должны работать в соответствии с согласованным стандартом.
  • W3C определил такие стандарты. В частности: RDF (для форматирования) и SPARQL (для запросов).

Вопрос:

Можно ли выполнить запрос, охватывающий несколько разнородных тройных хранилищ RDF?

Пример:

  • У нас есть 3 тройных магазина RDF, работающих на разном программном обеспечении.
  • Triplestore A содержит узлы, которые ссылаются на другие узлы в тройных хранилищах B и C.
  • Запускаем такой запрос, который должен проходить по узлам из всех 3-х хранилищ.

person Lawrence Wagerfield    schedule 31.10.2013    source источник


Ответы (1)


Да, это вполне возможно, и это то, что SPARQL 1.1 Federated Запрос рекомендация W3C примерно такая. В запросе SPARQL вы используете ключевое слово SERVICE для указания различных конечных точек SPARQL, которые вы хотите запросить. Пример из связанной рекомендации:

PREFIX foaf:   <http://xmlns.com/foaf/0.1/>
SELECT ?name
FROM <http://example.org/myfoaf.rdf>
WHERE
{
  <http://example.org/myfoaf/I> foaf:knows ?person .
  SERVICE <http://people.example.org/sparql> { 
    ?person foaf:name ?name . } 
}

Ключевое слово service говорит о том, что тройка ?person foaf:name ?name должна быть извлечена из <http://people.example.org/sparql>. В вашем случае вы можете получить что-то вроде:

PREFIX ex: <http://example.org/>
SELECT ?person ?age ?weight ?resume WHERE {
  values ?person { ex:Bill ex:John }
  SERVICE <http://jobs.example.org/sparql>   { ?person ex:resume ?resume } 
  SERVICE <http://age.example.org/sparql>    { ?person ex:age    ?age    } 
  SERVICE <http://weight.example.org/sparql> { ?person ex:weight ?weight } 
}

Однако вам придется где-то запустить этот запрос. Если вы запустите его локально, то все три триплетных хранилища могут быть указаны как services, но если вы запускаете запрос непосредственно к одному из них, то вы можете указать только два других как services. Конечно, все это будет зависеть от наличия некоторого механизма SPARQL, поддерживающего федеративные запросы. Я ожидаю, что в наши дни это делает большинство, но у меня есть опыт работы только с Jena (которая поддерживает федеративные запросы).

person Joshua Taylor    schedule 31.10.2013
comment
Ключевое слово service — своего рода шутка для любого реального сценария развертывания (imo). Так что, хотя это сработает для OP, я бы не советовал его использовать. Служба федеративных запросов, к которой вы предъявляете обычный запрос SPARQL, и она выясняет, какие части запроса куда идут, является лучшим подходом. Кодирование в том месте, где данные находятся в запросе, является ненадежным и сводит на нет большую часть ценности, которую интеграция данных через RDF приносит в таблицу. - person Michael; 31.10.2013
comment
@Michael: Звучит именно так, как я хочу сделать. Как мне этого добиться? Как избежать указания местоположений заранее в запросе? Я представляю себе систему, в которой узлы в хранилище RDF запрашиваются ссылочными узлами из других хранилищ RDF, и что запрос начинается с узла входа и сканирует граф подобно пауку. - person Lawrence Wagerfield; 01.11.2013
comment
Я не советую делать это вручную, федеративный запрос - это не то, что вы можете (правильно) собрать за полдня. Есть решения, я знаю, что у Sesame есть какая-то поддержка федерации, и я уверен, что коммерческие поставщики тоже. Но суть в том, что у вас есть логическая онтология, которая представляет вашу область, и к ней относятся запросы. Отдельная служба запросов берет этот запрос и разбивает его на (надеюсь) более мелкие запросы к отдельным источникам, которые содержат разные части данных, на основе некоторой конфигурации/сопоставления. - person Michael; 01.11.2013
comment
comment
Да, я знаю о поддержке федерации Sesame, это хороший вариант с открытым исходным кодом для @LawrenceWagerfield. Наше решение похоже на то, что я описал, но пока не является частью Stardog. - person Michael; 06.11.2013
comment
@ Майкл Ой, извини, я хотел прокомментировать Лоуренса, а не тебя. Спасибо за ответ с комментарием, о котором он получит уведомление! - person Joshua Taylor; 06.11.2013
comment
@JoshuaTaylor Спасибо за ссылку :) - person Lawrence Wagerfield; 07.11.2013