编写graphml文件 - 将节点名称更改为属性

时间:2013-08-29 04:15:29

标签: r graph hyperlink igraph

我有一个igraph对象(g_sub)是一个超链接图,具有以下属性:

> g_sub
IGRAPH D--- 1331 11088 -- 
+ attr: Image File (v/c), Ringset (v/n), Country Code TLD (v/n), Generic TLD (v/n), Number of
  Pages (v/n), Modularity cluster (v/n), Categorical 1 (v/n), Categorical 2 (v/n), Categorical
  3 (v/n), id (v/c), Width (e/n), Tie Weight (e/n)

当我将g_sub写入graphml文件时,所有节点名称都以“n0”,“n1”等形式出现。

我宁愿将“id”属性作为节点名称(即每个节点都是一个网站,所以我想看到存储在“id”属性中的URL)。

1 个答案:

答案 0 :(得分:1)

这在igraph中是不可能的并且有一个很好的理由:节点ID在GraphML文件中必须是唯一的,并且它们对它们可能包含的字符也有一定的限制。 igraph通过在编写文件时自己构建ID来确保这些条件 - 这就是为什么无论节点名称是什么,它们最终都是n0n1等。

如果您对“正确”的GraphML ID中允许使用哪些字符感兴趣,则必须先查看GraphML DTD,其中指出id属性的类型为ID 。然后,您必须转到XML specification,其中指出id属性必须是唯一的,并且它们必须与“名称生成”匹配。然后,您必须找到“名称生成”在同一文档中的含义:它实质上定义了ID中允许的a set of characters。可能出现在URL中但可能不出现在“名称生成”(例如XML ID)中的字符的一个示例是哈希标记,因此每次尝试使用包含哈希的URL时都会遇到麻烦标记为ID。

您唯一能做的就是对GraphML文件进行后处理,以使用URL而不是ID。您可以使用任何支持XML处理的语言;我可能会在一个单独的Python脚本中执行此操作,该脚本使用预定义属性的值替换每个id标记中的<node>属性的值。但是,还必须确保source标记的target<edge>属性也得到适当替换。