我认为我发现了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")
}