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

查找使用SPARQL连接DBpedia中实体的主题,sparql,dbpedia,Sparql,Dbpedia,我从文本中提取实体,大多数时候我会得到多个实体,例如 这两个实体不共享同一个dct:subject是否有方法查询路径以获取连接我的实体的主题列表 我的目标是创建一种页面排名,为给定的实体找到最相关的主题 最好有一个计数器,它们之间有多少步 我试着用蛮力,从一个实体开始,获取所有主题,然后获取该主题的所有实体,等等,但是查询开始变得越来越大。来自@AKSW的评论 一个选项,不限制SKO的长度:更宽的路径长度,这将超过公共DBpedia端点上的资源消耗限制,但可以在私有实例上运行,也可以在任何可以放

我从文本中提取实体,大多数时候我会得到多个实体,例如

这两个实体不共享同一个dct:subject是否有方法查询路径以获取连接我的实体的主题列表

我的目标是创建一种页面排名,为给定的实体找到最相关的主题

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


我试着用蛮力,从一个实体开始,获取所有主题,然后获取该主题的所有实体,等等,但是查询开始变得越来越大。

来自@AKSW的评论

一个选项,不限制SKO的长度:更宽的路径长度,这将超过公共DBpedia端点上的资源消耗限制,但可以在私有实例上运行,也可以在任何可以放宽这些限制的地方运行-

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 . }
另一个简洁的选项,这次使用标准SPARQL限制路径的长度-

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  .
  }

源自@AKSW的评论

一个选项,不限制SKO的长度:更宽的路径长度,这将超过公共DBpedia端点上的资源消耗限制,但可以在私有实例上运行,也可以在任何可以放宽这些限制的地方运行-

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 . }
另一个简洁的选项,这次使用标准SPARQL限制路径的长度-

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  .
  }

选择distinct?cat{dct:subject/skos:broader*?cat.dbr:IPhone dct:subject/skos:broader*?cat.}但可以肯定的是,您可能会得到一个超时,因为这可能会变得非常昂贵。因此,您还可以尝试对路径长度添加限制:选择distinct?cat{dct:subject/skos:broader{1,3}?cat.dbr:IPhone dct:subject/skos:broader{1,3}cat.}更简洁的版本:选择distinct?cat{cat^skos:broader{1,3}/^dct:subject,dbr:IPhone}选择distinct?cat{dct:subject/skos:broader*?cat.dbr:IPhone dct:subject/skos:broader*?cat.}但是可以肯定的是,您可能会得到一个超时,因为这可能会变得非常昂贵。因此,您还可以尝试对路径长度添加一个限制:select distinct?cat{dct:subject/skos:broader{1,3}cat.dbr:IPhone dct:subject/skos:broader{1,3}cat.}更紧凑的版本:select distinct?cat{cat{cat^skos:broader{1,3}/^dct:subject,dbr:IPhone}