检查是否有人并获取详细信息

时间:2015-07-08 08:03:39

标签: python sparql wikipedia dbpedia

我是SPARQL的新手,我想知道Dbpedia上某人的详细信息,例如他们的birthPlace等,但首先我要检查他们是否为Person类型。到目前为止,我的查询看起来像:

SELECT ?person ?birthPlace
WHERE {
    {?person a dbpedia-owl:Person.}
    UNION 
   {dbpedia:Stephen_Fry dbpprop:birthPlace ?birthPlace .}
}

2 个答案:

答案 0 :(得分:1)

  

我想了解Dbpedia上某人的详细信息,例如他们的birthPlace等,但首先我要检查他们是否为Person类型。

如果您真的想先获得人员,然后然后获取,例如,他们的名字,您可以利用首先评估SPARQL子选择查询的事实:

select ?person ?name {
  { select ?person { ?person a dbpedia-owl:Person } limit 10 }
  ?person foaf:name ?name .
}

SPARQL results

这样做的好处是,您可以先选择一定数量的人,然后获取他们可能拥有的任何名称。例如,上面查询的结果有10个以上的结果,因为有些人有一个以上的foaf:name属性。

但是,你要求的是相当不寻常的。如果你正在寻找人名,你通常只会写一个查询来查找人和他们的名字:

select ?person ?name {
  ?person a dbpedia-owl:Person .
  ?person foaf:name ?name .
}
limit 10

SPARQL results

你不需要检查"这个人是第一个人或类似的人。此查询要求?person是Person并且具有foaf:name属性。你不能从中获得任何非人。

如果您想要?人被绑定到特定值,您可以使用子句:

select ?person ?name {
  values ?person { dbpedia:Daniel_Webster dbpedia:New_York }

  ?person a dbpedia-owl:Person .
  ?person foaf:name ?name .
}

SPARQL results

values 子句指定人员可以拥有的值。如果?人的某个指定值不允许匹配,例如上述查询中的纽约,那么您将无法在输出中看到该值的任何结果。

答案 1 :(得分:0)

尝试类似:

SELECT ?person ?birthPlace
WHERE 
{?person a dbpedia-owl:Person.
?person dbpprop:birthPlace ?birthPlace .
VALUES ?person { dbpedia:Stephen_Fry dbpedia:Hugh_Laurie }
}