Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确使用SPARQL OPTIONAL来检索可能存在的资源的属性?_Sparql_Dbpedia - Fatal编程技术网

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

如何正确使用SPARQL OPTIONAL来检索可能存在的资源的属性?,sparql,dbpedia,Sparql,Dbpedia,我正在尝试使用SPARQL查询来检索有关DBpedia资源(个人)的信息。我希望通过参数化资源URI使用相同的查询来检索关于任何人的数据。由于特定资源的某些属性可能不存在,因此我使用了可选的语句。我的问题是: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbo: <http://dbpedia.org/ontology/> PREFIX dbpprop: <http:

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

    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
前缀rdfs:
前缀dbo:
前缀dbpprop:
前缀foaf:
选择不同的?标签?摘要?出生地点
?出生地?出生日期?死亡日期?页面?缩略图
何处{
rdfs:标签?标签;
dbo:抽象?抽象;
第页?第页。
可选的{
dbpprop:出生地点?出生地点;
dbpprop:出生地?出生地;
dbo:生日?生日;
dbo:死亡日期?死亡日期;
缩图?缩图。
}
过滤器(LANG(?label)=“en”)
过滤器(LANG(?abstract)='en')
}
限制1

我把标签、摘要和页面以外的所有内容都留在了
可选的
,因为如果我对另一个人使用相同的查询,他们可能没有这些属性。问题是,这些可选属性都没有显示在结果中。在Neil Simon的例子中,您可以看到有
出生日期
出生地
缩略图
:。但是,当我运行查询时,这些值不会显示:。我做错了什么?我如何可以选择性地检索这些属性?

尽管您使用了
可选属性
构造映射模式本身需要匹配其中的所有属性。因此,只有当您有
出生地
出生日期
死亡日期
缩略图
时,内部可选结构才得到满足


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

当然,这很有意义!我已经为每个属性将可选构造拆分为一个单独的构造,它可以完美地工作。