如何用Unicode字母进行SPARQL查询?
我正在用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" )
}
唯一的不同就是标签的值。页面http://fr.dbpedia.org/page/Opéra
在dbpedia中是存在的,并且它的rdfs标签被设置为“Opéra”。
我觉得这个查询不成功是因为它包含了法语字母é
。我尝试了几种转义方式(Op%C3%A9re
、Op\u0233ra
、Op\xe9ra
),但都没有成功。
有什么想法吗?
1 个回答
2
问题在于这个 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>
)。