我的问题:
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
请帮我定制查询解析器。
3条答案
按热度按时间bbmckpt71#
你要计算三个三重模式的连接。关于在apachehadoop上实现join的论文将是有用的背景资料。
了解ApacheSpark和弹性分布式数据集(rdd)概念可能会有所帮助。
同样重要的是要考虑每个模式可能的选择性——正如joshua所说,“pages”模式很可能会产生一个独特的解决方案,使用它来简单地查找“name”和“volume”中的每一个并不是一项要求很高的任务。
arq的内存算法并不是以hadoop上所需要的最大独立并行性为目标的。合并联接(或排序合并联接)对数据进行两次可并行访问。
您可以通过extends类在基本模式级别、整个代数执行级别或两者之间的任何一点扩展arq
OpExecutor
.z8dt9xmd2#
编辑以包含正确的代数链接
我能提供的最好建议是查看arq的sparql代数的jena文档,并在该级别派生您的定制评估引擎。另一个可能提供信息的参考是w3sparql代数。
似乎(从您选择的标记中)您打算执行分布在map reduce作业中的查询操作,并且您正在查看代数应用程序的一个具体示例作为概念证明。如果您的意图是将其集成到jena的查询求值中,那么您将需要手动探索jena的现有系统,以便理解它为什么会这样做。
44u64gxh3#
听起来你在问为什么
只返回一个结果,而每行单独返回更多结果。sparql中的三重模式是合取的:非可选模式必须与数据匹配才能返回结果。因此,你要求的是
?x
以及?z
以下所有条件均成立:?x
有名字吗?y
,和?x
对体积有一定的价值?x
页面的特定值为“176-186”。根据属性的名称,听起来像是在查询一些bibilographic信息。在给定的书目数据库中,可能只有一篇文章的页数正好是“176-186”,这并不奇怪,因为这是一个非常具体的值。