In my post „How to parse GraphML files with a cool Java library“ I showed how to parse a GraphML XML file. In this post I want to show you, how you can visualize it. All you need is the yEd – Graph Editor and some extra markup in your XML file.
At the beginning we had this XML file:
something.xml
<?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdrawing.org/xmlns"> <!-- Properties --> <key id="name" for="node" attr.name="name" attr.type="string"/> <key id="since" for="edge" attr.name="since" attr.type="int"/> <!-- Graph --> <graph id="G" edgedefault="directed"> <!-- Vertices --> <node id="1"> <data key="name">Benny</data> </node> <node id="2"> <data key="name">Daniel</data> </node> <node id="3"> <data key="name">Robert</data> </node> <node id="4"> <data key="name">Jan</data> </node> <node id="5"> <data key="name">Melanie</data> </node> <node id="6"> <data key="name">Julia</data> </node> <node id="7"> <data key="name">Josefine</data> </node> <node id="8"> <data key="name">Kristin</data> </node> <!-- Edges --> <edge id="9" source="1" target="5" label="knows"> <data key="since">2008</data> </edge> <edge id="10" source="2" target="6" label="knows" > <data key="since">2011</data> </edge> <edge id="11" source="3" target="7" label="knows"> <data key="since">2010</data> </edge> <edge id="12" source="4" target="8" label="knows"> <data key="since">2009</data> </edge> <edge id="13" source="2" target="5" label="knows"> <data key="since">2011</data> </edge> <edge id="14" source="8" target="1" label="knows"> <data key="since">2010</data> </edge> </graph> </graphml> |
Now we need some extra data keys (d5
and d6
, don’t forget to define them in the properties area!) and an extended XML namespace. We also have to rename the file from something.xml
to something.graphml
. The final file should look like this:
something.graphml
<?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd" > <!-- Properties --> <key id="name" for="node" attr.name="name" attr.type="string"/> <key id="since" for="edge" attr.name="since" attr.type="int"/> <key for="node" id="d5" attr.name="description" attr.type="string" /> <key for="node" id="d6" yfiles.type="nodegraphics"/> <!-- Graph --> <graph id="G" edgedefault="directed"> <!-- Vertices --> <node id="1"> <data key="name">Benny</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Benny</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="2"> <data key="name">Daniel</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Daniel</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="3"> <data key="name">Robert</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Robert</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="4"> <data key="name">Jan</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Jan</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="5"> <data key="name">Melanie</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Melanie</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="6"> <data key="name">Julia</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Julia</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="7"> <data key="name">Josefine</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Josefine</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <node id="8"> <data key="name">Kristin</data> <data key="d5"/> <data key="d6"> <y:ShapeNode> <y:NodeLabel>Kristin</y:NodeLabel> <y:Shape type="rectangle"/> </y:ShapeNode> </data> </node> <!-- Edges --> <edge id="9" source="1" target="5" label="knows"> <data key="since">2008</data> </edge> <edge id="10" source="2" target="6" label="knows" > <data key="since">2011</data> </edge> <edge id="11" source="3" target="7" label="knows"> <data key="since">2010</data> </edge> <edge id="12" source="4" target="8" label="knows"> <data key="since">2009</data> </edge> <edge id="13" source="2" target="5" label="knows"> <data key="since">2011</data> </edge> <edge id="14" source="8" target="1" label="knows"> <data key="since">2010</data> </edge> </graph> </graphml> |
After doing that, we can open the file in yEd. There we can click on „Layout“ – „Circular…“ to see a beautiful graph. We can save this as an image with „File“ – „Export…“.
The result will look like this: