Spezifikation der Semesterarbeit: Teil 1

24.07.2017 06:31 Uhr

Verarbeitung verschiedener Eingabeformaten

Die Semesterarbeit muss bis zum 15. September 2017 über WoMS eingereicht werden.

Achtung!

  • Teil 1 ist von Ihnen nur dann zu bearbeiten, wenn Sie die Semesterarbeit im Wintersemester 2016/17 nicht erfolgreich bearbeitet haben.
  • 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 Hausaufgaben!

 

Hintergrund

IMDbPy (http://imdbpy.sourceforge.net) ist ein Python Package, das es ermöglicht Daten aus der IMDb movie database zu extrahieren und in verschiedenen Formaten abzuspeichern. Dabei werden unter anderem XML, aber auch reiner Text Export unterstützt.
Um Informationen der IMDb, die in diesen unterschiedlichen Formaten abgespeichert wurden, wieder zusammen zu bringen sowie leicht anzeigbare und durchsuchbar zu machen, erhalten Sie hiermit den Auftrag, eine Anwendung zu programmieren, die ebendies ermöglicht.

Ausgangsformat XML (Auszug):

<imdb charts="30 Top Rated Movies“>
   <entry id="0109830">
       <title>Forrest Gump</title>
       <year>1994</year>
       <kind>movie</kind>
       <rating>8.8</rating>
       </entry>
   <entry id="0080684">
       <title>Star Wars: Episode V - The Empire Strikes Back</title>
       <year>1980</year>
       <kind>movie</kind>
       <rating>8.8</rating>
   </entry>
</imdb>

XML Datei enthält in diesem
Beispiel die folgenden Elemente:

  1. <imdb>
  2. <entry>
  3. <title>
  4. <year>
  5. <kind>
  6. <rating>

Das Element <imdb> verfügt dabei über das Attribut „30 Top Rated Movies“.
Jedes Element <entry> ist mit dem Attribute „id“ identifizierbar.

Ausgangsformat Lokal (Auszug):

Animation: 
Sen to Chihiro no kamikakushi (2001)
 
 
Comedy: 
Forrest Gump (1994)
La vita è bella (1997)

 

Zielformat

Das Zielformat ist XML.
Das folgende zusätzliche Element:

  1. <genres>

ist in das Zielformat einzufügen. Für jedes Genre, unter dem der IMDb Eintrag mit seinem Titel in der Text Datei gelistet ist, enthält das hinzuzufügende Element <genres> ein Kind-Element <genre> mit dem jeweiligen Genre.
Das einleitende Beispiel ergibt in der Ausgabe also:

<entry id="0109830">
    <title>Forrest Gump</title>
    <year>1994</year>
    <kind>movie</kind>
    <rating>8.8</rating>
    <genres>
        <genre>Comedy</genres>
        <genre>Drama</genres>
        <genre>Romance</genres>
    </genres>
</entry>

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

Aufgabenstellung I

Lesen Sie die Dateien in einer geeigneten Struktur ein, die folgendes erlaubt:
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. title oder genre) und den gewünschten Inhalt einzutippen.
Auf die Eingabe
Kategorie: title
soll enthalten: Star
reagiert Ihr Programm mit der Ausgabe des/der Eintrages/Einträge, die das gesuchte Schlagwort im Titel enthalten, in einer gut lesbar aufbereiteten Form:

<imdb charts="30 Top Rated Movies“ searchresults="Star">
    <entry id="0080684">
        <title>Star Wars: Episode V - The Empire Strikes Back</title>
        <year>1980</year>
        <kind>movie</kind>
        <rating>8.8</rating>
        <genres>
            <genre>Action</genres>
            <genre>Adventure</genres>
            <genre>Fantasy</genres>
            <genre>Sci-Fi</genres>
        </genres>
    </entry>
    <entry id="0076759">
        <title>Star Wars</title>
        <year>1977</year>
        <kind>movie</kind>
        <rating>8.7</rating>
        <genres>
            <genre>Action</genres>
            <genre>Adventure</genres>
            <genre>Fantasy</genres>
            <genre>Sci-Fi</genres>
        </genres>
    </entry>
</imdb>

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 beschriebenen Token- und Attributklassen anwenden.
  • Definieren Sie eine Klasse „imdbEntry“.
  • Ein „imdbEntry“ ist eine Karteikarte für einen Eintrag aus der IMDB database.
  • Diese Klasse hat eine Methode „laden(…)“, mit der die Daten aus den zwei Eingabedateien (XML sowie Text) geladen werden. Man könnte hier, wenn gewünscht, die Token- sowie Attributklassen verwenden.
  • eine Methode „sucheEintrag(…)“, mit der zwei Felder gesucht werden und
    („zwei Felder gesucht werden“ = „title soll ‚x‘ enthalten, genre soll ‚y‘ enthalten“)
  • eine Methode „zeigeEintrag(…)“, mit der alle Daten zu einem Eintrag aus der Filmdatenbank ausgegeben werden.
  • eine Methode „exportiere(…)“, mit der wahlweise die ganze gelesene Datei oder nur die durch den letzten Suchbefehl gefundenen Einträge als XML-Auszug exportiert werden.

Dateien

Semesterarbeit Teil 1.zip