G-Node / G-Node/python-odml

odML to graphML converter.

Abierto
#175 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
25
Forks
30
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

`graphML` [link](https://en.wikipedia.org/wiki/GraphML) is used in graphics community a lot. Here is a simple conversion code that can be used in odML. This would be helpful for importing odML to graph databases natively. Here is an example conversion that can be used as a basic starting point.

```python
"""

odml2graphml

Basic odML to graphML converter

(c) 2017 German Neuroinformatics Node (G-Node)

"""

import xml.etree.ElementTree as ET
from pygraphml import Graph
from pygraphml import GraphMLParser
import uuid

# Files
base_name = 'rg_dummy'
odml_fname = base_name + '.odml'
graphml_fname = base_name + '.graphml'

# Read odml
tree = ET.parse(odml_fname)
root = tree.getroot()

odml_graph = Graph()
child_id = 0
is_terminal_node_prev = False
prev_uuid_value = 0
prev_node = 0
is_odml_rel_node = 0
prev_tag = 'odML
for elem in tree.iter(): # iter over elements
is_terminal_node = elem.getchildren() == []
is_odml_tag = elem.tag in ['section', 'odML', 'property']
if(is_odml_tag):
uuid_value = str(uuid.uuid4()) # generate UUID for an element
node = odml_graph.add_node(uuid_value)
node["odml_entity"] = elem.tag
node["uuid"] = uuid_value
child_id = 1
is_odml_rel_node = 0
if(elem.tag == "odML"):
odml_node = node
else:
node[elem.tag] = elem.text
node["labels"] = ":reach2Grasp"
is_terminal_node_prev = is_terminal_node
if(is_odml_rel_node < 1 and child_id > 0 and is_odml_tag == True and prev_tag in ['section', 'property']):
edge = odml_graph.add_edge(prev_node, node, directed=True)
edge = odml_graph.add_edge(odml_node, node, directed=True)
edge['relation'] = 'child'
if(elem.tag in ['section', 'odML']):
is_odml_rel_node = 1
prev_node = node
prev_uuid_value = uuid_value
prev_tag = elem.tag
parser = GraphMLParser()
parser.write(odml_graph, graphml_fname)

```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.