定义用于表示图形邻接列表的xml?

时间:2013-01-28 18:58:10

标签: python xml graph xml-parsing adjacency-list

我正在使用python图库,我正在使用邻接列表。我正在考虑使用xml来表示邻接列表,这样我就可以更容易地存储或读取图形。 对于这样的图表:

  A
  |\
  | \
  |  \
  B---C

邻接看起来像

A:[B,C]

B:[A,C]

C:[A,B]

问题来了,你将如何将其转换为xml?我有一个(非常)有限的xml知识,所以我看起来像:

<graph>
     <node>
     A
     <realtedto>[B,C]</relatedto>
     </node>
     ...
</graph>

这看起来对你好吗?而且,您将如何处理图表可能不简单或有方向性的问题?

1 个答案:

答案 0 :(得分:2)

Welp,你可以存储你的链接:

<graph>
 <node id="A" />
 <node id="B" />
 <node id="C" />
 <links>
  <link first="A" second="B" />
  <link first="A" second="C" />
 </links>
</graph>

但是,你有奇怪的情况,比如“是A,B和B,A一样”吗?如果你正在进行查找。我可能永远不会采用上述方式。另一方面,如果您这样做,则不会存储重复信息。 (可能,如果您确认以防止逆转)。如果它是有向图,则该副作用可能是一个特征,因为在这种情况下A,B IS 与B,A不同。

请记住,xml隐式地将事物存储在层次结构中,而图形不一定是没有转换的层次结构,因此如果没有某种扭曲,就不可能“直接”表示。我可能会做这样的事情:

<graph>
<node id="A">
  <neighbors>
   <neighbor id="B" />
   <neighbor id="C" />
  </neighbors>
</node>
<node id="B">
  <neighbors>
   <neighbor id="A" />
  </neighbors>
</node>
<node id="C">
  <neighbors>
   <neighbor id="A" />
  </neighbors>
</node>
</graph>

不幸的是,您有重复的信息,但是您可以解决排序问题,如果您对其进行反序列化,则始终会引用节点的邻居进行遍历。如果您希望它是有向图,则可以将<neighbors>分隔为<inlets><outlets>。如果您不关心能够向后移动,或者只是出口侧的<neighbor>标签。

如果您希望能够遍历链接,可以将这两种方法结合使用。

这一切都归结为您希望数据具有的功能。