Visualisierung von Grafen mittels Graphviz
Zeichen-Set
von Tim Schürmann
Erschienen im Linux-Magazin
2007/03
Viele Anwender zeichnen ihre Grafen und Diagramme langwierig per Hand und Malprogramm. Dass es auch schneller geht, beweist der Werkzeugkasten Graphviz. Er erzeugt aus einer kurzen textuellen Beschreibung in Sekundenschnelle eine ansehnliche und aufgeräumte Zeichnung.
In nur 15 Minuten will der Chef ein hübsches Diagramm der niegelnagelneuen Netzwerkarchitektur für eine Präsentation. Das riecht nach einem schnellen Griff zu Open Office Draw, in dem man noch schnell ein paar Kreise zusammenklickt. Das Ergebnis wirkt auch nach mehreren Korrekturversuchen recht unsymmetrisch und die Pfeile scheinen ein paar Zentimeter über dem Ziel zu schweben. Zwei Türen weiter windet sich die Entwicklungsabteilung gerade im Würgegriff eines größeren UML-Diagramms. Egal wie der Teamleiter die Klassen auch positioniert, das Ergebnis bleibt unübersichtlich.
In beiden Fällen hilft Graphviz. Die kleine Programmsammlung springt immer dann ein, wenn automatisch Grafen (siehe Kasten "Terminologie") zu zeichnen sind. Über die stolpern Computernutzer immer wieder in den unterschiedlichsten Lebenslagen. Angefangen bei Entity-Relationship-Diagrammen, die ein Datenbankschema visualisieren, bis zu hierarchischen Baumstrukturen, die Unternehmensbeteiligungen oder eine Mitarbeiterhierarchie darstellen.
Normalerweise steckt dabei jede Information in einem rechteckigen Kasten, den man anschließend möglichst geschickt und ohne Überlappungen mit anderen Kästen über Pfeile verbindet. Genau diese Aufgabe übernimmt Graphviz: Der Anwender legt nur fest, welche Elemente welche Beziehungen pflegen, und schon spuckt das Programm eine ansehnliche Zeichnung aus. Diese Festlegung findet jedoch nicht in einem hübschen grafischen Editor statt. Graphviz liest vielmehr die textuelle Beschreibung des Grafen in einer speziellen Auszeichnungssprache. Ein analoges Konzept verwendet das bekannte Latex, auch wenn die beiden Systeme sonst keine Gemeinsamkeiten aufweisen.
Graphviz liegt schon seit vielen Jahren allen gängigen Linux-Distributionen bei. Die Installation beschränkt sich somit auf ein paar Klicks im Paketmanager. Wahlweise liegt auf der Graphiz-Homepage [1] die stets letzte Version im Quelltext, den der bekannte Dreisatz »configure; make; make install« übersetzt und einspielt. In jedem Fall finden anschließend auf der Festplatte mehrere kleine Programme eine neue Heimat.
Schreib mal wieder
Bevor die Graphviz-Tools jedoch in Aktion treten, brauchen sie noch eine Beschreibung des Grafen. Hierzu erstellt der Nutzer eine Textdatei in der leicht zu lernenden Sprache DOT. Listing 1 realisiert einen einfachen gerichteten Grafen. Die Beschreibung definiert zunächst einen gerichteten Grafen mit dem Namen »G«, der drei Knoten enthält: »vater«, »sohn« und »tochter«. Im Gegensatz zu vielen anderen Programmiersprachen müssen die Knoten nicht explizit deklariert oder eingeführt sein. Es genügt, sie einfach zu verwenden.
01 digraph G {
02 /* Der Vater hat einen Sohn und eine Tochter: */
03 vater -> sohn;
04 vater -> tochter;
05 }
|
Die Pfeile legen fest, zwischen welchen Knoten eine Kante verläuft. Auch Schleifen sind erlaubt: »vater -> vater« zeigt auf sich selbst. Ein optionales Semikolon schließt jede Zeile ab. Wie an der Klammerung zu sehen ist, lehnt sich die Syntax an die Programmiersprache C an. Von dort stammt auch die Notation für Kommentare, sie stehen zwischen »/*« und »*/«.
Auf den Punkt gebracht
Die textuelle Beschreibung wandelt das mitgelieferte Werkzeug »dot« in eine Zeichnung um. Verwirrenderweise trägt es den gleichen Namen wie die Beschreibungssprache. Der folgende Befehl erzeugt beispielsweise eine PNG-Datei (Abbildung 1):
dot -Tpng beispiel1.dot -o beispiel1.png
Darüber hinaus kennt »dot« noch Postscript (Parameter »-Tps«), Jpg, Gif, Fig, SVG und einige weitere mehr oder weniger exotische Formate. Eine direkte PDF-Ausgabe ist derzeit allerdings nicht möglich. Hier hilft nur der Umweg über das Ghostscript-Werkzeug »ps2pdf«. Auf den Parameter »-o« samt Dateinamen sollte man übrigens besser nicht verzichten. Wenn diese Angabe fehlt, fließt die Ausgabe des Programms direkt in die Konsole. Analoges gilt für den Parameter »-T«, ohne den »dot« einfach nur wieder eine textuelle Beschreibung der Zeichnung auswirft.

|
Abbildung 1: Die Beschreibung aus Listing 1 führt zu diesem gerichteten Grafen.
|
Wenn in der Beschreibung andere Angaben fehlen, erzeugt »dot« ovale Knoten, die mit ihren Namen beschriftet sind. Im Beispiel soll das Familienoberhaupt jedoch mit seinem richtigen Vor- und Zunamen in einem rot ausgefüllten Rechteck erscheinen. Für derartige Änderungswünsche stehen in der DOT-Sprache einige Attribute zur Verfügung. Um eine bestimmte Eigenschaft wie die Farbe oder die Beschriftung zu ändern, erhält das zugehörige Attribut einfach einen neuen Wert:
color = red
label ="Hans Schmitt"
Diese Attribute schreibt der Anwender durch Kommata getrennt und von eckigen Klammern umschlossen hinter den Knotennamen. Im Fall des Vaters sieht dies folgendermaßen aus:
vater [shape = box, style = filled, color = red, label ="Hans Schmitt"];
Diese Zeile platziert Listing 2 nun irgendwo zwischen den geschweiften Klammern des Grafen. Empfehlenswert ist es dabei, immer das Aussehen der Knoten zu Beginn festzulegen und erst dann die Kanten zu definieren.
|
Ein Graf verbindet immer mehrere Kästchen über Linien. Die Kästchen bezeichnet man als Knoten, die Linien als Kanten. Ein gutes Beispiel für einen Grafen wäre eine Autobahnkarte: Die Städte bilden die Knoten, während die Straßen die Kanten repräsentieren. Wenn die Verbindungen als Pfeile dargestellt werden, spricht man von einem gerichteten Grafen. Fehlen die Pfeile, handelt es sich entsprechend um einen ungerichteten Grafen. Gerichtete Kanten entsprechen Einbahnstraßen, die der Fahrer nur in einer Richtung passieren darf.
Das Ganze lässt sich noch mathematisch korrekt und somit etwas kryptischer ausdrücken: Danach besteht ein (gerichteter) Graf G = (V,E) aus einer Menge von Knoten V und einer Menge von Kanten E, wobei Letztere die Paare (geordneter) Knoten in der Form e = (x,y) enthält.
|
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|