odML to graphML converter.

Abierto
#175 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python
Área
databases

Línea de trabajo

No se ha indicado ningún archivo ni prueba del repositorio. Comienza con el ejemplo de Python incluido e inspecciona cómo se expone la conversión de odML en este repositorio, incluidos sus puntos de entrada ET.parse, Graph y GraphMLParser. Se considera terminado cuando se haya integrado un convertidor compatible de odML a GraphML que se pueda usar para la importación en una base de datos de grafos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

graphML link 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.

"""

 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)

Lenguaje dominante
Python
Estrellas
25
Forks
30
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de G-Node/python-odml

Todos los issues de G-Node/python-odml

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.