如何正确使用SPARQL OPTIONAL来检索可能存在的资源的属性?

时间:2011-03-01 23:13:09

标签: sparql dbpedia

我正在尝试使用SPARQL查询来检索有关DBpedia资源(Person)的信息。我想通过参数化资源URI使用相同的查询来检索有关任何Person的数据。由于特定资源可能不存在某些属性,因此我正在使用OPTIONAL语句。这是我的疑问:

    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX dbo: <http://dbpedia.org/ontology/>
    PREFIX dbpprop: <http://dbpedia.org/property/>
    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    SELECT DISTINCT ?label ?abstract ?placeOfBirth 
        ?birthPlace ?birthDate ?deathDate ?page ?thumbnail 
    WHERE { 
        <http://dbpedia.org/resource/Neil_Simon> rdfs:label ?label ;
            dbo:abstract ?abstract ;
            foaf:page ?page .
        OPTIONAL {
            <http://dbpedia.org/resource/Neil_Simon> dbpprop:placeOfBirth ?placeOfBirth ;
                dbpprop:birthPlace ?birthPlace ;
                dbo:birthDate ?birthDate ;
                dbo:deathdate ?deathDate ;
                dbo:thumbnail ?thumbnail .
        }
        FILTER (LANG(?label) = 'en')    
        FILTER (LANG(?abstract) = 'en')
    }
    LIMIT 1

我已经将除了标签,摘要和页面之外的所有内容都保留在OPTIONAL中,因为如果我对另一个人使用相同的查询,则可能没有这些属性。问题是,结果中没有显示这些可选属性。在Neil Simon的案例中,您可以看到birthDate,birthPlace和缩略图的值:http://dbpedia.org/resource/Neil_Simon。但是,运行查询时,这些值不会显示:DBpedia SPARQL query。我做错了什么,如何选择性地检索这些属性?

1 个答案:

答案 0 :(得分:14)

虽然您使用了可选构造,但地图图案本身需要匹配其中的所有属性。因此,只有你有出生地,生日,死亡日期和缩略图才能满足内部可选结构

我建议将可选构造分解为多个可选构造。