Spezifikation der Semesterarbeit

07.02.2017 10:28 Uhr

Achtung!

  • Beachten Sie bitte unbedingt die Seite, die die Wertung der Semesterarbeit beschreibt und dort insbesondere auch die Regelung für die Berücksichtigung nicht abgegebener Hausarbeiten!
  • Die Testdaten finden Sie am Ende dieser Seite.

Hintergrund

Es gibt viele verschiedene Systeme für historische Persondaten. TEI (Text Encoding Initiative) ist ein wichtiger XML-basierter Standard für solche Daten. Es gibt aber auch viele andere Formate, die mehr oder weniger standardisierte sind. Hier verwenden wir ein Fragment des TEI-Standards.

An einem Uni-Institut gibt es eine große Menge an Personendaten die in TEI und einem lokale Format erfasst sind. Sie erhalten als Hilfskraft des Instituts den Auftrag, die Daten beider Formate zusammenzubringen.

Um gleichzeitig, vor der endgültigen Festlegung auf ein System, mit dem Material arbeiten zu können, erhalten Sie ferner den Auftrag auf der Basis der Daten ein „Such und Anzeigesystem“ zu programmieren.


Ausgangsformat, auf TEI basiert (Auszug):

<listPerson>
 <person xml:id="123">
 <persname>
 <forename>Paul</forename>
 <surname>Biegler</surname>
 </persname>
 </person>
 <person xml:id="124">
 <persname>
 <forename>Laura</forename>
 <surname>Manion</surname>
 </persname>
 </person>
 <person xml:id="125">
 <persname>
 <forename>Mary</forename>
 <surname>Pilant</surname>
 </persname>
 </person>
 <person xml:id="126">
 <persname>
 <forename>Parnell</forename>
 <surname>McCarthy</surname>
 </persname>
 </person>
</listPerson>

TEI Personliste enthält in diesem

Beispiel die folgenden Elemente:

  1. <listPerson>
  2. <person>
  3. <persname>
  4. <forename>
  5. <surname>

Jedes Element <person> ist mit dem Attribute xml:id identifizierbar.

Ausgangsformat Lokal (Auszug):

124 14.12.1935
126 29.03.1908
123 20.05.1908
125 25.11.1933

Zielformat

Das Zielformat ist auf TEI basiert. Das folgende zusätzliche Element:

  1. <birth>

ist in das Zielformat einzufügen. Dafür verwenden Sie das Attribut „when” für das Geburtsdatum, d.h:

<birth when=“1857-03-15″></birth>

Das einleitende Beispiel ergibt in der Ausgabe also:

<person id="123">
 <persname>
   <forename>Paul</forename>
   <surname>Biegler</surname>
 </persname>
 <birth when="1908-05-20"></birth>
</person>

Für Ihr Semesterprojekt steht Ihnen jeweils ein Auszug aus einer derartigen Datei zur Verfügung, den Sie am Ende dieser Seite abrufen können.

Anmerkung: Falls Ihnen die Codierung des Zeichensatzes (ä, ü, ß usw.) Probleme bereitet, ignorieren Sie diese.


Aufgabenstellung I

Lesen Sie diese Datei in eine geeignete Struktur ein um folgendes zu erlauben:

Benutzerin / Benutzer werden gefragt, ob „suchen“ oder „konvertieren“ gewünscht wird.
Konvertieren: Es wird nach dem Namen einer Ausgabedatei gefragt und die Daten werden in der beschriebenen Form in diese Datei geschrieben.

Wird keine weitere Funktionalität realisiert, gilt Aufgabenstellung I als erfüllt.

Aufgabenstellung II

Wie Aufgabenstellung I, zusätzlich aber:
Suchen: Benutzer / Benutzerin werden aufgefordert, eine Kategorie (z.B. forename oder birth) und den gewünschten Inhalt einzutippen.

Auf die Eingabe

Kategorie: forename
soll enthalten: Paul

reagiert Ihr Programm mit der Ausgabe des/der Eintrages/Einträge zu(r) gesuchten Person(en) in einer gut lesbar aufbereiteten Form. Danach ist das Programm für eine neue Abfrage bereit.

Dabei gilt:

  • Es reicht, wenn eine Kategorie eine eingetippte Zeichenkette an beliebiger Stelle enthält um eine Bedingung zu erfüllen.
  • Erfüllen mehrere Datensätze eine Bedingung, werden alle ausgewählten hintereinander ausgegeben.
  • Erfüllt kein Datensatz die Bedingung, wird eine entsprechende Meldung ausgegeben.
  • Die Daten müssen so gespeichert werden, dass sie jeweils nur bei Beginn des Programmaufrufs aus der Datei gelesen werden, nicht nach jeder Anfrage von BenutzerIn nochmals.

Aufgabenstellung III

Verwandeln Sie die grundsätzliche Lösung von Aufgabenstellung I und II zu einer allgemeineren, objektorientierten. Orientieren Sie sich dabei an den unter Aufgabenstellung IV beschriebenen Methoden, wobei es für Aufgabenstellung III jedoch nach wie vor reicht, wenn in jeweils einem Feld nach einem Suchterm gesucht werden kann.

Aufgabenstellung IV

Ergänzen Sie die objektorientierte Lösung von Aufgabenstellung III durch die folgenden Methoden.

  • Erweitern Sie den Dialog aus Aufgabenstellung III so, dass nach ZWEI Paaren von Kategorien / Inhalten gefragt wird und angegeben werden kann ob diese beiden Bedingungen mit „und“ oder „oder“ verknüpft werden sollen. Gibt BenutzerIn nur ein Kriterium an, wird nur danach gesucht.
  • Sie können die in den Vorlesungsfolien beschreibenden Token- und Attributklassen anwenden.
  • Definieren Sie eine Klasse „Person“.
    Ein „Person“ ist eine Karteikarte für eine Person.
  • Diese Klasse hat eine Methode „laden(…)“ mit der die Daten aus den zwei Eingabedateien (TEI sowie Lokal) geladen werden. Man könnte hier, wenn gewünscht, die Token- sowie Attributklassen verwenden.
  • eine Methode „suchePerson(…)“ mit der zwei Felder gesucht werden und
    („zwei Felder gesucht werden“ = „Forename soll ‚x‘ enthalten, Geburtsdatum soll ‚y‘ enthalten“)
  • eine Methode „zeigePerson(…)“ mit der alle Daten einer Person ausgegeben werden.
  • eine Methode „exportiere(…)“ mit der wahlweise die ganze gelesene Datei oder nur die durch den letzten Suchbefehl gefundenen Personendaten als TEI-Auszug exportiert werden.

Testdaten

nameList.zip

Viel Erfolg & Schöne Ferien!

Schlagwörter: