Überführung bibliographischer Daten in ein XML-Datenbanksystem von Volker Wildi Bachelorarbeit Eingereicht von Volker Wildi zur Erlangung des akademischen Grades eines Bachelor of Science (B.Sc.) in Information Engineering Erstgutachter: Prof. Dr. Scholl Zweitgutachter: Prof. Dr. Deussen FB Informatik und Informationswissenschaft Universität Konstanz April, 2005 Überführung bibliographischer Daten in ein XML-Datenbanksystem Volker Wildi [email protected] Universität Konstanz, 2005 Erstgutachter: Prof. Dr. Scholl Zweitgutachter: Prof. Dr. Deussen Zusammenfassung Diese Bachelorarbeit stellt eine Lösung zur Konvertierung aus dem MAB2-Format, einem Austauschformat für deutschsprachige Bibliotheken, in das XMLFormat vor. Diese Lösung entstand im Rahmen des MedioVis-Projektes aus der Notwendigkeit einer Datenbankanbindung an der Universit ät Konstanz. MedioVis ist eine moderne Art einer Suchmaschine mit vielen Innovationen. Als erstes wurde ein Datenmodell in XML konstruiert, um die Bibliotheksdaten adäquat darin abzuspeichern. Zweitens wurden die bestehenden Bibliotheksdaten in dieses XML-Datenschema konvertiert. Als drittes wurde eine L ösung für das Einspielen der täglichen Updates der Bibliotheksdaten vorgestellt. Abschließend wurde eine Evaluation an diesem System durchgeführt. Der Einsatz von XML wurde deshalb gewählt, da neue Datenbanksysteme effizient damit umgehen können. Beispiele für solche Datenbanksysteme sind z. B. Pathfinder [4], TIMBER [17], X-Hive [21], usw. i Inhaltsverzeichnis Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i 1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Thematischer Hintergrund . . . . . . . . . . . . . . . . . . . . . . . . 1 2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1 2.2 2.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 Aufbau einer XML-Datei . . . . . . . . . . . . . . . . . . . . 3 2.1.2 Festlegung der Dokumentstruktur . . . . . . . . . . . . . . . 4 2.1.3 Entitäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Anfragen mit XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.2 Allgemeiner Aufbau . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.3 Abkürzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.4 Pfadausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.5 Prädikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Der MAB2-Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.2 Datensatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.3 Datenfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3 Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1 3.2 3.3 Konstruktion des XML-Datenschemas . . . . . . . . . . . . . . . . . 17 3.1.1 Grundstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.2 Umsetzung einzelner Datensätze in XML . . . . . . . . . . . 19 Konvertierung von MAB2 nach XML . . . . . . . . . . . . . . . . . . 21 3.2.1 Grundstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.2 Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.3 Einsatz einer Stoppwortliste . . . . . . . . . . . . . . . . . . . 24 Einfügen von Aktualisierungen . . . . . . . . . . . . . . . . . . . . . 26 ii 3.3.1 3.3.2 Allgemeiner Aufbau . . . . . . . . . . . . . . . . . . . . . . . Umsetzung in C++ . . . . . . . . . . . . . . . . . . . . . . . . 4 Leistungsmessung . . . . . . . . . . . . . . . . . . 4.1 Das eingesetzte Datenbanksystem . . . . . . 4.2 Vergleich zwischen den Formaten . . . . . . . 4.3 Typische Suchanfragen . . . . . . . . . . . . . 4.3.1 Identifizieren von typischen Anfragen 4.3.2 Erstellung von Suchanfragen . . . . . 4.3.3 Bessere Suchmöglichkeit . . . . . . . . 4.3.4 Bewertung der Suchanfragen . . . . . 4.3.5 Verbesserungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 28 33 33 34 36 36 37 41 42 43 5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Anhang A Zuordnung der XML-Tags . . . A.1 Allgemeine Felder . . . . . . . . . . A.2 Titeldatei . . . . . . . . . . . . . . . A.3 Personendatei . . . . . . . . . . . . A.4 Körperschaftsdatei . . . . . . . . . A.5 Schlagwortdatei . . . . . . . . . . . A.6 Medientypen . . . . . . . . . . . . . A.7 Schlagwortattribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 47 48 52 53 53 54 55 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 iii iv Kapitel 1 Einführung 1.1 Thematischer Hintergrund Die Idee dieser Arbeit entstand aus der Notwendigkeit für eine Datenbankanbindung der Bibliotheksdaten für das Projekt MedioVis [11] am Fachbereich MenschComputer-Interaktion von Prof. Dr. Reiterer an der Universit ät Konstanz im Jahre 2004. Bei MedioVis handelt es sich um eine grafische Benutzeroberfl äche zum Suchen und Stöbern in multimedialen Bibliotheken. Zusätzlich bietet MedioVis weitere Innovationen. Für MedioVis müssen die Mediotheksdaten aufbereitet werden, da sie in einem speziellen Format vorliegen. Die Entwicklung einer Lösung ist Gegenstand dieser Arbeit. Zu Beginn der Testphase wurde ein kleiner Datenbankabzug von knappen 10 MB in einer einfachen Textdatei gespeichert, f ür eine große Datenbank ist diese Lösung jedoch nicht anwendbar. Zu Testzwecken wurde von Seiten des MedioVis-Projekts eine PostgreSQL-Datenbank [18] aufgesetzt, die allerdings nicht alle Daten der Mediothek enthielt. Problematisch an den Daten ist, dass nicht jeder Datensatz (z. B. ein m ögliches Medium) gleich aufgebaut ist. Ein Medium in einer Bibliothek kann ein Buch, eine Zeitschrift, eine DVD oder sonst ein veröffentlichtes Werk sein. Weiter können mehrere Verfasser ein Medium verfasst haben. Würde man dieses Szenario in einer relationalen Datenbank wie PostgreSQL realisieren wollen, w ürden aufgrund der gewünschten Normalisierung, also zur Vermeidung der Abspeicherung von redundanten Daten, sehr viele Tabellen entstehen. Diese Tabellen k önnen u. U. sehr viele Nullwerte enthalten, welche sich negativ auf die Anfrageperformance auswirken. Für die Zukunft ist geplant noch weitere Datenbanken anzubinden, wie z. B. die Internet Movie Database (IMDb), diese können nicht ohne weiteres in die bestehende Datenbank eingefügt werden. 1 2 KAPITEL 1. EINFÜHRUNG Eine unstrukturierte Datei, wie z. B. Volltext, hält sich nicht an strukturelle Vorgaben. Ein solcher Text weist keinerlei Struktur auf. Im Gegensatz dazu, zeichnen sich RDBMS gerade durch ihre Strukturiertheit aus. Diese RDBMS haben folglich Probleme beim Umgang mit unstrukturierten Daten. Genau diese L ücke schließt XML praktisch, indem einzelne Textbereiche in Strukturtags gesetzt werden, um eine gewünschte Struktur zu erhalten. Diese Art der Abspeicherung wird als semistrukturiert bezeichnet. Für den komplexen Aufbau dieser bibliographischen Daten eignet sich daher XML sehr gut, da die Schemainformationen mit den Daten abgespeichert werden. Im Ausland existieren bereits erste Bestrebungen zur Umsetzung der bibliographischen Daten in das XML-Format, darunter für den nordamerikanischen Standard MARC (Machine-Readable Cataloging) mit der Bezeichnung MARCXML [15]. Dies sollte auch Motivation sein, um ebenfalls eine XML-L ösung für die deutschsprachigen Bibliotheken zu konstruieren. Es dürfte eigentlich nur noch eine Frage der Zeit sein bis sich XML als Austauschformat der Bibliotheken durchsetzen wird. All diese Gründe sprachen für den Einsatz einer XML-Datenbank für MedioVis. Somit ist nun ein weiterer Fachbereich an der Entwicklung an MedioVis beteiligt. Bei diesem Fachbereich handelt es um den Lehrstuhl Datenbanken und Informationssysteme von Prof. Dr. Scholl, welcher das Datenbank-Backend entwickelt. Die Datenbank sollte anfänglich nur die Mediotheksdaten enthalten, allerdings auch mit Ausblick auf die Erfassung der ganzen Bibliotheksdaten. Kapitel 2 Grundlagen 2.1 XML In diesem Abschnitt sollen kurz die Eigenschaften von XML (Extensible Markup Language) beschrieben werden, die dem Leser vielleicht nicht gel äufig sind und bei dieser Arbeit verwendet wurden. Die gesamte Spezifikation von XML findet sich unter [23]. 2.1.1 Aufbau einer XML-Datei Bei XML handelt es sich um ein einfaches und sehr flexibles Textformat. Ein wohlgeformtes XML-Dokument enthält einen oder mehrere Elemente, die durch die Start- und Endtags begrenzt sind, und ordentlich ineinander verschachtelt sein müssen. Die Tags können also beliebig verschachtelt werden, dürfen sich aber nicht überlappen. Es entsteht eine sehr flexible Struktur. Listing 2.1 zeigt wie eine Film-Videokassette in XML beschrieben werden könnte. Dieser Datei können noch weitere Felder hinzugefügt werden, ohne dass sie nicht mehr wohlgeformt ist, vorausgesetzt sämtliche Felder sind wohlgeformt. Soll nun die Flexibilität einer XML-Datei eingeschränkt werden, also eine bestimmte Struktur aufweisen um gültig zu sein, so müssen feste Regeln definiert werden. Diese Regeln geben die Reihenfolge der XML-Tags vor und werden in einer so genannten DTD (Document Type Definition) gespeichert. H ält sich ein wohlgeformtes XML-Dokument an die Einschränkungen aus der DTD, so wird das Dokument auch als gültig bezeichnet. 3 4 KAPITEL 2. GRUNDLAGEN Listing 2.1: Einfaches Beispiel zu XML <?xml v e r s i o n = ” 1 . 0 ” encoding = ”UTF−8” ?> <f i l m e> <vhs id=” 001 ” genre=” a c t i o n ”> < t i t e l >Bad Boys − Harte Jungs</ t i t e l > <j a h r>1996</ j a h r> <s c h a u s p i e l e r>W i l l Smith</ s c h a u s p i e l e r> <s c h a u s p i e l e r>Martin Lawrence</ s c h a u s p i e l e r> <r e g i e>Michael Bay</ r e g i e> </vhs> </ f i l m e> 2.1.2 Festlegung der Dokumentstruktur Die Regeln innerhalb der DTD werden mit Hilfe von regulären Ausdrücken definiert. Die Häufigkeit einzelner Elemente kann mit Hilfe von ’?’, ’+’ oder ’*’ nur grob eingeschränkt werden. Bei der Angabe von ’+’ oder ’*’ hinter dem Elementnamen kann keine obere Grenze angegeben werden. Falls eine weitere Einschränkung der Häufigkeitsangabe von Elementen erwünscht ist, so ist ein Übergang zu XML Schema [22] oder zu Relax NG [19] notwendig. Diese beiden Ans ätze sind recht neu und werden zur Zeit nur teilweise ausreichend unterst ützt, deshalb wurden sie bei dieser Arbeit nicht eingesetzt. Eine bessere Unterst ützung oder eine feinere Angabe der Häufigkeiten in der Zukunft könnten es notwendig machen, die bisherige DTD in eine der Alternativen zu überführen. Listing 2.2 zeigt eine Beispiel-DTD für eine Filmsammlung. Die möglichen Filme liegen auf DVD oder VHS vor. Jeder Film hat immer einen Titel, ein Ver öffentlichungsjahr, einen Regisseur, einen oder mehrere Schauspieler und vielleicht eine Angabe der Staffel, falls es sich um eine Serie handelt. Jedes Medium hat eine eindeutige Nummer und wird einfachheitshalber nur einem bestimmten Genre zugeordnet. Beide werden als Attribut beim Medientyp angegeben. 2.1.3 Entitäten Die Merkmale titel, staffel, jahr, schauspieler und regie wiederholen sich bei beiden Medientypen in der DTD, wobei dann die gleichen Zeilen stehen müssten. Bei komplexeren Elementen leidet mit der Zeit die Übersichtlichkeit. Deshalb gibt es unter XML das Konstrukt Entität. Das Schlüsselwort ENTITY hat drei verschiedene Bedeutungen. Erstens kann es zur Ersetzung von Strings dienen, wie ein #define in der Programmiersprache C bzw. C++. Zweitens als Verknüpfung mit einer anderen XML-Datei oder als 2.1. XML 5 Listing 2.2: DTD für eine Filmsammlung < ! ENTITY % A l l g F e l d e r ”titel , staffel ? , jahr , schauspieler + , regie ” > < !ELEMENT filmsammlung ( dvd | vhs ) > < !ELEMENT dvd < ! ATTLIST dvd (% A l l g F e l d e r ; ) > id ID #REQUIRED genre CDATA #REQUIRED > < !ELEMENT vhs < ! ATTLIST vhs (% A l l g F e l d e r ; ) > id ID #REQUIRED genre CDATA #REQUIRED > < !ELEMENT < !ELEMENT < !ELEMENT < !ELEMENT < !ELEMENT ( #PCDATA) ( #PCDATA) ( #PCDATA) ( #PCDATA) ( #PCDATA) titel jahr staffel regie schauspieler > > > > > Platzhalter von Nicht-XML-Daten. Im Beispiel und bei dieser Arbeit wird die erste Bedeutung benutzt. Der Zugriff auf eine vorher definierte Entität erfolgt, indem dem Namen der Entität ein ’%’ vorangestellt und am Ende ein ’;’ angehängt wird. Für die Entität AllgFelder sieht dies wie folgt aus ’%AllgFelder;’. Allerdings k önnen auch einzelne Datenfelder zu bestimmten Medientypen hinzugef ügt werden, indem an die allgemeinen Datenfelder mit dem Sequenzoperator ’,’ die erweiterten Felder angereiht werden. So könnte vielleicht auch die Angabe der Kapitel auf der DVD interessant sein und würde deshalb ein zusätzliches optionales Attribut namens kapitel bekommen. Listing 2.3 zeigt wie dies in der DTD dann aussehen w ürde. Ein Beispiel eines Datenbankauszugs zeigt Listing 2.4. Listing 2.3: Erweiterung der Attribute < !ELEMENT dvd < !ELEMENT k a p i t e l (% A l l g F e l d e r ; , k a p i t e l ? ) > ( #PCDATA) > KAPITEL 2. GRUNDLAGEN 6 Listing 2.4: XML-Beispieldokument <?xml v e r s i o n = ” 1 . 0 ” encoding = ”UTF−8” ?> < !DOCTYPE filmsammlung SYSTEM ” filmsammlung . dtd ”> <f i l m e> <vhs id=” 001 ” genre=” a c t i o n ”> < t i t e l >Bad Boys − Harte Jungs</ t i t e l > <j a h r>1996</ j a h r> <s c h a u s p i e l e r>W i l l Smith</ s c h a u s p i e l e r> <s c h a u s p i e l e r>Martin Lawrence</ s c h a u s p i e l e r> <r e g i e>Michael Bay</ r e g i e> </vhs> <dvd id=” 002 ” genre=” a c t i o n ”> < t i t e l >Blade</ t i t e l > <j a h r>1999</ j a h r> <s c h a u s p i e l e r>Wesley Snipes</ s c h a u s p i e l e r> <s c h a u s p i e l e r>Stephen D o r f f</ s c h a u s p i e l e r> <r e g i e>Stephen Norrington</ r e g i e> </dvd> </ f i l m e> 2.2 Anfragen mit XQuery Die im Bibliothekskontext auftretenden Datenbanken erfordern effektive Techniken zur Recherche in XML-Dokumenten. Hierfür ist der Einsatz der XML-Anfragesprache XML Query (XQuery) nahe liegend [16, 6]. Die bisherige Forschung in der Datenbanktechnologie brachte effiziente XQuery-Implementierungen zur XML-Verarbeitung hervor, wie z. B. Pathfinder [4], TIMBER [17] oder X-Hive [21]. Dies zeigt, dass Datenbanklösungen existieren, die riesige XML-Dokumente effizient verarbeiten können. 2.2.1 Einführung XQuery wurde 1998 durch das W3C als strikte Anfragesprache spezifiziert. Im Gegensatz zu SQL können keine neuen Relationen bzw. XML-Strukturen angelegt werden. Der Syntax von XQuery ist für XML-Umsteiger etwas gewöhnungsbedürftig, stellt sich aber nicht allzu schwierig dar. Ein integraler Bestandteil von XQuery 1.0 ist XPath 2.0 [24], wodurch ein korrekter Ausdruck in XQuery auch in XPath 2.0 gültig ist und umgekehrt. Dadurch kann in XQuery auf die meisten Funktionen von XPath 2.0 zugegriffen werden. XQuery soll einmal das werden, was SQL bei den relationalen Datenbanken heute ist. 2.2. ANFRAGEN MIT XQUERY 7 2.2.2 Allgemeiner Aufbau Eine XML-Datei ist physikalisch gesehen nur eine reine Textdatei, kann also mit einem Texteditor gelesen und bearbeitet werden. Betrachtet man aber die Verschachtelungen der einzelnen XML-Tags, entsteht dadurch eine logische Baumstruktur. Abbildung 2.1 zeigt die graphische Darstellung der XML-Datei aus Listing 2.4, wobei aber aus Gründen der Übersichtlichkeit auf die Darstellung der Attributknoten verzichtet wurde. Mit der gegebenen Baumstruktur gibt es fünf verschiedene Knotentypen zu unterscheiden. Zuerst wäre der Elementknoten zu nennen, der wiederum mehrere Kindknoten besitzen kann. Der Textknoten enthält einfachen Text und ist immer ein Blatt im Baum. Die dritte Knotenart sind die Attributknoten, diese spielen eine besondere Rolle, da sie keine Kinder des zugehörigen Elementknotens sind, sondern dem Elementknoten ’gehören’. Dies ist auch der Grund, warum die Attributknoten nicht in der Ergebnismenge der XQuery-Achsen vorkommen. Abschließend gibt es noch die Kommentarknoten und die Processing Instruction Knoten, letztere enthalten Anweisungen für die Anwendung und werden vom XMLProzessor nicht verarbeitet. Diese beiden sind ebenfalls Blattknoten im Baum. Der oberste Elementknoten in einem Baum wird als Wurzelknoten bezeichnet. In Abbildung 2.1 trägt der Wurzelknoten den Namen filme. Alle anderen Knoten sind Kindknoten von diesem Knoten. Im Beispieldokument sind das die Knoten mit der Bezeichnung Blade, 1996, Stephen Norrington usw. Zum Vergleich ist ein Verzeichnis auf einem Dateisystem auch in einer Baumstruktur aufgebaut. Ein Ordner kann mehrere Unterverzeichnisse und auch Dateien enthalten. Diese Ordner sind die Elementknoten und die einzelnen Dateien sind Blätter im Baum. Um die Stelle zu finden, wo eine bestimmte Datei abgelegt ist, ist ein Pfad anzugeben. Auf einem UNIX-System würde dieser wie folgt aussehen: /etc/modules.conf. Damit ist im Ordner etc direkt unter dem Wurzelverzeichnis ’/’ die Datei modules.conf zu finden. Allerdings kann in einem Dateisystem immer nur eine Datei mit dieser Bezeichnung existieren. In XML dagegen kann es durchaus mehrere Knoten mit der gleichen Bezeichnung geben. Wie der Zugriff auf einen mehrfach vorkommenden Knoten in XQuery erfolgt, wird im Abschnitt 2.2.5 näher beschrieben. Der Baum einer XML-Datei ist – im Gegensatz zum Dateisystem – geordnet, d. h. die Reihenfolge der XML-Knoten ist durch die Dokumentordnung vorgegeben. Die Dokumentordnung entspricht der Abarbeitung der Knoten bei einer Tiefensuche von links nach rechts. Mit anderen Worten, ist dies die Originalreihenfolge der Knoten im Dokument. In Abbildung 2.1 geben die Nummern neben Tagnamen diese Reihenfolge an. KAPITEL 2. GRUNDLAGEN 8 ancestor 3 4 titel 5 jahr 2 dvd 7 schauspieler 1 filme 13 9 schauspieler 11 regie ”Blade”6”1996” 8 ”Wesley 10”Stephen 12 ”Stephen Snipes” Dorff” Norrington” preceding descendant 14 15 titel vhs ... ”Bad Boys” following Abbildung 2.1: Baumdarstellung der XML-Datei Bei genauerer Betrachtungsweise dieser Baumstruktur fällt auf, dass diese Knoten alle miteinander in Beziehung stehen. Es gibt vier Hauptbeziehungen, die als Vorfahre-, Nachkomme-, Vorgänger- und Nachfolger-Beziehung bekannt sind. Diese Beziehungen werden in XQuery als Achsen bezeichnet. So ist z. B. der Knoten dvd ein Vorfahre (ancestor) und der Knoten Wesley Snipes ein Nachkomme (descendant) vom Knoten regie. Die beiden schauspieler-Knoten z. B. sind Vorgänger (preceding) vom Knoten regie. Nachfolger (following) sind sind z. B. die Knoten vhs und titel. Eine wichtige Beobachtung dieser vier Regionen ist, dass sie symmetrisch und disjunkt sind. Mit anderen Worten ausgedr ückt, liegen die descendant- und die ancestor-Achse sich gegenüber, genauso wie die beiden Achsen preceding und following. Jeder Knoten ist in einer – und nur in einer – der vier Regionen enthalten. Der aktuelle Knoten bezeichnet man auch als Kontextknoten. In Abbildung 2.1 sind diese vier Hauptachsen farbig eingefärbt für den Kontextknoten regie. Dabei entsprechen die Farben den Achsen ancestor, descendant, preceding und following. Tabelle 2.1 gibt einen Überblick über die insgesamt 12 Achsen von XQuery. 2.2.3 Abkürzungen Häufig benutzte Achsen können in XQuery auch abgekürzt werden. Die Achse attribute kann dadurch abgekürzt werden, indem ein ’@’ vor den Namen des Attributes gesetzt wird. Der Grund für das Zeichen ’@’ lässt sich dadurch erklären, da es als ’at’ ausgesprochen wird und daher im Wort ’attribute’ enthalten ist. Hingegen wird der Schritt descendant-or-self::node() durch ’//’ abgekürzt. Die Abkürzung für den Vaterknoten und den aktuellen Knoten werden, wie bei einem Dateisystem gewohnt, mit ’..’ und ’.’ abgek ürzt. Wird nur ein Tagname angegeben, so ist dies die Abkürzung für die child-Achse. 2.2. ANFRAGEN MIT XQUERY Achse α ancestor ancestor-or-self child descendant descendant-or-self following following-sibling parent preceding preceding-sibling self attribute 9 Erreichbare Knoten vom Kontextknoten c Alle Vorfahren von c Wie ancestor plus c Kinder von c Alle Nachkommen von c Wie descendant plus c Alle Nachfolger von c Geschwister von c in der Nachfolger-Region Vater von c Alle Vorgänger von c Geschwister von c in der Vorgänger-Region c Attribute von c Tabelle 2.1: XQuery-Achsen 2.2.4 Pfadausdrücke Eine XQuery-Anfrage besteht immer aus einem Pfadausdruck, dem Hauptkonstrukt von XQuery. Jeder Pfadausdruck besteht aus einem oder mehreren Schritten, die durch einen ’/’ getrennt sind. Ein Pfadausdruck gibt die Navigation durch den Baum an. Allgemein ausgedrückt, sieht ein Pfadausdruck wie folgt aus: s0 /s1 / . . . /sn . Absolute Pfadangaben beginnen, wie auch bei Dateisystemen, mit einem ’/’ am Anfang. Dieser Knoten wird auch als Dokumentknoten bezeichnet und ist eigentlich ein virtueller Knoten, welcher auf der Spitze jedes Dokumentes sitzt. Ein Schritt wiederum besteht aus einer Achse α und einem Knotentest ν. Der Knotentest filtert die Knoten aus, die nicht der spezifizierten Eigenschaft entsprechen. Tabelle 2.2 zeigt eine Übersicht über die verschiedenen Knotentests. Typischerweise sieht ein Schritt so aus: α0 :: ν0 /α1 :: ν1 / . . . /αn :: νn . Die beiden Knotentests ∗ (Wildcard) und Tagname werden als Namenstests bezeichnet. Die restlichen vier Knotentests werden Typentest (engl. kind test) genannt. Der Zugriff auf einen Dokumentknoten erfolgt mit der XQuery-Funktion doc, dieser wird der Name der zu öffnenden Datei übergeben. Bei den nachfolgenden Anfragen wird diese nicht mehr mit angegeben, da die Anfragen entscheidend KAPITEL 2. GRUNDLAGEN 10 Node Test ν node() ∗ Tagname t text() comment() processing-instruction(t) liefert Knoten der Art jeder Knoten, egal welchen Typs nur Elementknoten nur Elementknoten mit Bezeichnung t nur Textknoten nur Kommentarknoten nur Processing Instructions der Form <?t . . .? > Tabelle 2.2: Mögliche Knotentests ν sind und nicht die Datei, auf der sie angewendet werden. Um nun auf den Film ’Blade’ zuzugreifen, wird folgende Anfrage eingegeben: doc ( ” dok . xml ” ) /descendant : : f i l m e / c h i l d : : dvd [ c h i l d : : t i t e l / t e x t ( ) = ” Blade ” ] Das Ergebnis einer Anfrage wird als Sequenz zurückgegeben, was einer Neuerung zu XPath 1.0 entspricht. Diese Sequenz kann als einfache Liste betrachtet werden mit keinen, einem oder mehreren Elementen. Diese Elemente k önnen alle unterschiedlichen Typs sein, z. B. Knoten aus dem XML-Baum, Strings oder Zahlen. Darüber hinaus sind diese Sequenzen flach, können also nicht verschachtelt werden. Der XPath- bzw. XQuery-Prozessor würde aus der folgenden Sequenz (1, 2, 3, (”vier”, ”fünf”, ”sechs”), 4, 5) diese ’flachgeklopfte’ Sequenz machen (1, 2, 3, ”vier”, ”fünf”, ”sechs”, 4, 5) Weiter ist das Ergebnis einer Anfrage immer duplikatfrei und die Reihenfolge der zurückgegebenen Knoten erfolgt in Dokumentordnung. 2.2.5 Prädikate Wie weiter oben schon bereits erwähnt, können in einem XML-Dokument mehrere Knoten mit dem gleichen Tagnamen vorkommen. Um auf diese Knoten zuzugreifen oder eine Bedingung anzugeben, werden in XQuery so genannte Pr ädikate benutzt. Diese Prädikate werden an einen Schritt mit eckigen Klammern angefügt. Für den Schritt s und das Prädikat p würde dies wie folgt aussehen: s[p], dabei kann das Prädikat p eins von drei möglichen Typen sein. 2.3. DER MAB2-STANDARD 11 Ist p ein numerischer Ausdruck, wobei p ≥ 1 ist, dann würde der p − te Knoten der Sequenz des Schrittes s zurückgegeben, falls dieser überhaupt existiert. Dabei gilt es zu beachten, dass bei Rückwärts-Achsen, wie z. B. ancestor, preceding oder parent, die Nummerierung rückwärts erfolgt. Bei obigem Beispiel spielen immer mehrere Schauspieler mit. Um nun alle Schauspieler aufzulisten, die an zweite Stelle angegeben worden sind, lautet die XQuery-Anfrage: /child : : filme/child : : ∗ / schauspieler [ 2 ] Handelt es sich bei p um einen boolschen Ausdruck, dann werden nur die Kontextknoten zurückgegeben, bei dem der Ausdruck p wahr ist. Die nachfolgende Anfrage listet alle Filmtitel auf, die im Jahre 1999 veröffentlicht wurden. / c h i l d : : f i l m e / c h i l d : : ∗ [ c h i l d : : j a h r = 1999]/ c h i l d : : t i t e l Ist p ein Pfadausdruck, dann wird jeder Kontextknoten c vom Schritt s zur ückgeliefert, falls der Pfadausdruck p mindestens einen Knoten enth ält. Das nachfolgende Listing soll dies besser verdeutlichen, da es alle Filme ausgibt, die eine Staffelangabe besitzen, also Serien sind. / c h i l d : : f i l m e / c h i l d : : ∗ [ c h i l d : : s t a f f e l ]/ c h i l d : : t i t e l Beim Einsatz von Prädikaten ist besonders darauf zu achten, dass diese eine höhere Priorität haben, weshalb sie auf den Schritt angewendet werden und nicht auf den ganzen Pfadausdruck. Somit gilt: /s0 /s1 [p] 6= (/s0 /s1 )[p] 2.3 Der MAB2-Standard 2.3.1 Einführung Die Daten der Bibliothek sind im so genannten MAB2-Format (Maschinelles Austauschformat für Bibliotheken, Version 2) [13] gespeichert. Die Version 2 l öste im Jahre 1995, nach zweijähriger Entwicklungszeit, die Version 1 von 1972 ab. Es erhielt alle notwendigen inhaltlichen, strukturellen und technischen Erweiterungen, um auch in Online-Umgebungen eingesetzt werden zu können. So sind z. B. ein neuer Zeichensatz, neue Strukturen und Segmente hinzugekommen und die Satztypen in der Titeldatei wurden gekürzt. KAPITEL 2. GRUNDLAGEN 12 Dieses MAB2-Format ist das Standardformat deutschsprachiger Bibliotheken und wurde von der DDB (Die Deutsche Bibliothek) [7] in Frankfurt am Main spezifiziert. Es dient primär als Austauschformat der Bibliotheken untereinander, um auch gespeicherte bibliographische Daten, Norm- und Lokaldaten weiterzugeben. Dieser Standard wird heute noch immer durch den MAB-Ausschuss, einer Expertengruppe der DDB gepflegt und weiterentwickelt. Das zeigt sich daran, dass im Jahre 2002 die vierte Ergänzung ausgeliefert wurde. Die Leitung dieses Ausschusses hat die DDB, die aus Vertretern der wichtigsten Einrichtungen des deutschen Bibliothekswesens besteht. Aber es steht jedem MAB-Anwender zu, Anträge auf Änderung oder Erweiterung zu stellen. Dies könnten zusätzliche Anforderungen durch neue Medientypen, die Unicode-Umstellung oder neue Funktionalitäten, wie Verbundleihe, sein [12]. Heutzutage besteht MAB2 aus fünf einzelnen Datenformaten: • MAB-Format für bibliographische Daten (MAB-TITEL) • MAB-Format für Personennamen (MAB-PND) • MAB-Format für Körperschaftsnamen (MAB-GKD) • MAB-Format für Schlagwörter (MAB-SWD) • MAB-Format für Lokaldaten (MAB-LOKAL) und zwei weiteren provisorischen MAB2-Formaten: • MAB-Format für Adress- und Bibliotheksdaten (MAB-ADRESS) • MAB-Format für Klassifikations- und Notationsdaten (MAB-NOTAT) Die Dateinamen der einzelnen MAB2-Formate eines Datenbankabzugs unterscheiden sich nur in ihrer Dateiendung. So trägt die Titeldatei die Dateiendung ’t’ und die Körperschaftsdatei ein ’k’. Für die restlichen Dateien wird dies analog fortgesetzt. Jedes dieser Datenformate basiert auf einer einheitlichen, integrierten und f ür alle Formate gültigen Feldstruktur. Die MAB-Dokumentation [8] definiert und verdeutlicht durch zahlreiche Beispiele die Anwendung dieses Standards. Allerdings kann diese Arbeit nur eine allgemeine Einführung in diesen Standard geben, da dieser Standard sehr komplex ist und einiges Wissen aus dem Bibliothekarswesen voraussetzt. 2.3. DER MAB2-STANDARD 13 2.3.2 Datensatz Jede der oben erwähnten MAB2-Dateien enthält mehrere Datensätze, so beinhaltet z. B. die Titeldatei Datensätze, die die erfassten Medien darstellen. Zwei Datensätze werden durch eine Leerzeile voneinander getrennt. Ein Datensatz enthält mehrere Datenfelder, welche dann die eigentlich erfassten Daten aufweisen. Listing 2.5 zeigt ein Beispiel für einen vollständigen Datensatz aus der Titeldatei. Analog dazu ist der Aufbau der anderen Dateien. Listing 2.5: Ein MAB2-Datensatz ### 00803 nM2 .01200024 h 001 00036210 029 mb 002 a19850101 003 20020823 005 n20040826 026 g8009202269 030 dz1dcr |||||17 037 zdt . 050 a ||||||||||||| 051 m |||||| 070 KNUB 070 bZRED 076 k102235 076 v3 100 Grimm , Heinrich 102 00138073 331 Deutsche Buchdruckersignete des XVI . ... 335 Geschichte , Sinngehalt und Gestaltung ... 359 Heinrich Grimm 410 Wiesbaden 412 Pressleu 425 1965 425 a1965 433 365 S . 537 SW 580 klub / ssc ; NR / L1UB ; 720 ff . bvb 675 sechzehnten 700 g00295249 AN 21410 700 g00110453 AN 21400 KAPITEL 2. GRUNDLAGEN 14 902 g 00006213 902 s 00097657 902 z 00224220 904 aSWB 907 g 00006213 907 s 00130851 907 z 00224220 909 aSWB Deutschland Druckermarke Geschichte 1500 -1600 Deutschland Verlegermarke Geschichte 1500 -1600 2.3.3 Datenfeld Jeder Datensatz im MAB2-Format hat immer den gleichen Aufbau. Er besteht aus mehreren Zeilen, wobei jede Zeile ein eigenes Feld darstellt. Die ersten drei Zeichen bzw. Zahlen werden als Feldnummer bezeichnet. Diese Feldnummer liegt im Bereich von 001 bis 999, wobei nicht alle belegt sind. Das vierte Zeichen wird als Indikator bezeichnet, da es die Feldnummer näher beschreibt. Ein leerer Indikator bedeutet, dass die Feldnummer nicht näher spezifiziert ist. Nach dem Indikator folgt das eigentliche variable Datenfeld, welches noch ein weiteres Subfeld enthalten kann. Dieses Subfeld bietet die Möglichkeit der weiteren Spezifizierung dieser Zeile. Schließlich folgt nach dem Datenfeld noch das Feldende-Zeichen (FE), dass eine Zeile abschließt. Graphisch dargestellt sieht eine Zeile wie folgt aus: Feldnummer Indikator Daten Subfeld (variabel) Daten FE Abbildung 2.2: Schematische Darstellung eines Datenfeldes Die Feldnummer 001 enthält im Datenfeld die eindeutige Identifikationsnummer dieses Datensatzes. Hingegen steht im Feld 029 mit Indikator ’m’ der Medientyp, der von der Universität Konstanz aus anderen Feldnummern ausgewertet und somit aufbereitet wird, was eine leichtere Weiterverarbeitung erm öglicht. In den Feldern 100, 104, . . . 196 stehen die Namen der 1., 2., . . . 25. Person in Ansetzungsform. Die Ansetzungsform wird vom Bibliothekar vergeben, der dieses Medium erfasst, im Gegensatz zur Vorlageform, die so erfasst wird, wie sie auf dem Medium angegeben ist. Die Feldnummern 102, 106, . . . 198 beinhalten die 2.3. DER MAB2-STANDARD Indikator c f g k p s t z 15 Bedeutung Unterschlagwort einer Ansetzungskette Körperschaftsschlagwort: Ansetzung unter dem Ortssitz Formsschlagwort geographisch-ethnographisches Schlagwort Körperschaftsschlagwort: Ansetzung unter dem Individualnamen Personenschlagwort Sachschlagwort Werktitel als Schlagwort Zeitschlagwort Tabelle 2.3: Mögliche Arten von Schlagwörtern Identifikationsnummer des zugehörigen Namens der 1., 2., . . . 25. Person. Diese Identifikationsnummer verweist auf einen Personendatensatz aus der MABPND-Datei. Bei einigen Feldnummern werden zur leichteren Lesbarkeit redundante Informationen gespeichert, wie die Feldnummern 102, 106, . . . , 198. Diese können daran erkannt werden, dass sie neben einer Identifikationsnummer noch zusätzlichen Text mit abspeichern, wie hier in den Feldern 100, 104, . . . , 196. Weitere Beispiele sind die Feldnummern 902, 907, . . . , 947, die die Schlagwortkette darstellen. Der Hauptsachtitel in der Vorlageform eines vorliegenden Mediums findet sich im Feld 331 wieder. Neben dem Hauptsachtitel gibt es noch einen Einheits- und Parallelsachtitel, die jeweils noch in Ansetzungs- und Vorlageform unterteilt sind. Der Einheitssachtitel wird bei Werken wie ’Faust’ oder dem ’Nibelungenlied’ vergeben, damit diese einheitlich erfasst werden. Hingegen werden im Parallelsachtitel weitere Sachtitel erfasst unter denen das Werk zus ätzlich gefunden werden kann. Die Informationen über den Ort und den Namen des Verlegers stehen in den Feldnummern 410 und 412. Unter der Feldnummer 425 sind die unterschiedlichen Formen des Erscheinungsjahrs zusammengefasst. In den Feldern 902, 907, . . . , 947 stehen die Verweise und die Ansetzungsformen der Schlagwörter, die mit diesem Medium verbunden sind. Der Indikator gibt an, um welche Art von Schlagwort es sich handelt. In Tabelle 2.3 werden die verschiedenen Arten aufgelistet. In diesem Datenfeld kommen zuerst zwei Leerzeichen, dann die eigentliche Identifikationsnummer des Schlagwortes mit der Länge von acht Zeichen. Anschließend folgen zwölf Leerzeichen als Trenner zu der redundanten Ansetzungsform. Dieser Abschnitt sollte nur einige Feldnummern beschreiben, da die vollst ändige Beschreibung des MAB2-Formats zwei ganze Bände füllt und dadurch den 16 KAPITEL 2. GRUNDLAGEN Rahmen dieser Arbeit überschreiten würde. Neben der vollständigen Beschreibung des MAB2-Formats existieren zusätzliche Excel-Dateien, die eine Übersicht mit kurzer Beschreibung der vom Bibliotheksservice-Zentrum Baden-W ürttemberg (BSZ) unterstützten MAB2-Datenfelder auflistet. Diese Dateien sind unter [2] im Abschnitt Konkordanzdateien zu finden. Kapitel 3 Implementierung Der Beginn dieser Arbeit bestand in der Konstruktion einer DTD, um den MAB2Standard so gut wie möglich abzubilden, da es keine existierenden Modellierungen gab, die dies adäquat lösten. Es existiert bereits eine Implementierung von der DDB, die sich MABxml nennt und unter [14] zu finden ist. Die Konvertierung, die MABxml durchführt, ist allerdings keine Modellierung im XML-Format, sondern nur eine 1:1-Überführung des MAB2-Formats in das XML-Format. Es gibt einen Elementknoten mit der Bezeichnung feld mit zwei Attributen, eins f ür die Feldnummer und eins für den Indikator. Listing 3.1: Beispieleintrag von MABxml <f e l d nr=” 335 ” ind=” ”> nach dem S t u t t g a r t e r Hutzelm ännlein von Eduart M örike </ f e l d> Diese Arbeit will die Bibliotheksdaten möglichst adäquat in XML modellieren. MABxml überführt lediglich nur die MAB2-Felder in eine XML-Datei, der Ansatz dieser Arbeit will der zugrundeliegenden Semantik besser Rechenschaft tragen, womit eine Notwendigkeit nach einem neuen XML-Datenmodell bestand. 3.1 Konstruktion des XML-Datenschemas 3.1.1 Grundstruktur Die Bibliothek Konstanz verarbeitet sechs der sieben MAB2-Formatdateien. Die wichtigsten vier MAB2-Dateien sind die Titeldatei (MAB-TITEL), die Personendatei (MAB-PND), die Körperschaftsdatei (MAB-GKD) und die Schlagwortdatei (MAB-SWD). Zuerst musste analysiert werden, wie diese vier Dateien mitaneinander verknüpft sind. Dies geschah indem in den einzelnen Datenfeldern 17 KAPITEL 3. IMPLEMENTIERUNG 18 MAB-TITEL 102 MAB-PND 202 MAB-GKD 902 MAB-SWD Abbildung 3.1: Schematische Grundstruktur der Dateien nach Verweisen auf die anderen Dateien gesucht wurde. Nachdem diese Verknüpfungspunkte gefunden waren, entstand ein erster Eindruck wie diese Dateien zusammenhängen. Erst danach konnte mit der Modellierung begonnen werden. Grafisch dargestellt sehen die Beziehungen dieser vier Dateien wie in Abbildung 3.1 aus. Die Verweise beziehen sich alle auf die Feldnummer 001 in der entsprechenden MAB2-Datei. So verweist eine Identifikationsnummer in Feld 102 auf einen Datensatz in der Personendatei mit der zugeh örigen Identifikationsnummer in Feld 001. Dies gilt selbstverständlich auch für die beiden anderen Dateien. Bei der Modellierung des Datenschemas könnte unterhalb des Tags medien eine weitere Spezifizierung, nämlich nach dem Medientyp stattfinden. So könnten alle Medien nochmals unter der Pluralbezeichnung ihres Typs unterschieden werden. Zum Beispiel würde es einen Knoten buecher geben, der alle buch-Tags enthielte. Diese Trennung der Medientypen würde die ganzen Datensätze eines bestimmten Medientyps bündeln, was sich sehr effizient auf die Suche nach einem bestimmten Medientyp auswirken würde. Dieser Ansatz hätte allerdings einen schwerwiegenden Nachteil, da die Datensätze in der Titeldatei willkürlich angeordnet sind, müssten sie für jeden Medientyp einmal gelesen werden, damit die Ausgabedatei sortiert nach den Medientypen geschrieben werden k önnte. Alternativ könnte die Titeldatei einmalig eingelesen werden und für jeden Medientyp würde eine eigene Ausgabedatei angelegt. All diese Ausgabedateien m üssten dann in die XML-Datei zusammengefügt und somit nochmals geschrieben werden. Dies erhöht unnötig die Lese- und Schreibzugriffe auf die Festplatte, was sich auf die Ausführungsgeschwindigkeit des gesamten Programms auswirken würde. Diese Lösung eignet sich aus den aufgezeigten Gründen nicht für einen effizienten Einsatz. 3.1. KONSTRUKTION DES XML-DATENSCHEMAS 19 Daher muss im Zentrum die Titeldatei stehen und die drei anderen Dateien als separate Datensätze gespeichert werden. Dies vermeidet eine redundante Speicherung, da auf diese Datensätze per Identifikationsnummer aus der Titeldatei zugegriffen werden kann. Diese Konstellation eignet sich hervorragend f ür den Aufbau eines Datenbankmodells, da die einzelnen MAB2-Dateien getrennt voneinander gespeichert werden können. In der praktischen Umsetzung wurden daher vier Kindknoten an den Wurzelknoten bibliothek angeh ängt. Diese vier Hauptknoten bzw. Sektionen tragen die Bezeichnungen medien, personen, koerperschaften und schlagwoerter. Unter dem Hauptknoten medien ist nat ürlich die Titeldatei gemeint, die ja alle erfassten Medien in willk ürlicher Reihenfolge enthält. Die Zuordnung der MAB2-Dateien zu den restlichen drei Knoten ist leicht ersichtlich. Listing 3.2 zeigt wie dies in XML umgesetzt wurde. Listing 3.2: Die vier Hauptknoten < !−− r o o t n o d e −−> < !ELEMENT b i b l i o t h e k ( medien , personen , koerperschaften , schlagwoerter ) > Nachdem die Zusammenhänge geklärt sind, geht es nun weiter mit den Gemeinsamkeiten, die alle vier Dateien verbindet. Jeder Datensatz besitzt eine eindeutige achtstellige Identifikationsnummer innerhalb einer MAB2-Datei, die in der Feldnummer 001 gespeichert ist. Des weiteren wird in jedem Datensatz gespeichert, wann dieser angelegt, korrigiert und in die Datei eingebunden bzw. transferiert wurde. Diese Daten werden dazu benutzt um zu erkennen, wann ein aktualisierter Datensatz vorliegt. Hinzu kommt noch eine Versionsnummer, die jedes Mal erhöht wird, falls eine Korrektur an diesem Datensatz durchgef ührt wurde. Die zwei anderen MAB2-Dateien sind die Lokaldatei und die Klassifikationsund Notationsdatei. Diese werden noch nicht von dieser Implementierung unterstützt, weshalb ihr Aufbau nicht näher beschrieben wird. In einer zukünftigen Implementierung werden diese beiden Dateien sehr wahrscheinlich enthalten sein. 3.1.2 Umsetzung einzelner Datensätze in XML In diesem Abschnitt soll beschrieben werden, wie die einzelnen Datens ätze in XML umgesetzt werden. Da jeder Datensatz in allen vier MAB2-Dateien eine KAPITEL 3. IMPLEMENTIERUNG 20 eindeutige Identifikationsnummer besitzt, wird diese als Attribut zum jeweiligen Elementknoten realisiert. Allerdings ist diese Identifikationsnummer immer nur innerhalb ihrer MAB2-Datei eindeutig, womit nun jede Identifikationsnummer innerhalb der ganzen XML-Datei eindeutig sein muss. Diese Eindeutigkeit der Identifikationsnummer wird durch das Voranstellen eines Buchstaben erreicht. Bei der Titeldatei wird ein ’m’ für Medium gewählt, bei den anderen drei ist es jeweils der Anfangsbuchstabe der Datei in Kleinbuchstaben, also ’p’ f ür Personen, ’k’ für Körperschaften und ein ’s’ für Schlagwörter. Weiter müssen bei XML die IDs mit einem Buchstaben, Unterstrich oder einem Doppelpunkt beginnen, deshalb wird am Anfang der Identifikationsnummer künstlich ein Buchstabe angehängt. Dieses Attribut trägt die Bezeichnung id und ist vom Typ ID, womit die Möglichkeit besteht via IDREF auf diesen Knoten zu verweisen, falls erforderlich. F ür jeden Datensatz aus den vier MAB2-Dateien existiert ein Element mit einem solchen Attribut. Die Verweise in der Titeldatei zu den enthaltenen K örperschaften, Personen oder Schlagwörter werden durch ein leeres Element realisiert, das nur ein Attribut vom Typ IDREF besitzt. Wie ein solcher Verweisknoten zu einer Körperschaft in der DTD-Spezifikation aussieht, zeigt Listing 3.3. Ein Beispiel f ür diese Vorgabe findet sich in Listing 3.4. Listing 3.3: Ausschnitt aus der DTD < !ELEMENT l k o e r p e r s c h a f t < ! ATTLIST l k o e r p e r s c h a f t EMPTY > koerpID IDREF #REQUIRED > Listing 3.4: Verweis auf Körperschaft <l k o e r p e r s c h a f t korpID=” k12345678 ” Der Elementknoten lkoerperschaft kann nur auf eine K örperschaft verweisen, da das Attribut nicht vom Typ IDREFS ist. Bei diesem Typ k önnte man mehrere Körperschaften-IDs unter diesen Knoten zusammenfassen, indem die IDs durch Leerzeichen voneinander getrennt werden. Dies wurde aber aus Gr ünden der besseren Lesbarkeit nicht umgesetzt. Im Moment wird auf die Identifikationsnummer eines Mediums noch nicht zugegriffen, aber in einer späteren Implementierung wird diese für die Abspeicherung der Exemplardaten benötigt. Dazu werden die Exemplare mit Verweis auf einen Mediendatensatz abgespeichert, weil ja die Exemplare verliehen werden. 3.2. KONVERTIERUNG VON MAB2 NACH XML 21 Ein weiterer Grundgedanke bei der Konstruktion des Datenschemas war es, so gut wie möglich zu gruppieren, dadurch können zusammengehörige Informationen auch geschlossen unter einem Begriff, realisiert durch einen Vaterknoten, zusammengefasst werden. Allerdings ist diese Entwicklung noch nicht abgeschlossen, da dies ohne das Wissen eines ausgebildeten Bibliothekars nicht adäquat realisiert werden kann. Durch die Komplexität der Daten muss diese Entwicklung sehr gründlich durchgeführt werden, indem es kontinuierlich weiterentwickelt wird. 3.2 Konvertierung von MAB2 nach XML 3.2.1 Grundstruktur Der Grundstein war mit der Konstruktion eines geeigneten XML-Datenschemas gelegt. Nun musste ein Programm implementiert werden, das die Daten von MAB2 nach XML konvertiert und die Richtigkeit der Datensätze garantiert. Die Implementierung dieses Programms wurde in C++ gelöst, da es eine objektorientierte Programmiersprache ist und auf vielen Rechnerarchitekturen verbreitet ist. Ein weiterer wichtiger Punkt war das Vorhandensein einer StringKlasse, die die textuelle Verarbeitung der ganzen Textzeilen vereinfacht. Der Einsatz einer objektorientierten Sprache ermöglicht die Erstellung des nachfolgenden Klassenmodells. Die Tatsache, dass die MAB2-Dateien den gleichen Aufbau und gemeinsame Datenfelder besitzen, verdeutlicht das folgende Klassenmodell. Zuallererst musste eine Klasse erzeugt werden, die die Gemeinsamkeiten kapselt und gleichzeitig flexibel genug ist, weitere MAB2-Dateien zu unterstützen. Dies führt zu einer besseren Übersichtlichkeit des Codes. Zu diesen Gemeinsamkeiten zählen Datenfelder, die mindestens zwei der MAB2-Dateien gemeinsam haben. Dazu gehören Datenfelder wie z. B. die SWB-spezifischen, die Datensatz- und die Ländercode-Daten. Für diese Klasse wurde die Bezeichnung CMAB2Parser gewählt. Die Eigenheiten der einzelnen MAB2-Dateien wurden jeweils in eine eigene Klasse gepackt, wobei diese als Unterklassen der Klasse CMAB2Parser abgebildet wurden. Jede Unterklasse ist f ür das Parsen ihrer Datei verantwortlich. So parst die Klasse CMAB2TitleParser die Titeldatei. Die Namen der anderen drei Klassen lauten CMAB2PersonParser, CMAB2CorporationParser und CMAB2BuzzWordParser. Der vollständige Quellcode befindet sich auf der beiliegenden CD. KAPITEL 3. IMPLEMENTIERUNG 22 Das nachfolgende Klassendiagramm veranschaulicht die wichtigsten Details noch etwas besser. Auf der beigelegten CD befinden sich alle ausf ührlichen Klassendiagramme. # + # # CMAB2Parser m strBuffer : CString ParseFile(ofstream* pFile, const string& strFileName) : bool hlpParseFieldNumber(CString& rstrLine) : bool hlpCloseDataRecord() : void CMAB2TitleParser # m mMediumtype : MediumType CMAB2CorporationParser CMAB2PersonParser CMAB2BuzzWordParser Abbildung 3.2: Klassendiagramm des Konvertierungsprogramms Die öffentlich zugängliche Methode ParseFile, die in der Basisklasse implementiert ist, regelt den Ablauf bei der Abarbeitung der einzelnen MAB2-Dateien. Zuerst werden nacheinander die einzelnen Datensätze eingelesen, indem alle Zeilen in einer doppelt verketteten linearen Liste von Strings gespeichert werden. Dies geschieht mit Hilfe der Methode hlpReadDataRecord, die als Argumente eine Datei, aus der sie lesen soll, und eine Liste, in die sie die Zeilen speichern soll, übergeben bekommt. Somit ist in der Liste ein ganzer Datensatz gespeichert, der dann weiterverarbeitet werden kann. Diese Liste enth ält immer nur einen Datensatz, womit der Speicherverbrauch in einem akzeptablen Rahmen bleibt und nicht von der Größe der Eingabedatei abhängig ist. Weiter ist eine Verarbeitung eines ganzen Datensatzes nachvollziehbarer. Jede enthaltene Zeile eines eingelesenen Datensatzes wird an die Methode hlpParseFieldNumber weitergegeben. Diese Methode ist in der Basisklasse CMAB2Parser als abstrakt deklariert, womit jede von ihr abgeleiteten Klasse eine solche Methode implementieren muss. Mit dieser Klassenmodellierung k önnen nun auch sehr leicht die noch nicht unterstützten MAB2-Formate, wie MAB-LOKAL und MAB-NOTAT, hinzugefügt werden, ohne eine Reimplementierung des Klassenmodells notwendig zu machen. Beim Hinzufügen eines dieser Formate muss 3.2. KONVERTIERUNG VON MAB2 NACH XML 23 nur eine Unterklasse von CMAB2Parser erzeugt werden, die dann die Methode hlpParseFieldNumber implementiert. Dieses Konvertierungsprogramm trägt den Namen mab2toxml und wird wie folgt aus einem Linux-System aufgerufen: ./mab2toxml -o <Datei> <MAB2-Präfix> Beim Aufruf dieses Programms müssen nicht alle MAB2-Dateien einzeln angegeben werden, da sich diese bei einem Datenbankabzug nur an der Dateiendung unterscheiden, muss nur einmal der Dateiname, der die Bezeichnung ’MAB2-Präfix’ trägt, angegeben werden. Die bei der Konvertierung erzeugte XMLDatei erhält den Namen Datei. 3.2.2 Funktionsweise Die Methode hlpParseFieldNumber verarbeitet jede Zeile eines eingelesenen Datensatzes, indem sie die Feldnummer und einen möglichen Indikator auswertet und dann das Datenfeld in einen XML-Tag schreibt. Diese Tags werden mit der Hilfsfunktion hlpBuildElementTag aus der Datei Tools.cc bewerkstelligt, wobei ihr der Name des Tags, der Inhalt und die Anzahl der Einrückungen (Tabulatoren) am Anfang der Zeile übergeben werden. Diese Methode erleichtert den Umgang mit dem Erzeugen der XML-Tags, da sie die Start- und Endtags erzeugt. Weiter besteht die Möglichkeit ihr bis zu zwei Attribute zu übergeben, da es sich um eine überladene Methode handelt. Allerdings wird der so erzeugte XML-Tag nicht direkt in die Ausgabedatei geschrieben, da dies die Anordnung innerhalb der XML-Struktur nicht gew ährleisten könnte. Die einzelnen Gruppierungen werden temporär in Variablen gespeichert, um dann am Ende eines Datensatzes alle Variablen in einer vorgegebenen Reihenfolge in den Puffer m strBuffer zu schreiben. Die einzelnen Variablen werden danach wieder geleert. All das geschieht in der abstrakten Methode hlpCloseDataRecord, die von den Unterklassen überschrieben werden muss. Damit ist gewährleistet, dass jede Unterklasse die Reihenfolge festlegt, in der sie ihre Tags in die Ausgabedatei schreibt. Es gibt Attribute, die nicht jedem Medientyp zugeordnet werden d ürfen, so kann z. B. nur der Medientyp Mikrofiche das Attribut mathematische angaben aufweisen. Dieses Feld gibt den Maßstab an und ist somit nicht bei anderen Medientypen notwendig bzw. anwendbar. Diese Überprüfung soll auf Eingabefehler hinweisen und kann somit der Ausbesserung von Fehlern dienen, die beim alten Datenformat nicht aufgefallen sind. Um dies zu erkennen wird in der Variablen 24 KAPITEL 3. IMPLEMENTIERUNG m MediumType der Medientyp gespeichert. Um nun Attribute in einem Medientyp auszuschließen, wird bei jedem Datenfeld auf diesen Medientyp gepr üft. Tritt dieser auf, so gibt die Methode hlpParseFieldNumber falsch zur ück. Die Methode ParseFile bricht in einem solchen Fehlerfall die Weiterverarbeitung des aktuellen Datensatzes ab und fährt mit dem nächsten Datensatz fort. Damit der Benutzer den fehlerhaften Datensatz korrigieren kann, wird eine entsprechende Fehlermeldung auf der Standardausgabe ausgegeben. Diese Fehlermeldung enthält neben der Identifikationsnummer des entsprechenden Datensatzes auch noch die Angabe in welcher der MAB2-Dateien dieser Fehler auftrat. Die Fehlerkorrektur kann nicht programmtechnisch durchgeführt werden, da es sich bei dem Fehler um einen Eingabefehler (Tippfehler) oder der falschen Zuweisung eines Mediumtyps handeln kann. Erfolgte diese Prüfung ohne Fehler, weist dies noch nicht auf einen fehlerfreien Datensatz hin, da es Datens ätze geben kann, die bei der Feldnummer 076 aufhören. Diese sind somit nicht gültig, da die Informationen über einen Datensatz erst bei Feldnummer 100 beginnen. Darauf wird vor dem Schreiben, in der Methode hlpWriteDataRecord, gepr üft. Verläuft diese Prüfung positiv, ist der vorliegende Datensatz gültig und kann schließlich in die Ausgabedatei geschrieben werden. Die Variable m strBuffer, die zu diesem Zeitpunkt den kompletten Datensatz im XML-Format enth ält, wird in die Datei geschrieben und dann anschließend geleert. Schlägt diese Überprüfung fehl, wird eine Fehlermeldung mit der Identifikationsnummer ausgegeben und der Aussage, dass dieser Datensatz zu kurz ist. 3.2.3 Einsatz einer Stoppwortliste In einem Titelfeld, können Wörter auftauchen, wie z. B. der, die, das, und, etc. Diese Wörter tragen nichts zum Titel bei, womit sie nicht beachtet werden sollen. Dazu werden diese Wörter im MAB2-Format in Nichtsortierzeichen (¬) gesetzt und beim Sortieren somit ausgeschlossen. Meist sind dies Stoppw örter, die entfernt werden können, da sie sehr häufig vorkommen oder keine Relevanz aufweisen. In einer Stoppwortliste werden diese Stoppwörter meist alphabetisch angegeben. Diese Stoppwörter tauchen nicht nur im Titelfeld auf, sondern auch bei Personennamen, wie z. B. ’Otto von Essen’, somit war dies Motivation genug, diese Wörter innerhalb des Konvertierungsprogramms herauszufiltern. Da der gesamte Feldinhalt vorhanden bleiben muss, wird ein weiterer XML-Tag angelegt. Dieser Tag beginnt mit Tagnamen des zu reinigenden Feldes und erh ält weiter den 3.2. KONVERTIERUNG VON MAB2 NACH XML 25 Suffix normiert’ angehängt. So würde z. B. aus dem Tag gesamttitel nach Entfernen von Stoppwörtern gesamttitel normiert werden. Auf den ersten Blick erscheint diese Abspeicherung redundant zu sein, allerdings spart sie kostbare Rechenzeit, da sie im Konvertierungsprogramm nur einmal durchlaufen werden muss. Eine Suchanfrage in diesen Feldern k önnte die Bearbeitungszeit beschleunigen, da nur die relevanten W örter in diesem Tag enthalten sind. Würden diese Tags nicht redundant gespeichert, müsste bei jeder Suche die Stoppwortentfernung bei jedem Tag durchgeführt werden. Bei einer Suchanfrage muss die Stoppwortentfernung immer durchgeführt werden, aber diese ist nicht allzu lang und kostet nicht viel Rechenzeit. Die Stoppwortentfernung ist in der Methode hlpRemoveStopWords der Basisklasse implementiert. Damit diese Methode funktionieren kann, m üssen zuerst einmal Stoppwörter bekannt sein. Diese werden aus einer Datei gelesen, deren Dateiname dem Konstruktor der Unterklassen übergeben werden kann. Das Einlesen der Stoppwortliste erfolgt in der Methode hlpCreateStopWordList, wobei dieser einen Dateinamen als Parameter übergeben wird. Diese Datei enthält in jeder Zeile ein Stoppwort. Es ist sogar möglich, für jede der vier MAB2-Dateien eine eigene Stoppwortliste zu verwenden. Diese Liste wird in dem STL-Container Set gespeichert mit der Bezeichnung m setStopWordList. Dieser Container garantiert, dass jedes Element nur einmal enthalten ist. Bei einer Stoppwortliste ist es nicht maßgebend, wie oft ein Stoppwort vorkommt, sondern nur dass es enthalten ist. Allerdings ist es sehr unwahrscheinlich, dass ein Stoppwort mehrmals in einer solchen Liste vorkommt, trotzdem ist es besser diesen Container als zusätzlichen Schutz zu benutzen. Da bei einem String-Vergleich zwischen Groß-und Kleinschreibung unterschieden wird, werden die eingelesenen Stoppwörter komplett in Großbuchstaben gespeichert. Die Felder, auf die diese Stoppwortentfernung angewendet wird, werden ebenfalls zum Vergleich in Großbuchstaben umgewandelt. Beim Aufruf der Methode hlpRemoveStopWords wird als Argument ein String übergeben, aus dem dann die Stoppwörter entfernt werden sollen. Der Rückgabewert ist der bereinigte String, der nun keine Stoppwörter mehr enthält, falls dies vorher der Fall war. Enthielt der übergebene String keine Stoppwörter, so sind beide Strings identisch. Diese Methode kann überall dort im Konvertierungsprogramm benutzt werden, an denen Stoppwörter entfernt werden müssen. Beim jetzigen Stand der Implementierung werden nur die Felder Gesamttitel und Personennamen auf diese Art bereinigt. Allerdings ist für die Zukunft der Einsatz bei weiteren Feldern geplant. KAPITEL 3. IMPLEMENTIERUNG 26 3.3 Einfügen von Aktualisierungen Nach erfolgreicher Konvertierung der vier beschriebenen MAB2-Dateien kann der Datenbestand aktualisiert werden. Dazu können nicht immer die kompletten Daten umkonvertiert werden, sondern es muss eine Möglichkeit geben, Aktualisierungen bzw. Updates einzuspielen. Um diesen Aktualisierungsprozess abzusichern, wurde auch berücksichtigt, dass bei den Aktualisierungen nicht immer nur neuere Datensätze enthalten sind. Somit müssen zusätzlich noch weitere Vergleiche vorgenommen werden. Hierfür wurde ein weiteres Programm benötigt, dass die Bezeichnung bibUpdater erhielt. 3.3.1 Allgemeiner Aufbau Die täglichen Aktualisierungen sollten so schnell wie möglich eingespielt werden, da bei diesem Vorgang die gesamten Daten mindestens einmal eingelesen werden müssen. Somit war die Zielsetzung des zu konstruierenden Algorithmus die Minimierung sowohl der Ressourcen als auch der Festplattenzugriffe. Darüberhinaus sollte der Programmieraufwand und dadurch resultierende Fehlersuche ebenfalls so gering wie möglich sein. Dafür eignet sich der Einsatz einer bereits existierenden Datenbank sehr gut. In dieser Datenbank werden die Datensätze aus den Aktualisierungsdateien gespeichert, wodurch nicht nur ein Zugriff auf diese erleichtert wird, sondern auch der Datenbestand nur einmal eingelesen wird. Beim Einsatz einer Datenbank wird auch der Vergleich eines Datensatzes zwischen den beiden Datenständen ebenfalls erleichtert. Aber dazu mussten zuerst noch einige Details zur Umsetzung geklärt werden. Die erste Frage, die sich beim Einsatz einer Datenbank stellt, ist die Art der Abspeicherung der Daten. Soll nur die Identifikationsnummer des Datensatzes oder doch der ganze Datensatz abgespeichert werden? Ist diese Frage beantwortet, so muss als nächstes das Datenformat festgelegt werden, in dem sie gespeichert werden. In diesem Falle entweder im MAB2-Format oder schon im XMLFormat. In den nachfolgenden Abschnitten sollen die Antworten zu diesen Fragen gegeben werden. Wird von einem Datensatz nur die Identifikationsnummer gespeichert, ist dies sehr ressourcensparend, allerdings ist dann der Einsatz der Datenbank nutzlos, da ein Zugriff auf den Datensatz zur Folge hat, dass dieser erneut aus der Datei gelesen werden muss. Wird hingegen der Datensatz komplett im Hauptspeicher gehalten, führt dies zu einem höheren Ressourcenverbrauch. Der Zugriff 3.3. EINFÜGEN VON AKTUALISIERUNGEN 27 auf die Datensätze wird jedoch wesentlich erleichtert und bei der heutigen Speicherausstattung von mehr als 512 MB Arbeitsspeicher sollte dies nicht so schwerwiegend sein. Die Wahl der zu verwendenden Datenbank war mit der Abspeicherung eines ganzen Datensatzes nun leicht zu treffen. Es muss eine Datenbank sein, die im Hauptspeicher arbeitet und diesen nicht unnötig verschwendet. Die DatenbankBibliothek BerkeleyDB [1] von der Firma Sleepycat Software eignet sich daf ür sehr gut. Sie bietet eine Vielzahl an Programmiersprachenanbindungen an, u. a. auch für C++. Diese Bibliothek liegt in zwei Lizenzvarianten vor, einer Open-SourceLizenz bei einem Einsatz in Open-Source-Projekten und einer kostenpflichtigen Variante. Weiter unterstützt sie keine aufwendigen Anfragen, weshalb sie schnell und wenig speicherhungrig ist. Diese Datenbank greift über ein so genanntes Schlüssel-Daten-Paar auf die in ihr gespeicherten Datensätze zu. Der Schlüssel gibt an, unter welcher Bezeichnung ein bestimmter Datensatz gespeichert wird und auch wiedergefunden werden kann. Die eigentlichen Informationen über den Datensatz befinden sich im Datenfeld. Die Informationen werden unter einer anderen k ürzeren Bezeichnung abgelegt. Dies gleicht dem Konzept des STL-Containers Map (engl. Abbildung), allerdings bietet dieser keine Optimierungen an, die BerkeleyDB mitbringt. F ür die Implementierung ist diese Abbildung sehr nützlich, da ein kompletter Datensatz über seine Identifikationsnummer dargestellt wird und erleichtert somit den Zugriff auf einen aktuelleren Datensatz aus der Datenbank. Zuletzt stellt sich noch die Frage, in welchem Format die Datens ätze in der BerkeleyDB-Datenbank abgespeichert werden sollen. Das Speichern im MAB2Format reduziert den Speicherplatz, jedoch erfordert es eine Konvertierung eines aktuelleren Datensatz aus der Datenbank in XML. Dies f ührt jedoch zwei Nachteile mit sich: erstens würde es keine klare Trennung zwischen den beiden Programmen geben, da das Aktualisierungsprogramm das Konvertierungsprogramm enthalten würde. Die beiden Programme lösen unterschiedliche Aufgaben, deshalb sind sie besser getrennt zu behandeln, damit kein großes monolithisches Programm entsteht. Zweitens dient diese Aufgabentrennung der Übersichtlichkeit. Ohne diese Trennung würde dies zu einem größeren Wartungsaufwand und zu Verständnisschwierigkeiten der nachfolgenden Entwickler führen, da der Quellcode nicht mehr sauber voneinander getrennt werden kann. Diese Lösung kam deshalb nicht in Betracht. KAPITEL 3. IMPLEMENTIERUNG 28 3.3.2 Umsetzung in C++ Bei der Durchführung einer Aktualisierung muss daher zuerst das Update in XML konvertiert werden. Nach diesem Schritt entsteht ein g ültiges und wohlgeformtes XML-Dokument, das keine fehlerhaften Datens ätze mehr enthält. Die Hauptaufgabe ist nicht die Erkennung von Fehlern, welche ja schon beim Konvertierungsprozess ausgeschlossen wurden, sondern das korrekte Zusammenf ügen zweier vorher konvertierten XML-Dokumente. Nachdem nun beide XML-Dateien auf der Festplatte existieren, kann mit dem eigentlichen Update-Prozess begonnen werden. Auf Linux-Terminals sieht der Aufruf des Programms bibUpdater wie folgt aus: ./bibUpdater -d <Datei1> -u <Datei2> -o <Datei3> Datei1 ist der Dateiname des bestehenden Datenbestandes und Datei2 ist die XML-Datei, die die Aktualisierungen enthält. Datei1 stellt somit die größere der beiden Dateien dar. Da für jeden Datensatz in der Aktualisierungsdatei ein Eintrag in die BerkeleyDB-Datenbank erstellt wird, würde dies den Speicherverbrauch zusätzlich erhöhen. Das resultierende Ergebnis dieses Prozesses wird in die dritte Datei Datei3 geschrieben. Fehlt diese Option, wird die XML-Datei in die Standardausgabe geschrieben. In diesem Abschnitt sollen die Details der Implementierung beschrieben werden. Hierzu wurde wieder eine eigene Klasse geschrieben, die diesen ganzen Aktualisierungsvorgang kapselt. In einer zweiten Datei namens main.cc werden vorher noch die möglichen Kommandoparameter ausgewertet, um dann schließlich diese Klasse auszuführen. Dies geschieht mit der öffentlichen Methode UpdateDatabase, der die drei Dateinamen der Kommandozeile übergeben werden. Als erstes wird der Kopf in die neue XML-Datei geschrieben, damit die verwendete XML-Version und Zeichensatz korrekt angegeben sind. Danach werden nacheinander alle Datensätze der einzelnen vier Sektionen der Update-Datei in die BerkeleyDB-Datenbank eingelesen, dies geschieht in der Methode hlpFillDatabase. Es befinden sich also nur die Datensätze einer Sektion zur gleichen Zeit in der Datenbank. Dies hat erstens den Zweck, dass der Speicherverbrauch gering gehalten wird und zweitens ist das Ende der Sektion bekannt. Danach wird ein Datensatz aus der großen XML-Datei gelesen und in einer Variablen zwischengespeichert, das Gleiche geschieht mit der Identifikationsnummer. Als n ächstes wird in der Datenbank geprüft, ob ein Datensatz mit dieser Identifikationsnummer existiert, falls nicht, wird dieser Datensatz in die Ausgabedatei geschrieben 3.3. EINFÜGEN VON AKTUALISIERUNGEN 29 und der nächste Datensatz wird eingelesen. Gibt es jedoch einen Treffer in der Datenbank, so wird dieser ebenfalls in einer Variablen gespeichert und aus der Datenbank entfernt, danach werden die möglich vorhandenen Korrekturdaten überprüft. Falls einer der beiden kein Korrekturdatum besitzt, wird der Datensatz in die Ausgabedatei geschrieben, der das Korrekturdatum aufweist. Besitzen beide ein Korrekturdatum werden selbstverständlich beide Daten miteinander verglichen, um das neuere Datum zu finden. Falls diese Überprüfung auch noch nicht eindeutig ist, werden schließlich noch die Versionsnummern, die sich im Feld 076v befindet, miteinander verglichen. Eine höhere Nummer identifiziert den aktuelleren Datensatz. Ist schließlich das Ende einer Sektion erreicht und es befinden sich noch Datensätze in der Datenbank, dann handelt es sich bei diesen um neue Eintr äge, die alle in die Ausgabedatei geschrieben werden müssen. Danach ist die Datenbank leer und auch der Endtag der Sektion kann in die Ausgabedatei geschrieben werden. Der gesamte Vorgang wiederholt sich für alle weiteren drei Sektionen, damit enthält die Ausgabedatei am Ende alle Neuerungen. Die Datei ist wohlgeformt und gültig, da die beiden anderen Daten dies ebenfalls waren. Der Datensatz aus Listing 2.5 sieht nach der Konvertierung in das XML-Format wie in Listing 3.5 angegeben aus. Listing 3.5: Datensatz nach Konvertierung < buch id = " m00036210 " > < datensatz > < ersterfassung > < datum > 19850101 </ datum > < kennzeichen > KNUB </ kennzeichen > </ ersterfassung > < transaktionsdatum > 20040826 </ transaktionsdatum > < korrektur > < datum > 20020823 </ datum > < kennzeichen > ZRED </ kennzeichen > </ korrektur > </ datensatz > < swb > < korrekturdatum > 102235 </ korrekturdatum > < versionsnummer >3 </ versionsnummer > </ swb > < verfasser persID = " p00138073 " / > 30 KAPITEL 3. IMPLEMENTIERUNG < verlag > < ort > Wiesbaden </ ort > < name > Pressler </ name > </ verlag > < erscheinungsjahr > < vorlageform > 1965 </ vorlageform > < ansetzungsform > 1965 </ ansetzungsform > </ erscheinungsjahr > < sprachencode > < sc_swb > dt . </ sc_swb > </ sprachencode > < titel > < hauptsachtitel > < vorlageform > Deutsche Buchdruckersignete des XVI . Jahrhunderts </ vorlageform > < normiert > Deutsche Buchdruckersignete XVI . Jahrhunderts </ normiert > < zusaetze > Geschichte , Sinngehalt und Gestaltung kleiner Kulturdokumente </ zusaetze > </ hauptsachtitel > </ titel > < beschreibung > < allgemein > Heinrich Grimm </ allgemein > < kollationsvermerk > 365 S . </ kollationsvermerk > < redaktionsbemerkung > SW 580 klub / ssc ; NR / L1UB ; 720 ff . bvb </ redaktionsbemerkung > </ beschreibung > < bib_verb_bayern > 8009202269 </ bib_verb_bayern > < klassifikation > < regensburger_verbundklass > 00295249 </ regensburger_verbundklass > < regensburger_verbundklass > 00110453 </ regensburger_verbundklass > </ klassifikation > < stichwoerter > sechzehnten </ stichwoerter > < lschlagwort slgID = " s00006213 " typ = " geographisch " / > < lschlagwort slgID = " s00097657 " typ = " sach " / > 3.3. EINFÜGEN VON AKTUALISIERUNGEN < lschlagwort slgID = " s00224220 " typ = " zeit " / > < herkunftsangabe > SWB </ herkunftsangabe > < lschlagwort slgID = " s00006213 " typ = " geographisch " / > < lschlagwort slgID = " s00130851 " typ = " sach " / > < lschlagwort slgID = " s00224220 " typ = " zeit " / > < herkunftsangabe > SWB </ herkunftsangabe > </ buch > 31 32 KAPITEL 3. IMPLEMENTIERUNG Kapitel 4 Leistungsmessung Im vorherigen Kapitel wurden die Implementierungen beschrieben, wie aus einer MAB2-Datei eine XML-Datei generiert wird und mögliche Aktualisierungen nachträglich eingebunden werden. Dieses Kapitel soll nun die Geschwindigkeit der entstandenen Programme untersuchen. In einem zweiten Schritt soll die gesamte Datenbank noch anhand typischer Suchanfragen getestet werden, um einen Vergleich zur anfänglich benutzten Textdatei des MedioVis-Projekts zu ermöglichen. Allerdings gilt es zu beachten, dass kein direkter Vergleich m öglich ist, da nicht die gleichen Datenbestände vorhanden sind und der Datenbestand bei dieser Arbeit wesentlich größer ist als bei MedioVis. Die Analyse solcher Suchanfragen bietet eine realistische Bewertung bzw. Einsch ätzung des erstellten XML-Datenschemas, da nun eventuelle Modellierungsfehler sich in der Laufzeit der gestellten Suchanfragen bemerkbar machen. Diese Erkenntnisse k önnten zu einigen Nachbesserungen im Datenschema oder im Extremfall zu einer Neumodellierung führen. 4.1 Das eingesetzte Datenbanksystem Als zugrunde liegendes XQuery-System wird das Projekt Pathfinder [4] benutzt, das am Fachbereich für Datenbanken und Informationssysteme an der Universität Konstanz entwickelt wird. Pathfinder ist die Schnittstelle, an die die Suchanfragen für das Bibliotheksszenario gestellt werden. Dabei handelt es sich um das Frontend zum Datenbank-Backend MonetDB [3], welches vom CWI, dem ’Institute for Mathematics and Computer Science Research of The Netherlands’ in Amsterdam seit 1993 entwickelt wird. Diese beiden Programme sind Open-Source. Bei MonetDB handelt es sich ein Datenbanksystem, welches sich sehr gut f ür komplexe Anfragen an große Datenbanken eignet. Beide Programme kombiniert 33 KAPITEL 4. LEISTUNGSMESSUNG 34 MAB-Datei Titel Person Körperschaft Schlagwort Gesamt #Datens. MAB2 (MB) XML (MB) Faktor ØDatens. 8.089 5,48 13,23 2,41 1.715 5.236 1,00 3,03 3,03 607 1.818 0,80 1,72 2,15 994 6.167 1,83 5,17 2,83 880 21.310 9,11 23,16 2,54 1.140 Tabelle 4.1: Datensätze der kleineren Testdatei MAB-Datei Titel Person Körperschaft Schlagwort Gesamt #Datens. MAB2 (MB) XML (MB) Faktor ØDatens. 40.260 27,10 65,98 2,43 1.719 31.870 5,37 16,21 3,02 533 4.511 1,77 3,93 2,22 914 20.151 5,67 16,23 2,86 845 96.793 39,91 102,36 2,56 1.109 Tabelle 4.2: Datensätze der größeren Testdatei ergeben ein XML-Datenbanksystem, welches beim MedioVis-Projekt als zuk ünftige Datenbankschnittstelle eingesetzt werden soll. Die nachfolgenden Messungen wurden auf einem AMD Athlon64 3200+ mit 1024 MB RAM und einer SATA-Festplatte unter Gentoo Linux 2004.3 mit 64-BitUnterstützung durchgeführt. MonetDB und Pathfinder sind ebenfalls mit reiner 64-Bit-Unterstützung kompiliert worden. Beim Schreiben dieser Arbeit wurden die CVS-Versionen (April 2005) der beiden Programme verwendet. 4.2 Vergleich zwischen den Formaten In diesem Abschnitt geht es um die Leistungsmessung der entstandenen XMLDateien mit den beiden Programmen mab2toxml und bibUpdater. Bei dieser Messung standen zwei Abzüge aus der Bibliotheksdatenbank unterschiedlicher Größe zur Verfügung. Die Tabellen 4.1 und 4.2 geben einen detaillierten Überblick über die einzelnen Datensätze innerhalb der beiden MAB2-Abzügen klein und groß. Dabei gibt die zweite Spalte die Anzahl der einzelnen Datens ätze an, die erfolgreich konvertiert werden konnten. Die dritte und vierte Spalte weisen die Dateigrößen der Formate aus. Die Spalte Faktor gibt an, um wie viel die XML-Datei größer ist als die MAB2-Datei. In der letzten Spalte wird die durchschnittliche Größe eines XML-Datensatzes angegeben, um später besser die Dateigröße für die gesamten Bibliotheksdaten abschätzen zu können. Diese Größe ergibt sich, indem die Dateigröße der XML-Datei durch die Anzahl der enthaltenen Datens ätze 4.2. VERGLEICH ZWISCHEN DEN FORMATEN MAB-Datei Titel Person Körperschaft Schlagwort Gesamt 35 #Datensätze ØDatensatz (kB) XML (MB) 1.784.409 1.717 2.921,57 620.697 570 337,57 73.405 954 66,79 190.732 862 156,82 2.669.243 1026 3.482,74 Tabelle 4.3: Geschätzte Dateigrößen (Stand 14.02.2005) dividiert wird. Die letzte Zeile in der Tabelle gibt das Gesamtverh ältnis an. So benötigt der kleinere Datenbankabzug in XML konvertiert 23,16 MB auf der Festplatte. Bei der Konvertierung der beiden Testdateien war jeweils ein Titelsatz nicht konvertierbar. In der kleineren Titeldatei war der Datensatz nicht vollst ändig, da dieser beim Feld 076 zu Ende war und somit keine Informationen über ein Medium enthielt. Im Falle der größeren Datei passte ein Attribut nicht zum angegebenen Medientyp und wurde deshalb zurückgewiesen. Um eine möglichst genaue Schätzung abzugeben, wie groß die gesamten Bibliotheksdaten in XML sind, wurden für jede der vier Dateien die Mittelwerte aus der sechsten Spalte der beiden Datenbankabzüge benutzt. Tabelle 4.3 gibt neben den aktuell erfassten Datensätze der Bibliothek und den Mittelwerten der Datensatzgrößen je eine Schätzung der Dateigröße für die XML-Datei. Die Werte der dritten und vierten Spalte sind ebenfalls in Bytes angegeben. In der letzten Zeile wird die geschätzte Gesamtgröße angegeben mit 3.482,74 MB oder 3,4 GB. Diese Größenordnung stellt für Pathfinder kein Problem dar. Hierbei ist zu beachten, dass die erzeugten XML-Dateien sehr oft die gleichen Tagnamen und zur besseren Lesbarkeit viele Whitespaces enthalten. Diese kann Pathfinder sehr gut komprimieren und ermöglicht dadurch eine effiziente Datenhaltung. Abbildung 4.1 zeigt die Durchschnittszeiten grafisch dar, die mit dem LinuxKommando time gemessen wurden. Dabei geben die ersten beiden Balken die durchschnittliche Durchführungszeiten des Konvertierungsprogramms an. Hingegen zeigt der letzte Balken die Ausführungszeit an, die das Zusammenfügen der beiden XML-Dateien benötigte. Beim Zusammenfügen der beiden Dateien klein.xml und groß.xml mit dem Programm bibUpdater entstand die XML-Datei gesamt.xml mit einer Dateigr öße von 118,87 MB. Diese Datei enthält 46826 Titel-, 35890 Personen-, 5727 Körperschaften- und 23078 Schlagwortdatensätze. KAPITEL 4. LEISTUNGSMESSUNG 36 Datei klein.xml groß.xml gesamt.xml 0 5 10 Zeit [s] 15 20 25 Abbildung 4.1: Durchschnittliche Verarbeitungszeit 4.3 Typische Suchanfragen 4.3.1 Identifizieren von typischen Anfragen An die fertig erstellte XML-Datenbank sollen möglichst realistische und aussagekräftige Anfragen gestellt werden, um das System so realistisch wie m öglich zu evaluieren. Damit dies möglich war, sollten typische Benutzeranfragen dazu benutzt werden, diese wurden bereits an MedioVis gestellt. Die Anfragen wurden mit dem Programm DROID [9] vom Fachbereich Mensch-Computer-Interaktion durchgeführt. DROID zeichnet sich dadurch aus, da es das Benutzerverhalten im Hintergrund aufzeichnet und diese Ergebnisse dann in einer Datenbank abspeichert. Aus diesen Ergebnissen wurde dann die am häufigsten Anfragen extrahiert und dienten als Richtungsweiser, welche denn genau die typischen Benutzeranfragen sind. Neben Suchanfragen nach dem Medientyp im allgemeinen Suchfeld oder im Medientypsuchfeld wurde auch nach Titeln und nach verschiedenen Richtungen gesucht, wie z. B. Komödie oder Science-Fiction. In einigen Fällen wurde zusätzlich die Sprache eingegrenzt, um die Anzahl der Treffer weiter zu verkleinern. In vielen Suchanfragen wurde auch nach Personen gesucht, die nicht nur Autoren waren, sondern auch Schauspieler. Diese wurden auch nicht immer im Suchfeld für Personen eingetragen, sondern auch sehr oft im allgemeinen Suchfeld. 4.3. TYPISCHE SUCHANFRAGEN 37 Das allgemeine Suchfeld ist ein einziges Eingabefeld, das mit dem Eingabefeld von Google [10] vergleichbar ist. Der Umstand, dass sehr viele Anfragen im allgemeinen Suchfeld gestellt wurden, muss beim Konstruieren von Suchanfragen berücksichtigt werden, da unerfahrene Benutzer sich leicht von erweiterten Optionen abschrecken lassen. Eine Überlegung wäre Eingaben im allgemeinen Suchfeld nicht nur im Titelfeld und im Personenfeld zu suchen, sondern auch weitere Felder zu durchsuchen. Dies würde die Ausführung einer solchen möglichen Suchanfrage deutlich verlangsamen, da mit steigender Anzahl gespeicherter Informationen der Aufwand steigt. Weiter muss die Eigenheit des MAB2-Formats berücksichtigt werden, da es mehrere Titelfelder hat, die in Gesamttitel, Parallelsachtitel, Hauptsachtitel und weitere Titel in Unterwerken unterteilt sind. Da dies sehr leicht mehr als zehn Titelfelder pro Datensatz sind und momentan in der Bibliotheksdaten fast 1,8 Mio. Titeldatensätze gespeichert sind, würden rund 18 Mio. Felder durchsucht, falls kein Medium eingegrenzt wird. Zusätzlich werden noch die Personenfelder durchsucht, die auf Datensätze in der Personensektion verweisen. Da verschiedene Schreibweisen oder Verweisungsformen der Personennamen existieren können, sind weitere Felder erforderlich, die durchsucht werden m üssen. Es muss also ein Mittelweg erreicht werden, der einerseits eine große Treffermenge und andererseits nur sehr relevante Treffer zurückliefert. Dies wird erreicht, indem einige Felder nicht durchsucht, aber die übrigen genau durchsucht werden. 4.3.2 Erstellung von Suchanfragen Die nachfolgenden Suchanfragen sind in XQuery geschrieben und sollen die typischen Anfragen darstellen, die an MedioVis gestellt wurden. Diese Anfragen wurden weder auf das Bestmögliche optimiert, noch wurden Hilfsstrukturen wie Indizes verwendet, da dies den Rahmen dieser Arbeit sprengen w ürde. Weiter werden bei jeder Suchanfrage immer die vollständigen Pfade angegeben, um das Suchfenster soweit wie möglich einzugrenzen. Die Zeitmessung erfolgte mit dem MonetDB-Programm MapiClient und dessen Option -t. Dabei geben die nachfolgenden Diagramme die durchschnittlichen Anfragezeiten an. Um bei der Zeiterfassung die reine Anfragezeit zu messen, wird auf die Serialisierung der Ergebnisknoten verzichtet. Ansonsten w ürde auch die Ausgabe des verwendeten Terminals mit einfließen, dies wird durch den Einsatz der Aggregationsfunktion count verhindert. Diese Funktion gibt die KAPITEL 4. LEISTUNGSMESSUNG 38 Anzahl der Ergebnisknoten in der Suchanfrage zurück. Die nachfolgenden Messungen wurden mehrmals wiederholt und der Mittelwert daraus gebildet. Der Zugriff auf ein bestimmtes Dokument erfolgt mit der XQuery-Funktion doc("datei"). Da sich die nachfolgenden Anfragen nur im durchsuchenden Dokument unterscheiden, wird deshalb nur eine einzige Anfrage angegeben. Die XML-Dokumente wurden mit Hilfe der Pathfinder-Funktion shred doc eingelesen. Die Suche nach einem bestimmten Titel könnte wie folgt aussehen: Listing 4.1: Suche im Titelfeld count (/ c h i l d : : b i b l i o t h e k / c h i l d : : medien/ c h i l d : : ∗ [ some $ t i t e l in c h i l d : : t i t e l // t e x t ( ) s a t i s f i e s c o n t a i n s ( $ t i t e l , ” Reorganisation ”) ] ) Datei klein.xml groß.xml gesamt.xml 0 0.2 0.4 0.6 0.8 Zeit [s] 1 1.2 1.4 1.6 Abbildung 4.2: Durchschnittszeiten für die Titelsuche Sie deckt nur die wichtigen Titelfelder ab. Dazu gehören nicht die Titel der Sekundärform oder der übergeordneten Einheit, wie dies im MAB2-Format bezeichnet wird. Würden diese Felder ebenfalls in Zukunft relevant werden, so müssten entweder die Felder in den Tag namens titel hinzugef ügt werden oder die obige Suchanfrage müsste um diese Felder erweitert werden. In der obigen Anfrage werden alle Medien aufgelistet, die in ihrem Titel das Wort ’Reorganisation’ enthalten. Bei dieser Anfrage werden noch zwei weitere XPath-Funktionen 4.3. TYPISCHE SUCHANFRAGEN 39 benutzt. Das Konstrukt some-in-satisfies quantifiziert einen Ausdruck, der zum Beispiel wie folgt aussehen kann: some $x in $expr s a t i s f i e s $x > 10 Der Existenzquantor some gibt an, dass mindestens ein Element x aus der Menge expr existiert, die nach dem Schlüsselwort in angegeben wird und den Testausdruck $x > 10, das dem Schlüsselwort satisfies folgt, erfüllt. Im Gegensatz zu some müssen beim Allquantor every alle Elemente aus der Menge den Testausdruck erfüllen. Dieses Konstrukt muss immer in den Fällen verwendet werden, wo mehrere Knoten vorkommen können. Die Methode contains ist eine String-Funktion, die wahr zurückliefert, falls der zweite Parameter im ersten Parameter mindestens einmal enthalten ist. Aufgrund der derzeitigen Implementierung ist diese Funktion allerdings sehr aufwändig und stellt daher den Flaschenhals dieser Anfrage dar. Eine weitere typische Anfrage wäre die Suche nach allen Medien, die von einem bestimmten Verfasser (z. B. ’Martin Luther’) stammen. In XQuery ausgedrückt, sieht dies so aus: Listing 4.2: Suche nach einem Person / c h i l d : : b i b l i o t h e k / c h i l d : : medien/ c h i l d : : ∗ [ id ( c h i l d : : v e r f a s s e r /@persID ) [ some $name in ∗/ t e x t ( ) s a t i s f i e s ( c o n t a i n s ( $name , ” Luther ” ) and c o n t a i n s ( $name , ” Martin ” ) ) ]] Da in einem Titeldatensatz nur eine Referenz auf einen Personendatensatz abgelegt ist, muss diese zuerst aufgelöst werden, damit in dessen Datenfelder gesucht werden kann. Im allgemeinen XQuery-Standard gibt es die Funktion id, die die Auflösung einer gegebenen ID übernimmt. Dazu bekommt sie eine ID als Parameter übergeben und gibt den entsprechenden Knoten zurück. Da bei vielen Anfragen schon ungefähr das Erscheinungsjahr bekannt ist, könnte man die Treffer noch weiter einschränken. Die nachfolgende Anfrage soll nur aufzeigen, wie in einer bestimmten Zeitperiode – zwischen 1999 und 2000 – gesucht wird. Listing 4.3: Suche innerhalb einer Zeitperiode / c h i l d : : b i b l i o t h e k / c h i l d : : medien/descendant : : ∗ [ c h i l d : : e r s c h e i n u n g s j a h r / c h i l d : : vorlageform/ t e x t ( ) >= ”1999” and c h i l d : : e r s c h e i n u n g s j a h r / c h i l d : : vorlageform/ t e x t ( ) <= ”2000”] KAPITEL 4. LEISTUNGSMESSUNG 40 Datei klein.xml groß.xml gesamt.xml 0 0.5 1 1.5 2 2.5 Zeit [s] 3 3.5 4 4.5 5 Abbildung 4.3: Durchschnittszeiten für die Personensuche Die Suche nach einem bestimmten Medientyp stellt sich in diesem vorgestellten Datenmodell als sehr effizient heraus. Da dieser Fall der Anfrage bereits bei der Modellierung bedacht wurde, wurde der Medientyp bewusst als Kindknoten des Knotens medien modelliert. Listing 4.4 listet alle Zeitschriftenknoten auf, die von dem Verleger ’Bertelsmann’ herausgegeben wurden. Listing 4.4: Suche alle Zeitschriften vom Verleger ’Bertelsmann’ / c h i l d : : b i b l i o t h e k / c h i l d : : medien/ c h i l d : : z e i t s c h r i f t [ some $x in c h i l d : : v e r l a g / c h i l d : : name/ t e x t ( ) s a t i s f i e s c o n t a i n s ( $x , ” Bertelsmann ” ) ] Weiter spielt XQuery die Vorteile der Kompositionalität seiner Anfragen vollends aus. Dies ermöglicht mehrere Anfragen miteinander zu verknüpfen, ohne dass diese einer Einschränkung unterliegen. Somit können die obig gezeigten Suchanfragen beliebig miteinander verknüpft werden, dadurch kann sehr flexibel auf bestimmte Suchanfragen von Benutzern eingegangen werden. 4.3. TYPISCHE SUCHANFRAGEN 41 Datei klein.xml groß.xml gesamt.xml 0 1 2 3 Zeit [s] 4 5 6 7 Abbildung 4.4: Durchschnittszeiten für die Zeitperiodenanfrage 4.3.3 Bessere Suchmöglichkeit Eine Erweiterung gegenüber der einfachen Volltextsuche des MedioVis-Projekts ist die Suchmöglichkeit nach Schlagwörtern. Damit kann nach Synonymen gesucht werden, was die Qualität der Suchtreffer deutlich erhöht. Die Volltextsuche des MedioVis-Projekts hat nur einen eingeschränkten Ausschnitt der vier MAB2-Daten. Ein direkter Vergleich zwischen den Suchanfragen ist damit nicht möglich. Die Volltextsuche ist in einer 10 MB Datei noch durchf ührbar, aber bei einem Datenabzug von 100 MB ist dies nicht mehr möglich und bei 3,32 GB erst recht unmöglich. Eine Suchanfrage an das vorgestellte XML-Modell ben ötigt etwas mehr Zeit, aber durchsucht dementsprechend auch mehr Datenfelder. Bei einer Titelsuche nach dem Begriff ’Heiliges Römisches Reich Deutscher Nation’ wird nur ein einziges Dokument, jedoch bei der Schlagwortsuche werden alle Dokumente ausgegeben, die mit dem Schlagwort verbunden sind. Es können mehrere Schlagwörter sein, die diesen Begriff beinhalten, da in den Feldern Hauptschlagwort und Äquivalenzschlagwort gesucht wird. Listing 4.5 bildet diese Suchanfrage ab. Genau nach dem obigen Muster kann auch nach Personennamen gesucht werden, die nicht nur die typischen Schreibweisen aufweisen, sondern auch Alternativschreibweisen. Ein Beispiel wäre der Komiker Charlie Chaplin, der allerdings ausgeschrieben Charles Chaplin heißt. Die Suche nach Charlie Chaplin KAPITEL 4. LEISTUNGSMESSUNG 42 Datei klein.xml groß.xml gesamt.xml 0 0.5 1 1.5 Zeit [s] 2 2.5 3 Abbildung 4.5: Durchschnittszeiten für die Zeitschriftensuche Listing 4.5: Suche nach einem Schlagwort / c h i l d : : b i b l i o t h e k / c h i l d : : medien/ c h i l d : : ∗ [ id ( . / c h i l d : : l s c h l a g w o r t /@slgID ) [ some $x in ( c h i l d : : hauptschlagwort/ t e x t ( ) , child : : aequivalent/ t e x t ( ) ) s a t i s f i e s ( contains ( $x , ” H e i l i g e s ” ) and c o n t a i n s ( $x , ” R ömisches ” ) ) and c o n t a i n s ( $x , ” Reich ” ) and c o n t a i n s ( $x , ” Deutscher ” ) and c o n t a i n s ( $x , ” Nation ” ) ] ] würde nicht unbedingt alle Treffer auflisten. Deshalb wird zuerst innerhalb der Personen gesucht, um dann mit der Identifikationsnummer dieses Personendatensatzes in der Titeldatei nach Verweisen auf diese Nummer zu suchen. 4.3.4 Bewertung der Suchanfragen Bei dieser Arbeit wurde mehr die Funktionalität der Anfragen als deren Optimierung ins Auge gefasst, um einen ersten Überblick über Anfragezeiten zu erlangen. Trotzdem wird deutlich, dass der Einsatz von Optimierungen zur Steigerung der Ausführungsgeschwindigkeit der oben angegebenen Suchanfragen 4.3. TYPISCHE SUCHANFRAGEN 43 Datei klein.xml groß.xml gesamt.xml 0 5 Zeit [s] 10 15 Abbildung 4.6: Durchschnittszeiten für die Schlagwortsuche notwendig ist. Zu diesen Optimierungen zählt z. B. die Verwendung von Indizes. Aber auch zukünftige Erkenntnisse könnten zur Geschwindigkeitssteigerung beitragen. Bei späterer Benutzung der fertigen Anwendung müssen die gestellten Suchanfragen der Benutzer wesentlich schneller sein. Dennoch machen die obigen Ergebnisse Mut, um den Einsatz einer XML-Datenbank weiter voranzubringen. Erst die Zukunft kann zeigen, wie schnell diese Anfragen beim vollständigen Einsatz an Optimierungen werden können. 4.3.5 Verbesserungsmöglichkeiten Da die Methode contains und somit die Verarbeitung von Volltexten bereits als Flaschenhals identifiziert wurde, so soll hier noch kurz auf eine Erweiterung von XQuery zu diesem Problem verwiesen werden. Das W3C schlägt einen Standard namens XQuery 1.0 and XPath 2.0 Full-Text [25] vor, wie die Unterst ützung von Volltexten in XQuery hinzugefügt werden kann. Dabei handelt es sich um eine Erweiterung zu XQuery. Die Suche in Volltexten kann mit Hilfe von Information Retrieval-Techniken besser unterstützt werden, da Funktionen wie z. B. Phrasensuche, Annäherungssuche, Stemming und Thesauri angeboten werden. Es existiert bereits eine erste Implementierung von diesem Standard und zwar trägt sie die Bezeichnung TeXQuery [5]. Diese bietet sehr mächtige Konstrukte 44 KAPITEL 4. LEISTUNGSMESSUNG zur Verarbeitung von Volltexten. Darunter wird auch die Effizienz der containsMethode gesteigert, womit sich die Anfragezeit aufwendiger Anfragen weiter verringert. Kapitel 5 Fazit Durch die Entwicklung von MedioVis, einer innovativen ’Suchmaschine’ f ür multimediale Inhalte, entstand das Bedürfnis eines Datenbanksystems, welches die bibliographischen Daten sehr gut abbilden und effizient durchsuchen kann. Dies war die Geburtsstunde dieser Arbeit. Sowohl im Bereich der Benutzerinteraktion eines solchen Suchsystems, als auch in Bezug auf ein effizientes DatenbankBackend werden derzeit Prototypen an der Universität Konstanz entwickelt und weiter gepflegt, womit eine enge Zusammenarbeit möglich ist. Die Modellierung der Bibliotheksdaten im XML-Format benutzt die ganzen Vorteile dieser Datenbanktechnologie. Es kann nicht nur der Semantik der Daten gerecht werden, sondern ermöglicht darüber hinaus Anfragen effizient zu verarbeiten. Mittlerweile hat sich XML als standardisiertes Austauschformat bew ährt und durchgesetzt und da speziell ausländische Bibliotheken mit dem MAB2-Format zu kämpfen haben, ist zu erwarten, dass auch die DDB längerfristig einen neuen Standard auf XML-Basis erarbeiten wird. Diese Arbeit sollte zeigen, dass ein solcher Wechsel durchaus realistisch ist. Weiter ist die Konvertierung des MAB2-Standards in XML praktisch komplett umgesetzt worden, somit ist das vorgestellte XML-Datenmodell ebenfalls fast komplett. Bei der Übersetzung in das XML-Format wurden auch bereits erste Optimierungen, wie die Stoppwortentfernung, eingesetzt. Diese erm öglicht effiziente Anfragen zu stellen, da bereits die unwichtigen Wörter innerhalb bestimmter Datenfelder entfernt sind. Diese Arbeit stellt eine Lösung vor, wie die täglichen Updates effizient und ressourcensparend in die bestehenden Daten eingepflegt werden. Dabei muss bei der Verarbeitung der aktuelle Datenbestand und die Aktualisierungsdaten einmalig von der Festplatte gelesen werden. 45 46 KAPITEL 5. FAZIT Zur Bewertung des vorgelegten Vorschlags wurde eine Evaluierung der SuchPerformance durchgeführt. Durch die bessere Darstellung der Semantik der Daten ist es nun möglich, qualitativ bessere Suchanfragen zu formulieren. Ein Beispiel dafür, wäre die Suche nach bestimmten Schlagworten. Die Verarbeitungszeit der gestellten Abfragen war schon sehr vielversprechend und durch den Einsatz weiterer Optimierungen wird ein nochmaliger Geschindigkeitsvorteil erwartet. Nicht nur, dass Pathfinder weiterentwickelt wird, auch werden neue Erkenntnisse der Forschung eingepflegt. Dazu zählt auch die XQuery-Erweiterung für Volltexte. Sie nutzt die Werkzeuge des Information Retrievals zur besseren Suche in Volltexten. Auch könnte die erste Verbindung der beiden Programme weitere Erkenntnisse liefern, indem mit der Analyse von DROID eventuelle Flaschenh älse aufgespürt werden könnten. Denn erst durch die Vereinigung des Frontends – der grafischen Oberfläche – mit dem Backend – der XML-Schnittstelle – kann das System als Ganzes getestet und genutzt werden. Weiter ist von Seiten des MedioVis-Projektes geplant, dass die bestehenden Bibliotheksdaten mit zusätzlichen Daten angereichert werden. So sollen Zusammenfassungen, Rezessionen, Bilder, Trailer etc. hinzugef ügt werden. Diese stammen von anderen Quellen, wie z. B. von der IMDb (Internet Movie Database) [20]. Diese Film-Datenbank bietet zu fast allen Filmen detaillierte Informationen über die Schauspieler, den Regisseur, in welchen Sprachen diese erschienen sind usw. Es werden damit Suchmöglichkeiten in Daten geschaffen, die nicht von den herkömmlichen Bibliotheken erfasst wurden. Anhang A Zuordnung der XML-Tags Die nachfolgenden Tabellen geben die Zuordnungen an, wie die MAB2-Felder in XML überführt wurden. In der Spalte ’Vaterknoten’ werden die entsprechenden Knoten angegeben, unter denen der Tag aus der Spalte ’XML-Tag’, untergeordnet sind. A.1 Allgemeine Felder MAB2-Feldnr. Ind. XML-Tag Vaterknoten 001 als Attribut im Medientyp - 002 datum datensatz, ersterfassung 003 datum datensatz, korrektur 005 transaktionsdatum datensatz a b lc nspez lc swd laendercode b kennzeichen kennzeichen datensatz, ersterfassung datensatz, korrektur a b e k n v d k m p rech abrufzeichen nrech abrufzeichen swd id korrekturdatum neuzugangsdatum versionsnummer namensform rkoerperschaft massstab rpersonen 036 070 076 077 47 swb ANHANG A. ZUORDNUNG DER XML-TAGS 48 MAB2-Feldnr. 078 Ind. XML-Tag s t u v a b f k p v bandzaehlung uw opus nummer feldinhalt sonstige nummern adressierung bearbeitungshinweis fehlermeldungen kommentar freie textfelder lokaldaten konversion besitzangabe herkunftsangabe 080 525 A.2 Vaterknoten swb Titeldatei MAB2-Feldnr. Ind. XML-Tag Vaterknoten 010 uebergeordnet werk id - 025 a b c e l o z bna locdk id ddb bnb casalini libri ekz loc oclc zdb ueberregionale id 026 g bib verb bayern - 037 a b z sc din sc iso sc swb sprachencode 039 z zeitcode - 081 oberbegriff mehrb werkes - 086 087 text src 089 bandangabe VF - 102, 106, . . . , 198 verfasser - 202, 206, . . . , 298 lkoerperschaft - link A.2. TITELDATEI MAB2-Feldnr. 49 Ind. XML-Tag Vaterknoten 300 sammlungsvermerk - 304 einheitstitel titel, einheitssachtitel 310 331 333 ansetzungsform vorlageform urheber titel, hauptsachtitel 334 materialbenennung beschreibung 335 zusaetze titel, hauptsachtitel ansetzungsform vorlageform urheber zusaetze titel, parallelsachtitel 359 allgemein beschreibung 360 unterreihe titel 361 beigefuegte werke - 365 zusatz gesamt titel 369 verfasser gesamtvorlage - a b c unter sachtitel mit sachtitel unter mit sachtitel weitere sachtitel b c d normierter zs titel coden key title kurztitel inis normierter titel 403 auflage - 405 erscheinungsverlauf beschreibung 407 mathematische angaben - 340, 344, . . . , 352 341, 345, . . . , 353 342, 346, . . . , 354 343, 347, . . . , 355 370 376 410 412 415 417 a a a a ort verleger drucker name verleger drucker ort verleger drucker name verleger drucker ANHANG A. ZUORDNUNG DER XML-TAGS 50 MAB2-Feldnr. XML-Tag Vaterknoten vorlageform ansetzungsform erster band letzter band publikation erscheinungsjahr 427 zusammenf bestandsang - 432 433 437 zus offene bandfuehrung kollationsvermerk begleitmaterialien beschreibung vorlageform gesamttitel id ansetzungsform bandzaehlung bandzaehlung SF gesamttitel 501 fussnote beschreibung 502 beigefuegtes werk einheitssachtitel 503 dt uebersetzung hauptsachtitel 509 519 523 vermerk verfasserang hochsch schrift verm erscheinungsweise beschreibung 526 titel rezensierter werke titel 527 529 531 533 534 536 537 hinweis fortl beilagen titel fortl beilagen hinweis frueh ausg hinweis spaet ausg titelkonkordanzen vorauss ersch termin redaktionsbemerkung beschreibung 540 isbn - 541 ismn - 542 issn - 543 isrn - druckschriften nr URN int artikel nr hochschulschrift nr report nr amtliche druckschriften nr 425 Ind. a b c p 451, 461, . . . , 491 453, 463, . . . , 493 454, 464, . . . , 494 455, 465, . . . , 495 456, 466, . . . , 496 551 552 553 554 a b a a A.2. TITELDATEI 51 MAB2-Feldnr. Ind. XML-Tag Vaterknoten 556 b c a b c 564 566 568 574 kontrakt nr task nr patentschrift nr offenlegungsschrift nr auslegungsschrift nr norm nr firmenschrift nr cip ddb nr nat bibliograph nr amtliche druckschriften nr 590 594 fussnote erscheinungsort quelle unselbst werk 595 vorlageform 596 bandzaehlung quelle unselbst werk 599 selbstaend schrift id - fussnote einl fussnote ort name sekundaer form 619 vorlageform sekundaer form, erscheinungsjahr 621 623 624 625 626 633 vorlageform gesamttitel id ansetzungsform bandangabe bandszaehlung SF abweichungen titel sekundaer form gesamttitel 634 637 638 640 isbn umfangsangabe begleitmaterialien ausgabebezeichnung sekundaer form 651 fussnote comp - 655 $u → url $x → sonstige url - 562 610 611 613 a u u e quelle unselbst werk, erscheinungsjahr ANHANG A. ZUORDNUNG DER XML-TAGS 52 MAB2-Feldnr. Ind. XML-Tag Vaterknoten $z → lizenz url a b c normierter erscheinungsort normierter erscheinungsort hochschulort beschreibung 675 stichwoerter - 700 lokal udc ddc lc dnb regensburger verbundklass zdb systematik klassifikation lschlagwort - herkunftsangabe - 673 a b c d g z 902, 907, . . . , 947 904, 909, . . . , 949 A.3 a Personendatei MAB2-Feldnr. 028 Ind. XML-Tag a Übergeordenter Tag normdaten id - 675 stichwoerter - 800 name AF - 801 802 803 quelle benutzungshinweis bemerkung RAK AF 804 a ergebnislose-quelle - 814 a i leben funktion daten 820 g j m z sonstige rak aacr aufgeloest sonstige weitere AF name AF - 830 A.4. KÖRPERSCHAFTSDATEI A.4 53 Körperschaftsdatei MAB2-Feldnr. Ind. XML-Tag 655 url - 800 name - daten AF abkuerzung AF - uebergeordnet id - a b 801 806 Übergeordneter Tag 810, 812, . . . , 849 verweisungsform - 852, 855, . . . , 894 k frueher id - stichwort - 895 A.5 Schlagwortdatei MAB2-Feldnr. Ind. XML-Tag Übergeordneter Tag 040 normdaten notation - 800 hauptschlagwort - 801, . . . , 805 unterschlagwort - quelle definition benutzungshinweise redaktionelle bemerkungen erlaeuterung alternativ - untersw alternativ - 830 aequivalent - 845 oberbegriff - 850 uebergeordnet - 860 verwandt - 870 frueher - 880 spaeter - 890 neues - 891 altes - 808 820 821, . . . , 830 a b c d ANHANG A. ZUORDNUNG DER XML-TAGS 54 A.6 Medientypen Der Medientyp wird anhand des Datenfeldes der MAB2-Feldnummer 029 ermittelt. Die nachfolgende Tabelle zeigt die entsprechendende Überführung in XMLTags auf. Datenfeld XML-Tag Beschreibung b kart mikro ton videk videm mk cofz crom dvd dvdr disk dias se so uw mb mw zs zse zscrom zsdvdr zt zte ztcrom ztdvdr interim paket Buch Karten Mikromaterial Tonträger Video (Kauf) Video (Mitschnitt) Medienkombination Online-Quelle CD-ROM DVD DVD-ROM Disketten Dias Serien Sonstiges Non-Book-Material enthaltenes Werk mehrteiliges Buch mehrteiliges Werk Zeitschrift Online-Zeitschrift Zeitschrift auf CD-ROM Zeitschrift auf DVD-ROM Zeitung Online-Zeitung Zeitung auf CD-ROM Zeitung auf DVD-ROM Interim Paket-ABO buch karte mikrofiche tontraeger video video mitschnitt medienkombination online quelle cdrom dvd dvdrom diskette dias serie — enthaltenes werk mehrband buch mehrband werk zeitschrift online zeitschrift cd zeitschrift dvd zeitschrift zeitung online zeitung cd zeitung dvd zeitung — — A.7. SCHLAGWORTATTRIBUTE A.7 55 Schlagwortattribute Die Schlagwörter werden in Kategorien unterteilt, um ein Schlagwort besser zu spezifizieren zu können. Die möglichen Schlagwortkategorien zeigt die nachfolgende Tabelle. Indikator XML-Attribute c f g k p s t z unter koerperschaft ort form geographisch koerperschaft person sach werktitel zeit 56 ANHANG A. ZUORDNUNG DER XML-TAGS Literaturverzeichnis [1] BerkeleyDB. http://www.sleepycat.com/products/db.shtml. [2] Bibliotheksservice-Zentrum Baden-Württemberg. http://cms.bsz-bw.de/ cms/service/datendienste/export3-mab2/index_html#Export. [3] P. A. Boncz. Monet: A Next-Generation DBMS Kernel For Query-Intensive Applications. Ph.D. Thesis, Universiteit van Amsterdam, Amsterdam, The Netherlands, May 2002. [4] Peter Boncz, Torsten Grust, Stefan Manegold, Jan Rittinger, and Jens Teubner. Pathfinder: Relational XQuery Over Multi-Gigabyte XML Inputs in Interactive Time. Technical Report INS-E0503, CWI, 2005. [5] Chavdar Botev, Sihem Amer-Yahia, and Jayavel Shanmugasundaram. A TeXQuery-Based XML Full-Text Search Engine. In SIGMOD Conference, 2004. [6] Michael Brundage. XQuery - The XML Query Language. Addision-Wesley, 2004. [7] Die Deutsche Bibliothek. http://www.ddb.de. [8] Die Deutsche Bibliothek. Hrsg. in Zsarb. mit d. MAB-Ausschuß im Auftr. d. Dt. Forschungsgemeinschaft. Maschinelles Austauschformat für Bibliotheken. Dt. Bibliothek, Leipzig, 1999. [9] DROID. http://hci.uni-konstanz.de/research/projects/droid/. [10] Google. http://www.google.de. [11] Christian Grün. Entwicklung eines visuellen Metadaten-Browsers für die Mediothek Konstanz. Master’s thesis, Universit ät Konstanz, 2004. http: //hci.uni-konstanz.de/downloads/MA-CG.pdf. [12] Josef Labner. MAB2 – Grundsätzliches, Status und Perspektiven. http:// www.onb.ac.at/koop-litera/termine/kooplitera2003/labner_2003.pdf. 57 LITERATURVERZEICHNIS 58 [13] MAB2-Standard. http://www.ddb.de/professionell/mab.htm. [14] MABxml. http://www.ddb.de/professionell/mabxml.htm. [15] MARCXML. http://www.loc.gov/standards/marcxml/. [16] James McGovern, Per Bothner, Kurt Cagle, James Linn, and Vaidyanathan Nagarajan. XQuery - Kick Start. SAMS, Indianapolis, 2004. [17] Stelios Paparizos, Shurug Al-Khalifa, Adriane Chapman, H. V. Jagadish, Laks V. S. Lakshmanan, Andrew Nierman, Jignesh M. Patel, Divesh Srivastava, Nuwee Wiwatwattana, Yuqing Wu, and Cong Yu. TIMBER: A Native System for Querying XML. In SIGMOD Conference, page 672, 2003. [18] PostgreSQL. http://www.postgresql.org/. [19] Relax NG. http://www.relaxng.org/. [20] The Internet Movie Database. http://www.imdb.com/. [21] X-Hive. http://www.x-hive.com. [22] XML Schema. http://www.w3.org/TR/xmlschema-1/. [23] XML Spezifikation. http://www.w3c.org/xml/. [24] XPath 2.0. http://www.w3.org/TR/xpath20/. [25] XQuery 1.0 and XPath xquery-full-text/. 2.0 Full-Text. http://www.w3.org/TR/