graph: Add Cypher backend.

* guix/graph.scm (%cypher-backend): New variable.
* doc/guix.texi: Add documentation for the Cypher backend of 'guix graph'.
This commit is contained in:
Roel Janssen 2017-05-11 16:17:49 +02:00
parent 70cb7610ca
commit 5899fafbfe
No known key found for this signature in database
GPG Key ID: C3EC1DCA843072E1
2 changed files with 34 additions and 2 deletions

View File

@ -6197,7 +6197,9 @@ provides a visual representation of the DAG. By default,
@uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
directly to the @command{dot} command of Graphviz. It can also emit an
HTML page with embedded JavaScript code to display a ``chord diagram''
in a Web browser, using the @uref{https://d3js.org/, d3.js} library.
in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
emit Cypher queries to construct a graph in a graph database supporting
the @uref{http://www.opencypher.org/, openCypher} query language.
The general syntax is:
@example

View File

@ -229,6 +229,35 @@ nodeArray.push(nodes[\"~a\"]);~%"
emit-d3js-prologue emit-d3js-epilogue
emit-d3js-node emit-d3js-edge))
;;;
;;; Cypher export.
;;;
(define (emit-cypher-prologue name port)
(format port ""))
(define (emit-cypher-epilogue port)
(format port ""))
(define (emit-cypher-node id label port)
(format port "MERGE (p:Package { id: ~s }) SET p.name = ~s;~%"
id label ))
(define (emit-cypher-edge id1 id2 port)
(format port "MERGE (a:Package { id: ~s });~%" id1)
(format port "MERGE (b:Package { id: ~s });~%" id2)
(format port "MATCH (a:Package { id: ~s }), (b:Package { id: ~s }) CREATE UNIQUE (a)-[:NEEDS]->(b);~%"
id1 id2))
(define %cypher-backend
(graph-backend "cypher"
"Generate Cypher queries."
emit-cypher-prologue emit-cypher-epilogue
emit-cypher-node emit-cypher-edge))
;;;
;;; Shared.
@ -236,7 +265,8 @@ nodeArray.push(nodes[\"~a\"]);~%"
(define %graph-backends
(list %graphviz-backend
%d3js-backend))
%d3js-backend
%cypher-backend))
(define* (export-graph sinks port
#:key