Подтвердить что ты не робот

SPARQL - Ограничение ресурса результата для определенных пространств имен

Существует ли стандартный способ ограничения результатов запроса SPARQL к определенному пространству имен.

4b9b3361

Ответ 1

Короткий ответ - нет стандартного прямого способа сделать это

Длинный ответ. Однако да, вы можете сделать ограниченную форму этого со строковыми функциями и предложением FILTER. Какую функцию вы используете, зависит от того, какую версию SPARQL поддерживает ваш движок.

Решение SPARQL 1.1

Почти все реализации в наши дни поддерживают SPARQL 1.1, и вы можете использовать функцию STRSTARTS(), например так:

FILTER(STRSTARTS(STR(?var), "http://example.org/ns#"))

Это мой предпочтительный подход и должен быть относительно эффективным, потому что это простое сопоставление строк.

Решение SPARQL 1.0

Если вы застряли, используя реализацию, которая поддерживает только SPARQL 1.0, вы все равно можете сделать это так, но она использует регулярные выражения с помощью REGEX(), поэтому, вероятно, будет медленнее:

FILTER(REGEX(STR(?var), "^http://example\\.org/ns#"))

Регулярные выражения и метасимволы

Обратите внимание, что для регулярного выражения нам нужно избежать метасимвола ., поскольку в противном случае он мог бы соответствовать любому символу, например. http://exampleXorg/ns#foo будет считаться допустимым.

Поскольку \ является символом escape как для регулярных выражений, так и для строк SPARQL, он должен быть дважды экранирован здесь, чтобы получить в нем регулярное выражение только \. и рассматривать . как литерал.

Рекомендации

Если вы можете использовать SPARQL 1.1, тогда сделайте это, потому что использование более простых строковых функций будет более показательным и избежит необходимости беспокоиться о том, чтобы избежать метасимволов, которые у вас есть при использовании REGEX