V
- the graph vertex typeE
- the graph edge typepublic class GraphMLImporter<V,E> extends Object implements GraphImporter<V,E>
For a description of the format see http://en.wikipedia.org/wiki/ GraphML or the GraphML Primer.
Below is small example of a graph in GraphML format.
<?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="d0" for="node" attr.name="color" attr.type="string">
<default>yellow</default>
</key>
<key id="d1" for="edge" attr.name="weight" attr.type="double"/>
<graph id="G" edgedefault="undirected">
<node id="n0">
<data key="d0">green</data>
</node>
<node id="n1"/>
<node id="n2">
<data key="d0">blue</data>
</node>
<node id="n3">
<data key="d0">red</data>
</node>
<node id="n4"/>
<node id="n5">
<data key="d0">turquoise</data>
</node>
<edge id="e0" source="n0" target="n2">
<data key="d1">1.0</data>
</edge>
<edge id="e1" source="n0" target="n1">
<data key="d1">1.0</data>
</edge>
<edge id="e2" source="n1" target="n3">
<data key="d1">2.0</data>
</edge>
<edge id="e3" source="n3" target="n2"/>
<edge id="e4" source="n2" target="n4"/>
<edge id="e5" source="n3" target="n5"/>
<edge id="e6" source="n5" target="n4">
<data key="d1">1.1</data>
</edge>
</graph>
</graphml>
The importer reads the input into a graph which is provided by the user. In case the graph is
weighted and the corresponding edge key with attr.name="weight" is defined, the importer also
reads edge weights. Otherwise edge weights are ignored. To test whether the graph is weighted,
method Graph.getType()
can be used.
GraphML-Attributes Values are read as string key-value pairs and passed on to the
VertexProvider
and EdgeProvider
respectively.
The provided graph object, where the imported graph will be stored, must be able to support the features of the graph that is read. For example if the GraphML file contains self-loops then the graph provided must also support self-loops. The same for multiple edges. Moreover, the parser completely ignores the attribute "edgedefault" which denotes whether an edge is directed or not. Whether edges are directed or not depends on the underlying implementation of the user provided graph object.
The importer by default validates the input using the 1.0
GraphML Schema. The user can
(not recommended) disable the validation by calling setSchemaValidation(boolean)
.
Modifier and Type | Field and Description |
---|---|
protected EdgeProvider<V,E> |
edgeProvider
Constructs new edges
|
protected ComponentUpdater<Graph<V,E>> |
graphUpdater
Updates graph properties
|
protected VertexProvider<V> |
vertexProvider
Constructs new vertices
|
protected ComponentUpdater<V> |
vertexUpdater
Updates already constructed vertices
|
Constructor and Description |
---|
GraphMLImporter(VertexProvider<V> vertexProvider,
EdgeProvider<V,E> edgeProvider)
Constructs a new importer.
|
Modifier and Type | Method and Description |
---|---|
EdgeProvider<V,E> |
getEdgeProvider()
Get the edge provider
|
String |
getEdgeWeightAttributeName()
Get the attribute name for edge weights
|
ComponentUpdater<Graph<V,E>> |
getGraphUpdater()
Get the graph updater.
|
VertexProvider<V> |
getVertexProvider()
Get the vertex provider
|
ComponentUpdater<V> |
getVertexUpdater()
Get the vertex updater
|
void |
importGraph(Graph<V,E> graph,
Reader input)
Import a graph.
|
boolean |
isSchemaValidation()
Whether the importer validates the input
|
void |
setEdgeProvider(EdgeProvider<V,E> edgeProvider)
Set the edge provider.
|
void |
setEdgeWeightAttributeName(String edgeWeightAttributeName)
Set the attribute name to use for edge weights.
|
void |
setGraphUpdater(ComponentUpdater<Graph<V,E>> graphUpdater)
Set the graph updater.
|
void |
setSchemaValidation(boolean schemaValidation)
Set whether the importer should validate the input
|
void |
setVertexProvider(VertexProvider<V> vertexProvider)
Set the vertex provider
|
void |
setVertexUpdater(ComponentUpdater<V> vertexUpdater)
Set the vertex updater.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
importGraph, importGraph
protected VertexProvider<V> vertexProvider
protected EdgeProvider<V,E> edgeProvider
protected ComponentUpdater<V> vertexUpdater
protected ComponentUpdater<Graph<V,E>> graphUpdater
public GraphMLImporter(VertexProvider<V> vertexProvider, EdgeProvider<V,E> edgeProvider)
vertexProvider
- provider for the generation of vertices. Must not be null.edgeProvider
- provider for the generation of edges. Must not be null.public String getEdgeWeightAttributeName()
public void setEdgeWeightAttributeName(String edgeWeightAttributeName)
edgeWeightAttributeName
- the attribute namepublic boolean isSchemaValidation()
public void setSchemaValidation(boolean schemaValidation)
schemaValidation
- value for schema validationpublic void importGraph(Graph<V,E> graph, Reader input) throws ImportException
The provided graph must be able to support the features of the graph that is read. For example if the GraphML file contains self-loops then the graph provided must also support self-loops. The same for multiple edges.
If the provided graph is a weighted graph, the importer also reads edge weights.
GraphML-Attributes Values are read as string key-value pairs and passed on to the
VertexProvider
and EdgeProvider
respectively.
importGraph
in interface GraphImporter<V,E>
graph
- the output graphinput
- the input readerImportException
- in case an error occurs, such as I/O or parse errorpublic VertexProvider<V> getVertexProvider()
public void setVertexProvider(VertexProvider<V> vertexProvider)
vertexProvider
- the new vertex provider. Must not be null.public EdgeProvider<V,E> getEdgeProvider()
public void setEdgeProvider(EdgeProvider<V,E> edgeProvider)
edgeProvider
- the new edge provider. Must not be null.public ComponentUpdater<V> getVertexUpdater()
public void setVertexUpdater(ComponentUpdater<V> vertexUpdater)
vertexUpdater
- the new vertex updater. Must not be null.public ComponentUpdater<Graph<V,E>> getGraphUpdater()
public void setGraphUpdater(ComponentUpdater<Graph<V,E>> graphUpdater)
graphUpdater
- the new graph updater. Must not be null.Copyright © 2018. All rights reserved.