BIND 的 Virtuoso SPARQL Bug

Virtuoso SPARQL Bug with BIND

我想我在 Virtuoso 中发现了 SPARQL 的 BIND 函数的错误。我是运行这个在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)
}

这符合预期。现在删除 BINDpoof 上的注释,结果消失。如果我将一些字符串操作绑定到另一个变量,为什么结果会消失?

其他人可能会提供此行为的原因,但您可以通过将标签过滤器更改为 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")
}