@@ -261,30 +261,30 @@ def seed_layer_0(driver, dry_run=False):
261261
262262 # === CANONICAL CONCEPTS ===
263263 for concept in CANONICAL_CONCEPTS :
264- stmt = f" MERGE (c:CanonicalConcept {{name: ' { concept [' name' ] } ' }})"
264+ stmt = f' MERGE (c:CanonicalConcept {{name: " { concept [" name" ] } " }})'
265265 statements .append (stmt )
266266
267267 # === DATA PRODUCTS ===
268268 for product in DATA_PRODUCTS :
269- stmt = f" MERGE (dp:DataProduct {{name: ' { product [' name' ] } ' }})"
269+ stmt = f' MERGE (dp:DataProduct {{name: " { product [" name" ] } " }})'
270270 statements .append (stmt )
271271
272272 # === SURVEY PROCESSES ===
273273 for process in SURVEY_PROCESSES :
274- stmt = f" MERGE (sp:SurveyProcess {{name: ' { process [' name' ] } ' }})"
274+ stmt = f' MERGE (sp:SurveyProcess {{name: " { process [" name" ] } " }})'
275275 statements .append (stmt )
276276
277277 # === ANALYSIS TASKS ===
278278 for task in ANALYSIS_TASKS :
279- # Escape single quotes in descriptions
280- desc = task ['description' ]. replace ( "'" , " \\ '" )
281- use_cases = str ( task [ 'typical_use_cases' ]). replace ( "'" , " \\ '" )
282- dims = str ( task ['critical_quality_dimensions' ])
283-
284- stmt = f"""MERGE (t:AnalysisTask {{name: ' { task ['name' ]} ' }})
285- ON CREATE SET t.description = ' { desc } ' ,
286- t.typical_use_cases = { use_cases } ,
287- t.critical_quality_dimensions = { dims } """
279+ # Build Cypher list syntax properly (using double quotes for strings inside lists)
280+ desc = task ['description' ]
281+ use_cases_cypher = '[' + ', ' . join ( f'" { uc } "' for uc in task [ 'typical_use_cases' ]) + ']'
282+ dims_cypher = '[' + ', ' . join ( f'" { d } "' for d in task ['critical_quality_dimensions' ]) + ']'
283+
284+ stmt = f"""MERGE (t:AnalysisTask {{name: " { task ['name' ]} " }})
285+ ON CREATE SET t.description = " { desc } " ,
286+ t.typical_use_cases = { use_cases_cypher } ,
287+ t.critical_quality_dimensions = { dims_cypher } """
288288 statements .append (stmt )
289289
290290 # === QUALITY ATTRIBUTES (for REQUIRES targets) ===
@@ -294,8 +294,8 @@ def seed_layer_0(driver, dry_run=False):
294294 qa_nodes [(qa_name , qa_dimension )] = True
295295
296296 for (qa_name , qa_dimension ) in qa_nodes .keys ():
297- stmt = f"""MERGE (qa:QualityAttribute {{name: ' { qa_name } ' , dimension: ' { qa_dimension } ' }})
298- ON CREATE SET qa.value_type = ' number' """
297+ stmt = f"""MERGE (qa:QualityAttribute {{name: " { qa_name } " , dimension: " { qa_dimension } " }})
298+ ON CREATE SET qa.value_type = " number" """
299299 statements .append (stmt )
300300
301301 # === REQUIRES EDGES ===
@@ -306,13 +306,15 @@ def seed_layer_0(driver, dry_run=False):
306306 if v is None :
307307 prop_lines .append (f"r.{ k } = null" )
308308 elif isinstance (v , str ):
309- prop_lines .append (f"r.{ k } = '{ v .replace (chr (39 ), chr (92 ) + chr (39 ))} '" ) # Escape quotes
309+ # Escape double quotes in string values
310+ escaped_v = v .replace ('"' , '\\ "' )
311+ prop_lines .append (f'r.{ k } = "{ escaped_v } "' )
310312 elif isinstance (v , (int , float )):
311313 prop_lines .append (f"r.{ k } = { v } " )
312314 props_str = ",\n " .join (prop_lines )
313315
314- stmt = f"""MATCH (t:AnalysisTask {{name: ' { task_name } ' }})
315- MATCH (qa:QualityAttribute {{name: ' { qa_name } ' , dimension: ' { qa_dimension } ' }})
316+ stmt = f"""MATCH (t:AnalysisTask {{name: " { task_name } " }})
317+ MATCH (qa:QualityAttribute {{name: " { qa_name } " , dimension: " { qa_dimension } " }})
316318MERGE (t)-[r:REQUIRES]->(qa)
317319ON CREATE SET { props_str } """
318320 statements .append (stmt )
0 commit comments