持久表达有向图的最标准文件格式和符号是什么?

时间:2013-05-03 17:11:47

标签: data-structures rdf file-format directed-graph graphml

我有兴趣坚持个人有向图。这个问题不是要求全面的图形数据库解决方案,而是要求我可以用来保存和单个任意有向图的文档格式。 我不知道哪种符号和文件格式是最明智的选择。

我主要担心的是:

  1. 表现力/灵活性 - 我希望能够表达不同类型的图表。虽然标准用例是一个简单的有向图,但应该可以表达树cyclical graphsmulti-graphs。作为最低限度,我希望支持边缘和节点的标记和加权。用于描述higraphsedge composition / hyper-edges的符号也是非常需要的,尽管我知道这些解决方案可能不存在。

  2. 类型系统独立 - 我有兴趣表示图形的结构质量。一些解决方案包括用于类型边和节点的可扩展类型系统(例如RDF / OWL)。如果有明确定义的类型元素到基元(节点/边缘/属性)的规范分解,我只会对这种表示感兴趣。我在这里要避免的是对等效图的多个表示的能力,其中等价是不可辨别的。

  3. 规范表示 - 应该有一种机制允许图形被规范地表示(以这种方式,规范表示的词汇等价可以用来确定等价)。 / p>

  4. 独立展示 - 我更喜欢不依赖于图表显示的符号。这将包括空间方向,颜色,字体等。我只对表示数据感兴趣。我不喜欢DOT languageDGMLSVG(至少为此特定目的)的一个功能是关注视觉表现。

  5. 标准化/开放/兼容 - 我必须做的实施工作越少越好。如果格式是标准化的并且已经存在用于处理格式的可靠工具,则更优选。伴随这个要求是另一个,格式应该是高度兼容的。 Microsoft's DGML的专有性质是我厌恶的原因,尽管Visual Studio工具和我主要使用.NET(现在)工作的事实。 W3C发布RDF标准的事实是将RDF的有限子集视为代表性工具的动机。我也很感谢GXLGraphML,因为它们有很好的文档xml架构,因此有助于将数据与任何兼容xml的软件包集成。

  6. 简单/可读性 - 我欣赏人类可读的语法和易于解释。我也很欣赏能够简化解析的表示。出于这个原因,我喜欢GML,但我担心它不够主流,不能成为一个现实的选择。我还会考虑JSONYAML的可读性,如果它们各自能够代表复杂(非DAG)结构的能力不是那么有限。

  7. 效率/简洁表示 - 值得考虑的是,我最终选择的格式不可避免地必须通过某些网络进行保留和传输。因此,文件大小是一个相关的考虑因素。

  8. 概述

    我意识到我很可能无法找到满足我愿望清单上所有标准的解决方案。我只是要求最接近我想要的文件格式,并且不限制可扩展性,以支持不受支持的用例。

3 个答案:

答案 0 :(得分:1)

ObWindyPreamble:在RDF世界中,有大量不同的表面语法格式可供选择。 RDF本身是数据的抽象元模型,而不是直接的“图形语法”。您当然可以直接在RDF中表示图形(因为RDF模型图形),但考虑到您想要表示不同类型的图形,您最终可能不得不抽象,并实际创建一个用于表示不同类型图形的RDF词汇表。

总而言之,我不相信RDF是最适合你的方式,但如果你选择一个,我会说RDF的Turtle syntax是值得研究的。它确实标注了可读性和简单性框,以及作为标准(好吧,几乎...... W3C正致力于标准化)以及广泛(开源)工具支持。

RDF模型大致遵循集合语义,这意味着规范语法表示无法真正实施:两个文件可以以不同的顺序获取信息而不影响实际模型,甚至可以包含重复信息。但是,如果在生成文件时强制执行简单的排序算法(大多数RDF解析器/编写器都支持这种算法),您应该能够完成基于行的比较并根据表面语法确定图形等效性。

正如一个简单的例子,我们假设我们有一个非常简单,有针对性的标记图:

 A ---r1---> B ---r2---> C

您可以直接在RDF中表示这一点,如下所示(使用Turtle语法):

 @prefix : <http://example.org/> .

 :A :r1 :B .
 :B :r2 :C .

在更抽象的建模中,您可以执行以下操作:

 @prefix g: <http://example.org/graph-model/> .
 @prefix : <http://example.org/> .

 :A a g:Vertex .
 :B a g:Vertex .
 :C a g:Vertex .

 :r1 a g:DirectedEdge ;
     g:from :A ;
     g:to :B .
 :r2 a g:DirectedEdge ;
     g:from :B ;
     g:to :C .

以上只是一个简单的例子当然,但希望它说明这可能会遇到你愿望清单上的一些事情。

顺便说一下,如果你想要更简单,N-Triples也是一种RDF语法,它基于行,因此易于以流方式处理。它比Turtle稍微冗长,但它可以使文件比较更容易。

答案 1 :(得分:1)

我的想法:

  • 我缺少的是你特定的实际目的/领域。

  • 您提到了特定格式旁边的通用JSON格式(例如GraphML,它是XML的一个应用程序)。如果您不考虑制作自己的格式,我就会留下问题。

  • 没有'可用于确定等效性的规范表示'解决graph isomorphism problem

  • GraphML似乎涵盖了很多理论要求,所以我建议你创建一个JSON版本。这也将涵盖要求6.

  • 然后,您可以在JSON格式和GraphML(以及可能的其他格式)之间创建转换器。

  • 对于您的要求7,它再次取决于实际的图形尺寸。我的意思是,现在发送到几个MB到一个friggin移动设备是不是很多。您提到的任何格式的几MB的图形已经是具有数万个节点的相对较大的野兽。边缘。

答案 2 :(得分:1)

Trivial Graph Format

怎么样?