Graph Modeling Language (GML) is a widely used format for describing graphs. TuringDB supports importing GML files natively via the LOAD GML command.
graph [
node [ id 0 label "Alice" type "Person" age 30 ]
node [ id 1 label "Bob" type "Person" age 25 ]
node [ id 2 label "Acme" type "Company" ]
edge [ source 0 target 1 weight 1.0 ]
edge [ source 0 target 2 weight 0.8 ]
]
Nodes:
| Field | Requirement |
|---|
id | Required. Unique non-negative integer. |
| other fields | Optional. Stored as node properties. |
Edges:
| Field | Requirement |
|---|
source / target | Required. Must reference the id of a node defined in the same file. |
| other fields | Optional. Stored as edge properties. |
Supported property value types: String, Integer, Double, Boolean. All property values are stored as strings in the TuringDB graph regardless of their original type in the GML file.
All imported nodes are assigned the label GMLNode and all edges the type GMLEdge, regardless of any fields present in the file. Any field other than id, source, and target is treated as a plain property. To query your data after import, use MATCH (n:GMLNode) and MATCH ()-[e:GMLEdge]->().
Import steps
Place the GML file in the TuringDB data directory
TuringDB only reads external files from the data subdirectory of its working directory (set by --turing-dir, default $HOME/.turing).cp mygraph.gml ~/.turing/data/
Load the file into a new graph
LOAD GML 'mygraph.gml' AS mygraph
from turingdb import TuringDB
client = TuringDB(host="http://localhost:6666")
client.query("LOAD GML 'mygraph.gml' AS mygraph")
TuringDB creates a new graph named mygraph and populates it with all nodes and relationships from the file.Set the graph as active and query it
cd mygraph
MATCH (n) RETURN n
client.set_graph("mygraph")
df = client.query("MATCH (n) RETURN n")
print(df)
Your GML graph is now imported and ready to query.
Verify the import
Use meta-queries to inspect what was imported:
CALL db.labels()
CALL db.edgeTypes()
CALL db.propertyTypes()
print(client.query("CALL db.labels()"))
print(client.query("CALL db.edgeTypes()"))
print(client.query("CALL db.propertyTypes()"))