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

Checking if a person and getting details

我是 SPARQL 的新手,我想在 Dbpedia 上获取某人的详细信息,例如他们的出生地等,但首先我想检查一下他们的类型是 Person。到目前为止,我的查询如下所示:

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

试试这样的东西:

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

I want to get details of someone on Dbpedia such as their birthPlace etc, but first I want to do a check that they are type Person.

如果你真的想先获取 Persons,然后 然后 获取他们的名字,你可以利用 SPARQL sub-select 查询这一事实先评价:

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

SPARQL results

这样做的好处是你可以先select一定数量的人,然后得到他们可能有的任何名字。例如,上面查询的结果有 10 个以上的结果,因为有些人有多个 foaf:name 属性。

但是,您的要求很不寻常。如果您要查找人名,您通常只需编写一个查询来查找人员及其姓名:

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

SPARQL results

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

如果你想让 ?person 绑定到特定的值,你可以使用 values 子句:

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

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

SPARQL results

values 子句指定了 ?person 可以拥有的值。如果 ?person 的指定值之一不允许匹配,例如上面查询中的纽约,那么您将不会在输出中看到该值的任何结果。