KDE 3.2 unterstützt auch einfache Skripte durch SVG-DOM (siehe Kasten “SVG und DOM”). Die Implementierung ist noch nicht vollständig, funktioniert jedoch schon ganz gut.
|
SVG und DOM |
|---|
|
DOM (Document Object Model) bezeichnet eine Hierarchie von Objekten eines Dokuments. Darüber lassen sich Elemente einer Grafik eindeutig ansprechen. DOM ist nicht auf SVG oder XML beschränkt, sondern findet sich in vielen verwandten Formaten, zum Beispiel in HTML. Das SVG-DOM ermöglicht es, die Grafik per Skript oder Programm zu verändern, aber auch die Reaktion auf Ereignisse wie zum Beispiel Mausklicks. Einige der Ereignisse, die unter SVG unterstützt werden, fasst die Tabelle 2 zusammen. Das DOM bietet außerdem Methoden und Objekte, die Elemente zur Laufzeit erzeugen. |
|
Tabelle 2: |
|
|---|---|
|
Ereignis |
Ursache |
|
onclick |
Mausklick |
|
onmousedown |
Maustaste gedrückt |
|
onmouseup |
Maustaste losgelassen |
|
onfocusin |
Element wird selektiert |
|
onfocusout |
Element wird deselektiert |
|
onmouseover |
Zeiger bewegt sich über dem Element |
Auch die Gnome-Leute waren nicht untätig. Die Entwicklung für volle SVG-Unterstützung geht voran und ist mit Gnome 2.8 geplant. Die Librsvg[7] ist eine der führenden Implementierungen des SVG-Standards. Die Bibliothek hat die Version 2.7 erreicht und enthält versuchsweise den eigenen Viewer namens »rsvg-view« sowie ein Plugin für Mozilla. Die Zeichenprogramme Sodipodi[8] und Incscape[9] nutzen SVG sogar als bevorzugtes Speicherformat, siehe Abbildung 4. Beide Projekte verwenden die Librsvg.

Abbildung 4: Inkscape bietet viele Funktionen, die Benutzer anderer Zeichenprogramme kennen. Neben (gezippten) SVGs speichert Inkscape auch Postscript und EPS.
Software-Unterstützung
SVG-Grafiken lassen sich sogar, wie in Listing 1 zu sehen ist, in einem einfachen Texteditor schreiben. Auch Skriptsprachen eignen sich gut dafür. So gibt es beispielsweise für Perl ein SVG-Modul, das die Aufgabe noch einmal vereinfacht. Grafikprogramme wie Open Office Draw und Gimp unterstützen mittlerweile ebenfalls das SVG-Format. Auch das unter Unix beliebte Grafikpaket Image Magick[10], das unter anderem die Programme »display« und »convert« enthält, hat seine SVG-Unterstützung wesentlich verbessert.
XML + XSLT = SVG
Immer mehr Datensätze werden in XML-Formaten gespeichert, die Daten besser strukturieren. Mit XSLT (extensible Stylesheet Language Transformations) lässt sich XML in andere Formate umwandeln. Damit werden auch aus XML-Daten SVG-Grafiken. Listing 2 zeigt eine XML-Datei, die Bevölkerungszahlen verschiedener Länder angibt. Über eine XSLT-Datei (»nations.xslt«, zu finden auf dem Server des Linux-Magazins[13]) wandelt ein XSLT-Prozessor die Rohdaten in ein SVG-Spaltendiagramm um. Folgender Aufruf benutzt dafür das Programm Saxon[11]:
saxon nations.xml nations_populations.xslt > populations.svg
Die erzeugte Grafik in Konqueror zeigt Abbildung 5. Unter[12] ist ein weiteres Beispiel mit SVG und XSLT mehr im Detail beschrieben.
Eine SVG-Grafik kann einen oder mehrere Pfade enthalten, die nicht direkt sichtbar sind. Sie legen stattdessen den Weg anderer Objekte wie Texte oder Animationen fest.
|
Listing 2: |
|---|
01 <?xml version="1.0" ?> 02 <!DOCTYPE nations SYSTEM "nations.dtd"> 03 <nations> 04 <caption> 05 <heading>Population</heading> 06 <subheading>In millions, broken down by nation</subheading> 07 </caption> 08 <nation> 09 <name>USA</name> 10 <population>287.7</population> 11 </nation> 12 <nation> 13 <name>Indonesia</name><c>14 <population>213.6</population> 15 </nation> 16 <nation> 17 <name>Japan</name> 18 <population>127.1</population> 19 </nation> 20 <nation> 21 <name>Germany</name> 22 <population>82.5</population> 23 </nation> 24 <nation> 25 <name>United Kingdom</name> 26 <population>59.9</population> 27 </nation> 28 </nations> |

Abbildung 5: Konqueror zeigt das Ergebnis der Umwandlung der XML-Daten aus Listing 2 über XSLT ins SVG-Format.
Zeichenpfade
Ein Pfad wird durch das »path«-Tag definiert, mit den Wegkoordinaten im Attribut »d«. Die Koordinatenpaare beginnen jeweils mit einem Buchstaben. Ein M steht für Move und verschiebt den aktuellen Punkt, ohne dass dieser Weg Teil des Pfades wird. Ein L fügt in absoluten Koordinaten einen unsichtbaren Linienzug vom letzten gesetzten Punkt zum Pfad hinzu. Der Buchstabe l macht dasselbe mit relativen Koordinaten. Das folgende Element legt einen Pfad vom Ursprung zum Punkt (100, 100) und dann zu (105, 200) an:





