我是SPARQL的新手,我想知道Dbpedia上某人的详细信息,例如他们的birthPlace等,但首先我要检查他们是否为Person类型。到目前为止,我的查询看起来像:
SELECT ?person ?birthPlace
WHERE {
{?person a dbpedia-owl:Person.}
UNION
{dbpedia:Stephen_Fry dbpprop:birthPlace ?birthPlace .}
}
答案 0 :(得分:1)
我想了解Dbpedia上某人的详细信息,例如他们的birthPlace等,但首先我要检查他们是否为Person类型。
如果您真的想先获得人员,然后然后获取,例如,他们的名字,您可以利用首先评估SPARQL子选择查询的事实:
select ?person ?name {
{ select ?person { ?person a dbpedia-owl:Person } limit 10 }
?person foaf:name ?name .
}
这样做的好处是,您可以先选择一定数量的人,然后获取他们可能拥有的任何名称。例如,上面查询的结果有10个以上的结果,因为有些人有一个以上的foaf:name属性。
但是,你要求的是相当不寻常的。如果你正在寻找人名,你通常只会写一个查询来查找人和他们的名字:
select ?person ?name {
?person a dbpedia-owl:Person .
?person foaf:name ?name .
}
limit 10
你不需要检查"这个人是第一个人或类似的人。此查询要求?person是Person并且具有foaf:name属性。你不能从中获得任何非人。
如果您想要?人被绑定到特定值,您可以使用值子句:
select ?person ?name {
values ?person { dbpedia:Daniel_Webster dbpedia:New_York }
?person a dbpedia-owl:Person .
?person foaf:name ?name .
}
values 子句指定人员可以拥有的值。如果?人的某个指定值不允许匹配,例如上述查询中的纽约,那么您将无法在输出中看到该值的任何结果。
答案 1 :(得分:0)
尝试类似:
SELECT ?person ?birthPlace
WHERE
{?person a dbpedia-owl:Person.
?person dbpprop:birthPlace ?birthPlace .
VALUES ?person { dbpedia:Stephen_Fry dbpedia:Hugh_Laurie }
}