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