18
Diagrams as Code
(medium.com)
A community for discussion about data engineering
Icon base by Delapouite under CC BY 3.0 with modifications to add a gradient
I'm talking specifically about Mermaid. Something like DOT is slightly better. The ultimate goal is to extract the formal structure. For Mermaid or DOT, this extraction requires a text parser and a walk over an AST; it's about half of a compiler!
This might not sound like a problem compared to something like PBs or JSON, which also require something that looks like a parser and a tree-walker. The difference is in the tooling; the DOT tools can't directly yank a DAG from a file or iterate over its edges, but
jq
can do that for DAGs encoded in JSON.For a complete worked example, consider this tool which combines JSON and DOT. It produces diagrams that look like this image by building a DAG, packing the DAG into JSON, compiling the DAG to DOT, compiling the DOT into a PNG, and finally packing the JSON into a custom PNG chunk. This workflow itself is a DAG! The JSON is in the PNG:
And then I can use this tool to help write a book. In these build instructions, I call
zaha
several times to prepare some JSON, then usejq
and Python to build some tables and emit some Markdown.