我正在尝试使用SPARQL查询来检索有关DBpedia资源(Person)的信息.我想使用相同的查询来通过参数化资源URI来检索有关任何Person的数据.由于特定资源可能不存在某些属性,因此我正在使用OPT
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
除了标签,摘要和页面之外,我已经离开了所有可选项,因为如果我对另一个人使用相同的查询,则可能没有这些属性.问题是,这些可选属性中没有一个显示在结果中.在Neil Simon的案例中,您可以看到birthDate,birthPlace和thumbnail:http://dbpedia.org/resource/Neil_Simon的值.但是,当我运行查询时,这些值不会显示:DBpedia SPARQL query.我做错了什么,我如何可选地检索那些属性?
虽然您使用了可选构造,但是地图模式本身需要匹配的所有属性.所以只有当你有出生地,出生日期,死亡日期和缩略图内部可选构造是满意的我建议将可选构造分解成多个可选构造.