在 DBpedia 中使用 SPARQL 查找连接实体的主题

find the subjects that are connecting entites in DBpedia with SPARQL

我从文本中提取实体,大多数时候我会得到多个实体,例如 <http://dbpedia.org/resource/NASA><http://dbpedia.org/resource/IPhone><http://dbpedia.org/resource/Apple_Inc.>

这两个实体,不共享 dct:subject 有没有办法查询路径以获取连接我的实体的主题列表?

我的目标是创建一种 "page rank",为给定实体找到最相关的主题。

最好有一个计数器,它们之间有多少步。

我尝试过暴力破解,从一个实体开始,获取所有主题,然后获取该主题的所有实体等等,但查询开始变得庞大。

源自@AKSW 的评论...

一个选项,不限制 skos:broader 路径长度,这将超过 public DBpedia 端点上的资源消耗限制,但在私有实例上可能是 运行 (in the cloud 或任何地方)您可以放宽这些限制的地方 --

PREFIX   dbr:  <http://dbpedia.org/resource/>
PREFIX   dct:  <http://purl.org/dc/terms/>
PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>

SELECT DISTINCT ?cat 
WHERE
  { <http://dbpedia.org/resource/Apple_Inc.>
        dct:subject/skos:broader*  ?cat . 
    dbr:IPhone 
        dct:subject/skos:broader*  ?cat . }

简洁的选项,使用特定于 Virtuoso 的语法(基于 SPARQL 属性 路径的早期草案)来限制路径的长度(此处要求至少 1 skos:broader 并允许最多 3 ) --

PREFIX   dbr:  <http://dbpedia.org/resource/>
PREFIX   dct:  <http://purl.org/dc/terms/>
PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>

SELECT DISTINCT ?cat 
WHERE
  { ?cat
       ^skos:broader{1,3}/^dct:subject
           <http://dbpedia.org/resource/Apple_Inc.> , 
           dbr:IPhone 
  }

另一个简洁的选项,这次使用标准 SPARQL Property Paths syntax 来限制路径的长度 --

PREFIX   dbr:  <http://dbpedia.org/resource/>
PREFIX   dct:  <http://purl.org/dc/terms/>
PREFIX  skos:  <http://www.w3.org/2004/02/skos/core#>

SELECT DISTINCT ?cat 
WHERE
  { ?cat
       ^skos:broader/^skos:broader?/^skos:broader?/^dct:subject
           <http://dbpedia.org/resource/Apple_Inc.> , 
           dbr:IPhone 
  }

您还可以在 WHERE 子句中使用 2 条带有非反转路径的语句,首先是 Virtuoso 特定的形式 --

  { <http://dbpedia.org/resource/Apple_Inc.> 
       dct:subject/skos:broader{1,3}   ?cat  .
    dbr:IPhone 
       dct:subject/skos:broader{1,3}   ?cat  .
  }

-- 然后在标准 SPARQL 中 --

  { <http://dbpedia.org/resource/Apple_Inc.> 
       dct:subject/skos:broader/skos:broader?/skos:broader?   ?cat  .
    dbr:IPhone 
       dct:subject/skos:broader/skos:broader?/skos:broader?   ?cat  .
  }