如何用Unicode字母进行SPARQL查询?

2 投票
1 回答
582 浏览
提问于 2025-04-17 19:04

我正在用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%A9reOp\u0233raOp\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>)。

撰写回答