2

我正在使用 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) 都没有成功。

任何的想法?

4

1 回答 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>)。

于 2013-03-14T21:35:20.050 回答