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)
}
这符合预期。现在删除 BIND
和 poof 上的注释,结果消失。如果我将一些字符串操作绑定到另一个变量,为什么结果会消失?
其他人可能会提供此行为的原因,但您可以通过将标签过滤器更改为 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")
}
我想我在 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)
}
这符合预期。现在删除 BIND
和 poof 上的注释,结果消失。如果我将一些字符串操作绑定到另一个变量,为什么结果会消失?
其他人可能会提供此行为的原因,但您可以通过将标签过滤器更改为 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")
}