加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

GraphML 文件格式初探

(2013-11-25 21:05:53)
分类: 可视化

GraphML 文件格式初探

最近使用Gephi的时候需要用到GraphML文件对软件输入图文件,于是对其格式进行了一个初步了解。首先GraphML是基于XML的一种结构化描述图的文件格式。

GraphML文件的目的是定义一个图。下面来看一个简单的例子:

<?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">

  <graph id="G" edgedefault="undirected">

    <node id="n0"/>

    <node id="n1"/>

    <node id="n2"/>

    <node id="n3"/>

    <node id="n4"/>

    <node id="n5"/>

    <node id="n6"/>

    <node id="n7"/>

    <node id="n8"/>

    <node id="n9"/>

    <node id="n10"/>

    <edge source="n0" target="n2"/>

    <edge source="n1" target="n2"/>

    <edge source="n2" target="n3"/>

    <edge source="n3" target="n5"/>

    <edge source="n3" target="n4"/>

    <edge source="n4" target="n6"/>

    <edge source="n6" target="n5"/>

    <edge source="n5" target="n7"/>

    <edge source="n6" target="n8"/>

    <edge source="n8" target="n7"/>

    <edge source="n8" target="n9"/>

    <edge source="n8" target="n10"/>

  </graph>

</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" 

    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">

 

  ...

 

</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文档中,顶点与边元素出现的顺序是没有要求的。所以下述文件也没有问题:

  <graph id="G" edgedefault="directed">

    <node id="n0"/>

    <edge source="n0" target="n2"/>

    <node id="n1"/>

    <node id="n2"/>

    ...

  </graph>

GraphML文档中,图是混合的,就是一个图可以同时包含有向边和无向边。如果没有在声明边的时候声明方向,那么这条边被设为默认的方向。这个默认的方向在图元素中的XML属性edgedefault中声明。这个属性有directedundirected两个值。注意的是,必须要指定默认的方向。

同时,可以选择使用XML属性id指定图的标志。这个标志可以用于指定图。

图中的顶点可以在顶点元素中定义。每个顶点有一个标志,这个标志必须在整个文档中都是唯一的,就是说在一个文档中不能出现两个拥有同样标志的不同顶点。一个节点的标志在MXL属性id中定义。

图中的边可以在边元素中定义。每条边必须定义两个端点,分别是XML属性的sourcetargetsourcetarget必须是出现在同一文档中的节点的标志。

只有一个端点的边,被称为自旋。

XML属性选项directed表明边是有向的还是无向的。如果设置为true表明边是有向边,false代表无向边。边的标志是可选的,在XML属性id中定义。

我们除此之外还需要使用GraphML属性存储顶点以及边的额外属性。比如这个例子:

<?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>

上述文档定义了这样一个图:

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属性的域指定了这些属性是为哪些元素指定的,一般的值有graphnodeedgeall

比如

<key id="d1" for="edge" attr.name="weight" attr.type="double"/>

对一个GraphML属性定义默认值是被允许的。如下所示:

  <key id="d0" for="node" attr.name="color" attr.type="string">

    <default>yellow</default>

  </key>

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有