Sparql как язык запросов к графам

52 views
Skip to first unread message

Dmitry Gubanov

unread,
Aug 5, 2009, 4:51:51 PM8/5/09
to webofdata.ru
Коллеги! Доброе время суток!
Можно ли с помощью SPARQL задать ограничения на граф и получить
подграф?
Допустим, у меня есть следующая цепочка (может быть произвольной
длины) в графе:
Иванов знаком с Петровым, Петров знаком с Сидоровым,.., Добров знает
дескриптивную логику.
Пример запроса:
Иванову нужна консультация специалиста по дескриптивной логике, и
ему интересно знать к кому из знакомых следует обратиться, чтобы
получить рекомендацию.
Дальнейшие модификации запроса:
Выдать цепочку минимальной длины,
Добавить логические ограничения и т.п.

Дмитрий Губанов

unread,
Aug 5, 2009, 6:12:45 PM8/5/09
to webofdata.ru
Насколько я помню, в SPARQL  запрос нужно строить так:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?y
WHERE {
 ?x foaf:name "Иванов".
 ?x foaf:knows [ foaf:knows [ ..foaf:knows ?y]].
 ?y foaf:expert "Дескриптивная логика"
}
Как же задать цепочку (подграф) произвольной длины? И получить ее?
Общий вопрос для специалистов: существуют ли языки запросов для анализа графов (желательно с поддержкой семантики)?

Ivan Mikhailov

unread,
Aug 5, 2009, 10:03:50 PM8/5/09
to webofdat...@googlegroups.com
On Wed, 2009-08-05 at 13:51 -0700, Dmitry Gubanov wrote:
> Коллеги! Доброе время суток!
> Можно ли с помощью SPARQL задать ограничения на граф и получить
> подграф?
> Допустим, у меня есть следующая цепочка (может быть произвольной
> длины) в графе:
> Иванов знаком с Петровым, Петров знаком с Сидоровым,.., Добров знает
> дескриптивную логику.
> Пример запроса:
> Иванову нужна консультация специалиста по дескриптивной логике, и
> ему интересно знать к кому из знакомых следует обратиться, чтобы
> получить рекомендацию.

Чистого SPARQL недостаточно (как и чистого SQL). В Virtuoso есть
расширения SPARQL и расширения SQL для транзитивных запросов, которых на
такую задачу хватает.
http://docs.openlinksw.com/virtuoso/rdfsparqlrule.html#rdfsparqlruletransitivy

> Дальнейшие модификации запроса:
> Выдать цепочку минимальной длины,

Virtuoso это умеет.

> Добавить логические ограничения и т.п.

Ну, это смотря какие. Если очень-очень постараться, то можно написать и регулярные выражения для цепочек дуг в путях (в духе Тарского), но это не для рядового разработчика ребус. На WWW2007 был доклад, там этот язык Тарского добавили в грамматику и в рантайм, естественно, добавили алгоритм того же Тарского. Могу попробовать поискать этот доклад. Оригинальную статью Тарского на эту тему видел, по-моему, в архиве AMS, но она там только в платном доступе, не стал её качать.

Всего наилучшего,

Иван Михайлов
OpenLink Software
http://virtuoso.openlinksw.com

Дмитрий Губанов

unread,
Aug 5, 2009, 10:21:12 PM8/5/09
to webofdat...@googlegroups.com
..Ну, с грамматиками-то да. Но как всегда хочется использовать готовые решения, а лучше стандартные, чтобы не заморачиваться в будущем.
  В SPARQL нет, понятно.. Иван, спасибо за информативный ответ! Любопытно было бы глянуть на этот доклад. Если он найдется, то это было бы замечательно

Natalya Keberle

unread,
Aug 6, 2009, 2:40:19 AM8/6/09
to webofdat...@googlegroups.com, Natalya Keberle
Хмм, если использовать SPARQL не принципиально, то вот есть(был точно) язык запросов Versa, поддерживает рекурсивные запросы.
Сравнения можно посмотреть здесь:
.
 

Natalya Keberle

unread,
Aug 6, 2009, 2:54:13 AM8/6/09
to webofdat...@googlegroups.com, Natalya Keberle
Собственно, вот и примеры для Versa свежие
 
Reply all
Reply to author
Forward
0 new messages