如何正确使用SPARQL OPTIONAL来检索可能存在的资源的属性?
我正在尝试使用SPARQL查询来检索有关DBpedia资源(个人)的信息。我希望通过参数化资源URI使用相同的查询来检索关于任何人的数据。由于特定资源的某些属性可能不存在,因此我使用了如何正确使用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:
可选的
语句。我的问题是:
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的例子中,您可以看到有出生日期
、出生地
和缩略图
:。但是,当我运行查询时,这些值不会显示:。我做错了什么?我如何可以选择性地检索这些属性?尽管您使用了可选属性
构造映射模式本身需要匹配其中的所有属性。因此,只有当您有出生地
,出生日期
,死亡日期
和缩略图
时,内部可选结构才得到满足
我建议将可选结构分解为多个可选结构。当然,这很有意义!我已经为每个属性将可选构造拆分为一个单独的构造,它可以完美地工作。