Programmieren II (WF2)

Aufgabenblatt 9: Extensible Markup Language (XML)

Aufgabe 9.1: In Kartendaten suchen mit StAX

Karte von Ulm

Die Kartendaten des OpenStreetMap-Projekts sind im XML-Format exportierbar (s. http://www.openstreetmap.org , Funktion Export).

Schreiben Sie ein Programm, das mit Hilfe der Pull-API StAX die Kartendaten nach benannten Objekten (z.B. Straßennamen) durchsuchen kann und jeweils geographische Länge (lat) und Breite (lon) ausgibt.

Hinweise:

  • Die Kartendaten für die Innenstadt Ulms finden Sie unter diesem Link. Speichern Sie die Datei beispielsweise im Wurzelverzeichnis des Projekts.
  • Im XML-Format für OpenStreetMap suchen Sie Knoten (Element node), die ein Tag name beinhalten, das den gesuchten Text enthält:
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">

  <node id="141998313" lat="48.4015880" lon="9.9755377">
    <tag k="name" v="Blaubeurer Straße"/>
  </node>

</osm>

Aufgabe 9.2: SVG-Vektorgrafiken speichern mit StAX

Das SVG (Scalable Vector Graphics)-Format ist ein XML-basiertes Dateiformat für Vektorgrafiken. Es findet insbesondere Anwendung auf Webseiten. Das Dateiformat besteht aus einzelnen Anweisungen zum Zeichnen der Grafik.

Kreis

Beispielsweise können Sie den Kreis oben durch folgende Datei definieren (und durch Öffnen mit einem Webbrowser anzeigen):

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns:svg="http://www.w3.org/2000/svg"
    xmlns="http://www.w3.org/2000/svg"
    width="200" height="200">

    <circle cx="100" cy="100" r="60" 
               style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)"/>
</svg>

Schreiben Sie ein Programm, das Ihnen eine SVG-Datei für eine Lissajous-Figur erzeugt. Nutzen Sie zur Erzeugung von XML StAX!

Eine Lissajous-Figur ist ein Kurvengraph, der sich aus harmonischen Schwingungen ergibt:

Formel Lissajous

Weitere Informationen finden Sie unter https://de.wikipedia.org/wiki/Lissajous-Figur.

Folgendes Programm in Pseudo-Code...

SET_BACKGROUND_COLOR(0,0,0); // Schwarz

int amplitude = Math.min(IMAGE_HEIGHT, IMAGE_WIDTH) / 2;

for (double t=0; t<200; t+=0.05) {
  int x = (int)(amplitude * SIN(t)) + IMAGE_WIDTH/2;
  int y = (int)(amplitude * SIN(t*0.95)) + IMAGE_HEIGHT/2;

  int radius = (int)(10*Math.cos(t));

  SET_COLOR(COS(t)*COS(t)), 0.6f , 0.3f ));

  DRAW_CIRCLE(x, y);
}

...erzeugt beispielsweise folgende Grafik...

Beispiel Lissajous

Sie können aber auch ein ganz anderes Muster zeichnen!

Weitere Informationen zu SVG finden Sie z.B. unter http://www.w3schools.com/svg/

Aufgabe 9.3: Währungsrechner mit DOM

Die Europäische Zentralbank (EZB) stellt unter

https://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html

aktuelle Wechselkurse des Euro in verschiedene Währungen zur Verfügung. Eine XML-Version erhalten Sie unter:

http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Schreiben Sie einen kleinen Währungsrechner. Dieser arbeitet auf der Konsole und erwartet Eingaben der Form <Betrag> <Ausgangswährung> in <Zielwährung>. Er gibt dann den Betrag in der Zielwährung aus.

Beispiel (rechnet 234.30 US-$ in schwedische Kronen um):

> 234.3 USD in SEK   
Ergebnis: 1 517.77 SEK

Hinweise:

  • Speichern Sie die Datei in Ihrem Projektverzeichnis und lesen Sie sie zum Programmstart mit Hilfe der JDOM-API ein.
  • Für die Umrechnung empfiehlt es sich, den Betrag immer zunächst in Euro und von dort in die Zielwährung umzurechnen. Beachten Sie auch den Sonderfall, dass Ausgangs- oder Zielwährung der Euro ist.
  • Arbeiten Sie direkt mit dem JDOM-Dokument (in einer realen Anwendung würden Sie eventuell mit einer eigenen Datenstruktur (z.B. HashMap o.ä.) arbeiten.