2011-12-20 8 views
9

Я новичок в SPARQL и задавался вопросом, был ли запрос, который мог бы помочь мне вернуть транзитивные отношения. Например, n3-файл ниже, я хотел бы получить запрос, который будет возвращать «a is sameas c» или что-то в этом направлении. БлагодаряSPARQL Querying Transitive

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

ответ

13

Вы можете использовать пути собственности, если вы используете соответствующим образом включен SPARQL 1.1 двигатель, вы добавили свой вопрос Jena, так что я предполагаю, что вы используете его двигатель ARQ, который поддерживает эту функцию.

Таким образом, вы можете написать запрос вроде следующий:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

Обратите внимание на + после предиката, используемый для указания, что он должен искать отношения, состоящие из одного/нескольких стадий.

Синтаксис для путей свойств можно найти here и является очень регулярным выражением типа. Единственный недостаток запросов, использующих это, заключается в том, что вы не получаете никакой информации о том, сколько времени пути или какие промежуточные узлы.

+0

Еще раз спасибо за помощь. Если вы решите проверить ссылку на синтаксис SPARQL – Sam

+3

Если запрашиваемая вами информация поддерживает логику OWL, в частности профиль OWL, который включает транзитивность, и вы определили свойство как TransitiveProperty, тогда вам не нужен какой-либо специальный SPARQL синтаксис, вы можете просто использовать свойство в обычном режиме, и разумник будет поступать правильно. – Michael

4

В то время как RobV's answer верен в вашем случае, я думаю, что двунаправленный характер совы: sameAs стоит упомянуть.

Давайте расширим ваш пример этим:

:a owl:sameAs :d. 
:e owl:sameAs :d. 

В этом случае простой owl:sameAs+ не хватило бы, чтобы найти :e, так что, возможно, использовать что-то вроде (owl:sameAs|^owl:sameAs)+ найти все дерево эквивалентности. Имейте в виду, что в зависимости от конечной точки это может вызвать циклы.

Также может быть реализация конкретных расширений для обработки owl:sameAs рассуждения, например, в Virtuoso:

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

возвращение также ?p и ?o, которые выпускаются для :b, :c, :d и :e.

 Смежные вопросы

  • Нет связанных вопросов^_^