У меня есть следующий запрос SPARQL на Виртуоз:Как сделать SPARQL запрос с использованием BIF: regexp_match на Jena
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT DISTINCT ?p, ?title WHERE {
?p a ?c.
?c rdfs:subClassOf* wd:Q2431196.
?p rdfs:label ?title .
FILTER (bif:regexp_match("^Vamp([(].*[)])?$", ?title))
}
На this SPARQL endpoint, он отлично работает. Он возвращает ТВ-шоу Vamp, а также Vamp (telenovela), как и ожидалось.
Теперь я пытаюсь сделать то же самое на Java, используя Jena API, и это терпит неудачу следующим образом.
Исключение в потоке "основного" com.hp.hpl.jena.query.QueryParseException: Строка 10, столбец 204: неразрешенные приставкой имя: БИФ: regexp_match
Я нашел решение, чтобы избавиться от исключения Йены, как предложено для bif:contains
. Запрос был бы следующим:
PREFIX wd: <http://www.wikidata.org/entity/>
SELECT DISTINCT ?p, ?title WHERE {
?p a ?c.
?c rdfs:subClassOf* wd:Q2431196.
?p rdfs:label ?title .
?title <bif:regexp_match> "^Vamp([(].*[)])?$"
}
Однако этот запрос не возвращает никаких элементов, как это делал предыдущий запрос. Он не возвращает никаких элементов на веб-интерфейсе конечной точки SPARQL либо (как это делал предыдущий запрос)
Я что-то не так? Как я могу регулярное выражение правильно?
пс: с помощью FILTER REGEX(?title, "^Vamp([(].*[)])?$")
работы на веб-SPARQL конечной точки, но выдает следующее сообщение об ошибке, когда на Java/Йена:
16 сентября 2015 3:16:32 PM org.apache.jena.riot. system.ErrorHandlerFactory $ ErrorLogger LogError СИЛЬНЫЙ: Invalid байт 2 из 3-х байт UTF-8 sequence.`
Я думаю эта ошибка связана с ()
символов ..
Это определенно похоже, что проблема заключается в регулярном выражении, как в вашей конструкции, так и в интерпретации Virtuoso. Я не могу предложить немедленное решение, но могу и предлагаю вам поднять вопрос на более целенаправленную аудиторию - список рассылки [Virtuoso Users users (http://sourceforge.net/p/virtuoso/mailman/virtuoso-users/) , – TallTed