Class GmlGraphWriter<V,E>
- Type Parameters:
V
- the vertices typeE
- the edges type
- All Implemented Interfaces:
GraphWriter<V,
E>
The GML format is a simple text format for describing graphs. It can represent directed and undirected graphs, and supports integers, floats and strings as vertices/edges identifiers and weights. The format is described in Wikipedia. The format uses a tree-like structure, similar to JSON or XML. The root of the tree is a node with the key "graph", and its children are the vertices, edges, and additional properties such as whether the graph is directed or not. Each vertex and edge will have a property 'id', which is the identifier in the written graph. The source and target of each edge will be stored as properties of an edge node. Except for the 'id' property for vertices, and 'id','source' and 'target' for edges, the weights of each vertex/edge will be stored as properties of the vertex/edge node. An example of a GML file:
graph [ # "This is a sample graph" directed 1 node [ id 1 label "node 1" thisIsASampleAttribute 42 ] node [ id 2 label "node 2" thisIsASampleAttribute 43 ] node [ id 3 label "node 3" thisIsASampleAttribute 44 ] edge [ id 1 source 1 target 2 label "Edge from node 1 to node 2" weight 22.7 ] edge [ id 2 source 2 target 3 label "Edge from node 2 to node 3" weight 1.5 ] edge [ id 3 source 3 target 1 label "Edge from node 3 to node 1" weight -13.54 ] ]
The identifiers of a graph will be written using the Object.toString()
method. The vertices and edges should
be either integers, floats, or strings so that when reading the graph using GmlGraphReader
the identifiers
will be parsed correctly.
The writer support writing weights of vertices and edges of type WeightsByte
, WeightsShort
and
WeightsInt
as integer weights, WeightsFloat
, WeightsDouble
and WeightsLong
as
floating numbers weights, WeightsObj
as string weights using the Object.toString()
method,
WeightsChar
as string weights, and lastly WeightsBool
as integer weights where 0
is
false
and 1
is true
. Note that this way of writing the weights will not yield the exact same
graph when reading it using GmlGraphReader
, since the weights will be parsed into WeightsInt
,
WeightsDouble
and WeightsObj
only. If only WeightsInt
, WeightsDouble
and
WeightsObj
of strings are written, the read graph will be identical. The weights will be written as
properties of the vertex/edge node, and the key of the property will be the key of the weights. The weights keys
should be valid GML keys. By default, all weights of the vertices/edges will be written. To write only specific
weights, use setVerticesWeightsKeys(Collection)
and setEdgesWeightsKeys(Collection)
.
The format was presented in a paper 'GML: A portable Graph File Format' by Michael Himsolt.
- Author:
- Barak Ugav
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
setEdgesWeightsKeys
(Collection<String> edgesWeightsKeys) Set the weights keys of the edges to write.void
setVerticesWeightsKeys
(Collection<String> verticesWeightsKeys) Set the weights keys of the vertices to write.final void
writeGraph
(Graph<V, E> graph, Writer writer) Write a graph to an I/O writer.void
writeGraphImpl
(Graph<V, E> graph, Writer writer) Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.jgalgo.io.GraphWriter
writeGraph, writeGraph
-
Constructor Details
-
GmlGraphWriter
public GmlGraphWriter()Create a new writer.
-
-
Method Details
-
setVerticesWeightsKeys
Set the weights keys of the vertices to write.By default, all weights of the vertices will be written. The writer support writing weights of type
WeightsByte
,WeightsShort
andWeightsInt
as integer weights,WeightsFloat
,WeightsDouble
andWeightsLong
as floating numbers weights,WeightsObj
as string weights using theObject.toString()
method,WeightsChar
as string weights, and lastlyWeightsBool
as integer weights where0
isfalse
and1
istrue
. Note that this way of writing the weights will not yield the exact same graph when reading it usingGmlGraphReader
, since the weights will be parsed intoWeightsInt
,WeightsDouble
andWeightsObj
only. If onlyWeightsInt
,WeightsDouble
andWeightsObj
of strings are written, the read graph will be identical. The weights will be written as properties of the vertex node, and the key of the property will be the key of the weights. The weights keys should be valid GML keys.- Parameters:
verticesWeightsKeys
- The weights keys of the vertices to write, ornull
to write all weights (which is the default)
-
setEdgesWeightsKeys
Set the weights keys of the edges to write.By default, all weights of the edges will be written. The writer support writing weights of type
WeightsByte
,WeightsShort
andWeightsInt
as integer weights,WeightsFloat
,WeightsDouble
andWeightsLong
as floating numbers weights,WeightsObj
as string weights using theObject.toString()
method,WeightsChar
as string weights, and lastlyWeightsBool
as integer weights where0
isfalse
and1
istrue
. Note that this way of writing the weights will not yield the exact same graph when reading it usingGmlGraphReader
, since the weights will be parsed intoWeightsInt
,WeightsDouble
andWeightsObj
only. If onlyWeightsInt
,WeightsDouble
andWeightsObj
of strings are written, the read graph will be identical. The weights will be written as properties of the edge node, and the key of the property will be the key of the weights. The weights keys should be valid GML keys.- Parameters:
edgesWeightsKeys
- The weights keys of the edges to write, ornull
to write all weights (which is the default)
-
writeGraphImpl
- Throws:
IOException
-
writeGraph
Description copied from interface:GraphWriter
Write a graph to an I/O writer.- Specified by:
writeGraph
in interfaceGraphWriter<V,
E> - Parameters:
graph
- a graphwriter
- an I/O writer to which the graph description will be written to
-