我目前正在使用R中的SPARQL包查询DBPedia的人名列表。当我通过SPARQL检索名称列表时,出现了一些问题,即URI形式的某些名称包含标点符号(例如","或"(")无法被SPARQL查询识别,例如:
endpoint="http://de.dbpedia.org/sparql"
query= "SELECT COUNT (*){
dbpedia-de:Johannes_Aurifaber_(Vimariensis) ?p ?o
}"
qd=SPARQL(endpoint,query)
事实证明这是一个错误: XML内容似乎不是XML:' Virtuoso 37000错误SP030:SPARQL编译器,第3行:Vimariensis的语法错误'之前')' 。 但是,如果我将查询更改为:
endpoint="http://de.dbpedia.org/sparql"
query= "SELECT COUNT (*){
<http://de.dbpedia.org/resource/Johannes_Aurifaber_(Vimariensis)> ?p ?o
}"
qd=SPARQL(endpoint,query)
一切都很顺利。但有没有办法修改第一个查询,因为查询人名列表更方便。
答案 0 :(得分:5)
您应该能够将\
置于特殊字符之前,并且它是有效的SPARQL查询。这是一个有效的SPARQL查询:
SELECT (count(*) as ?count)
where {
dbpedia-de:Johannes_Aurifaber_\(Vimariensis\) ?p ?o
}
但是,每个端点都有一些特定的限制。因此,(根据约书亚的评论),Virtuoso只允许许多不合法的事情,并且不接受任何合法的事情。