我有兴趣坚持个人有向图。这个问题不是要求全面的图形数据库解决方案,而是要求我可以用来保存和单个任意有向图的文档格式。 我不知道哪种符号和文件格式是最明智的选择。
我主要担心的是:
表现力/灵活性 - 我希望能够表达不同类型的图表。虽然标准用例是一个简单的有向图,但应该可以表达树cyclical graphs,multi-graphs。作为最低限度,我希望支持边缘和节点的标记和加权。用于描述higraphs和edge composition / hyper-edges的符号也是非常需要的,尽管我知道这些解决方案可能不存在。
类型系统独立 - 我有兴趣表示图形的结构质量。一些解决方案包括用于类型边和节点的可扩展类型系统(例如RDF / OWL)。如果有明确定义的类型元素到基元(节点/边缘/属性)的规范分解,我只会对这种表示感兴趣。我在这里要避免的是对等效图的多个表示的能力,其中等价是不可辨别的。
规范表示 - 应该有一种机制允许图形被规范地表示(以这种方式,规范表示的词汇等价可以用来确定等价)。 / p>
独立展示 - 我更喜欢不依赖于图表显示的符号。这将包括空间方向,颜色,字体等。我只对表示数据感兴趣。我不喜欢DOT language,DGML或SVG(至少为此特定目的)的一个功能是关注视觉表现。
标准化/开放/兼容 - 我必须做的实施工作越少越好。如果格式是标准化的并且已经存在用于处理格式的可靠工具,则更优选。伴随这个要求是另一个,格式应该是高度兼容的。 Microsoft's DGML的专有性质是我厌恶的原因,尽管Visual Studio工具和我主要使用.NET(现在)工作的事实。 W3C发布RDF标准的事实是将RDF的有限子集视为代表性工具的动机。我也很感谢GXL和GraphML,因为它们有很好的文档xml架构,因此有助于将数据与任何兼容xml的软件包集成。
简单/可读性 - 我欣赏人类可读的语法和易于解释。我也很欣赏能够简化解析的表示。出于这个原因,我喜欢GML,但我担心它不够主流,不能成为一个现实的选择。我还会考虑JSON或YAML的可读性,如果它们各自能够代表复杂(非DAG)结构的能力不是那么有限。
效率/简洁表示 - 值得考虑的是,我最终选择的格式不可避免地必须通过某些网络进行保留和传输。因此,文件大小是一个相关的考虑因素。
我意识到我很可能无法找到满足我愿望清单上所有标准的解决方案。我只是要求最接近我想要的文件格式,并且不限制可扩展性,以支持不受支持的用例。
答案 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)