Skip to Content

TU Wien Fakultät für Informatik DBAI Database and Artificial Intelligence Group
Top-level Navigation: Current-level Navigation:

Path: DBAI > Education > Semistrukturierte Daten > Übung > Beispiel 3

Tools: Drucken


Beispiel 3 - Memory

Java API for XML processing: SAX, DOM

Ziel der Aufgabe ist es, XML Instanzdokumente per SAX und DOM zu verarbeiten, die dem Memory Spiel Schema aus Beispiel 2 entsprechen. Mittels SAX soll aus dem XML Dokument redundante Information entfernt werden. Unter Nutzung von DOM soll anschließend diese fehlende Information korrekt generiert werden.

Nicht alle Constraints können durch das XML Schema abgedeckt werden. So kann es zB. vorkommen, dass der Spielstatus auf NONE gestellt ist, gleichzeitig aber zwei Karten aufgedeckt sind. Ein solches Spiel wäre zwar gegenüber dem XML Schema gültig, als Memory-Spiel aber klarerweise ungültig. Diese Abhängigkeiten gilt es weiters zu überprüfen.

Sie können zum Lösen der Aufgabe die von Ihnen bei Beispiel 2 erzeugten Dateien hier weiterverwenden. Beachten Sie allerdings, dass die XML Instanzen gültig nach dem XML-Schema, wie es in der Aufgabenstellung zu Beispiel 2 definiert wurde, sein müssen. Folgende XML-Datei kann ebenfalls verwendet werden: memory.xml

Laden Sie sich das Java Codegerüst herunter und vervollständigen Sie die Methoden in der Datei Beispiel3.java nach den entsprechenden Vorgaben.

Das Codegerüst enthält neben der Datei Beispiel3.java noch einen Ordner api, in welchem sich drei Java Klassen befinden, welche Sie bei der Implementierung der unten stehenden Aufgaben für DOM unterstützen. Diese können Sie bei Bedarf natürlich auch ändern, stellen Sie aber sicher, dass die ursprüngliche Funktionalität erhalten bleibt.

Für nähere Informationen wie Sie die API richtig verwenden - siehe: Memory XML API.

Kommentieren Sie Ihren Source-Code! Beim Kontrollgespräch müssen Sie in der Lage sein, die Funktionsweise des Programms zu erklären und anhand eines einfachen XML-Fragments den Programmablauf zu beschreiben.

Verwenden Sie keine absoluten Pfade in Ihrem Programm um die Lauffähigkeit auf dem Server zu gewährleisten!

Um eine Fehlerbehandlung brauchen Sie sich in dieser Übung nicht zu kümmern.

Fassen Sie nach Möglichkeit alle ihre Methoden- und Klassendefinitionen in einer einzigen Datei zusammen (siehe dazu: Generelle Tipps (DOM/SAX)).

Simple API for XML (SAX)

Vervollständigen Sie die Methode sax(String memoryXML, String filteredMemoryXML) so, dass die Datei memoryXML folgendermaßen gefiltert wird:

Das Resultat soll mittels eines Transformers in die Datei filteredMemoryXML ausgegeben werden.

Verwenden Sie zum Einlesen des Dokuments einen SAX-Parser und realisieren Sie die geforderten Änderungen mittels eines Filters.

Beachten Sie, dass die resultierende Datei gültig nach dem im Beispiel 2 gefordertem XML Schema sein muss.

Document Object Model (DOM)

Vervollständigen Sie die Methode dom(String filteredMemoryXML, String checkedMemoryXML) so, dass die Datei filteredMemoryXML folgendermaßen bearbeitet wird:

Bei der Datei filteredMemoryXML handelt es sich um die im SAX Teil erstellte Datei. In dieser befinden sich also keinesfalls mehr die Elemente covered-pairs und uncovered-pairs (falls Kindelement von game), sowie deren Kindelemente.

Diese Datei soll nun zuerst mittels DOM eingelesen und in die interne Datenstruktur Game (siehe Memory XML API) überführt werden. Rufen Sie dazu einfach den Konstruktur der Klasse Game mit dem DOM Document als Argument auf. Danach soll das dadurch erzeugte Objekt auf eine Reihe von Abhängigkeiten, die nicht durch das Schema allein sichergestellt werden können, überprüft werden. Beachten Sie, dass diese Überprüfung bereits durch die Methode isValid der Klasse Game in der API implementiert wurde. Sie brauchen diese also einfach nur aufzurufen.

Liegt ein Memory Spiel mit gültigen Abhängigkeiten vor, dann soll die durch SAX entfernte Information wieder korrekt generiert werden. Dazu müssen Sie die Elemente covered-pairs und uncovered-pairs mit ihren Kindelementen (pair) erzeugen. Die dazu nötige Information wird bereits durch die API (Methoden generateGameCoveredPairs und generateGameUncoveredPairs) zur Verfügung gestellt. Sie müssen sich also hauptsächlich auf das Einfügen mittels DOM konzentieren. Fügen Sie die erstellten Elemente vor dem players Element ein.
Das resultierende Dokument soll in die Datei checkedMemoryXML ausgegeben werden. Verwenden Sie dazu einen Transformer. Achten Sie darauf, dass die ausgegebene Datei gültig nach dem im Beispiel 2 definiertem XML Schema ist. Stellen Sie außerdem sicher, dass die Ausgabe in übersichtlich eingerückter Form vorliegen soll (siehe zB. Tipps).

Liegt ein Memory Spiel mit ungültigen Abhängigkeiten vor, dann soll lediglich eine entsprechende Fehlermeldung auf System.out ausgegeben werden.

Tipps

Memory XML API:

Generelle Tipps (DOM/SAX):

XPath

Schreiben Sie für jede der folgenden Aufgabenstellungen eine XPath-Abfrage. Verwenden Sie dazu wieder folgende XML-Datei: memory.xml

Für das Testen der XPath-Anfragen können Sie das grafische Tool XPathWay (Version 1.01) verwenden. Weitere Nutzungshinweise zu XPathWay finden Sie auf der Übungsseite. Kontrollieren Sie, ob Ihre Anfragen die richtigen Ergebnisse liefern.

XQuery

Formulieren Sie folgende Anfrage an dasselbe XML-Beispiel-Dokument, welches Sie bereits im XPath-Teil verwendet haben, mittels einer XQuery-FLWOR-Expression:

Die Ausgabe soll hiernach als XML-Fragment in folgender Form erfolgen:
<player playing-time="123">
<name>NAME</name>
<uncovered-count-column1>NUMBER OF UNCOVERED CARDS</uncovered-count-column1>
</player>
...

Hinweis: Sie müssen vor der Formulierung der FLWOR-Expression die im vorliegenden XML-Dokument verwendeten Namespaces und die zugehörigen Präfixe mit Hilfe des Schlüsselwortes declare deklarieren. Die Syntax dazu lautet:
declare namespace PREFIX="URI";

Ein Beispiel:
declare namespace xsd="http://www.w3.org/2001/XMLSchema";


Home / Kontakt / Webmaster / Offenlegung gemäß § 25 Mediengesetz: Inhaber der Website ist das Institut für Logic and Computation an der Technischen Universität Wien, 1040 Wien. Die TU Wien distanziert sich von den Inhalten aller extern gelinkten Seiten und übernimmt diesbezüglich keine Haftung. Disclaimer / Datenschutzerklärung