在一个项目中,我们覆盖存储三元组方法以生成给定主语/谓语或谓语/宾语对的虚拟三元组。逻辑取决于主体或客体被绑定到一个真正的价值来工作。
我们正在接收以下形式的联合查询。
SELECT REDUCED * WHERE {
?child owl:sameAs ?child_mapped .
}
VALUES (?child) {
(<http://purl.obolibrary.org/obo/CHEBI_1>)
(<http://purl.obolibrary.org/obo/CHEBI_2>)
}
给出了这样的语法。
(base <http://example/base/>
(join
(bgp (triple ?child <http://www.w3.org/2002/07/owl#sameAs> ?child_mapped))
(table (vars ?child)
(row [?child <http://purl.obolibrary.org/obo/CHEBI_1>])
(row [?child <http://purl.obolibrary.org/obo/CHEBI_2>])
)))
由于我们的三元组是虚拟的,我们需要从连接左侧的值中获取绑定变量才能工作,即
(base <http://example/base/>
(join
(table (vars ?child)
(row [?child <http://purl.obolibrary.org/obo/CHEBI_1>])
(row [?child <http://purl.obolibrary.org/obo/CHEBI_2>])
)
(bgp (triple ?child <http://www.w3.org/2002/07/owl#sameAs> ?child_mapped))))
这将允许我们的虚拟三元组被实例化,因为当它运行时,三元组方法将同时传递一个对象和一个主题。
我们应该在哪里注入“优化器”,以确保我们始终在联接的左侧具有
values tables
。
我们在第 707 行更改了 algebra.py 以提供所需的连接顺序(反转 p1 和 p2)。但这不是可维护的解决方案,也不会将 _buildQueryStringForServiceCal
更改为具有内联 VALUES 子句而不是在末尾。我们应该将其作为一种优化器步骤。我们是否应该引入我们自己的 SPARQLProcessor 扩展,我们将其添加为