DOT (grafbeskrivningsspråk)
Filnamnstillägg | .gv |
---|---|
Internet mediatyp | text/vnd.graphviz |
Typ av format | Diagrambeskrivningsspråk _ |
Öppna format ? | Ja |
DOT är ett grafbeskrivningsspråk . DOT-grafer är vanligtvis filer med filnamnstillägget gv eller dot . Tillägget gv är att föredra, för att undvika förväxling med tilläggspunkten som användes av versioner av Microsoft Word före 2007.
Olika program kan bearbeta DOT-filer. Vissa, som dot , neato , twopi , circo , fdp och sfdp , kan läsa en DOT-fil och rendera den i grafisk form. Andra, som gvpr , gc , acyclic , ccomps , sccmap och tred , läser DOT-filer och utför beräkningar på den representerade grafen. Slutligen tillhandahåller andra, som lefty , dotty och grappa , ett interaktivt gränssnitt. GVedit - verktyget kombinerar en textredigerare med icke-interaktiv bildvisare. De flesta program är en del av Graphviz- paketet eller använder det internt.
Syntax
Graftyper
Oriktade grafer
Som enklast kan DOT användas för att beskriva en oriktad graf . En oriktad graf visar enkla relationer mellan objekt, såsom vänskap mellan människor. Nyckelordet graph används för att starta en ny graf, och noder beskrivs inom hängslen. Ett dubbelt bindestreck (--) används för att visa relationer mellan noderna.
// Grafnamnet och semikolon är valfria grafnamn { a -- b -- c ; b -- d ; }
Riktade grafer
I likhet med oriktade grafer kan DOT beskriva riktade grafer , såsom flödesdiagram och beroendeträd . Syntaxen är densamma som för oriktade grafer, förutom att digraph används för att börja grafen, och en pil (->) används för att visa relationer mellan noder.
digraph graphname { a -> b -> c ; b -> d ; }
Attribut
Olika attribut kan appliceras på grafer, noder och kanter i DOT-filer. Dessa attribut kan styra aspekter som färg, form och linjestilar. placeras ett eller flera attribut-värdepar inom hakparenteser ([]) efter en sats och före semikolon (vilket är valfritt). Grafattribut anges som direkta attribut-värdepar under grafelementet, där flera attribut separeras med ett kommatecken eller med flera uppsättningar av hakparenteser, medan nodattribut placeras efter en sats som endast innehåller namnet på noden, men inte relationer mellan prickarna.
graph graphname { // Detta attribut gäller själva grafen storlek = "1,1" ; // Labelattributet kan användas för att ändra etiketten för en nod a [ label = "Foo" ]; // Här ändras nodens form. b [ form = låda ]; // Dessa kanter har båda olika linjeegenskaper a -- b -- c [ färg = blå ]; b - d [ stil = prickad ]; // [style=invis] döljer en nod. }
HTML-liknande etiketter är endast tillgängliga på versioner av Graphviz som är nyare än mitten av november 2003, i synnerhet betraktas de inte som en del av version 1.10.
Kommentarer
Dot stöder C- och C++-stil en rad kommentarer och kommentarer med flera rader . Dessutom ignorerar den rader med en nummerteckensymbol (#) som deras första tecken.
// Detta är en kommentar på en rad. /* Detta är en kommentar med flera rader. */ # Rader som denna ignoreras också.
Ett enkelt exempel
Följande är ett exempelskript som beskriver bindningsstrukturen för en etanmolekyl . Detta är en oriktad graf och innehåller nodattribut som förklarats ovan.
graf etan { C_0 - H_0 [ typ = s ]; C_0 - H_1 [ typ = s ]; C_0 - H_2 [ typ = s ]; C_0 -- C_1 [ typ = s ]; C_1 - H_3 [ typ = s ]; C_1 - H_4 [ typ = s ]; C_1 - H_5 [ typ = s ]; }
Layoutprogram
DOT-språket definierar en graf, men ger inte möjlighet att återge grafen. Det finns flera program som kan användas för att rendera, visa och manipulera grafer i DOT-språket:
Allmän
-
Graphviz – en samling CLI-verktyg och bibliotek för att manipulera och rendera grafer till olika format som SVG , PDF , PNG etc.
- dot – CLI-verktyg för konvertering mellan
.dot
och andra format
- dot – CLI-verktyg för konvertering mellan
JavaScript
- Canviz – ett JavaScript- bibliotek för att rendera DOT-filer
- d3-graphviz – ett JavaScript- bibliotek baserat på Viz.js och D3.js som återger DOT-grafer och stöder animerade övergångar mellan grafer och interaktiv grafmanipulation
- Vis.js – ett JavaScript- bibliotek som accepterar DOT som indata för nätverksgrafer.
- Viz.js – en JavaScript-port av Graphviz som ger en enkel omslag för att använda den i webbläsaren.
- hpcc-js/wasm Graphviz – ett snabbt WASM-bibliotek för Graphviz som liknar Viz.js
Java
- Gephi – en interaktiv visualiserings- och utforskningsplattform för alla typer av nätverk och komplexa system, dynamiska och hierarkiska grafer
- Grappa – en delport av Graphviz till Java
- Java med öppen källkod tillgänglig från github.com
- ZGRViewer – en DOT-visare
Övrig
- Beluging – en Python- och Google Cloud Platform -baserad visning av DOT- och Beluga-tillägg
- dot2tex – ett program för att konvertera filer från DOT till PGF/TikZ eller PSTricks , som båda renderas i LaTeX
- OmniGraffle – ett digitalt illustrationsprogram för macOS som kan importera en delmängd av DOT, som producerar ett redigerbart dokument (men resultatet kan inte exporteras tillbaka till DOT)
- Tulip – ett mjukvaruramverk i C++ som kan importera DOT-filer för analys
- VizierFX – ett Apache Flex- grafrenderingsbibliotek i ActionScript
Begränsningar
Medan DOT-formatet tillåter användaren att specificera layoutdetaljer via positionsattribut, förlitar sig de flesta verktyg på automatiserade layoutalgoritmer. Dessa algoritmer är bästa ansträngningar och ger ibland oönskade resultat.
Till exempel:
Koddigraf | |
---|---|
g { nod [ form = klartext ] ; Al -> B1 ; A2 -> B2 ; A3 -> B3 ; A1 -> A2 [ etikett = f ]; A2 -> A3 [ etikett = g ]; B2 -> B3 [ etikett = "g'" ]; B1 -> B3 [ etikett = "(gof)'" bakport = s huvudport = s ]; { rank = samma ; A1 A2 A3 } { rank = samma ; B1 B2 B3 } }
|
|
Naturlig produktion | Redigerad utgång |
Det finns presentationsproblem i bilden med titeln "En bild som verkar felaktigt återgiven". Fyrkanten till höger är inte en perfekt kvadrat , och vissa etiketter är felinriktade med sina pilar (som (gof)').
Detta kan fixas med en vektorgrafikredigerare . I vissa fall kan detta också fixas genom att använda pos- attributet för att ange en position och viktattributet för att kvadrera grafen.
Se även
- lisp2dot- verktyg för att konvertera Lisp-programmeringsspråksliknande programträd till DOT-språk. Designad för användning med genetisk programmering .