2010-02-05 9 views

risposta

2

Non credo che esista qualcosa per questo, non come pochi mesi fa quando si scherza con esso. Da quello che ho visto, ci sono 2 blocchi stradali principali:

  1. XML è gerarchico, non è possibile rappresentare facilmente i dati del grafico in questo formato.
  2. Mancanza di ID espliciti per i nodi. Anche se esistono ID impliciti, sarebbe come utilizzare ROWID in oracle per import/export ... non è garantito lo stesso.

Alcune persone hanno suggerito che GraphML sarebbe il formato corretto per questo, sono incline a concordare. Se non si dispone di strutture grafiche e si sarebbe rappresentati bene in un formato XML/gerarchico ... beh, allora è solo sfortuna. Dato che la maggior parte degli utenti che affrontano questo tipo di attività di miglioramento utilizzano dati che non vengono archiviati in questo modo, non vedo una soluzione XML in uscita ... è più probabile che prima veda un formato che supporti tutti gli usi.

+2

Non seguo esattamente il vostro punto. XML è un metalinguaggio. GraphML è semplicemente un'istanza di un linguaggio di marcatura XML, in particolare quello utilizzato per rappresentare i dati del grafico. Così è RDF e XML Topic Maps (XTM). Non vi è alcuna limitazione in XML di per sé nella rappresentazione di grafici, cioè qualsiasi linguaggio di markup SGML o XML che contenga collegamenti già lo fa. Ad esempio, DocBook ** sembra ** come un formato di documento gerarchico, ma dato che contiene collegamenti può rappresentare anche un grafico, proprio come XHTML. –

+2

(rilevato dalla regola di modifica di 5 minuti.) Come per gli ID di nodo esplicito o implicito, si tratta di un problema di implementazione. La maggior parte dei linguaggi di markup dei grafici ha già degli ID sugli elementi di livello superiore ed è possibile aggiungere xml: id a qualsiasi markup. Esportare da Neo4j a qualsiasi markup non dovrebbe essere un problema, è solo una serializzazione, come indicato da Peter Neubauer sopra. –

21

Sono d'accordo, GraphML è la strada da percorrere, se non si hanno problemi con la verbosità di XML. Un modo semplice per farlo è quello di aprire il grafico Neo4j da Gremlin, dove graphml è l'importazione di default/formato di esportazione, qualcosa come

 
peters: ./gremlin.sh 

gremlin> $_g := neo4j:open('/tmp/neo4j') 
==>neograph[/tmp/neo4j, vertices:2, edges:1] 
gremlin> g:save('graphml-export.xml') 

Come descritto here

fa che risolto il problema?

+0

il tuo link mi collega a una pagina wiki github vuota. forse intendevi questa pagina? http://github.com/tinkerpop/gremlin/wiki/Neo4j-Graph-Database – mmay

+3

Le informazioni correnti sul caricamento/salvataggio in/da Gremlin ora si trovano qui: https: // github.com/tinkerpop/gremlin/wiki/Gremlin-Methods – nawroth

+0

perché non modificare la risposta originale per correggere l'URL allora? –

20

Con Blueprints, fare semplicemente:

Graph graph = new Neo4jGraph("/tmp/mygraph"); 
GraphMLWriter.outputGraph(graph, new FileOutputStream("mygraph.xml")); 

Oppure, con Gremlin (che fa la stessa cosa nella parte posteriore):

g = new Neo4jGraph('/tmp/mygraph'); 
g.saveGraphML('mygraph.xml'); 

Infine, al costruttore per Neo4jGraph, è anche possibile passare in un'istanza GraphDatabaseService.

0

Date un'occhiata a NoSqlUnit Dispone di strumenti per la conversione di GraphML a neo4j e viceversa.

In particolare, sono presenti com.lordofthejars.nosqlunit.graph.parser.GraphMLWriter e com.lordofthejars.nosqlunit.graph.parser.GraphMLReader che leggono/scrivono file XML in/da un database neo4j.

+1

@jpp Bene, posso fare riferimento all'origine per specifici file java, ma sono classi con 100 di linee di codice, quindi non sto duplicando il codice qui. – Stewart