寻找Winston_Churchill数据

时间:2015-03-17 00:10:00

标签: sparql wikipedia dbpedia

我无法想象为什么会这样做:

select * {
<http://dbpedia.org/resource/Mahatma_Gandhi> dbpedia-owl:birthName ?name.
OPTIONAL{<http://dbpedia.org/resource/Mahatma_Gandhi> dbpedia-owl:birthDate ?birthDate}
OPTIONAL{<http://dbpedia.org/resource/Mahatma_Gandhi> dbpedia-owl:restingPlace ?restingPlace}
OPTIONAL{<http://dbpedia.org/resource/Mahatma_Gandhi> dbpedia-owl:deathDate ?deathDate}
}

和this - NOT(空绑定):

select * {
<http://dbpedia.org/resource/Winston_Churchill> dbpedia-owl:birthName ?name.
OPTIONAL{<http://dbpedia.org/resource/Winston_Churchill> dbpedia-owl:birthDate ?birthDate}
OPTIONAL{<http://dbpedia.org/resource/Winston_Churchill> dbpedia-owl:restingPlace ?restingPlace}
OPTIONAL{<http://dbpedia.org/resource/Winston_Churchill> dbpedia-owl:deathDate ?deathDate}
}

on http://live.dbpedia.org/sparql

UPD

This answer很好,但当我试图寻找Vincent_van_Gogh时 - 同样的问题

2 个答案:

答案 0 :(得分:4)

dbpedia:Mahatma_Gandhidbpedia-owl:birthName dbpprop:birthName。另一方面dbpedia:Winston_Churchill只有dbpprop:birthname(注意不同的大小写)。

不确定解决这个问题的正确方法是什么。

答案 1 :(得分:3)

这似乎是DBpedia Live和DBpedia之间的区别。在标准DBpedia上,您的查询可以正常运行:

SPARQL results

正如svick's answer指出的那样,在DBpedia Live中,丘吉尔有一个 dbpprop:birthname ,但不是 dbpedia-owl:birthName 。在这种情况下你可以做的是要求任何一个。你可以轻松地做到这一点 交替属性路径。以下查询适用于DBpedial Live。 (我使用值将?wc 绑定到 dbpedia:Winston_Churchill ,但这只是为了使查询更具可读性。重要的部分是属性路径三元组:< strong> dbpedia:Winston_Churchill dbpedia-owl:birthName | dbpprop:birthname?birthname 。

select * {
  values ?wc { dbpedia:Winston_Churchill }
  ?wc dbpedia-owl:birthName|dbpprop:birthname ?birthName
  optional { ?wc dbpedia-owl:birthDate ?birthDate}
  optional { ?wc dbpedia-owl:restingPlace ?restingPlace}
  optional { ?wc dbpedia-owl:deathDate ?deathDate}
}

DBpedia Live results

当然,如果你把它带回到丘吉尔有两个属性的普通DBpedia,你现在将得到两个结果,每个属性一个。如果您只需要一个结果,则可以单独询问这些属性,绑定合并

select ?birthName ?birthDate ?restingPlace ?deathDate {
  values ?wc { dbpedia:Winston_Churchill }
  optional { ?wc dbpedia-owl:birthName ?birthname0 }
  optional { ?wc dbpprop:birthname ?birthname1 }
  bind ( coalesce(?birthname0,?birthname1) as ?birthName )
  optional { ?wc dbpedia-owl:birthDate ?birthDate}
  optional { ?wc dbpedia-owl:restingPlace ?restingPlace}
  optional { ?wc dbpedia-owl:deathDate ?deathDate}
}

SPARQL results