Python 定义表示图的邻接列表的xml?
我正在开发一个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
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不适合对任意图形进行建模:它是一种树建模语言。