如何满足图形模式中的 SPARQL 查询约束

How to Satisfy SPARQL query constraints found within Graph Pattern

我正在处理流数据,为此我需要应用一些 SPARQL 类型的查询。例如,如果我有这样的查询:

Select ?x,?z
FROM <http://dummyURI>
Where { ?x p1 ?y  -----(t1)
        ?x p2 ?z  -----(t2)
        ?z p3 o3  -----(t3)
     }

如查询中所示,存在三个三重模式(t1、t2 和 t3)。在查询中,我观察到对变量有一些约束,即 (t1) 中的 ?x 应该等于 (t2) 中的 ?x 并且 (t2) 和 (t3) 中的 ?z 应该相等。在我的代码中,我可以使用与查询中每个三元组模式对应的一些模式匹配来找到三元组,但是我应该如何确保满足上述约束条件?

我试图了解 SPARQL 引擎如何处理此问题,但在以下标准资源 (res1,res2,res3) 中并未提及。任何人都可以帮助我了解我应该如何处理这个问题吗?

注意:我在 link 上问过同样的相关问题。这个问题比上一个问题简洁多了。

将流媒体问题放在一边——有一些流媒体 SPARQL 引擎可以解决这个问题,还有一个 W3C 社区组。 Google 搜索会找到它们。

考虑模式:{ ?x p1 ?y . ?x p2 ?z }

这是一个带有约束的数据库连接。

任何连接算法都可以。让我们将索引连接作为一种相当有效的算法

第 1 步:查找所有 ?x p1 ?y

第 2 步:对于每个匹配项,取 ?x 并查找 ?x p2 ?z 以获得 ?x 的值。这是对步骤 1 中 ?x 的值的循环,并且只有一次通过,因此它在模式一上流式传输,并在模式二上探测。

输出是所有通过步骤 2 的东西。

有许多连接算法,从简单的内循环连接到并行散列连接,还有许多提高效率的方法。在上面,从预期生成最少匹配数的三元组模式开始更好。

对于您的示例,通过获取步骤 2 的输出并应用于 ?z p3 o3

,扩展到 3 个模式

如果所有数据都严格流式传输,请参阅已发布的关于流式 SPARQL 的工作,或关于微批处理的工作。并行哈希连接可以在两侧流式传输,但它需要大量的工作 space.