Я использую http://dbpedia-live.openlinksw.com/sparql/ и запускаю запрос SPARQL с использованием FILTER, ORDER BY и LIMIT. Вот запрос - он должен возвращать выборку людей, их имена и даты рождения:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?x0 ?name ?dob WHERE {
?x0 rdf:type foaf:Person.
?x0 rdfs:label ?name.
?x0 dbpedia-owl:birthDate ?dob.
FILTER REGEX(?name,"[A-Z].*").
} ORDER BY ?name LIMIT 100
Когда я запускаю запрос, он возвращает внутреннюю ошибку:
Virtuoso VECSL Error VECSL: Internal error, ssl refd before set, please report query to support
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-unconnected-variables 1 define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?x0 ?name ?dob
WHERE {
?x0 rdf:type foaf:Person.
?x0 rdfs:label ?name.
?x0 dbpedia-owl:birthDate ?dob.
FILTER REGEX(?name,"[A-Z].*").
} ORDER BY ?name LIMIT 100
но если я закомментирую свой ФИЛЬТР с помощью #, запрос будет выполнен нормально. Кто-нибудь видел это раньше? Есть ли непонятная ошибка в моем SPARQL или это внутренняя ошибка конечной точки?
Я использовал dbpedia-live.openlinksw.com/sparql вместо dbpedia.org/sparq, поскольку последний возвращал повторяющиеся даты рождения и был не так актуален! Так что мне приходится выбирать между повторяющимися датами и более сложной новой версией Virtuoso?
Также я попытаюсь выяснить, как сообщить об ошибке, но я не знаком с Virtuoso, кроме работы с конечными точками SPARQL.
У вас всегда есть возможность загрузить DBpedia в локальный тройной магазин по вашему выбору. Ясно, что проблемы с буквальными датами содержатся в дампе RDF, поэтому вам нужно будет выполнить некоторую очистку данных заранее, то есть перед загрузкой. Я также сделал это некоторое время назад, куча шаблонов регулярных выражений через sed
Я изучаю основы SPARQL, поэтому загрузка DBpedia в локальный магазин выходит за рамки моего опыта. Изначально я хотел извлечь полезные данные из DBpedia и использовать их для продвижения другого проекта, над которым я работаю.
На самом деле Virtuoso 8 не поддерживает запросы, которые включают ORDER BY
и FILTER
.
Об этой проблеме сообщалось с июня 2017 года.
Звучит интересно. Не могли бы вы предоставить корректуру? Кстати, после замены эл. грамм. ORDER BY ?name
с ORDER BY ?dob
, запрос работает нормально (как кажется).
О проблеме с FILTER + regex
сообщалось еще в прошлом году. Мне нужно получить список рассылки, в котором указана отчетность. Комбо ORDER + FILTER
- это всего лишь мое утверждение. Что меня удивило, так это ошибка безопасности. Орфографические ошибки - обычное дело, но проблема безопасности от Virtuoso ...
ssl
- это скорее «государственный слот», чем «уровень защищенных сокетов» :)
О боже .. Очевидно. Спасибо
По общему мнению, это ошибка, о которой известно уже 11 месяцев, есть ли какие-нибудь решения?
К сожалению, никаких подтверждений этому нет.
@Ubercoder, что-то вроде FILTER REGEX(?name,"[A-Z].*"). BIND (str(?name) AS ?name_) } ORDER BY ?name_ LIMIT 10
должно работать.
Исходя из всеобщей помощи, ответ таков:
Конечная точка Virtuoso, на которой размещается http://dbpedia-live.openlinksw.com/sparql/, имеет ошибку, влияющую на FILTER и ORDER BY.
Возможен обходной путь.
Код:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?x0 ?name2 ?dob WHERE {
?x0 rdf:type foaf:Person.
?x0 rdfs:label ?name.
?x0 dbpedia-owl:birthDate ?dob.
FILTER REGEX(?name,"^[A-Z].*").
BIND (str(?name) AS ?name2)
} ORDER BY ?name2 LIMIT 100
В основном он выполняет BIND, а также упорядочивает и ограничивает новую связанную переменную.
Учитывая, что он работает в Virtuoso 7.x (запустите ваш запрос здесь), это явно ошибка в Virtuoso 8.x - пожалуйста, сообщите об этой проблеме разработчикам Virtuoso.