我有一个模仿 zick-zack 模式的 SPARQL 查询,如下所示。
?p1 :infector ?p.
?p2 :infector ?p1.
?p3 :infector ?p2.
?p4 :infector ?p3.
?p5 :infector ?p4
.................
基本上,在一个三元组的模式主题中用作下一个三元组的对象。有没有办法概括这种模式?因此,我不需要在模式中使用一长串变量 (?p-?p5)。另外,在多次运行查询之前,我不知道我需要多少这样的变量。因此,我无法想出一组已定义的变量。我需要一些通用的东西。如果您有任何想法使此查询通用,请告诉我。我将非常感谢任何帮助。
澄清:
我有一个如下所示的 RDF 图。
<http://ndssl.bi.vt.edu/chicago/dendrogram/experiment_id#7385/cell_id#86304/infectee_pid#446734805/iteration#0> <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> <http://ndssl.bi.vt.edu/chicago/person/pid#449563560>.
<http://ndssl.bi.vt.edu/chicago/dendrogram/experiment_id#7385/cell_id#86304/infectee_pid#446734805/iteration#0> <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> <http://ndssl.bi.vt.edu/chicago/person/pid#446734805>
<http://ndssl.bi.vt.edu/chicago/dendrogram/experiment_id#7385/cell_id#86304/infectee_pid#446753456/iteration#0> <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> <http://ndssl.bi.vt.edu/chicago/person/pid#446734805>.
<http://ndssl.bi.vt.edu/chicago/dendrogram/experiment_id#7385/cell_id#86304/infectee_pid#446753456/iteration#0> <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> <http://ndssl.bi.vt.edu/chicago/person/pid#446753456>.
.......................................................................
以下 SPARQL 查询可以获取上面提到的 RDF 图的现有链。
select * from <http://ndssl.bi.vt.edu/chicago/> where
where {
{
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> ?o1.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> ?o2
}
{
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> ?o2.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> ?o3
}
..........................................................................
}
这种链式查询包含两部分,其中来自查询第一部分的感染者 ID 用作第二部分的感染者。在我的查询中,我有很多部分。有什么方法可以概括它吗?因此,使用这么多部件的插入,我可以只使用一个部件并获得结果。顺便说一句,我还需要路径长度和中间节点信息。