fromGXL-methods {graph}R Documentation

Methods for GXL manipulations in package graph

Description

GXL www.gupro.de/GXL is "an XML sublanguage designed to be a standard exchange format for graphs". This document describes tools in the graph package for importing GXL data to R and for writing graph data out as GXL.

Value

fromGXL currently returns a graphNEL when possible. This function is based on xmlEventParse with handlers defined in the function NELhandler. The dump() element of this handler should emit information on all children of nodes and edges; the asGraphNEL() element will return a graphNEL object with weights if child <attr> with name attribute "weights" is present for each edge element.
toGXL for an input of class "graphNEL", returns an object of class c("XMLInternalDOM", "XMLOutputStream"); see the example for how to convert this to a text stream encoding XML
dumpGXL returns an R list with all the node, edge, and named attribute information specified in the GXL stream
validateGXL returns silently (invisibly returns the parsed tree) for a DTD-compliant stream, or is otherwise very noisy

Methods

fromGXL
con = connection: returns a graphNEL based on a parsing of the GXL stream on the connection
dumpGXL
con = connection: returns an R list based on a parsing of the GXL stream on the connection
validateGXL
con = connection: checks the GXL stream against its DTD
toGXL
object = graphNEL: creates an XMLInternalDOM representing the graph in GXL

Note

At present, toGXL does not return a validating GXL stream because XML package does not properly handle the dtd and namespaces arguments to xmlTree. This is being repaired. To fix the stream, add <!DOCTYPE gxl SYSTEM "http://www.gupro.de/GXL/gxl-1.0.1.dtd"> as second record in the output.

Some structures in a graphNEL and some tags in GXL may not be handled at this time.

Note added 18 Jul 2003: It has been observed that graphviz dot2gxl generates GXL with graph attribute edgeids=FALSE. fromGXL will fail to process the edges correctly. You can manually add arbitrary edgeids to the dot2gxl output edges and fromGXL will succeed. Perhaps fromGXL can be made less dependent on edge id attributes.

Note added 15 August 2003: dot2gxl is supposed to introduce edgeids now.

Note added 15 August 2003: all GXL to be handled should possess an edgemode attribute.

Author(s)

Vince Carey <stvjc@channing.harvard.edu>

Examples

sf <- file(system.file("GXL/simpleExample.gxl", package="graph"))
show(fromGXL(sf))
print(dumpGXL(sf))
#validateGXL(sf)
#bad <- file(system.file("GXL/c2.gxl", package="graph"))
# here's how you can check if the GXL is well-formed
#
# try( validateGXL(bad) )
#
gR <- new("graphNEL", nodes=letters[1:4], edgeL=list(
 a=list(edges=4), b=list(edges=3), c=list(edges=c(2,1)), d=list(edges=1)),
 edgemode="directed")
#
# following requires that you are using XML bound with recent libxml2
#
an <- as.numeric
if (an(libxmlVersion()$major)>=2 && an(libxmlVersion()$minor)>=4)
  cat(saveXML(toGXL(gR)$value()))
wtd <- file(system.file("GXL/kmstEx.gxl", package="graph"))
wtdg <- fromGXL(wtd)
print(edgeWeights(wtdg))

[Package Contents]