// CREATE THE PAINTINGS, SET BASIC ATTRIBUTES MERGE (painting:Painting {objectId: toInteger($objectId)}) SET painting.objectId = toInteger($objectId), painting.name = $title, painting.resourceUrl = $resourceUrl, painting.accessionYear = $accession, painting.dimensions = $dimensions, painting.credit = $credit // SET DIMENSIONS FOR RECTANGULAR AND ROUND PAINTINGS WITH painting, apoc.text.regexGroups($dimensions, '\\(( *[0-9]+(\\.[0-9]+)*( *[×x] *[0-9]+(\\.[0-9]+)*)) *cm\\)') as dim WITH painting, dim[0][1] as dimSingle WITH painting, dimSingle FOREACH(ignoreMe IN CASE WHEN dimSingle IS NOT NULL THEN [1] ELSE [] END | SET painting.sizex = tofloat(trim(apoc.text.split(dimSingle,'x|×')[0])) SET painting.sizey = tofloat(trim(apoc.text.split(dimSingle,'x|×')[1])) ) WITH painting, apoc.text.regexGroups($dimensions, '\\({1}(([0-9]+(.[0-9]+)*)) *cm\\){1}') as radius WITH painting, radius[0][1] as radiusClean FOREACH(ignoreMe IN CASE WHEN radiusClean IS NOT NULL THEN [1] ELSE [] END | SET painting.radius = tofloat(trim(radiusClean)) ) // CREATE DEPARTMENTS, TAGS, CLASSIFICATIONS WITH painting MERGE (d:Department {name:$department}) MERGE (painting)-[:BELONGS_TO]->(d) WITH painting UNWIND split($tags, '|') AS t WITH painting,t MERGE (tg:Tag {name: t}) MERGE (painting)-[:TAGGED]->(tg) WITH painting UNWIND split($classification, '|') AS classificationSingle MERGE (cls:Classification {name: classificationSingle}) MERGE (cls)<-[:IS_CLASSIFIED_AS]-(painting) // CREATE MEDIUMS WITH painting UNWIND $baseMediumList as singleMedium MERGE (med:Medium {name: singleMedium.base}) MERGE (med)<-[:MEDIUM]-(painting) FOREACH (onMediumName IN singleMedium.on | MERGE (onMedium:Medium {name: onMediumName}) MERGE (med)-[:ON]->(onMedium) ) FOREACH (activeMediumName IN singleMedium.active | MERGE (activeMedium:Medium {name: activeMediumName}) MERGE (med)-[:ACTIVE]->(activeMedium) ) // CREATE ARTISTS AND NATIONALITIES WITH split(coalesce($artist, 'Unknown'), '|') AS artists, split($artistEnd,'9999') AS endYears, split($artistBegin,'-9999') AS beginYears, coalesce($ulan, '-') as ulan, coalesce($wikidata, '-') as wikidata, split(coalesce($nationalities, 'Unknown'), '|') as artistNationalities, painting WITH artists, endYears, range(0,size(artists)-1) as no, beginYears, ulan, wikidata, painting, artistNationalities FOREACH (n IN no| MERGE (a:Artist {name:artists[n], endYear:coalesce(trim(endYears[n]),9999), beginYear:coalesce(trim(beginYears[n]),-9999), ulan: ulan, wikidata: wikidata}) MERGE (a)<-[:ARTIST {createdAt: $createdAt}]-(painting) MERGE (nat:Nationality {name:coalesce(artistNationalities[n], artistNationalities[0])}) MERGE (a)-[:NATIONALITY]->(nat) ) RETURN painting // CREATE TIME PERIODS MATCH (p:Painting)-[a:ARTIST]->(:Artist) MATCH (c:Century) WHERE toInteger(c.from) <= toInteger(a.createdAt) AND toInteger(c.to) >= toInteger(a.createdAt) MERGE (p)-[:BELONGS_TO]->(c) RETURN p