GraphMLとGMLについて
ノードやエッジのあるグラフを表現するファイル形式として有名(?)なのは、GraphML形式とGML形式。GraphMLとGMLの大きな違いは文法で、GraphMLはXMLの文法を用いてノードとエッジを記述するのに対して、GMLは独自の文法で記述する。
GMLはグラフ描画ツールcytoscapeやGephiなど、色々なグラフ描画ツールでサポートされているが、GraphMLはGephiでは対応しているもののcytoscapeでは対応していないなどメジャーではないのかもしれない。
どちらも文法は難しくないが、ノードやエッジに色付けしたり大きさを変更する際のkeyが異なり、また読み込むツールによってkeyが異なるので分かりづらい。
GraphMLはGephiを基準に、GMLはcytoscpaeを基準にして分かった範囲でメモ書きを残しておく。
<?xml version="1.0" encoding="UTF-8"?><graphml xmlns="http://graphml.graphdrawing.org/xmlns"> <!-- 宣言部 --> <!-- データに対するキーの定義を行う --> <key attr.name="label" attr.type="string" for="node" id="label"/> <key attr.name="Edge Label" attr.type="string" for="edge" id="edgelabel"/> <key attr.name="weight" attr.type="double" for="edge" id="weight"/> <key attr.name="Edge Id" attr.type="string" for="edge" id="edgeid"/> <key attr.name="r" attr.type="int" for="node" id="r"/> <key attr.name="g" attr.type="int" for="node" id="g"/> <key attr.name="b" attr.type="int" for="node" id="b"/> <key attr.name="x" attr.type="float" for="node" id="x"/> <key attr.name="y" attr.type="float" for="node" id="y"/> <key attr.name="size" attr.type="float" for="node" id="size"/> <key attr.name="root_index" attr.type="string" for="node" id="root_index"/> <key attr.name="type" attr.type="string" for="node" id="type"/> <key attr.name="outline" attr.type="string" for="node" id="outline"/> <key attr.name="outline_width" attr.type="string" for="node" id="outline_width"/> <key attr.name="root_index" attr.type="string" for="edge" id="root_index"/> <key attr.name="width" attr.type="string" for="edge" id="width"/> <key attr.name="fill" attr.type="string" for="edge" id="fill"/> <key attr.name="type" attr.type="string" for="edge" id="type"/> <key attr.name="source_arrow" attr.type="string" for="edge" id="source_arrow"/> <key attr.name="target_arrow" attr.type="string" for="edge" id="target_arrow"/> <!-- データ指定 --> <graph edgedefault="directed"><!-- グラフの種類。この場合有向グラフ --> <node id="-114.0"><!-- ノードごとに一意なIDを設定する --> <data key="label">a</data><!-- 表示されるラベル(省略化) --> <data key="root_index">-114.0</data><!-- Gephi用 --> <data key="type">ellipse</data><!-- 形(省略化) --> <data key="outline">#33ff00</data><!-- 縁の色(省略化) --> <data key="outline_width">11.0</data><!-- 縁の太さ(省略化) --> <data key="size">100.0</data><!-- ノードの大きさ(省略化) --> <data key="r">204</data><!-- ノードの色rgb指定(省略化) --> <data key="g">255</data> <data key="b">0</data> <data key="x">-437.66287</data><!-- 座標(省略化) --> <data key="y">46.562424</data><!-- 座標(省略化) --> </node> <node id="-115.0"> <data key="label">B</data> <data key="root_index">-115.0</data> <data key="type">octagon</data> <data key="outline">#666666</data> <data key="outline_width">1.0</data> <data key="size">14.0</data> <data key="fill">#00ffFF</data> <data key="x">437.66287</data> <data key="y">-46.562424</data> </node> <!-- 枝の始点と終点をノードのIDで指定。有向グラフならsourceからtargetに枝がつく。(つまりtarget側に矢印) --> <edge source="-114.0" target="-115.0"> <data key="edgelabel">DefaultEdge</data><!-- 枝のラベル --> <data key="weight">2.0</data><!-- 枝の重み --> <data key="root_index">-426.0</data><!-- Gephi用? --> <data key="width">11.0</data><!-- 枝の太さ --> <data key="fill">#00ff66</data><!-- 枝の色 --> <data key="type">line</data><!-- 枝の形 --> <data key="source_arrow">0.0</data><!-- 枝の始点の形 --> <data key="target_arrow">3.0</data><!-- 枝の終点の形 --> </edge> </graph> </graphml>
Creator "Cytoscape" Version 1.0 graph [ node [ root_index -114 id -114 graphics [ x -225 y 46 w 111 h 111 fill "#ccff00" type "ellipse" outline "#33ff00" outline_width 11.0 ] label "a" ] node [ root_index -115 id -115 graphics [ x 148 y 6 w 70 h 30 fill "#ffffff" type "octagon" outline "#666666" outline_width 1.0 ] label "B" ] edge [ root_index -426 target -115 source -114 graphics [ width 11.0 fill "#00ff66" type "line" Line [ ] source_arrow 0 target_arrow 0 ] label "DefaultEdge" ] ] Title "Network"
ツールにもよるが、どちらの書式も座標は指定しなければツールごとに適当に配置される。