在 examples section for DBpedia article 中,有一个示例查询
PREFIX dbprop: <http://dbpedia.org/property/>
PREFIX db: <http://dbpedia.org/resource/>
SELECT ?who, ?WORK, ?genre WHERE {
db:Tokyo_Mew_Mew dbprop:author ?who .
?WORK dbprop:author ?who .
OPTIONAL { ?WORK dbprop:genre ?genre } .
}
关于漫画系列东京喵喵。但是我怎么知道它的 URI 是
http://dbpedia.org/resource/Tokyo_Mew_Mew
并且“作者”属性 URI 是
http://dbpedia.org/property/author
等等?
是否有针对这些 URI 的搜索引擎之类的?
相比之下,在 Wikidata 项目中,我可以在他们的主站点上进行搜索并推断出,Tokyo Mew Mew URI 后缀是 Q392125,因为它与 Web URL 的最后一部分重合。
如何对 DBpedia 做同样的事情?
最佳答案
一种方法是使用 SPARQL 查询。在此特定示例中,您事先知道的是,您正在寻找名为“Tokyo Mew Mew”的东西。一个简单的查询,如下所示:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?x
WHERE {
?x rdfs:label ?name .
FILTER(bif:contains(?name, "Tokyo Mew Mew*"))
}
(小免责声明:在撰写本文时,dbpedia 网站正在停机维护,因此我无法验证这些查询是否 100% 正确)
很可能会给你想要的结果。顺便说一下,这个查询中的
bif:contains
位是 Virtuoso 特定于 SPARQL 语言的扩展,它优化了全文搜索。然而,这种搜索当然有可能检索到不止一个可能的命中。在这种情况下,您可以扩展查询以缩小结果范围。例如,在此示例中,由于您知道自己正在寻找漫画,因此可以扩展查询以包含以下内容:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?x
WHERE {
?x a dbo:Comic .
?x rdfs:label ?name .
FILTER(bif:contains(?name, "Tokyo Mew Mew*"))
}
等等。
如果您发现将 SPARQL 用于此类事情有点令人生畏,DBPedia 提供 other ways to access the dataset ,包括一个 faceted search interface ,您可以使用它来探索数据。
您也可以猜测 URI 可能是什么,然后手动查看您是否正确。例如,在许多情况下,DBPedia URI 将只是您要查找的任何名称,附加到命名空间“http://dbpedia.org.org/resource/”(空格由下划线替换)。关联数据的好处在于,您可以直接访问该地址并查看返回的内容。因此,对于 Tokoy Mew Mew 来说,URI http://dbpedia.org/resource/Tokyo_Mew_Mew 是一个很好的猜测,当您使用浏览器访问此 URI 时,您将大致了解该 URI 代表的内容,在这种情况下,这正是您所知道的寻找。
如果事实证明它不是您要查找的确切内容,那么该页面上通常会有一个条目,告诉您哪些其他条目与您所登陆的资源有歧义。单击它并稍微浏览一下通常可以让您快速找到您正在寻找的资源。更一般地说,通过浏览器浏览 DBPedia 资源是熟悉数据结构的好方法,因为您可以快速查看哪些属性和关系可用,类型层次结构是什么样的,等等。
如果您使用这种手动浏览技术,有一个警告:DBPedia 将对资源的请求重定向到有关该资源的页面。因此,如果您输入“http://dbpedia.org/resource/Tokyo_Mew_Mew ”,您将被重定向到“http://dbpedia.org/page/Tokyo_Mew_Mew ”。但是,数据资源所需的实际 URI 是第一个。
关于rdf - 如何知道 DBpedia 中某个实体的确切名称/URI?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32034517/