2016-03-19 5 views
0

マッチの構造とマッチの変数が有効なスコープを理解することには、一般的な問題があります。私はそれが、これは何のためにあるのかを理解することは関係ないと思うCypher:変数が有効な一致ステートメントの範囲

// S sentiment toward A goodFor/badFor T 
// => S sentiment toward the idea of A goodFor/badFor T 

MATCH (S:A)-[:SOURCE]->(sent1:PS {type:"sentiment"})-[:TARGET]->(gfbf:E {type:"gfbf"}) , (A)-[:SOURCE]->(gfbf)-[:TARGET]->(T) , (Writer:A {type:"writer"}) 
// if there is some negative belief in any of the writers private state spaces that involve gfbf then inference is blocked 
WHERE NOT (Writer)-[*1..]->({type:"believesTrue" , spec:FALSE})-[*1..]->(gfbf) 
// if sent1 is in some private state spaces of the writer return all of these 
OPTIONAL MATCH p=(Writer)-[*]->(sent1) 
WITH NODES(p)[1..-1] AS ps_nodes 
WHERE ALL(x IN ps_nodes[1..] WHERE LABELS(x) = "PS") 

MERGE (S)-[:SOURCE]->(sent2:PS {type:"sentiment" , spec:(sent1.spec)})-[:TARGET]->(ideaOf:I {name:"ideaOf" , type:"ideaOf"})-[:TARGET]->(gfbf) 

ON CREATE SET sent2.name = 
CASE sent2.spec 
WHEN FALSE THEN "-S" 
ELSE "+S" 
END 

RETURN p 

私は問題を抱えているコードの特定の部分はこれです。私が想定している構造を見れば十分ですが、基本的には:S-->sent1-->gfbfのパスとA-->gfbf-->Tのサブグラフがあります。新しいパスが見つかるとA-->sent2-->ideaOf-->gfbf、すべてのノードはノードのプロパティに応じて新しいノードのプロパティを設定します。さらに、...部分のすべてのノードがラベルPSを持っているパスwriter-->...-->sentもあるかどうかを調べます。そのパスを見つけると、それはプログラムの別の部分でのさらなる操作のためにこれを返します。

私は取得していますエラーは、このされていない:

py2neo.cypher.error.statement.InvalidSyntax: sent1 not defined (line 6, column 58 (offset: 421)) 
"MERGE (S)-[:SOURCE]->(sent2:PS {type:"sentiment" , spec:(sent1.spec)})-[:TARGET]->(ideaOf:I {name:"ideaOf" , type:"ideaOf"})-[:TARGET]->(g"bf) 

私はそれを使用する場所なぜsent1はもはや定義され、どのように私はそれを有効にするためにコードを再構築する必要があるでしょうか?中

答えて

0

sent1はしていないとの事前 - ので、それを変更します。

WITH NODES(p)[1..-1] AS ps_nodes, sent1 
関連する問題