diff -r 7b789434b1af -r a9f8282eb6b7 lgf.dox --- a/lgf.dox Mon Feb 22 00:41:19 2010 +0100 +++ b/lgf.dox Mon Feb 22 00:42:19 2010 +0100 @@ -18,35 +18,31 @@ namespace lemon { /** -[PAGE]sec_lgf[PAGE] Input-Output for Graphs +[PAGE]sec_lgf[PAGE] LEMON Graph Format -\todo Clarify this section. +LEMON provides a versatile file format for storing graphs and related +node and arc maps. Such a format should be really flexible, it should be +able to store arbitrary number of maps of arbitrary value types. +On the other hand, the file size and the ease of processing are also critical +to support huge graphs, which is a major goal of LEMON. +These requirements forbid using complicated and deeply structured formats +like XML. That is why a compact text file format is designed for LEMON +instead of using hierarchical formats (such as GraphML, GXL or GML). -LEMON provides a versatile file format for storing graphs -and related node and arc maps. -Such a format should be really flexible, it should be able to store arbitrary -number of maps of arbitrary value types. -On the other hand, the file size and the ease of processing are also critical -to support storing huge graphs, which is a major goal of LEMON. -These requirements forbid using complicated and deeply structured formats -like XML. -That is why a compact file format is designed for LEMON instead of using -hierarchical formats, such as GraphML, GXL or GML. +The LEMON Graph Format (LGF) consists of several sections, for example a +digraph is stored in a \@nodes and an \@arcs section. +These parts use column oriented formats, each column belongs to a map in +the graph. The first line of the section associates names to these maps, +which can be used to refer them. Note that this simple idea makes it +possible to extend the files with new maps (columns) at any position +without having to modify the codes using these files. +Other data can also be added to an LGF file as individual properties +in an \@attributes section. This part can be used to specify +certain nodes or arcs, or store meta data for the file, such as copyright +notice. -The LEMON Graph Format (LGF) comprises different sections, for -example a digraph is stored in a \c @nodes and an \c @arcs -section. These parts use column oriented formats, each -column belongs to a map in the graph. The first line of the section associate -names to these maps, which can be used to refer them. -Note that this simple idea makes it possible to extend the files with -new maps (columns) at any -position without having to modify the codes using these files. - -The \c label map has special role, it must store unique values, which in turn -can be used to refer -to the nodes and arcs in the file. Finally, the first two column of the -\c @arcs section is anonymous, they indicate the source and target nodes, -respectively. +For example, a shortest path problem, which is represented as a directed +graph with some node and arc maps, can be stored in LGF format as follows. \code @nodes @@ -55,6 +51,7 @@ 1 (40,120) ... 41 (600,100) + @arcs label length 0 1 0 16 @@ -62,19 +59,21 @@ 2 12 2 20 ... 36 41 123 21 + @attributes source 0 - target 41 caption "A shortest path problem" \endcode -The \ref DigraphReader and \ref DigraphWriter classes are used -to read and write a digraph and corresponding maps. By default, a map -can be used with these classes if its value type has standard I/O -operators (\c operator<<(ostream&, T) and \c operator>>(istream&, T&)). -Otherwise, a function object -can be specified which converts the value type to \c std::string. -The above LGF file can be scanned as follows. +In the \@nodes section, the \c label map has special role, +it must store unique values, which in turn can be used to refer to the nodes +in the file. +The first two columns of the \@arcs section are anonymous, they +store the source and target nodes, respectively. + +The \ref DigraphReader and \ref DigraphWriter classes can used +to read and write data in LGF format. +For example, the above file can be read as follows. \code ListDigraph g; @@ -83,97 +82,40 @@ ListDigraph::Node src; std::string title; - digraphReader(g, std::cin) - .nodeMap("coord", coord) + digraphReader(g, "digraph.lgf") + .nodeMap("coordinate", coord) .arcMap("length", length) + .node("source", src) .attribute("caption", title) - .node("source", src) .run(); \endcode -Apart from LGF, the library can also interpret other graph -formats, such as the well-known DIMACS format or the NAUTY graph6 -format. +Note that the \ref DigraphReader class is used through the \ref digraphReader() +function with several named parameters. -