【问题标题】:why DBPedia query for given Wikipedia URLs works works only for some urls?为什么给定维基百科 URL 的 DBPedia 查询仅适用于某些 URL?
【发布时间】:2018-12-19 22:16:44
【问题描述】:

我有一个维基百科页面的 URL 列表,并在 lod.openlinksw.com 端点上查询 dbpedia 数据。代码与question 中的代码相同。 最好理解的是:对于某些 url,尽管 dbpedia 页面有正确的 foaf:isPrimaryTopicOf url,但它怎么可能不起作用?

这里是对应dbpediawikipedia 页面的简化查询。

   PREFIX foaf: <http://xmlns.com/foaf/0.1/>
   PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

   SELECT Distinct ?name ?s ?url WHERE {
   ?s a foaf:Person .
   FILTER NOT EXISTS { ?s  rdf:type  dbo:FictionalCharacter }.
   ?s foaf:isPrimaryTopicOf ?url.
   ?s rdfs:label ?name.
   filter(langMatches(lang(?name), "en")).
   ?s foaf:isPrimaryTopicOf <http://en.wikipedia.org/wiki/Adi_Shankara>.
   }
   LIMIT 1

从 wikipedia 中提取的 ~40 个 URL 的列表中,我得到 ~10 个空响应。首先,我认为网址可能有问题,但其中大多数看起来都很好。这里有更多“不工作”的案例:

  • 用于查询 >> en.wikipedia.org/wiki/Harald_I_of_Norway,
    dbpedia.org/page/Harald_Fairhair >>
    en.wikipedia.org/wiki/Harald_Fairhair
  • 用于查询 >> en.wikipedia.org/wiki/Ivar_the_Boneless,
    dbpedia.org/page/Ivar_the_Boneless >>
    en.wikipedia.org/wiki/Ivar_the_Boneless
  • 用于查询 >> en.wikipedia.org/wiki/Jayarāśi_Bhaṭṭa,
    dbpedia.org/page/Jayarāśi_Bhaṭṭa >>
    en.wikipedia.org/wiki/Jayarāśi_Bhaṭṭa
  • 用于查询 >> en.wikipedia.org/wiki/Kenneth_I_of_Scotland,
    dbpedia.org/page/Kenneth_MacAlpin >>
    en.wikipedia.org/wiki/Kenneth_MacAlpin
  • 用于查询>> en.wikipedia.org/wiki/Li_Deyu,
    dbpedia.org/page/Li_Deyu >>
    en.wikipedia.org/wiki/Li_Deyu

在第 1 个 (Harald_Fairhair) 和第 4 个 (Kenneth_MacAlpin) 案例中,有不同的 url 指向同一个 wikipage,所以我需要找出如何处理这些案例。但我不明白为什么其余的不起作用。任何帮助,将不胜感激。

【问题讨论】:

  • 首先,请注意,不能保证 lod.openlinksw.com 数据永远与 dbpedia.org 数据同步……也不保证 dbpedia.org 数据与 en.wikipedia.org 数据同步(因为这通常是延迟批量更新 6-18 个月)...... live.dbpedia.org 数据也与 wikipedia.org 数据同步(尽管这通常在几天内甚至几分钟内都是正确的,但有时在几个月内) .另请注意,dbpedia.org/page/ URL 指向关于使用dbpedia.org/resource/ URI 标识的实体的人性化页面。
  • 我有点疑惑,您甚至添加了指向相应 DBpedia 页面的链接,但您有没有看过其中一个页面以了解发生了什么?我的意思是,例如您的查询实体http://dbpedia.org/resource/Adi_Shankara,您是否检查了rdf:type 关系?很明显,没有foaf:Person 三元组。为什么不使用dbo:Person
  • 关于另一件事。维基百科重定向是您必须在 SPARQL 查询中解决的问题。

标签: sparql dbpedia wikipedia-api


【解决方案1】:

基于评论线程的修改查询

   PREFIX foaf: <http://xmlns.com/foaf/0.1/>
   PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

   SELECT DISTINCT ?name ?s ?url 
   WHERE {
     VALUES ?url { <http://en.wikipedia.org/wiki/Adi_Shankara> 
                   <http://en.wikipedia.org/wiki/Harald_I_of_Norway> 
                   <http://en.wikipedia.org/wiki/Ivar_the_Boneless> 
                   <http://en.wikipedia.org/wiki/Jayarāśi_Bhaṭṭa> 
                   <http://en.wikipedia.org/wiki/Kenneth_I_of_Scotland> 
                   <http://en.wikipedia.org/wiki/Li_Deyu> 
                 }

                       ?s ^dbo:wikiPageRedirects*
                          /foaf:isPrimaryTopicOf  ?url .
   FILTER NOT EXISTS { ?s  rdf:type               dbo:FictionalCharacter }
                       ?s  rdfs:label             ?name .
   FILTER(langMatches(LANG(?name), "en")).
   }

原答案

this query(以及来自 DBpedia 的 live results)如何为您工作?

   PREFIX foaf: <http://xmlns.com/foaf/0.1/>
   PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

   SELECT Distinct ?name ?s ?url WHERE {
   VALUES ?url { <http://en.wikipedia.org/wiki/Adi_Shankara> 
                 <http://en.wikipedia.org/wiki/Harald_I_of_Norway> 
                 <http://en.wikipedia.org/wiki/Ivar_the_Boneless> 
                 <http://en.wikipedia.org/wiki/Jayarāśi_Bhaṭṭa> 
                 <http://en.wikipedia.org/wiki/Kenneth_I_of_Scotland> 
                 <http://en.wikipedia.org/wiki/Li_Deyu> 
               }

                       ?s  foaf:isPrimaryTopicOf  ?url .
#                      ?s  rdf:type               foaf:Person .
   FILTER NOT EXISTS { ?s  rdf:type               dbo:FictionalCharacter }
                       ?s  rdfs:label             ?name .
   FILTER(langMatches(LANG(?name), "en")).
#  ?s foaf:isPrimaryTopicOf <http://en.wikipedia.org/wiki/Adi_Shankara>.
   }
#   LIMIT 10

这些是否有助于您了解之前的问题?

【讨论】:

  • oo 我明白了!,原因是 - 我使用 foaf:Person 而不是 dbo:Person 作为 rdf:type 属性。它对大多数查询起作用的原因是它们的 rdf:type 可能两者都有(例如 dbpedia.org/page/Emperor_Xuānzong_of_Tang)。我对基本面有点困惑。首先,我怎么知道肯定会使用哪个属性?其次,为什么您的查询甚至适用于重定向的网址(例如 Harald_I_of_Norway 的 Harald_Fairhair)?
  • @nika 它适用于重定向,因为他通过在其前面使用 # 字符省略了 ?s rdf:type foaf:Person . 三重模式。删除# 并将foaf:Person 替换为dbo:Person,它不会返回Harald_I_of_Norway 的结果
  • 它将与?s ^dbo:wikiPageRedirects*/foaf:isPrimaryTopicOf ?url .一起使用
  • 好的,我用 dbo:Person 运行一个脚本,现在我丢失的页面越来越少。如果在您的查询中有一条语句?s rdf:type dbo:Person。比“苏格兰的肯尼斯一世”和“挪威的哈拉尔德一世”失去了,尽管他们确实有 dbo:Person。我注意到的唯一区别是未找到的页面具有两个属性:dbo:Person 和 foaf:Person 但为什么会导致任何问题?
  • @AKSW 我想我可能缺少一些基础知识,您是说重定向存在一些“隐藏”条目类型(机制),因此属于原始 url 的所有属性都没有申请?这可以解释这种行为......丢失的页面确实有不同的网址。谢谢。我需要查看您的建议的语法以完全理解它。因此查询尝试查找具有指定 foaf:isPrimaryTopicOf 的页面,如果没有找到,则在 dbo:wikiPageRedirects 中查找。如果后者有效,它会提供 dbpedia 页面,但如果指定了 rdf:type 则不会?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
  • 2014-08-27
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多