Python 定义表示图的邻接列表的xml?

Python 定义表示图的邻接列表的xml?,python,xml,graph,xml-parsing,adjacency-list,Python,Xml,Graph,Xml Parsing,Adjacency List,我正在开发一个python图形库,并且正在使用邻接列表。我正在考虑使用xml来表示邻接列表,以便更容易地存储或读取图形。 对于这样的图形: A |\ | \ | \ B---C <graph> <node id="A"> <neighbors> <neighbor id="B" /> <neighbor id="C" /> </neighbors> </node> &l

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

  A
  |\
  | \
  |  \
  B---C
<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>
邻接将看起来像

A:[B,C]

B:[A,C]

C:[A,B]

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

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

A.
[乙,丙]
...

你觉得这个合适吗?此外,您将如何处理图形可能不简单或不定向的问题?

好的,您可以这样存储链接:

<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与B,a不同

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

  A
  |\
  | \
  |  \
  B---C
<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>

不幸的是,您有重复的信息,但是您避开了排序问题,如果您对其进行反序列化,则始终会引用节点的邻居进行遍历。如果您希望它是一个有向图,您可以将
分为
。或者,如果您不关心是否能够向后移动,只需在插座侧添加
标记即可

如果希望能够遍历链接,可以将这两种方法结合起来


这一切都归结于您希望数据具有的特性。

+1请注意,XML不适合对任意图形进行建模:它是一种树建模语言。