连续关系方向的密码约束



简短版本:我需要获取可以在不同方向上包含不同关系的路径。但是,我对自己的路径有限制,如果它包含特定类型的连续关系,那么两种关系都必须朝着相同的方向。

长版本:我正在使用下面的查询来获取两个节点之间的路径:

MATCH p=shortestPath((n:Class { code: '1' })-[r*]-(m:Class { code: '4'})) WHERE NONE(x IN NODES(p) WHERE 'Ontology' in labels(x)) return p

查询正确地返回了我的两个节点之间的最短路径。但是,我需要进一步限制此查询,以便它仅返回特定类型连续关系的路径。

例如,假设关系-a->需要朝着相同的方向,它不应返回(1)-a->(2)<-a-(3)-b->(4),但可以返回(1)-a->(6)-a->(3)-b->(7)<-c-(5)<-d-(6)-e->(4)(3)-b->(7)<-c-(4)

上面的示例只是简化了我的真实数据。在我的真实用例中,我需要找到带有iri节点之间的最短路径 http://elite.polito.it/ontologies/dogont.owl#Actuator和带有IRI http://elite.polito.it/ontologies/dogont.owl#StateValue的另一个节点。下面的查询是一个特定的查询,它编码我需要的路径并返回路径,即路径的存在。我需要使用ShortestPath使其更通用。

MATCH p=(n:Class {iri: 'http://elite.polito.it/ontologies/dogont.owl#Actuator'})-->(a:Class)<--(b:ObjectProperty{iri:'http://elite.polito.it/ontologies/dogont.owl#hasState'})-->(c:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#State'})<--(d:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#hasStateValue'})-->(e:Class{iri:'http://elite.polito.it/ontologies/dogont.owl#StateValue'}) return p

cypher可以使用吗?

如果要捕获在任一方向一致的路径(但必须两次调用shortestPath()(,则此查询应该有效:

MATCH (n:Class {code: '1'}), (m:Class {iri: '4'})
OPTIONAL MATCH p1=shortestPath((n)-[*]->(m))
WHERE NONE(x IN NODES(p1) WHERE 'Ontology' in labels(x))
OPTIONAL MATCH p2=shortestPath((n)<-[*]-(m))
WHERE NONE(y IN NODES(p2) WHERE 'Ontology' in labels(y))
RETURN p1, p2

p1和/或p2如果分别没有向右或向左路径,将为null

但是,如果您知道自己想要一个特定的方向(例如,正确(,那么这应该有效:

MATCH p=shortestPath((:Class {code: '1'})-[*]->(:Class {iri: '4'}))
WHERE NONE(x IN NODES(p) WHERE 'Ontology' in labels(x))
RETURN p

最新更新