我正在使用 SPARQL 查询法语 dbpedia ( http://fr.dbpedia.org/ )。
我正在使用 Python 和 SPARQLWrapper(如果有什么不同的话)。
第一个查询工作正常。
PREFIX dbpp:<http://dbpedia.org/property/>
PREFIX dbpo:<http://dbpedia.org/ontology/>
PREFIX dbpr:<http://dbpedia.org/resource/>
SELECT ?wt ?summary ?source_url
WHERE {
?wt rdfs:label "Concerto"@fr .
OPTIONAL { ?wt dbpedia-owl:abstract ?summary . }
OPTIONAL { ?wt foaf:isPrimaryTopicOf ?source_url . }
filter (lang(?summary) = "fr" )
}
第二个查询不起作用。
PREFIX dbpp:<http://dbpedia.org/property/>
PREFIX dbpo:<http://dbpedia.org/ontology/>
PREFIX dbpr:<http://dbpedia.org/resource/>
SELECT ?wt ?summary ?source_url
WHERE {
?wt rdfs:label "Opéra"@fr .
OPTIONAL { ?wt dbpedia-owl:abstract ?summary . }
OPTIONAL { ?wt foaf:isPrimaryTopicOf ?source_url . }
filter (lang(?summary) = "fr" )
}
唯一的区别是标签的值。 dbpedia 中存在页面http://fr.dbpedia.org/page/Opéra
,rdfs 标签设置为“Opéra”。
我认为该查询不起作用,因为它包含法语字母 é
。我尝试了几次转义(Op%C3%A9re
、Op\u0233ra
、Op\xe9ra
),但没有成功。
有什么想法吗?
最佳答案
问题是FILTER
不是可选的。所以它不匹配 <http://fr.dbpedia.org/resource/Opéra>
,其中没有 dbpedia-owl:abstract
.
PREFIX dbpp: <http://dbpedia.org/property/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpr: <http://dbpedia.org/resource/>
SELECT ?wt ?summary ?source_url
WHERE {
?wt rdfs:label "Opéra"@fr .
OPTIONAL { ?wt dbpedia-owl:abstract ?summary .
filter (lang(?summary) = "fr" )
}
OPTIONAL { ?wt foaf:isPrimaryTopicOf ?source_url . }
}
...有效(并返回 <http://fr.dbpedia.org/resource/Catégorie:Opéra>
)。
关于python - 如何使用 unicode 字母进行 sparql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407465/