Поиск свободного текста в dbpedia

Я хочу использовать поиск по свободному тексту в dbpedia и пытаюсь найти запрос, найденный на веб-сайте W3C: https://www.w3.org/2009/Talks/0615-qbe/

Если я попытаюсь выполнить запрос БЕЗ префикса bif:, комментируя его, я получу сообщение об ошибке, показанное под запросом:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
# PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
  ?country rdfs:label ?lbl .
  FILTER(bif:contains(?lbl, "Republic")) .
  ?country a type:Country108544813 ;
      prop:establishedDate ?est .
  FILTER(?est < "1920-01-01"^^xsd:date) .
}

Ошибка: строка 9, ошибка синтаксического анализа: отображение пространства имен для "bif" не определено при расширении QName "bif: содержит". [тип условия: sparql-lexer-error-namespace-mapping-not-fined]

хорошо: это имеет смысл, вам нужно определить свое пространство имен. Итак, позвольте мне повторить тот же запрос, используя префикс bif:, который я нашел на сайте Virtuoso (и в других местах).

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
  ?country rdfs:label ?lbl .
  FILTER(bif:contains(?lbl, "Republic")) .
  ?country a type:Country108544813 ;
      prop:establishedDate ?est .
  FILTER(?est < "1920-01-01"^^xsd:date) .
}

Теперь я получаю другую ошибку: кажется, что пространство имен bif: является защищенным именем от Virtuoso

введите описание изображения здесь

Так что, кажется, я не могу жить с BIF: или без: BIF. Кто-нибудь видел эту ошибку раньше? Благодарю.

Btw: меня действительно не волнует bif: что я действительно хочу, так это делать запросы в свободном тексте к dbpedia. Так что любая альтернатива приветствуется. ДА: на SO есть более ранние вопросы по этому поводу, но обратите внимание, что каждый из этих ответов также содержит bif:.

Добавлено позже: просто чтобы быть уверенным, что я изменил bif: на bof: и теперь я получаю новую ошибку, которая показывает, что больше не является допустимым оператором. Увидеть ниже. Так или иначе: я думаю, что единственное, что меня волнует, это то, как: как вы делаете запросы в свободном тексте к dbpedia:-)

введите описание изображения здесь

1 ответ

bif: является встроенным Virtuoso, для "встроенной функции".

Вы проходите какой-то предварительный анализатор SPARQL, а не напрямую к конечной точке SPARQL, поэтому вам необходимо определить префикс в своем запросе. Большинство таких предварительных парсеров будут делать правильные вещи, если вы просто -

PREFIX  bif:  <bif:>

Кроме того, вы можете изменить свой запрос с помощью bif:contains функция -

FILTER(bif:contains(?lbl, "Republic"))

- использовать регулярные выражения SPARQL -

FILTER regex(?lbl, "Republic")
Другие вопросы по тегам