2016-12-28 3 views
2

Рассмотрим следующий фрагментЗапросы пути в конечной точке WikiData?

ASK WHERE { wd:Q734774 wdt:P31 wd:Q3918. } 

Это works fine in WikiData. Я хочу использовать некоторые из path syntax в этом фрагменте. В частности, я хочу ограничить количество используемых в пути времен «wdt: P31». В соответствии с руководящими принципами, это должно быть правильным синтаксисом:

ASK WHERE { wd:Q734774 wdt:P31{,3} wd:Q3918. } 

Но это дает мне weird error messages. Есть идеи?

+0

Запрос правильный; он (тот же формат) работает в DBPedia. Возможно, какая-то проблема с парсером на викидате? –

+2

Нет, ты ошибаешься. Вы читаете черновик (с 2010 года) синтаксиса пути свойства. Ограничение длины пути собственности не доходило до окончательной версии (которая была 3 года спустя): https://www.w3.org/TR/sparql11-query/#propertypaths – AKSW

+0

@AKSW Я вижу .. то как я могу имитировать такое поведение? (за исключением запросов несколько раз, и один раз для фиксированной длины пути, очевидно) – Daniel

ответ

3

final version of SPARQL 1.1 Property Paths позволяет сделать это с помощью the following query -

ASK WHERE 
    { wd:Q734774 
     wdt:P31?/wdt:P31?/wdt:P31? 
      wd:Q3918 
    } 

Для ясности, я поместил полный собственности Путь Predicate (wdt:P31?/wdt:P31?/wdt:P31?) на отдельной строке между Тема (wd:Q734774) и Объект (wd:Q3918). В конце ? запрашивается один или нулевой экземпляр предиката wdt:P31, а / запрашивает последовательность, поэтому этот полный путь запрашивает последовательность экземпляров с нулевым или одним или двумя или тремя.

+0

Спасибо @TallTed за ответ. Один вопрос. Предположим, что 'ASK WHERE {wd: Q734774 wdt: P31 * wd: Q3918. } 'возвращает true. Как я могу запросить длину пути, который соединяет два объекта «wd: Q3918» и «wd: Q734774» вместе? – Daniel

+1

Это совсем другой вопрос и требует [совсем другой ответ] (http://stackoverflow.com/a/41121465/241164). – TallTed

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