GraphML 文件格式初探

分类: 可视化 |
GraphML 文件格式初探
最近使用Gephi的时候需要用到GraphML文件对软件输入图文件,于是对其格式进行了一个初步了解。首先GraphML是基于XML的一种结构化描述图的文件格式。
GraphML文件的目的是定义一个图。下面来看一个简单的例子:
<?xml version="1.0" encoding="UTF-8"?>
<graphml
xmlns="http://graphml.graphdrawing.org/xmlns"
</graphml>
上面的一段文档定义了如下图所示的图。
http://s1/mw690/001ZkYorty6EvgBX8ekd0&690文件格式初探" TITLE="GraphML
一个GraphML文档包括graphml元素,和其他子元素,比如图,节点,边。
GraphML的文件头:
<?xml version="1.0" encoding="UTF-8"?>
<graphml
xmlns="http://graphml.graphdrawing.org/xmlns"
</graphml>
文件第一行是XML处理指定,其定义了文档属于XML1.0的版本,并且编码方式为UTF-8,这也是XML文档标准的编码方式。当然,GraphML文档也可以选择其他的编码方式。
第二行包含了GraphML文件的根元素:graphml元素。一个graphml元素像所有其他GraphML元素一样,属于命名空间http://graphml.graphdrawing.org/xmlns。因此我们在XML属性前面定义了GraphML默认的属性xmlns=”http://graphml.graphdrawing.org/xmlns”。另外两个其他属性为这个文档指定了XML的模式。在上面的例子中,使用的是存放在graphdrawing.org服务器上的GraphML文档的标准模式。第一个属性,xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”,把xsi定义为MXL模式的命名空间。第二个属性,xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd",定义了所有在GraphML命名空间中的元素的XML模式存放地。
XML模式的引用并不是必须的,但是它使得文件有效,因此推荐加入。
图中嵌套着顶点以及边的定义。一个顶点被定义为顶点元素,一个边被定义为边元素。在GraphML文档中,顶点与边元素出现的顺序是没有要求的。所以下述文件也没有问题:
在GraphML文档中,图是混合的,就是一个图可以同时包含有向边和无向边。如果没有在声明边的时候声明方向,那么这条边被设为默认的方向。这个默认的方向在图元素中的XML属性edgedefault中声明。这个属性有directed和undirected两个值。注意的是,必须要指定默认的方向。
同时,可以选择使用XML属性id指定图的标志。这个标志可以用于指定图。
图中的顶点可以在顶点元素中定义。每个顶点有一个标志,这个标志必须在整个文档中都是唯一的,就是说在一个文档中不能出现两个拥有同样标志的不同顶点。一个节点的标志在MXL属性id中定义。
图中的边可以在边元素中定义。每条边必须定义两个端点,分别是XML属性的source和target。source和target必须是出现在同一文档中的节点的标志。
只有一个端点的边,被称为自旋。
XML属性选项directed表明边是有向的还是无向的。如果设置为true表明边是有向边,false代表无向边。边的标志是可选的,在XML属性id中定义。
我们除此之外还需要使用GraphML属性存储顶点以及边的额外属性。比如这个例子:
<?xml version="1.0" encoding="UTF-8"?>
<graphml
xmlns="http://graphml.graphdrawing.org/xmlns"
</graphml>
上述文档定义了这样一个图:
http://s7/mw690/001ZkYorty6EvgD5ZBA16&690文件格式初探" TITLE="GraphML
一个GraphML属性由一个key元素定义,元素中指定了标志,名称以,类型以及属性的域。
标志使用XML属性的id定义。GraphML属性的名称(name)有XML属性的attr.name定义,并且必须在整个GraphML属性中是唯一的。名字的定义是为了方便了解属性的意义。
GraphML属性的类型有boolean, int, long, float, double以及string.这些类型可以如在java中定义一样。
GraphML属性的域指定了这些属性是为哪些元素指定的,一般的值有graph,node,edge,all。
比如
<key id="d1" for="edge" attr.name="weight" attr.type="double"/>
对一个GraphML属性定义默认值是被允许的。如下所示: