Link Search Menu Expand Document

Build Status

Graphology GEXF Utilities

GEXF parser & writer for graphology.

For more information about the GEXF file format, you can head there.

Installation

npm install graphology-gexf

Usage

Parser

The parser must be passed a graphology constructor and is able to read either a string, or an XMLDocument instance.

var Graph = require('graphology');

// Node
var gexf = require('graphology-gexf');
// Browser
var gexf = require('graphology-gexf/browser');

// Reading a string
var graph = gexf.parse(Graph, string);

// Reading a dom document
var graph = gexf.parse(Graph, xmlDocument);

// Passing options
var graph = gexf.parse(Graph, string, {addMissingNodes: true});

Arguments

  • constructor GraphClass: graphology constructor to use.
  • source string|Document: source data to parse.
  • options ?object: parsing options:
    • addMissingNodes ?boolean false: whether to add missing nodes referenced in the file’s edges.
    • allowUndeclaredAttributes ?boolean false: whether to allow undeclared attributes for both nodes & edges, which will be considered as strings.
    • respectInputGraphType ?boolean false: whether to make sure the output graph type is the same as the passed constructor. By default the parser will try to optimize the graph representation to avoid wasting time and memory. But if respectInputGraphType is true the output graph is guaranteed to be an instance of the typed constructor you gave as first argument. This also means the parser will throw when reading a graph that cannot be represented with the given typed constructor.

Writer

The writer must be passed a graphology instance and will output a GEXF string.

// Node
var gexf = require('graphology-gexf');
// Browser
var gexf = require('graphology-gexf/browser');

// Writing the graph
var gexfString = gexf.write(graph);

// Using custom formatting for nodes & edges
var gexfString = gexf.write(graph, {
  formatNode: function (key, attributes) {
    return {
      label: attributes.label,
      attributes: {
        age: attributes.age,
        name: attributes.name
      },
      viz: {
        color: '#FF0',
        x: attributes.x,
        y: attributes.y,
        shape: 'circle',
        size: 20
      }
    };
  },
  formatEdge: function (key, attributes) {
    return {
      label: attributes.label,
      attributes: {
        number: attributes.number
      },
      weight: attributes.weight,
      viz: {
        color: '#FF0',
        x: attributes.x,
        y: attributes.y,
        shape: 'dotted',
        thickness: 20
      }
    };
  }
});

Arguments

  • graph Graph: graphology instance to write.
  • options ?object: Options:
    • encoding ?string UTF-8: encoding declaration.
    • formatNode ?function: function returning the node’s data to write.
    • formatEdge ?function: function returning the edge’s data to write.
    • pretty ?boolean true: pretty-print output?
    • pedantic ?boolean false: whether to output a stricter gexf file to make sure it can be validated using the most restrictive gexf xsd schemas. Note that the output may lose some graph attributes when doing so.
    • version ?string 1.2: gexf version to emit. Should be one of 1.2 or 1.3.

Notes

Currently, mutual (a specific gexf type for edges that is seldom used in practice) edges are parsed as undirected ones rather than two directed ones because it could produce a key conflict. An option to deal differently with this may be added in the future if it becomes a problem.