2015-06-18 9 views
2

Мне нужны все годы в заданном диапазоне как значения в sparql (особенно для реализации кунжута).Функция диапазона в sparql

Есть ли способ, чтобы «создать» новые номера в SPARQL, как:

SELECT (RANGE(2,10) AS ?numbers) 
WHERE{} 
+0

В этом языке нет ничего подобного, хотя вы можете проверить, поддерживает ли ваша реализация дополнительные функции. Что бы вы хотели, чтобы числа были привязаны, во всяком случае? Что-то вроде 'select? Year, где {? Year ex: inRange [ex: мин. 2; ex: max 10]} 'может быть поддержана функцией свойств в Йене, я думаю. –

+0

Я посмотрел, как создавать пользовательские функции в кунжуте (http://www.rivuli-development.com/further-reading/sesame-cookbook/creating-custom-sparql-functions/), но я думаю, что вы можете только вернуть одно значение –

+0

@RaphaelSchumann хорошо, да, но это почти _definition_ функции, которая возвращает одно значение :) Можете ли вы немного рассказать о своем случае использования? Может быть альтернативный способ добиться того, что вам нужно. –

ответ

0

, не принимая более глубокий взгляд, один наивный ответ в духе RDF является материализовать число, а затем использовать FILTER для ассортимент. Другими словами, просто вставить их в графу

ex:year ex:anumber "1900"^^xsd:integer . 
    ex:year ex:anumber "1901"^^xsd:integer . 
    ... 
    ex:year ex:anumber "2100"^^xsd:integer . 

И есть шаблон в разделе WHERE:

SELECT ?number 
    WHERE { 
     ex:year ex:number ?number . 
     FILTER (?number < 2020) 
     FILTER (?number > 1999) 
    } 

Как отметил выше, трудно представить себе случай использования для «знать» числа: то, что вы получаете, будет кросс-продуктом со всем остальным в запросе, если только получение чисел не является единственной целью запроса или какой-либо применяемой фильтрации (в последнем случае нет необходимости генерировать числа вообще).