sparql 连接查询解释它是如何工作的?

Posted

技术标签:

【中文标题】sparql 连接查询解释它是如何工作的?【英文标题】:sparql join query explanation hows its working? 【发布时间】:2014-05-06 16:30:26 【问题描述】:

我的查询:

select ?x ?z
where

  ?x <http://purl.uniprot.org/core/name> ?y .
  ?x <http://purl.uniprot.org/core/volume> ?z .
  ?x <http://purl.uniprot.org/core/pages> "176-186" .

我需要为此查询制作自定义解析器。

当我在 jena 模型上执行此查询时,它返回一条记录。 谁能解释一下这个查询实现?

我把这个查询分成三个部分:

select ?x ?y where  ?x <http://purl.uniprot.org/core/name> ?y . 

Total Records Found : 3034

select ?x ?z where  ?x <http://purl.uniprot.org/core/name> ?y . ?x <http://purl.uniprot.org/core/volume> ?z . 

 Total Records Found : 2679

select ?x ?z where  ?x <http://purl.uniprot.org/core/name> ?y . ?x <http://purl.uniprot.org/core/volume> ?z . ?x <http://purl.uniprot.org/core/pages> "176-186" . 

 Total Records Found : 1

请帮我制作自定义查询解析器。

【问题讨论】:

【参考方案1】:

您正在尝试计算三个三元组模式的连接。关于通过 Apache Hadoop 实现连接的论文将是有用的背景。

了解 Apache Spark 和弹性分布式数据集 (RDD) 概念可能会有所帮助。

考虑每个模式的可能选择性也很重要 - 正如 Joshua 所说,“页面”模式很可能会产生一个独特的解决方案,并且使用它来简单地查找“名称”和“卷”中的每一个并不要求很高任务。

ARQ 的内存算法并非旨在实现 Hadoop 上所需的最大独立并行度。合并连接(或排序合并连接)对数据进行两次可并行访问。

您可以通过扩展类 OpExecutor 在基本模式级别或整个代数执行级别或两者之间的任何点扩展 ARQ。

【讨论】:

【参考方案2】:

听起来你在问为什么

select ?x ?z where 
  ?x <http://purl.uniprot.org/core/name> ?y .           # (a)
  ?x <http://purl.uniprot.org/core/volume> ?z .         # (b)
  ?x <http://purl.uniprot.org/core/pages> "176-186" .   # (c)

只返回一个结果,而每一行单独返回更多。 SPARQL 中的三重模式是结合的:非可选模式必须与数据匹配才能返回结果。因此,您要查询 ?x?z 的值,其中 ALL 以下各项成立:

?x 的名称为 ?yAND ?x 对音量有一定的价值,AND ?x 的页面具有特定值“176-186”。

根据属性的名称,听起来您正在查询一些书目信息。毫不奇怪,在给定的书目数据库中,可能只有一篇文章的页面正好是“176-186”,因为这是一个非常具体的值。

【讨论】:

【参考方案3】:

已编辑以包含正确的代数链接

我能提供的最佳建议是查看Jena documentation for ARQ's SPARQL Algebra 并在该级别派生您的自定义评估引擎。另一个可能提供信息的参考是W3 SPARQL Algebra。

似乎(从您选择的标签中)您打算执行分布在整个 map-reduce 作业中的查询操作,并且您正在查看代数应用的具体示例作为概念验证.如果您的意图是将其集成到 Jena 的查询评估中,那么您将需要手动探索 Jena 的现有系统,以了解其行为方式的原因。

【讨论】:

以上是关于sparql 连接查询解释它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Sparql查询RDF

为啥这个 SPARQL 查询超时以及如何优化这个查询?

在进行任意路径查询之前过滤 sparql 结果

如何优化我的递归 SPARQL 查询?

为啥我在结果中得到重复? (DBpedia sparql 查询)

如何迭代引用虚拟图的 SPARQL 查询?