Виртуозная ошибка SPARQL с BIND

Я думаю, что нашел ошибку с функцией BIND SPARQL в Virtuoso. Я запускаю это в http://dbpedia.org/snorql/

Рассмотрим следующий код:

SELECT DISTINCT ?label ?companyShort
WHERE{
        ?org rdf:type dbo:Company ;
            rdfs:label ?label .        
        #BIND (UCASE(SUBSTR(?label,1,3)) as ?companyShort)
        filter langMatches( lang(?label), "EN" )
        filter(?label="About.com"@en)
}

Это ведет себя так, как ожидалось. Теперь удалите комментарий к BIND и poof результаты исчезнут. Почему результаты исчезнут, если я привяжу некоторые манипуляции со строками к другой переменной?


person Dano13    schedule 31.10.2019    source источник
comment
Ваш отчет касается не SPARQL, а Virtuoso, процессора SPARQL, лежащего в основе DBpedia. Это требует дополнительного анализа. Я призываю вас поднять проблему проекта Virtuoso на GitHub. (Обратите внимание, что ваш первый FILTER избыточен, так как ваш второй FILTER включает языковой тег @en.)   -  person TallTed    schedule 31.10.2019


Ответы (1)


Другие могут объяснить причину такого поведения, но вы можете исправить это, изменив фильтр меток на str(?label)="About.com", чтобы запрос выглядел следующим образом:

SELECT DISTINCT ?label ?companyShort
WHERE{
        ?org rdf:type dbo:Company ;
            rdfs:label ?label .        
        BIND (UCASE(SUBSTR(?label,1,3)) as ?companyShort)
        filter langMatches( lang(?label), "EN" )
        filter(str(?label)="About.com")
}
person kidney    schedule 31.10.2019
comment
Интересно, что на самом деле это похоже на ошибку в Virtuoso. Только что проверил на GraphDB, и исходный запрос там работает без проблем. - person kidney; 31.10.2019