1============================ 2|(logo)|__ ``write_graphml`` 3============================ 4 5.. Copyright (C) 2006 Tiago de Paula Peixoto <tiago@forked.de> 6 7 Distributed under the Boost Software License, Version 1.0. (See 8 accompanying file LICENSE_1_0.txt or copy at 9 http://www.boost.org/LICENSE_1_0.txt) 10 11 Authors: Tiago de Paula Peixoto 12 13.. |(logo)| image:: ../../../boost.png 14 :align: middle 15 :alt: Boost 16 17__ ../../../index.htm 18 19:: 20 21 template<typename Graph> 22 void 23 write_graphml(std::ostream& out, const Graph& g, const dynamic_properties& dp, 24 bool ordered_vertices=false); 25 26 template<typename Graph, typename VertexIndexMap> 27 void 28 write_graphml(std::ostream& out, const Graph& g, VertexIndexMap vertex_index, 29 const dynamic_properties& dp, bool ordered_vertices=false); 30 31This is to write a BGL graph object into an output stream in the 32GraphML_ format. Both overloads of ``write_graphml`` will emit all of 33the properties stored in the dynamic_properties_ object, thereby 34retaining the properties that have been read in through the dual 35function read_graphml_. The second overload must be used when the 36graph doesn't have an internal vertex index map, which must then be 37supplied with the appropriate parameter. 38 39.. contents:: 40 41Where Defined 42------------- 43``<boost/graph/graphml.hpp>`` 44 45Parameters 46---------- 47 48OUT: ``std::ostream& out`` 49 A standard ``std::ostream`` object. 50 51IN: ``VertexListGraph& g`` 52 A directed or undirected graph. The 53 graph's type must be a model of VertexListGraph_. If the graph 54 doesn't have an internal ``vertex_index`` property map, one 55 must be supplied with the vertex_index parameter. 56 57IN: ``VertexIndexMap vertex_index`` 58 A vertex property map containing the indexes in the range 59 [0,num_vertices(g)]. 60 61 62IN: ``dynamic_properties& dp`` 63 Contains all of the vertex, edge, and graph properties that should be 64 emitted by the GraphML writer. 65 66IN: ``bool ordered_vertices`` 67 This tells whether or not the order of the vertices from vertices(g) 68 matches the order of the indexes. If ``true``, the ``parse.nodeids`` 69 graph attribute will be set to ``canonical``. Otherwise it will be 70 set to ``free``. 71 72 73 74Example 75------- 76 77This example demonstrates using BGL-GraphML interface to write 78a BGL graph into a GraphML format file. 79 80:: 81 82 enum files_e { dax_h, yow_h, boz_h, zow_h, foo_cpp, 83 foo_o, bar_cpp, bar_o, libfoobar_a, 84 zig_cpp, zig_o, zag_cpp, zag_o, 85 libzigzag_a, killerapp, N }; 86 const char* name[] = { "dax.h", "yow.h", "boz.h", "zow.h", "foo.cpp", 87 "foo.o", "bar.cpp", "bar.o", "libfoobar.a", 88 "zig.cpp", "zig.o", "zag.cpp", "zag.o", 89 "libzigzag.a", "killerapp" }; 90 91 int main(int,char*[]) 92 { 93 typedef pair<int,int> Edge; 94 Edge used_by[] = { 95 Edge(dax_h, foo_cpp), Edge(dax_h, bar_cpp), Edge(dax_h, yow_h), 96 Edge(yow_h, bar_cpp), Edge(yow_h, zag_cpp), 97 Edge(boz_h, bar_cpp), Edge(boz_h, zig_cpp), Edge(boz_h, zag_cpp), 98 Edge(zow_h, foo_cpp), 99 Edge(foo_cpp, foo_o), 100 Edge(foo_o, libfoobar_a), 101 Edge(bar_cpp, bar_o), 102 Edge(bar_o, libfoobar_a), 103 Edge(libfoobar_a, libzigzag_a), 104 Edge(zig_cpp, zig_o), 105 Edge(zig_o, libzigzag_a), 106 Edge(zag_cpp, zag_o), 107 Edge(zag_o, libzigzag_a), 108 Edge(libzigzag_a, killerapp) 109 }; 110 111 const int nedges = sizeof(used_by)/sizeof(Edge); 112 113 typedef adjacency_list< vecS, vecS, directedS, 114 property< vertex_color_t, string >, 115 property< edge_weight_t, int > 116 > Graph; 117 Graph g(used_by, used_by + nedges, N); 118 119 graph_traits<Graph>::vertex_iterator v, v_end; 120 for (tie(v,v_end) = vertices(g); v != v_end; ++v) 121 put(vertex_color_t(), g, *v, name[*v]); 122 123 graph_traits<Graph>::edge_iterator e, e_end; 124 for (tie(e,e_end) = edges(g); e != e_end; ++e) 125 put(edge_weight_t(), g, *e, 3); 126 127 dynamic_properties dp; 128 dp.property("name", get(vertex_color_t(), g)); 129 dp.property("weight", get(edge_weight_t(), g)); 130 131 write_graphml(std::cout, g, dp, true); 132 } 133 134 135The output will be: 136 137:: 138 139 <?xml version="1.0" encoding="UTF-8"?> 140 <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://graphml.graphdrawing.org/xmlns/graphml/graphml-attributes-1.0rc.xsd"> 141 <key id="key0" for="node" attr.name="name" attr.type="string" /> 142 <key id="key1" for="edge" attr.name="weight" attr.type="int" /> 143 <graph id="G" edgedefault="directed" parse.nodeids="canonical" parse.edgeids="canonical" parse.order="nodesfirst"> 144 <node id="n0"> 145 <data key="key0">dax.h</data> 146 </node> 147 <node id="n1"> 148 <data key="key0">yow.h</data> 149 </node> 150 <node id="n2"> 151 <data key="key0">boz.h</data> 152 </node> 153 <node id="n3"> 154 <data key="key0">zow.h</data> 155 </node> 156 <node id="n4"> 157 <data key="key0">foo.cpp</data> 158 </node> 159 <node id="n5"> 160 <data key="key0">foo.o</data> 161 </node> 162 <node id="n6"> 163 <data key="key0">bar.cpp</data> 164 </node> 165 <node id="n7"> 166 <data key="key0">bar.o</data> 167 </node> 168 <node id="n8"> 169 <data key="key0">libfoobar.a</data> 170 </node> 171 <node id="n9"> 172 <data key="key0">zig.cpp</data> 173 </node> 174 <node id="n10"> 175 <data key="key0">zig.o</data> 176 </node> 177 <node id="n11"> 178 <data key="key0">zag.cpp</data> 179 </node> 180 <node id="n12"> 181 <data key="key0">zag.o</data> 182 </node> 183 <node id="n13"> 184 <data key="key0">libzigzag.a</data> 185 </node> 186 <node id="n14"> 187 <data key="key0">killerapp</data> 188 </node> 189 <edge id="e0" source="n0" target="n4"> 190 <data key="key1">3</data> 191 </edge> 192 <edge id="e1" source="n0" target="n6"> 193 <data key="key1">3</data> 194 </edge> 195 <edge id="e2" source="n0" target="n1"> 196 <data key="key1">3</data> 197 </edge> 198 <edge id="e3" source="n1" target="n6"> 199 <data key="key1">3</data> 200 </edge> 201 <edge id="e4" source="n1" target="n11"> 202 <data key="key1">3</data> 203 </edge> 204 <edge id="e5" source="n2" target="n6"> 205 <data key="key1">3</data> 206 </edge> 207 <edge id="e6" source="n2" target="n9"> 208 <data key="key1">3</data> 209 </edge> 210 <edge id="e7" source="n2" target="n11"> 211 <data key="key1">3</data> 212 </edge> 213 <edge id="e8" source="n3" target="n4"> 214 <data key="key1">3</data> 215 </edge> 216 <edge id="e9" source="n4" target="n5"> 217 <data key="key1">3</data> 218 </edge> 219 <edge id="e10" source="n5" target="n8"> 220 <data key="key1">3</data> 221 </edge> 222 <edge id="e11" source="n6" target="n7"> 223 <data key="key1">3</data> 224 </edge> 225 <edge id="e12" source="n7" target="n8"> 226 <data key="key1">3</data> 227 </edge> 228 <edge id="e13" source="n8" target="n13"> 229 <data key="key1">3</data> 230 </edge> 231 <edge id="e14" source="n9" target="n10"> 232 <data key="key1">3</data> 233 </edge> 234 <edge id="e15" source="n10" target="n13"> 235 <data key="key1">3</data> 236 </edge> 237 <edge id="e16" source="n11" target="n12"> 238 <data key="key1">3</data> 239 </edge> 240 <edge id="e17" source="n12" target="n13"> 241 <data key="key1">3</data> 242 </edge> 243 <edge id="e18" source="n13" target="n14"> 244 <data key="key1">3</data> 245 </edge> 246 </graph> 247 </graphml> 248 249See Also 250-------- 251 252_read_graphml 253 254Notes 255----- 256 257 - Note that you can use GraphML file write facilities without linking 258 against the ``boost_graph`` library. 259 260.. _GraphML: http://graphml.graphdrawing.org/ 261.. _dynamic_properties: ../../property_map/doc/dynamic_property_map.html 262.. _read_graphml: read_graphml.html 263.. _VertexListGraph: VertexListGraph.html 264