Я хочу создать xml-файл из моего Boost Graph ... Итак, я использую
write_graphml Функция с dynamic_properties. Все хорошо, я получаю файл, но в структурах ребер (в сгенерированном файле) указаны неправильные идентификаторы источника и цели.
Вот пример:
<node id="n1">
<data key="key0">vertex_7</data>
<data key="key2">bf88aa63-bff1-5c04-8daf-37a5e31981f6</data>
<data key="key6">12.5</data>
<data key="key7">7.5</data>
</node>
<edge id="e1" source="n1" target="n2">
<data key="key1">edge_4_5</data>
<data key="key3">26c512cb-46d8-5eb5-8021-2aac9f492227</data>
<data key="key4">45844430-f1ea-5355-b7ce-eb566fe89256</data>
<data key="key5">ecac63d6-e531-5ce8-9578-13cb63d040de</data>
</edge>
В структуре ребер неверный идентификатор источника - это должен быть идентификатор вершины 4 (source = "n0"), а не 7 (source = "n1")
Кто-нибудь может мне помочь? Или даже дать мне подсказку, чтобы выяснить, что происходит
неправильно?
Я даже пытался создать карту свойств самостоятельно, чтобы установить UUID в качестве идентификатора (vertex- & source- / target-), но это ничего не изменило, в структуре ребер все еще есть ложные идентификаторы источника и цели ,
//boost graph definitions
struct vertex
{
float x;
float y;
std::string name;
std::string uuid;
};
struct edge
{
std::string source_v_uuid;
std::string dest_v_uuid;
std::string name;
std::string uuid;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, vertex, edge> my_graph;
//function to save graph as xml-file
void BoostGraphGenerator::saveBoostGraphAsML(my_graph graph)
{
// create file
std::ofstream ofs(filename);
// create dynamic properties for function write_graphml
boost::dynamic_properties dyn_p;
// fill vertex properties
dyn_p.property("name", get(&vertex2::name, graph));
dyn_p.property("x-value", get(&vertex2::x, graph));
dyn_p.property("y-value", get(&vertex2::y, graph));
dyn_p.property("uuid", get(&vertex2::uuid, graph));
// fill edge properties
dyn_p.property("name", get(&edge2::name, graph));
dyn_p.property("v-src-uuid", get(&edge2::source_v_uuid, graph));
dyn_p.property("v-dest-uuid", get(&edge2::source_v_uuid, graph));
dyn_p.property("uuid", get(&edge2::uuid, graph));
write_graphml(ofs, graph, dyn_p, true);
// auto map = get(&vertex2::uuid, graph);
// write_graphml(ofs, graph, map, dyn_p, true);
}