2012-01-17 3 views
8

Скажу, у меня есть запрос SPARQL, как это, ищут ресурсы, которые имеют некоторые общие свойства с фокусным ресурсом, а также получить некоторые другие заявления о фокусном ресурсе:Как ограничить количество результатов для определенной переменной в запросе SPARQL?

CONSTRUCT { 
    ?focal pred:icate ?shared . 
    ?other pred:icate ?shared . 
} 
WHERE { 
    ?focal pred:icate ?shared ; 
     more:info ?etc ; 
     a "foobar" . 
    ?other pred:icate ?shared . 
} 
LIMIT 500 

Если есть больше чем 500 другие ресурсов, что LIMIT может исключить этот оператор и объект more:info. Итак, есть ли способ сказать: «Я хочу не более 500 из ?other», или мне нужно разбить этот запрос на несколько частей?

ответ

9

Вы можете использовать LIMIT в подзапросов, то есть что-то вроде следующего:

CONSTRUCT { 
    ?focal pred:icate ?shared . 
    ?other pred:icate ?shared . 
} 
WHERE { 
    ?focal pred:icate ?shared ; 
      more:info ?etc ; 
      a "foobar" . 
    { 
     SELECT ?shared { 
     ?other pred:icate ?shared . 
     } 
     LIMIT 500 
    } 
} 
1

http://www.w3.org/TR/2012/WD-sparql11-query-20120105/#modResultLimit

Предложение ПРЕДЕЛ кладет верхнюю границу числа решений возвращаемых. Если количество фактических решений после применения OFFSET превышает лимит, то самое большее будет получено предельное число решений .

Вы можете ограничить количество решений по вашему запросу, а не определенное его подмножество. Вы можете использовать подзапрос с предложением LIMIT: http://www.w3.org/TR/sparql-features/#Subqueries.

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