apoc.export.graphml.graph

Procedure APOC Core

apoc.export.graphml.graph(graph,file,config) - exports given graph object as graphml to the provided file

Signature

apoc.export.graphml.graph(graph :: MAP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)

Input parameters

Name Type Default

graph

MAP?

null

file

STRING?

null

config

MAP?

null

Output parameters

Name Type

file

STRING?

source

STRING?

format

STRING?

nodes

INTEGER?

relationships

INTEGER?

properties

INTEGER?

time

INTEGER?

rows

INTEGER?

batchSize

INTEGER?

batches

INTEGER?

done

BOOLEAN?

data

STRING?

Usage Examples

The examples in this section are based on the following sample graph:

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
(Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
(Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
(LillyW)-[:DIRECTED]->(TheMatrix),
(LanaW)-[:DIRECTED]->(TheMatrix),
(JoelS)-[:PRODUCED]->(TheMatrix);

The Neo4j Browser visualization below shows the imported graph:

play movies
Figure 1. Movies Graph Visualization

The apoc.export.graphml.graph procedure exports a virtual graph to a CSV file or as a stream.

The examples in this section are based on a virtual graph that contains all PRODUCED relationships and the nodes either side of that relationship. The query below creates a virtual graph and stores it in memory with the name producers.cached using Static Value Storage.

MATCH path = (:Person)-[produced:PRODUCED]->(:Movie)
WITH collect(path) AS paths
CALL apoc.graph.fromPaths(paths, "producers", {})
YIELD graph AS g
CALL apoc.static.set("producers.cached", g)
YIELD value
RETURN value, g
Table 1. Results
value g

NULL

{name: "producers", relationships: , nodes: [(:Person {name: "Joel Silver", born: 1952}), (:Movie {tagline: "Welcome to the Real World", title: "The Matrix", released: 1999})], properties: {}}

The following query exports the virtual graph from static value storage to the file movies-producers.csv:

CALL apoc.export.graphml.graph(apoc.static.get("producers.cached"), "movies-producers.graphml", {});
Table 2. Results
file source format nodes relationships properties time rows batchSize batches done data

"movies-producers.graphml"

"graph: nodes(2), rels(1)"

"csv"

2

1

5

2

3

20000

1

TRUE

NULL

movies-producers.graphml
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="born" for="node" attr.name="born"/>
<key id="name" for="node" attr.name="name"/>
<key id="tagline" for="node" attr.name="tagline"/>
<key id="label" for="node" attr.name="label"/>
<key id="title" for="node" attr.name="title"/>
<key id="released" for="node" attr.name="released"/>
<key id="label" for="edge" attr.name="label"/>
<graph id="G" edgedefault="directed">
<node id="n195" labels=":Person"><data key="labels">:Person</data><data key="born">1952</data><data key="name">Joel Silver</data></node>
<node id="n188" labels=":Movie"><data key="labels">:Movie</data><data key="title">The Matrix</data><data key="tagline">Welcome to the Real World</data><data key="released">1999</data></node>
<edge id="e273" source="n195" target="n188" label="PRODUCED"><data key="label">PRODUCED</data></edge>
</graph>
</graphml>

The following query returns a streams of the virtual graph from static value storage to the data column:

CALL apoc.export.graphml.graph(apoc.static.get("producers.cached"), null, {stream: true})
YIELD file, nodes, relationships, properties, data
RETURN file, nodes, relationships, properties, data;
Table 3. Results
file nodes relationships properties data

NULL

2

1

5

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <graphml
   xmlns="\"
   http://graphml.graphdrawing.org/xmlns\""="http://graphml.graphdrawing.org/xmlns\"""
   xmlns:xsi="\"
   http://www.w3.org/2001/XMLSchema-instance\""="http://www.w3.org/2001/XMLSchema-instance\"""
   xsi:schemaLocation="\"
   http://graphml.graphdrawing.org/xmlns="http://graphml.graphdrawing.org/xmlns"
   http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\""="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\""">
   <key id="\" born\""="born\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" name\""="name\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" tagline\""="tagline\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" label\""="label\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" title\""="title\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" released\""="released\""" for="\" node\""="node\""" attr.name="\"/>
   <key id="\" label\""="label\""" for="\" edge\""="edge\""" attr.name="\"/>
   <graph id="\" G\""="G\""" edgedefault="\" directed\""="directed\""">
     <node id="\" n195\""="n195\""" labels="\" :Person\""=":Person\""">
       <data key="\" labels\""="labels\""">:Person</data>
       <data key="\" born\""="born\""">1952</data>
       <data key="\" name\""="name\""">Joel Silver</data>
     </node>
     <node id="\" n188\""="n188\""" labels="\" :Movie\""=":Movie\""">
       <data key="\" labels\""="labels\""">:Movie</data>
       <data key="\" title\""="title\""">The Matrix</data>
       <data key="\" tagline\""="tagline\""">Welcome to the Real World</data>
       <data key="\" released\""="released\""">1999</data>
     </node>
     <edge id="\" e273\""="e273\""" source="\" n195\""="n195\""" target="\" n188\""="n188\""" label="\" PRODUCED\""="PRODUCED\""">
       <data key="\" label\""="label\""">PRODUCED</data>
     </edge>
   </graph>
 </graphml>
  "