【问题标题】:Inference over linked data SPARQL endpoints对链接数据 SPARQL 端点的推理
【发布时间】:2016-03-30 15:27:52
【问题描述】:

当通过 SPARQL 查询查询一些链接数据 SPARQL 端点时,提供的推理类型是什么(如果有)?

例如,DBpedia SNORQL endpoint 甚至不提供基本的子类推断(如果是 A subClassOf B 和 B subClassOf C,那么 A subClassOf C)。虽然FactForge SPARQL endpoint 提供了一些推断(尽管不清楚它是哪种推断),并提供了打开和关闭该推断的可能性。

我的问题: 如何识别应用的推理类型?如果推理支持有限,是否可以仅使用端点进行扩展?

【问题讨论】:

  • 您可以单独在 SPARQL 中进行许多推断。例如,要遍历类层次结构,您可以执行?subclass rdfs:subClassOf* ?superclass 以获取您提到的A subclassOf C 结果。
  • 好吧,1. 有没有什么地方可以让我查看启用 SPARQL 的推理的完整列表?
  • 2.不能在 SPARQL 端点级别启用此推理吗?即只编写典型的 SPARQL 查询,而端点负责推理?
  • 1.我不知道这样的完整列表。我知道一些推断是可能的,主要是因为我在 Stack Overflow 上回答了有关使用 SPARQL 进行一些推断的问题。 2. 当然,端点可以根据推理器返回结果,但是如果端点不这样做并且您无法控制端点,那么您最终将不得不自己进行推理,无论是否使用一个 SPARQL 查询,或者通过获取足够的数据并自己应用推理器。

标签: sparql rdf semantic-web inference linked-data


【解决方案1】:

推理控制会因引擎和端点而异。

public DBpedia SPARQL endpoint(由 Virtuoso 提供支持,来自我的雇主 OpenLink Software)确实提供各种 inference rules(可通过右上角的“推理规则”链接访问) SPARQL 端点查询表单页面),由pragmas in your SPARQL(不是 SNORQL,form you linked)控制,例如 --

DEFINE  input:inference  'urn:rules.skos'

您可以通过 SPARQL 查看任何预定义规则集的内容——以上内容

SELECT  * 
  FROM  <urn:rules.skos> 
 WHERE  { ?s ?p ?o }

你可以看到query和results的直播。

看到这个tutorial containing many examples。

【讨论】:

  • 完美。但是,如何知道规则集的内容呢?例如,skos-trans 代表 urn:rules.skos。包含此规则集时应用的规则是什么?
  • 再次感谢。但似乎“推理规则”一词有点误导。它们实际上是一种词汇包含。因此,当在查询中声明 DEFINE input:inference 'urn:rules.skos' 时,它只包含引用的词汇表。现在再次,问题是如何在不使用 SPARQL 本身的情况下启用类型推理(如果 A subClassOf B 和 B subClassOf C,然后是 A subClassOf C),即不使用 rdfs:subClassOf* ?
  • 推理规则用于推理原始数据中未明确存在但可能明确包含在结果集中的三元组。我不明白为什么提供的选项不能满足您的需求,所以也许您可以提供更大的图景? SPARQL 1.1 属性路径确实涵盖了subClassOf 蕴涵的简单情况,但您似乎想要更多?
  • 我想获得包括推断三元组在内的结果,而不必在 sparql 查询中指定。例如查询 select COUNT DISTINCT ?x WHERE{?x rdfs:subClassOf &lt;http://dbpedia.org/ontology/Person&gt;.} 返回 50 个结果,同时重复相同的查询但添加星号 select COUNT DISTINCT ?x WHERE{?x rdfs:subClassOf* &lt;http://dbpedia.org/ontology/Person&gt;.} 返回 184 个结果。我想要的不是手动处理推理,即不将星号添加到查询中,并将推理责任留给端点本身。
  • 这是您无法可靠拥有的东西,因为您无法确定任何给定端点将如何处理事情。此外,您在上面要求两种不同的东西——实际上都没有使用涉及“缺失”三元组的推理。第一个查询询问?x,其中存在明确指出?x rdfs:subClassOf &lt;http://dbpedia.org/ontology/Person&gt; 的三元组。第二个查询询问那些?x 加上?x,其中一系列现有的三元组明确指出?x rdfs:subClassOf other . other rdfs:subClassOf &lt;http://dbpedia.org/ontology/Person&gt; 其中other 可能递归。
【解决方案2】:

虽然 SPARQL 端点并未普遍支持推理,但 SPARQL 本身支持 RDFS、RSFS+ 和 OWL 2 RL 配置文件支持的大多数推理。例如,SPARQL 属性路径可以支持使用 subClassOf 蕴涵查询 :A 的实例:

SELECT ?inst 
WHERE {
   ?cls rdfs:subClassOf* :A .
   ?inst a ?cls .
}

第一个三元组模式获取:A 的所有子类,包括:A(如果您只想要:A 的子类,请使用+ 而不是*),第二个三元组查找所有这些的所有实例类。

要了解如何使用 SPARQL 实现 OWL 2 的大部分内容,请参阅 Reasoning in OWL 2 RL and RDF Graphs using Rules。除了几个例外,所有这些都可以在 SPARQL 中实现(实际上您可能不需要其中的一些,例如eq-ref,(这对于逻辑学家可能会嘲笑的计算大声笑很有用))。

除了繁重的分类问题之外,很少有使用 OWL 2 RL 规则的子集无法解决的用例。

因此,最后,建议是了解您需要什么蕴涵。可能是 OWL 完全考虑了这个问题,您可以接受一些 SPARQL 模式。然后您可以访问 SPARQL 端点,而不必担心是否支持特定的推理配置文件。

【讨论】:

  • 谢谢。那很有用。我检查了 SPARQL SPIN 的规范以了解规则规范。但是,我主要关心的是端点功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多