Skip to content

@graphrs/io

以标准文件格式导入和导出图。由 igraph 经过充分验证的解析器通过 WASM 驱动。

bash
npm install @graphrs/io

GraphML

基于 XML 的格式,支持丰富的属性。图工具的标准交换格式 —— Gephi、yEd、Cytoscape 和 NetworkX 均支持。

typescript
import { readGraphML, writeGraphML } from '@graphrs/io';

const graph = await readGraphML(xmlString);
const xml = await writeGraphML(graph);

readGraphML(xml: string): Promise<Graph>

将 GraphML XML 字符串解析为 Graph。支持有向/无向图、节点/边属性和嵌套 <graph> 元素。

writeGraphML(graph: Graph): Promise<string>

Graph 序列化为 GraphML XML 字符串。

格式示例:

xml
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphstudio.org/xmlns">
  <graph id="G" edgedefault="undirected">
    <node id="n0"/>
    <node id="n1"/>
    <node id="n2"/>
    <edge source="n0" target="n1"/>
    <edge source="n1" target="n2"/>
  </graph>
</graphml>

GML

图建模语言 —— 一种人类可读的层次化格式。被 igraph、NetworkX 和 LEDA 使用。

typescript
import { readGML, writeGML } from '@graphrs/io';

const graph = await readGML(gmlString);
const gml = await writeGML(graph);

readGML(text: string): Promise<Graph>

将 GML 字符串解析为 Graph

writeGML(graph: Graph): Promise<string>

Graph 序列化为 GML 格式。

格式示例:

graph [
  directed 0
  node [ id 0 ]
  node [ id 1 ]
  node [ id 2 ]
  edge [ source 0 target 1 ]
  edge [ source 1 target 2 ]
]

DOT (Graphviz)

Graphviz DOT 语言。广泛用于图可视化,被数十种工具支持。

typescript
import { readDOT, writeDOT } from '@graphrs/io';

const graph = await readDOT(dotString);
const dot = await writeDOT(graph);

readDOT(text: string): Promise<Graph>

将 DOT 格式字符串解析为 Graph。支持 graph(无向)和 digraph(有向)。

writeDOT(graph: Graph): Promise<string>

Graph 序列化为 DOT 格式。

格式示例:

plaintext
graph {
  0 -- 1;
  1 -- 2;
  2 -- 0;
}
plaintext
digraph {
  0 -> 1;
  1 -> 2;
}

Edge List

极简纯文本格式 —— 每行一条边,节点 ID 以空格分隔。最简单的图文本表示方式。

typescript
import { readEdgeList, writeEdgeList } from '@graphrs/io';

const graph = await readEdgeList(text);
const edgeList = await writeEdgeList(graph);

readEdgeList(text: string): Promise<Graph>

解析边列表字符串。每行定义一条边,包含两个空格分隔的节点 ID。

writeEdgeList(graph: Graph): Promise<string>

Graph 序列化为边列表格式。

格式示例:

0 1
1 2
2 3
3 0

Pajek

Pajek 格式 —— 在社会网络分析中广泛使用。支持顶点和边两个部分。

typescript
import { readPajek, writePajek } from '@graphrs/io';

const graph = await readPajek(pajekString);
const pajek = await writePajek(graph);

readPajek(text: string): Promise<Graph>

将 Pajek .net 文件字符串解析为 Graph

writePajek(graph: Graph): Promise<string>

Graph 序列化为 Pajek 格式。

格式示例:

*Vertices 4
1 "Node 1"
2 "Node 2"
3 "Node 3"
4 "Node 4"
*Edges
1 2
2 3
3 4

往返转换示例

从一种格式读取图,分析后导出为另一种格式:

typescript
import { Graph } from '@graphrs/core';
import { readGraphML, writeDOT } from '@graphrs/io';
import { louvain } from '@graphrs/community';

// 从 GraphML 读取
const graph = await readGraphML(xmlData);

// 分析
const communities = await louvain(graph);
console.log(`发现 ${communities.clusters} 个社区`);

// 导出为 DOT 用于 Graphviz 可视化
const dot = await writeDOT(graph);

如何选择格式

格式最适合场景属性支持人类可读生态系统
GraphML与桌面工具互操作冗长(XML)Gephi, yEd, Cytoscape
GMLigraph/NetworkX 交换igraph, NetworkX, LEDA
DOTGraphviz 可视化Graphviz, d3-graphviz
Edge List快速原型、数据管道极简通用
Pajek社会网络分析有限Pajek, UCINet

API 总结

函数输入输出说明
readGraphMLstringPromise<Graph>解析 GraphML XML
writeGraphMLGraphPromise<string>序列化为 GraphML
readGMLstringPromise<Graph>解析 GML
writeGMLGraphPromise<string>序列化为 GML
readDOTstringPromise<Graph>解析 DOT/Graphviz
writeDOTGraphPromise<string>序列化为 DOT
readEdgeListstringPromise<Graph>解析边列表
writeEdgeListGraphPromise<string>序列化为边列表
readPajekstringPromise<Graph>解析 Pajek .net
writePajekGraphPromise<string>序列化为 Pajek

MIT License (TS code) · GPL-2.0 (WASM binary)