有关如何使用时间尺度进行基于时间的图形存储的教程,请参阅以下 GraphGist。
http://gist.neo4j.org/?github-kbastani%2Fgists%2F%2Fmeta%2FTimeScaleEventMetaModel.adoc
在上面建模的时间尺度图中,从蓝色节点到透明颜色节点的最短路径遍历构成了以位为单位的唯一时间标识。
红色路径追踪的身份是0→1→0→1→0→0。反向路径是 0→0→1→0→1→0 或简单的 001010,以位为单位的唯一标识。
MATCH p=shortestPath((n1:d)-[:child_of*]->(n2:y))
WHERE n1.key = 'd10'
RETURN DISTINCT reduce(s = '' , n IN nodes(p)| n.tempo + s) AS TimeIdentity
ORDER BY TimeIdentity
上面的 Cypher 查询模拟了从蓝色节点到透明颜色节点的最短路径遍历。这是一个位字符串,表示时间标识,可以根据事件在时间尺度事件子图上的位置按事件排序。
请看下面的时间尺度事件子图:
上图表示与一系列事件 (met) 相关的时间尺度。事件,在图像中表示为三角形节点,也连接到特征层次结构(John、Sally、Pam、Anne),然后进一步泛化为类(Person)。
现在您可以像我之前列出的那样运行 Cypher 查询,然后按位字符串的发生时间对事件进行排序。注意:您应该将时间戳应用于检索实际时间的节点。每个蓝色节点代表一个时间分隔的事件,但不一定是实际时间,只是表示按顺序发生的事件。
MATCH p=(p0:person)-[:event]->(ev)-[:event]->(p1:person)
WITH p, ev
MATCH time_identity = (d0:d)<-[:event]-(ev)
WITH d0, p
MATCH p1=(d0)-[:child_of*]->(y0:y)
RETURN extract(x IN nodes(p)| coalesce(x.name, x.future)) AS Interaction, reduce(s = '' , n IN nodes(p1)| n.tempo + s) AS TimeIdentity
ORDER BY TimeIdentity
时间尺度中的层次结构允许您对事件进行分组并查看更高级别的表示。因此,选择橙色节点下方的所有绿色节点会选择 4 个可能的事件(由蓝色节点表示)。
如果您有任何问题,请告诉我,并确保访问 GraphGist 以查看更多详细信息和时间尺度事件子图的实际示例。