SPARQL和查询的[property]

时间:2015-11-22 07:55:23

标签: sparql ontology dbpedia virtuoso

我尝试使用DBpedia中的SPARQL从<http://dbpedia.org/ontology/Person>查询数据。但是,我尝试匹配的属性列为dbp:children of(例如:http://dbpedia.org/page/Angelina_Jolie)。

但是,在进行查询时,dbp:childrenOfdbo:children_of和其他类似的人不会工作。我该怎么问这个房产?

谢谢!

这是我的示例查询:

PREFIX   dbo:  <http://dbpedia.org/ontology/>
PREFIX  foaf:  <http://xmlns.com/foaf/0.1/>
PREFIX  rdfs:  <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX  type:  <http://dbpedia.org/class/yago/>
PREFIX   dbp:  <http://dbpedia.org/property/> 

SELECT DISTINCT ?person ?birthDate ?birthPlace ?parents
WHERE {  
           ?person  a               dbo:Person .
         { ?person  rdfs:label      "Angelina Jolie"@en }
  UNION  { ?person  dbp:name        "Angelina Jolie"@en } .

           ?person  dbo:birthDate   ?birthDate.
           ?person  dbo:birthPlace  ?bp.
           ?bp      rdfs:label      ?birthPlace.
OPTIONAL { ?person  dbp:childrenOf  ?parents}
   FILTER (LANG(?birthPlace)='en')
}

我试图解决的问题是OPTIONAL条款。

1 个答案:

答案 0 :(得分:0)

不幸的是,我不认为Angelina的任何一个孩子都有维基百科页面(因此没有DBpedia页面),因此用这个特定的例子来解决任何答案都很困难。

这是一个稍微不同的查询版本,用于检索其他人的父母 -

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX dbp: <http://dbpedia.org/property/> 

SELECT DISTINCT ?person ?birthDate ?birthPlace ?parents
WHERE {  
      ?person a dbo:Person .

      {?person rdfs:label "Ras Barker"@en}
      UNION 
      {?person dbp:name "Ras Barker"@en}
      UNION 
      {?person dbo:birthName "Ras Barker"@en}

      OPTIONAL { ?person dbo:birthDate ?birthDate. }
      OPTIONAL { ?person dbo:birthPlace ?bp . ?bp rdfs:label ?birthPlace. }
      #OPTIONAL { ?person dbo:parent ?parents }
      OPTIONAL { ?parents dbo:child ?person }
      FILTER (LANG(?birthPlace)='en')
}

我选择使用dbo谓词child而不是childrenOf(不确定此谓词是否正在使用中)。并将与出生相关的内容包装到OPTIONAL子句中,因为您无法100%依赖具有这些谓词的实例数据。