【问题标题】:How to properly use SPARQL OPTIONAL to retrieve attributes for a resource that may exist?如何正确使用 SPARQL OPTIONAL 来检索可能存在的资源的属性?
【发布时间】:2011-07-06 21:40:05
【问题描述】:

我正在尝试使用 SPARQL 查询来检索有关 DBpedia 资源(人)的信息。我想使用相同的查询通过参数化资源 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 的案例中,您可以看到 birthDatebirthPlacethumbnail 的值:http://dbpedia.org/resource/Neil_Simon。但是,当我运行查询时,这些值不会显示:DBpedia SPARQL query。我做错了什么,我该如何选择检索这些属性?

【问题讨论】:

    标签: sparql dbpedia


    【解决方案1】:

    虽然您使用了OPTIONAL 构造,但映射模式本身需要匹配其中的所有属性。所以只有当你有 birthPlacebirthDatedeathDatethumbnail 时,内部可选构造才满足

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

    【讨论】:

    • 当然,这很有意义!我已将 OPTIONAL 构造拆分为每个属性的单独构造,并且效果很好。
    猜你喜欢
    • 2021-02-14
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多