Problemseminar im SS 1997

Elektronische Bibliotheken

Thema:

SGML und Datenbanken

Bearbeiter : Thomas Nowotka

Betreuer: Dr. D. Sosna

Inhaltsverzeichnis

1 EINLEITUNG
2 SGML
2.1 Logische Struktur eines Dokumentes
2.2 Aufbau eines SGML-Dokumentes
2.3 Syntaxelemente
2.4 Aufbau einer DTD
2.5 SGML und HTML
3 DER HYTIME STANDARD
3.1 Was ist HyTime
3.2 Möglichkeiten mit HyTime
3.3 HyTime-Links
3.3.1 Contextual Link ( clink )
3.3.2 Independent Link ( ilink )
4 SGML UND DATENBANKEN
4.1 Vorteile eines elektronischen Informationssystems
4.2 SGML-Dokumente in einer Datenbank
4.2.1 Objektorientierte Datenbanken
4.2.2 Festlegung der Granularität der Daten
4.2.3 Beispiel einer praktisch realisierten SGML-Datenbank
4.2.3.1 Abfragen über Strings
4.2.3.2 Abfragen über Pfaden und Attribute
4.2.4 Probleme bei der automatischen Erzeugung von Objektklassen aus einer DTD
5 ZUSAMMENFASSUNG
6 LITERATUR


1 Einleitung

Die Informationsfülle der heutigen Zeit erfordert leistungsfähige Möglichkeiten Dokumente zu verwalten, zu archivieren und wiederzuverwenden. Insbesondere dem Punkt der Wieder/Mehrfachverwendbarkeit sollte besondere Aufmerksamkeit gewidmet werden, da die Erstellung von Dokumenten recht zeit- und kostenaufwendig ist. Eine Mehrfachverwendung von Dokumenten für verschiedene Anwendungen ist anzustreben. Neben dem Papier, welches seit Jahrhunderten als Träger von Informationen dient, kommen heute neue Technologien und Speichermöglichkeiten zum Einsatz, welche es erlauben nicht nur Text und Bildinformationen, sondern auch Video-, Audiodaten, Computersimulationen etc. innerhalb eines Dokumentes abzulegen. Der Zugriff auf die Informationen eines Dokumentes kann über geeignete Suchmöglichkeiten vereinfacht und beschleunigt werden. Elektronische Bibliotheken bieten nicht nur die Möglichkeit der Archivierung von Dokumenten, es ist auch eine Aktualisierung der Datenbestände möglich. Des weiteren besteht die Möglichkeit an einem Dokument viele Autoren gleichzeitig arbeiten zu lassen, z.B.: Lexika, kommentiertes Vorlesungsverzeichnis. Das Anbieten der Dokumente in Computernetzen ermöglicht dem Benutzer einen wesentlich schnelleren und umfassenderen Zugriff auf die Informationen.
Für die Nutzung der Daten ( Dokumente ) in Computersystemen werden geeignete Technologien benötigt, die folgende Eigenschaften aufweisen sollten:

Beschränkt man sich auf den Inhalt eines Dokumentes, stellt man fest, daß eine Trennung des Dokumentinhaltes von Layoutfragen möglich und sinnvoll ist, sowie einige neue Möglichkeiten eröffnet. Jedes Dokument, wie z.B. Bücher und Zeitschriftenartikel besitzt eine logische Struktur, d.h. man kann unterscheiden zwischen Überschriften, Inhaltsverzeichnis, Abbildungen, "normaler" Text etc. . Erstellt man ein Dokument mit zusätzlicher Auszeichnung der eben genannten Elemente, hat man den gleichen Informationsgehalt wie in einem mit herkömmlichen Mitteln erzeugten Dokument. Die Vorteile des neuen Dokumentes sind:

2 SGML

SGML (Standard Generalized Markup Language) (Standardisierte Verallgemeinerte Auszeichnungssprache) wurde 1986 als internationaler Standard ( ISO 8879:1986 ) verabschiedet. SGML definiert eine Sprache zur logischen Strukturierung von Dokumenten. SGML selbst ist kein Austauschformat für Dokumente. Es ist lediglich ein Mittel, um anwendungsspezifische Dokumentenaustauschformate zu definieren. Sogenannte Dokumenttypdefinitionen (DTD) enthalten die Beschreibung aller in einer bestimmten Klasse von Dokumenttypen zusammengefaßten Dokumente. Die Beschreibung der gewünschten Darstellung wird außerhalb des SGML-Dokumentes vorgenommen. Einigt man sich auf eine DTD, so kann ein Dokumentenaustausch erfolgen. Angewendet wird SGML z.B. für den Dokumentenaustausch zwischen Flugzeugherstellern und Fluglinien. ( Beispiel in [TRWA95] Appendix 3 "Case Study: Douglas Aircraft Company" )

2.1 Logische Struktur eines Dokumentes

Unter der logischen Struktur eines Dokumentes versteht man eine Beschreibung einer Zerlegung des Dokumentes in einzelne abgeschlossene Teile, wie z.B. Überschrift, Absatz oder Abbildung. Hat man ein Dokument logisch strukturiert in elektronisch verarbeitbarer Form vorliegen, hat man einige Vorteile. Der Autor kann sich mehr auf die eigentlichen Inhalte seines Dokumentes konzentrieren, und braucht sich nicht um Layoutfragen zu kümmern. Eine einheitliche Darstellung des Dokumentes kann ohne größeren Aufwand erreicht werden. Möchte man z.B. Hervorhebungen mit kursivem Text darstellen, werden die entsprechenden Stellen im Dokument damit ausgezeichnet ( z.B. <vorheb> ). Das Formatierprogramm setzt dann die Auszeichnung "<vorheb>" in Kursivschrift um. Für eine Änderung von "kursiv" nach "fett" muß lediglich in der Übersetzungstabelle des Formatierers eine Anpassung vorgenommen werden. Bei herkömmlichen Textverarbeitungssystemen hätte man im schlechtesten Fall alles manuell ändern müssen. Eventuell vergißt man noch Textstellen, eine einheitliche Darstellung wäre mit höherem Aufwand verbunden.
Durch Auszeichnung des Dokumentes mit Marken geht gegenüber herkömmlichen Dokumenten keine Information verloren. Es besteht vielmehr die Möglichkeit zusätzliche Informationen in das Dokument einzubringen.

Beispiel 2.1 für Auszeichnung eines Textes:

...

... diese Informationen sind in der Datei <path>/etc/passwd</path> enthalten ...

...

gedruckt könnte das dann vielleicht so aussehen:

...
... diese Informationen sind in der Datei "/etc/passwd" enthalten ...
...

Beispiel 2.2 für mißbräuchliche Verwendung von Auszeichnungen ( aus [BAN94]):

<bold>Specific markup</bold>
To get a feeling for what <italic>markup</italic>
is, consider the traditional processing of texts ...

Hier wurden das Layout betreffende Auszeichnungen vorgenommen. Diese Dinge sollten aber dem Formatierer vorbehalten bleiben. In Ausnahmefällen kann aber die Auszeichnung des Layouts sinnvoll sein. ( z.B. "das ist <fett>fett</fett> geschrieben" )

2.2 Aufbau eines SGML-Dokumentes

Ein SGML-Dokument besteht im wesentlichen aus zwei Teilen. Einem Vorspann, der unter anderem die sogenannte Dokumenttypdefinition (DTD) enthält und den mit Marken ( Tags ) ausgezeichneten, eigentlichen Text. Eine DTD beschreibt die logische Struktur eines Dokumentes vollständig, wobei das Dokument durch eine Menge von Grammatikregeln beschrieben wird. Vor diesen beiden Teilen steht die SGML-Deklaration, welche unter anderem den verwendeten Zeichensatz definiert. Als Zeichensatz kommt üblicherweise der ASCII-Zeichensatz zum Einsatz. Daher ist die Darstellung in diesem Zeichensatz nicht vorhandener Zeichen nur über einen Umweg möglich. Für Umlaute wird z.B. "&ouml;" statt "ö" usw. benutzt. ( die Konstruktion "&Bezeichner;" kann auch für eigene Ersetzungen benutzt werden ) Da die meisten Applikationen Voreinstellungen für alle Werte der SGML-Deklaration haben ist ihre Angabe nicht notwendig. Eine vollständige SGML-Deklaration befindet sich in [TRWA95]. Oder im WWW: ftp://ftp.ifi.uio.no/pub/SGML/declaration

Abbildung 1: Aufbau eines SGML-Dokumentes, aus [TRWA95]

2.3 Syntaxelemente

Kommentare werden in SGML mit "<!--" oder "--" eingeleitet und mit "--" ( zwei Bindestrichen ) abgeschlossen.

Beispiele für gültige Kommentare:

<!-- Kommentar -->
<!------ Kommentar ------>
<!ELEMENT dpunkt -O EMPTY -- Symbol für Punkt -->

Die logischen Einheiten eines Dokumentes werden Elemente genannt. Die Namen der Elemente werden als Marken im Text benutzt, wobei "<marke>" den Beginn und "</marke>" das Ende einer Einheit kennzeichnet. Eine logische Einheit besteht aus einen Namen, welcher laut [SZ95] maximal 8 Zeichen lang sein darf, und einer Beschreibung ihrer Struktur. Diese Struktur kann sich aus anderen Einheiten oder Grundtypen ( Tabelle 1 ) zusammensetzen. Die Reihenfolge der einzelnen Bestandteile der Einheit wird durch spezielle Verbindungssymbole definiert ( Tabelle 2 ). Die Anzahl des Auftretens eines Bestandteils wird durch spezielle Zeichen festgelegt ( Tabelle 3 ).

Tabelle 1: SGML Datentypen

Datentyp Bedeutung Hinweise

CDATA

Character data bis auf Endmarken wird alles als Textinhalt gelesen

RCDATA

Replaceable character data wie CDATA, aber: Einheiten werden durch definierten Text ersetzt

#PCDATA

Parsed character data Text der vom Parser bearbeitet werden soll

SDATA

Specific character data  

NDATA

Non-SGML data  

EMPTY

No data-empty element Platzhalter

ANY

Any type of data wie #PCDATA, es findet aber keine Kontrolle der Elementausprägung statt ( Benutzung vermeiden )

Tabelle 2: Verbindungssymbole

Notation Benutzung SGML Term Beschreibung

,

X,Y

SEQ

nach X folgt Y

&

X&Y

AND

X und Y in beliebiger Reihenfolge

|

X|Y

OR

X oder Y

Tabelle 3: Symbole, die die Häufigkeit des Vorkommens eines Elementes beschreiben

Vorkommen Symbol
genau ein mal (erforderlich) (none)
höchstens einmal

?

beliebig oft

*

mindestens einmal, beliebig oft

+

Es folgen nun Syntaxdiagramme zur Veranschaulichung der Bedeutung der Elemente aus Tabelle 2 und Tabelle 3. Die Diagramme sind an [TRWA95] angelehnt.

Abbildung 2: Sequenz (",")

Ein Kapitel besteht aus einem Namen und einem Paragraphen.

Abbildung 3: "para" tritt mindestens einmal auf ("+")

Der Name des Kapitels wird von einem oder mehreren Paragraphen gefolgt.

Abbildung 4: "para" tritt höchstens einmal auf ("?")

Das Kapitel besteht aus einem Namen und einem optionalen Paragraphen.

Abbildung 5: "para" tritt beliebig oft auf ("*")

Diesmal dürfen beliebig viele Paragraphen auftreten, ein Paragraph muß jedoch nicht auftreten.

Abbildung 6: Alternative ("|")

Nach dem Namen folgt entweder ein Paragraph, oder eine Abbildung.

Abbildung 7: Wiederholung einer Alternative

Nach "name" folgt eine beliebige Menge von Abbildungen und Paragraphen, es muß aber mindestens ein Paragraph oder eine Abbildung auftreten.

Abbildung 8: Zusammensetzung

Beide Notierungen definieren eine gleiche Struktur. Nach dem Namen müssen ein Paragraph und eine Abbildung in beliebiger Reihenfolge erscheinen. In SGML lassen sich also durch geeignete Benutzung der Verbindungssymbole verschiedene Darstellungen für gleiche logische Einheiten erreichen. Welche Deklaration als einfacher verständlich oder übersichtlicher angesehen wird, hängt vom Geschmack des jeweiligen Benutzers ab.

Verarbeitungsanweisungen

Mit Verarbeitungsanweisungen ( processing instructions ) können Befehle durch den Parser direkt an die Applikation weitergeleitet werden. Die direkte Weitergabe von Befehlen an die Applikation ist nicht im Sinne einer standardisierten und systemunabhängigen Dokumentstruktur. Für spezielle Einsatzgebiete lassen sich damit aber einfachere Lösungen erreichen. Verarbeitungsanweisungen erlauben die Verwendung systemspezifischer Kodierungen, welche sonst durch Elemente und Attribute definiert werden müßten.
Eine Verarbeitungsanweisung hat die Form:

<?Anweisungstext>

Nach "<?" wird alles so lange als Anweisungstext behandelt, bis ">" auftritt. Die Verarbeitungsanweisung darf also kein ">" enthalten.

z.B.: <?page break>
<?CD-ROM JL:Jump, ITIT-CPP-1>

Markierte Abschnitte

Ein markierter Abschnitt ( marked section ) ist ein Textstück, welches durch spezielle Begrenzer eingeschlossen wird, und das vom Parser über spezielle Parameter gesondert behandelt wird. Durch die Parametersteuerung ist es somit insbesondere möglich, Textvarianten zu verwalten. Ein markierter Abschnitt hat die Form:

<![Verarbeitungshinweis(e) [Text]]>

"Verarbeitungshinweis(e)" stehen für Schlüsselworte der Menge ( IGNORE, CDATA, RCDATA, INCLUDE). Mit IGNORE wird der ganze Abschnitt vom Parser überlesen. Bei INCLUDE wird der Text innerhalb der Begrenzer normal vom Parser bearbeitet. Durch CDATA wird eine Verarbeitung mit dem Parser verhindert, der Inhalt wird ohne Parsen weitergereicht. Bei RCDATA wird eine Ersetzung der Einheiten vorgenommen, die Tags werden jedoch vom Parser nicht verarbeitet.
"Text" steht für normalen SGML-Text, welcher vom Parser bearbeitet werden kann.
Beispiel für einen markierten Abschnitt mit Parametersteuerung aus [COJA96]

<!ENTITY % tex "IGNORE">

Für das TeX-System könnte man folgende Steuerung benutzen, um TeX-Kommandos bedingt zu benutzen.

<![ %tex; [
<!ENTITY newpage "<?\newpage>">
]]>

2.4 Aufbau einer DTD

Eine Dokumenttypdefinition (DTD) beschreibt eine Klasse von Dokumenten und besteht aus der Angabe des Namens dieser Klasse und ihrer Bestandteile. Der Aufbau der DTD ist dabei wie folgt:

"<!DOCTYPE name[]>" definiert eine Klasse "name". Innerhalb der eckigen Klammern werden die Bestandteile dieser Klasse angegeben. Folgende Bestandteile sind möglich:

Tabelle 4: reservierte Bezeichner für Attribute

    res. Bezeichner

    Bedeutung

    #REQUIRED

    Attributwert ist erforderlich. Vorbelegung ist nicht erlaubt

    #IMPLIED

    Attributwert ist optional

    #CURRENT

    der zuletzt benutzte Wert wird wiederverwendet

    #CONREF

    Der Formatierer setzt einen Inhalt ein. Der Attributwert dient dem Formatierer als Verweis auf den einzusetzenden Inhalt.

    #FIXED

    fester Wert

Tabelle 5: reservierte Bezeichner in Attributdeklarationen

Schlüsselwort Attributwert
CDATA Character data, allgemeinster Wert
ENTITY Name einer Einheit
ENTITIES Name einer oder mehrerer Einheiten
ID Identifikator, Verankerung eines Verweises, der im Dokument eindeutig sein muß
IDREF Identifikator, Referenzwert
IDREFS Liste von Referenzwerten
NAME Attributwert ist ein gültiger Bezeichner
NAMES Liste von gültigen Bezeichnern
NMTOKEN Zeichenkette, die den Regeln für gültige Bezeichner entspricht
NMTOKENS Liste von NMTOKENS
NOTATION Notation name
NUMBER Zeichenfolge von ein bis acht Ziffern
NUMBERS Liste von NUMBER-Werten
NUTOKEN Zeichenkette, die den Regeln für gültige Bezeichner entspricht, und mit einer Ziffer beginnt
NUTOKENS Liste von NUTOKENS

Beispiel 2.3 einer DTD für ein Dokument "Artikel" nach [ACM94]:

<!DOCTYPE article[ 
<!ELEMENT article    - - (title,author+,affil,abstract,section+,acknowl)>
<!ATTLIST article        status (final|draft) draft #REQUIRED> 
<!ELEMENT title      - - (#PCDATA)> 
<!ELEMENT author     - O (#PCDATA)> 
<!ELEMENT abstract   - O (#PCDATA)> 
<!ELEMENT section    - O ((title|body+)|(title,body*,subsectn+))> 
<!ELEMENT subsectn   - O (title,body+)> 
<!ELEMENT body       - O (figure,paragr)> 
<!ELEMENT figure     - O (picture,caption?)> 
<!ATTLIST figure         (label ID #IMPLIED)> 
<!ELEMENT picture    - O EMPTY> 
<!ATTLIST picture        sizex NMTOKEN "16cm" 
                            sizey NMTOKEN #IMPLIED 
                            file ENTITY #IMPLIED> 
<!ELEMENT caption    O O (#PCDATA)> 
<!ENTITY file   SYSTEM    "/u/christoph/TEX/SGML/fig1.ps" NDATA > 
<!ELEMENT paragr     - O (#PCDATA)> 
<!ATTLIST paragr          reflabel IDREF #REQUIRED> 
<!ELEMENT acknowl    - O (#PCDATA> 
]> 

Beispiel 2.4 eines SGML-Dokumentes vom Typ Artikel nach [ACM94]

<article status="final">
<title>From Structured Documents to Novel Query Facilities</title>
<author>V. Christophides
<author>S. Abiteboul
...
<abstract>...
<section>
<title>Introduction</title>
...
<body><paragr>This paper...
</body></section>
<section>
<title>SGML preliminaries</title>
<body><paragr>...
</body></section>
...
</article>

Bei SGML spielt der Parser, bzw. Darsteller, welcher das SGML-Dokument verarbeitet eine wichtige Rolle, und es sollte bei der Erstellung einer DTD auf Eigenheiten des Parsers eingegangen werden, bzw. ein Parser benutzt werden, welcher die benötigten Anforderungen erfüllt. Beispiel.: Kapitel können automatisch oder manuell numeriert werden. Die Marken am Kapitelanfang hätten dann die Gestalt <section> bzw. <section number="3">. Die Angabe eines zusätzlichen Attributes wäre bei weniger leistungsfähigen Parsern/Darstellern nötig.

2.5 SGML und HTML

HTML wird durch eine spezielle DTD definiert. Die Entscheidung SGML als Grundlage für einen Netzdienst zu benutzen, war die Unabhängigkeit von SGML gegenüber spezieller Hardware oder Software und die Integrierbarkeit von Daten verschiedenen Typs. Außerdem sollte es möglich sein Hypertextdokumente zu erstellen, wofür sich SGML gut eignet. Zur Zeit sind die Versionen der HTML-DTD's 2.0 und 3.2 gebräuchlich. In HTML 3.0 wurden umfangreiche Möglichkeiten, unter anderem Formelsatz definiert. Allerdings wurden von existierenden HTML-Darstellern nie alle Möglichkeiten von HTML 3.0 realisiert. Einen Überblick über HTML 3 bietet das Buch "Die Sprache des Web - HTML 3" von R. Tolksdorf, welches auch in der MEDOC-Bibliothek verfügbar ist. Generell gilt, das existierende Systeme ( Web-Browser ) sich nicht an einen festen Standard halten. Verschiedene Web-Browser bieten verschiedene Erweiterungen der HTML-DTD an, wie zusätzliche Attribute und zusätzliche HTML-Tags. Die HTML-DTD weist einige Besonderheiten auf.

Beispiele für Elementdeklarationen

Bild:
<!ELEMENT IMG - O EMPTY
<!ATTLIST IMG
SRC %URI; #REQUIRED
ALT CDATA #IMPLIED
ALIGN (top|middle|bottom) #IMPLIED
ISMAP (ISMAP) #IMPLIED
%SDAPREF; "<Fig><?SDATrans Img: AttList>#AttVal(Alt)</Fig>"
>
<!-- <IMG> Image; icon, glyph or illustration ->
<!-- <IMG SRC="..."> Address of image object ->
<!-- IMG ALT="..."> Textual alternative ->
<!-- IMG ALIGN=...> Position relative to text ->
<!-- IMG ISMAP> Each pixel can be a link

Anker:
<!ELEMENT A - - %A.content -(A)>
<!ATTLIST A
HREF %URI #IMPLIED
NAME %linkName #IMPLIED
%linkExtraAttributes;
%SDAPREF; "<Anchor: #AttList>"
>

Linkkonzept im Vergleich zu SGML

Querverweise können naturgemäß nicht mehr über ID- und IDREFS-Attribute realisiert werden, da auch auf andere, Dokumente verwiesen werden soll. Die Links werden daher über eigene Elemente mit entsprechenden Attributen definiert und ihre Realisierung wird vollständig vom Browser vorgenommen. Durch die Benutzung eines eigenen Elementes, ist es möglich den Link mit einem Kontext zu versehen, was mit den ID- und IDREFS-Konstruktionen nicht möglich ist. ( <A HREF="externe Adresse">Kontext</A> )

Die Trennung von Layout und Inhalten ist in HTML nicht mehr konsequent. Viele Tags dienen der Festlegung eines bestimmten Layouts.

3 Der HyTime Standard

3.1 Was ist HyTime

HyTime ist das Kürzel für "Hypermedia/Time-based Structuring Language", und ist in ISO 10744:1992 definiert. HyTime basiert auf SGML. Der Standard enthält viele verschiedene Aspekte bzgl. Querverweisen und ein großes Repertoire an Fähigkeiten für den Umgang mit Multimedia, unter anderem virtual time, scheduling, Synchronisation . Mit HyTime können Dokumente mit verschiedenen Datentypen durch Links verbunden werden.

Identifiziert werden die HyTime-Elemente durch ein spezielles HyTime-Attribut, welchem der Name des entsprechenden HyTime-Templates zugewiesen wird. Man kann Bezeichner für HyTime-Elemente frei wählen. Durch das HyTime-Attribut kann eine HyTime-fähige Applikation das Element als solches Erkennen und eine entsprechende Verarbeitung durchführen. Eine HyTime-Engine kann als SGML-Parser angesehen werden, welcher die Aktionen, die die HyTime-Attribute erfordern verstehen und veranlassen kann.

Eine bestehende DTD kann durch Hinzunahme der HyTime-Deklarationen die Möglichkeiten von HyTime nutzen. Eine Konvertierung ist nicht erforderlich.

3.2 Möglichkeiten mit HyTime

HyTime erweitert das klassische Modell der bibliographischen Verweise zu einem computergestützten Modell "Integrated Open Hypermedia (IOH)". Dieses Modell erlaubt es verschiedene Datentypen aus mehreren verschiedenen Quellen durch Links miteinander zu verbinden. Die Besonderheiten von HyTime liegen in den umfangreichen Möglichkeiten Linkaddressen zu formulieren. HyTime kann man jedes Objekt referenzieren. Handelt es sich um ein strukturiertes Objekt, wie z.B. ein SGML-Dokument, dann können Positionen in der Struktur des Objektes benutzt werden um die Ankerpunkte der Links zu beschreiben. Ist das Dokument unstrukturiert wie z.B. reiner ASCII-Text, dann können Anker mit Hilfe von Byteposition, eindeutigen Bezeichnern oder Suchmustern im Dokument festgelegt werden. Für nicht-Textdokumente kann die Addressierung über Bitmap Suchmuster oder einer Angabe von Koordinaten, welche die Applikation die mit dem Objekt arbeitet benutzt, erfolgen. Für jedes Objekt ist dabei eine Definition mehrerer verschiedener Koordinatensysteme möglich. Wie in Bildern, können auch Addressen in Musikstücken ( MIDI ) und anderen Audiodateien festgelegt werden.

3.3 HyTime-Links

In HyTime unterscheidet man zwischen Links und Location. Ein Link ist eine Beziehung zwischen zwei oder mehreren Locations. Eine Location ist die Adresse eines potentiellen Ankerpunktes, welcher das tatsächliche Ende des Links darstellt.

Abbildung 9: HyTime Linkkonzept ( aus [BEHAHE96] )

Durch diese zunächst etwas kompliziert erscheinende Konstruktion ist eine Veränderung/Aktualisierung der Links weniger aufwendig.
In SGML werden Querverweise mit Hilfe von ID-Attributen und Referenzen auf diese durch IDREF- und IDREFS-Attribute realisiert. Allerdings lassen sich damit nur Links innerhalb eines einzigen Dokumentes realisieren. Obwohl der HyTime-Standard auf SGML basiert übertrifft er die Begrenzungen der SGML-Links und erweitert sie stark.
HyTime definiert zwei Link-Konstrukte. Contextual Link ("clink") und independent Link ("ilink"). Die Locations lassen sich in HyTime auf vielfältige Weise angeben. Oft werden diese als Sequenz sich schrittweise verfeinernder Adressen angegeben ( "location ladders" )
Herkömmliche SGML-Referenz:
... <xref idref="tab21">...
<tbl id="tab21">
<tbltitle>Population...</tbltitle>
<body>...

3.3.1 Contextual Link ( clink )

Der kontextbezogene Link ist der einfachere der HyTime-Linkkonstrukte. Einer seiner Anker ( der "Kontext" ) ist Bestandteil des Dokumentes, an der Stelle, bei der sich die Linkauszeichnung befindet. Die anderen Endpunkte können sich im gleichen oder in anderen Dokumenten befinden. Durch ein IDREF-Attribut wird ein Element referenziert, welches eine HyTime-Adressierung benutzt. Das clink-Konstrukt beschreibt klassische Querverweise.

3.3.2 Independent Link ( ilink )

Der independent Link erlaubt es die Linkdaten extern zu speichern. Die Daten sind getrennt von den Dokumenten, welche mit dem Linkmarkup ausgezeichnet sind. Damit ist es möglich Änderungen an den Linkdaten vorzunehmen, ohne die Dokumente zu verändern, auf die sich der Link bezieht.

4 SGML und Datenbanken

4.1 Vorteile eines elektronischen Informationssystems

Die üblichen Vorteile sind schneller Zugriff, einfaches Kopieren, universelle Einsetzbarkeit. Eine Online-Präsentation, bzw. ein Onlineangebot ermöglicht größtmögliche Aktualität der angebotenen Informationen. Als bei Computersystemen generell nachteilig gegenüber herkömmlichen, papiergebundenen Angeboten ist, daß der Zugriff auf die Dokumente ohne technische Hilfsmittel nicht möglich ist. Des weiteren eignet sich ein Computerbildschirm nicht zum längeren Lesen von Dokumenten. Der "Transport" der Dokumente erfolgt mit Hilfe von Speichermedien ( Diskette, CD, Laptop ) oder der Nutzung von Computernetzwerken.

In einem elektronischen Informationssystems bieten sich erweiterte Möglichkeiten der Dokumentverwaltung. Es ist zum Beispiel möglich die Dokumente über Computernetze zu verbreiten. Eine umfassende statistische Auswertung der Dokumente ist möglich. Versionenmanagement wird einfach erreicht. In Zukunft wird es neben dem herkömmlichen Dokument "Buch" auch Dokumente mit ständiger Pflege und Aktualisierung des Inhaltes geben. Als erste Anfänge dieser Dokumente sind die regelmäßig aktualisierten FAQ-Sammlungen mancher Internet-Newsgruppen zu nennen. Diese werden meist von den Moderatoren dieser Newsgruppen herausgegeben, und spiegeln die Ergebnisse der Diskussionen in der jeweiligen Newsgruppe über längere Zeiträume wieder. Ein weiteres Beispiel wäre: Ein Firma führt ein größeres Projekt durch. Die Mitarbeiter dieses Projektes stammen aus verschiedenen Niederlassungen dieser Firma. Die Mitarbeiter legen ihre bereits fertiggestellten Ergebnisse in einem elektronischem Informationssystem ab ( z.B. SGML-Datenbank ). Während der Dauer des Projektes ist es für alle mitarbeitenden Personen einfach möglich Arbeitsergebnisse auszutauschen. Der Projektleiter kann sich jederzeit über den aktuellen Stand der abgeschlossenen Arbeiten informieren. Die Erstellung von Zwischenberichten ist ohne größeren Aufwand möglich. Schließlich hat man durch die Reduzierung des Kommunikationsaufwandes mehr Zeit für konkrete Aufgaben. Es muß allerdings vorausgesetzt werden, daß eine zweckmäßige Organisation der Daten vorliegt, d.h. es sollte eine hierarchische Struktur vorliegen, außerdem sollten Änderungen an der Datenstruktur mit zumutbarem Aufwand möglich sein. Standardisierte Dokumentenaustauschformate sollten verwendet werden. Die eben genannten Dinge lassen sich mit einer SGML-Datenbank realisieren. Elektronische Systeme können in gewissen Grenzen ( je nach "Intelligenz" des Systems ) die Integrität der erzeugten Daten sichern und überwachen, z.B. die Überprüfung von Hypertextlinks.

Dokumentverwaltung

Zentrale Verwaltung ermöglicht einfach Multiautorprojekte, durch Computernetze können Autoren an beliebigen Orten arbeiten. Die Dokumente sind immer auf dem aktuellsten Stand. Die Dokumente müssen dazu in handhabbare Teile zerlegt werden. Vom Informationssystem können auch Hypertextfähigkeiten bereitgestellt werden, d.h. die Autoren können in ihren Dokumenten Beziehungen zu anderen Dokumenten herstellen und damit ihren inhaltlichen Bezügen auf andere Dokumente eine neue Qualität verleihen.

4.2 SGML-Dokumente in einer Datenbank

4.2.1 Objektorientierte Datenbanken

Bei Textdokumenten hat man keine starre Struktur vorliegen, Änderungen an der Struktur der Dokumente werden oft gemacht und sollten immer einfach möglich sein. Objektorientierte Datenbanken erlauben es auf einfache Weise Daten verschiedener Typen zu beschreiben und zu speichern. Objektorientierte Datenbanken ermöglichen die Speicherung von hierarchischen Datenstrukturen. Objekte können andere Objekte des gleichen, oder eines verschiedenen Typs enthalten und können selbst in anderen Objekten enthalten sein. Die Fähigkeit hierarchische Strukturen und verschiedene Datentypen innerhalb einer Struktur zu speichern, ist genau richtig für die Speicherung von SGML-Dokumenten. Hierarchische Speicherung allein reicht aber für SGML-Dokumente nicht aus. Die ursprüngliche Ordnung der Daten muß erhalten bleiben. Mit objektorientierten Datenbanken ist diese Ordnung aber, im Gegensatz zum relationalen Modell, leicht herzustellen. ( z.B. Verwendung von Listen ) Mit dem relationalen Modell lassen sich die vielfältigen Beziehungen innerhalb der SGML-Dokumente nicht vernünftig darstellen. Zusätzlich wäre der Zugriff auf die Daten im relationalen System mit einer Vielzahl von Join-Operationen verbunden.

Transfer der SGML-Dokumente in die Datenbank

Bevor ein SGML-Dokument in die Datenbank geladen werden kann müssen die Klassendefinitionen erstellt werden. Für jedes Element der DTD wird eine eigene Klasse erstellt. Eine Möglichkeit des Ladens eines Dokumentes in die Datenbank wird durch Abbildung 10 veranschaulicht. Das SGML-Front-End teilt das Dokument in seine Bestandteile auf, erzeugt alle benötigten Objekte und legt diese in der Datenbank ab. Es werden Objekte mit verschiedenen Datentypen erstellt, auch multimediale Daten können mit den Objekten abgespeichert werden. Die in Abbildung 10 gezeigte Lösung ist recht komfortabel, insbesondere der mitgelieferte Volltextindex stellt eine nicht zu unterschätzende Aufwertung des Systems dar.

Abbildung 10: Objektorientierte Datenbank mit SGML Front-End, aus [TRWA95]

4.2.2 Festlegung der Granularität der Daten

Ein bedeutender Faktor bei der Implementierung einer SGML-Datenbank ist die Festlegung des Grades der Granularität, mit welchem die Informationen in der Datenbank abgelegt werden sollen. Eine Einheit ist typischerweise ein Kapitel oder ein Teil, es ist jedoch auch möglich, daß jeder Absatz eine Einheit bildet. Wählt man die Granularität zu groß, z.B. Teil, dann muß der Autor bei der Änderung an einem Kapitel einen ganzen Teil aus der Datenbank laden, Autoren die an anderen Kapiteln dieses Teils arbeiten wollen, erhalten keinen Zugriff. Wählt man die Granularität zu klein, z.B. Absatz: will der Autor größere Änderungen an einem Kapitel vornehmen, muß er jeden Absatz einzeln modifizieren. Die eben genannten Probleme lassen sich durch eine hierarchische Speicherungsstruktur lösen. Eine geeignete Benutzeroberfläche kann den Zugriff auf die einzelnen Absätze durchführen. Der Benutzer arbeitet dabei auf einer höheren Ebene, z.B. Kapitelebene. Mit der letzterenLösung ist eine kleine Granularität vorteilhaft.
Den Grad der Granularität zu bestimmen wird davon beeinflußt, wie die Daten strukturiert sind, und welchem Zweck sie dienen sollen.
Manchmal definiert sich der Grad der Granularität auch selbst. Ein gebräuchlicher Weg ist ein Dokument in Kapitel oder Unterkapitel aufzuteilen. Das ist der Grad, mit welchem Autoren oft arbeiten. In vielen Fällen, z.B. wenn ein Buch mehrere Autoren hat, wird ein Kapitel von einer einzelnen Person erstellt. Bei Setzung der Granularität auf diesen Grad, repräsentiert die Datenbank den natürlichen Umgang der Autoren mit dem Dokument.
Es sind auch die technischen Faktoren bei der Festlegung der Granularität zu berücksichtigen. Für jedes Objekt ist ein gewisser Datenbankoverhead an Daten und Datenstrukturen vorhanden. Bei Systemen mit Granularität auf Absatzebene überschreitet die Größe des Overheads bereits die Größe des Inhaltes. [TRWA95] Der Speicherplatzbedarf ist, bei der Festlegung der Granularität gegen die Zugriffskosten abzuwägen.

4.2.3 Beispiel einer praktisch realisierten SGML-Datenbank

Im folgenden Beispiel aus [ACM94] wird gezeigt, wie SGML-Dokumente in einer objektorientierten Datenbank, konkret O2, repräsentiert werden können und wie man Dokumente in Datenbankinstanzen übertragen kann. Für den Einsatz von O2 spricht zum einen die Abfragesprache OQL , und das gut entwickelte Typensystem. Die hierarchische Struktur eines SGML-Dokumentes kann durch die vorhandenen Datentypen von O2 repräsentiert werden. Das Datenmodell von O2 , besteht aus selbst zu definierenden Objektklassen und vorgefertigten Typen. Insbesondere Aggregation und Listen lassen sich gut für die Beschreibung der Dokumentstruktur einsetzen. Multimediatypen lassen sich im allgemeinen einfach in objektorientierte Datenbanken eingliedern, in O2 ist für Bilder schon der Datentyp "Image" vorhanden. Querverweise zwischen logischen Einheiten lassen sich einfach durch Nutzung der Objektidentität realisieren. Nicht zuletzt ist Objekt-Sharing nützlich bei der Modifizierung von Dokumenten, was vor allem die Erstellung von Dokumenten unterstützt.
Allerdings gibt es für die Übertragung von speziellen SGML-Konstrukten, wie Verbindungssymbolen ( connectors ) und Vorkommenssymbolen ( occurence Indicator ) in O2 und anderen objektorientierten Datenbanken keine geeigneten Datentypen. Es müssen daher andere Lösungen benutzt werden.

Geordnete Tupel: Die Ordnung von Elementen innerhalb eines Tupels ist in SGML wesentlich. Die Übertragung solcher geordneter Tupel in Datenstrukturen des Datenbanksystems erfordert Kompromisse. Eine Möglichkeit ist, in ein Objekt ein zusätzliches Attribut einzufügen, in welchem die Reihenfolge der Elemente gespeichert wird. Diese Lösung ist aber nachteilig für die Formulierung von Anfragen.

Vereinigung von Typen: Ein Elementtyp kann in SGML als alternative Struktur vereinbart werden. Eine Vereinigung von Typen ist dafür die geeignete Lösung. Der Typ "Union" gehört nicht unmittelbar zu O2 und muß daher selbst vereinbart werden. Ein Tag innerhalb des Uniontyps gibt an, welcher der alternativen Typen benutzt werden soll.

Beispiel 4.1: O2 Klassen für Dokumente vom Typ Artikel nach [ACM94]

class Article public type tuple(title: Title, authors: list(Author), affil: Affil, 
                                            abstract: Abstract, sections: list(Section), 
                                            acknowl: Acknowl, private status: string) 
                         constraint: title != nil, authors != list(), abstract != nil, 
                         sections != list(), status in set("final","draft") 
class Title inherit Text 
class Author inherit Text 
class Affil inherit Text 
class Abstract inherit Text 
class Section public type union(a1: tuple(title: Title, bodies: list(Body)),
                                a2: tuple(title: Title, bodies: list(Body), 
                                    subsectns: list(Subsectn))) 
              constraint: (a1.title != nil, a1.bodies != list()) 
                           |(a2.title != nil, a2.subsectns != list()) 
class Subsectn public type tuple (title: Title, bodies: list(Body)) 
              constraint: title != nil, bodies != list() 
class Body public type union(figure: Figure, paragr: Paragr) 
              constraint: figure != nil | paragr != nil 
class Figure public type tuple(picture: Picture, caption: Caption, 
                               label: list(Object)) 
              constraint: picture != nil 
class Picture inherit Bitmap 
class Caption inherit Text 
class Paragr inherit Text 
             type tuple(private reflabel: Object) 
               constraint: reflabel != nil 
class Acknowl inherit Text 
name Articles: list(Article) 

Ein Problem besteht darin aus einem SGML-Dokument eine Datenbankrepräsentation zu erzeugen. Die DTD muß dazu in ein O2-Schema überführt werden, und die Dokumentinstanzen müssen in die entsprechenden Objekte abgespeichert werden. Jedes in der DTD definierte SGML-Element wird als eine Klasse eines Typs, mit einigen Integritätsbedingungen und Standardmethoden ( z.B.: Lese- und Schreibmethoden für jedes Attribut ) erzeugt. Das Beispiel 4.1 zeigt die O2-Repräsentation der aus Beispiel 2.3 entnommenen DTD. Ein Basistyp von SGML wird durch eine O2 Klasse mit entsprechenden Datentypen repräsentiert ( Text, Bitmap ). Die O2-Tupel werden als geordnet angesehen. Die Verbindungen ("|") zwischen den Elementen werden durch Union-Typen ausgedrückt. Für SGML-Elemente ohne direkte Benennung ( ein expliziter Bezeichner fehlt ) die durch verschachtelte runde Klammern definiert sind ( z.B. (title,body+) in Beispiel 2.3, Definition von "section" ), werden vom System eigene Namen erzeugt. ( z.B. a1 in der Klasse "section" ) Die mit "+" oder "*" gekennzeichneten Elemente werden als Listen dargestellt. ( siehe Attribut "author" in Klasse "Article") Integritätsbedingungen müssen eingeführt werden, um die verschiedenen Suffixe ( "+","*" : Angaben über die Anzahl des Vorkommens der Elemente ) nachzubilden ( Wert ist erforderlich, Wert muß mindestens einmal vorkommen, usw. )
Die Flexibilisierung des Zugriffs auf die Daten, die eine Repräsentation von SGML-Dokumenten in einer objektorientierten Datenbank bietet, werden dabei durch einen erhöhten Speicherbedarf erkauft.
Ohne eine objektorientierte Datenbank werden Abfragen in SGML-Dokumenten üblicherweise in der Art von Information Retrieval Systems (IRS) durchgeführt. IRS bieten zwei wesentliche Fähigkeiten, die in objektorientierten Datenbanken fehlen. Dazu gehört ein umfangreiches pattern matching basierend auf einem Volltextindex und als Wesentliches: der Benutzer braucht die Struktur des Dokumentes für die Formulierung seiner Anfragen nicht zu kennen. Natürlich möchte man auf diese Fähigkeiten bei einem objektorientiertem Datenbanksystem nicht verzichten.
Im folgenden wird gezeigt, wie diese beiden Fähigkeiten in O2 nachgebildet werden.

4.2.3.1 Abfragen über Strings

O2SQL ist definiert über einer Menge von Grundabfragen und der Möglichkeit neue Abfragen durch Komposition zu erstellen. Um die IRS-Fähigkeiten in das bestehende System zu bringen werden neue Grundabfragen in das Modell eingebracht.
Die folgende Abfrage führt das Prädikat "contains" ein, welches Pattern-Matching erlaubt.

Q1: Finde den Titel und den ersten Autor der Artikel die im Titel die Worte "SGML" und "OODBMS" enthalten.

Das "contains"-Prädikat erlaubt einen String mit einem Zeichenmuster (Pattern), oder einer booleschen Kombination von Zeichenmustern zu vergleichen. Außerdem wurde neben anderen neuen Prädikaten auch das "near"-Prädikat implementiert, welches erlaubt, den Abstand zweier gefundener Zeichenmuster einzugrenzen ( Abstand als bestimmte Anzahl von Buchstaben oder Worten ).

Verwendung von Uniontypen

Die Einführung von Uniontypen erfordert einige größere Änderungen an der Typprüfung von O2SQL Anfragen und auch Änderungen bei den O2SQL Iteratoren ( select-from-where, exists, etc) . Wenn zum Beispiel eine "collection" aufgebaut wird, wird überprüft, ob die Elemente einen gemeinsamen Supertyp haben.
O2SQL zwingt zu Typrestriktionen. Mit der Einführung des Uniontyps müssen auch Typregeln festgelegt werden. Es folgen nun die zwei Hauptregeln :

  1. Es gibt keinen gemeinsamen Supertyp zwischen Uniontypen und anderen, nicht-Uniontypen. Das erlaubt es zum Beispiel nicht, einen Durchschnitt zwischen einer Menge von Integern und einer Menge von (a: integer ; b: char) durchzuführen.
  2. Zwei Uniontypen haben eine gemeinsamen Supertyp wenn sie keinen Attributkonflikt haben ( z.B.: Typen mit dem gleichen Attribut "a", deren Grundbereiche keinen gemeinsamen Supertyp haben ). Der kleinste gemeinsame Supertyp von zwei Uniontypen ist die Vereinigung der beiden Typen. Zum Beispiel ist ( a:integer ; b: char ; c: string ) der kleinste gemeinsame Supertyp der Typen (a: integer ; b: char) und ( b: char ; c: string). Es ist zu anzumerken, das diese Typregel zu einer kombinatorischen Vervielfachung der Typen führt.

Regel 1 muß nur selten benutzt werden und die zu erwartende Vervielfachung durch Regel 2 läßt sich durch Hinzufügen von Semantikregeln im O2SQL Typensystem unter Kontrolle bringen.
Das folgende Beispiel zeigt, wie in O2SQL die Auswertung von Iteratoren modifiziert wurde, um Uniontypen zu verarbeiten.

Q2: Finde alle Unterkapitel der Artikel, die "complex object" enthalten.

Im Gegensatz zu Q1 wird die "contains"-Operation nicht über einzelnen Datenobjekten, sondern über komplexeren logischen Objekten ( hier Unterkapitel ) durchgeführt. Durch Verwendung des Operators "text", welcher vom System bereitgestellt wird, läßt sich die "contains"-Operation dennoch anwenden. Im Schema des Beispiels 4.1 haben Kapitel (sections) einen Uniontyp. Ein Kapitel welches mit "a1" bezeichnet ist, steht für ein Tupel mit den Attributen "title" und "body" und ein Kapitel "a2" für ein Tupel mit "title", "bodies" und "subsectns". In der Anfrage Q2 erstreckt sich die Variable "ss" über Unterkapitel von Kapiteln, die mit "a2" bezeichnet wurden. Zwei Bemerkungen sind dazu notwendig. Erstens: In der Abfrage wird bei der Definition der Variable "ss" in der From-Klausel, der Bezeichner "a2" weggelassen. Diese syntaktische Besonderheit ist notwendig, da der Benutzer im allgemeinen die Bezeichnungen in den Uniontypen nicht kennt. Zweitens: Eine Nichtbehandlung der Kapitel, die nicht mit "a2" bezeichnet sind, ist nicht erwünscht. ( Die Kapitel ohne Unterkapitel sollen bei der Abfrage nicht vergessen werden ).

Um dieses Problem zu bewältigen wird der Begriff des "implicit selectors" eingeführt. Jede Operation auf einer Variable, die sich über Uniontypen erstreckt erfordert eine "bedingungslose Auswahl", d.h. , daß von dem Uniontyp automatisch der vorhandene ( mit Werten belegte ) Typ geliefert wird. In Q2 ist die "implicit selection" "s.a2". Dieser Mechanismus funktioniert allerdings nur für Variablen und nicht für konkrete Instanzen. Als Beispiel: angenommen es gibt einen Namen "my_section", der instanziiert wird durch ein Kapitel bezeichnet mit "a1". In diesem Fall liefert die Abfrage "my_sections.subsectns" zur Laufzeit einen Typenkonflikt.

Nun zurück zu den syntaktischen Besonderheiten eines etwas komplizierteren Beispiels. Angenommen, man ist anstelle der Unterkapitel an den Inhalten ( bodies ) des Artikels interessiert. Die From-Klausel erhält folgende Gestalt: from a in Articles, s in a.sections, b in s.bodies . Die Variable "b" erstreckt sich dabei über die Vereiningung von "s.a1.bodies" und "s.a2.bodies" und zwei "implicit selectors" müssen verwendet werden, um Ausführungsfehler zu vermeiden. In diesem Fall sind beide Attribute "bodies" vom gleichen Typ, das kann aber nicht immer vorausgesetzt werden. Wenn das nicht der Fall sein sollte wird vom System ein bezeichneter Uniontyp generiert.

4.2.3.2 Abfragen über Pfaden und Attribute

Um die Dokumente Abzufragen ohne genaue Kenntnisse über ihre Struktur zu besitzen werden zwei neue Konstrukte eingeführt: PATH und ATT. Einen Wert aus dem vorher besprochenem wird durch einen Pfad durch komplexe Objekte ( Tupel, Listen ) und einem Attributnamen ( eines Tupels oder einer bezeichneten Union ) repräsentiert. Zum Beispiel ist ".sections[0].subsectns[0]" ein Pfad, der das Attribut "sections" vom Typ Liste, dann das erste Kapitel, dann das Attribut "subsectns" dieses Kapitels und schließlich das erste Unterkapitel bezeichnet. Diese Pfade können wie normale Daten abgefragt werden.

Wie alle Typen, die in O2SQL manipuliert wurden, haben "PATH" und "ATT" ihre eigenen Variablen und Standardabfragen. Um Variablen nach ihrer Art ( normale Daten, PATH, ATT ) zu unterscheiden werden PATH-Variablen mit "PATH_" und ATT-Variablen mit "ATT_" begonnen. In der nächsten Abfrage ist "my_article" ein Persistent-Root-Objekt, welches einen Artikel darstellt.

Q3: Finde alle Titel in "my_article".

Als Ergebnis erhält man eine Menge von Titeln, die von verschiedenen Pfaden der Artikelstruktur aus erreicht werden können. ( Haupttitel, Titel eines Kapitels, Titel eines Unterkapitels ... )
Die Unterabfrage "my_article PATH_p.title(t)" ist eine neue Standardabfrage. Es handelt sich um einen Pfadausdruck mit Variablen ( im Beispiel "PATH_p" und "t" ), dessen Semantik sich von herkömmlichen Pfadausdrücken unterscheidet. Die eben genannten Abfragen liefern eine Menge von Tupeln mit einem Attribut je Variable zurück. Im Beispiel werden Tupel mit zwei Attributen zurückgeliefert : "t" und "PATH_p"

Es bleibt noch einiges anzumerken:

  1. Falls man die Pfadangaben nicht haben möchte kann man auch die Form
    from my_article .. title(t)
    verwenden.
  2. Die Anwesenheit von Pfadvariablen impliziert meist, daß die entsprechenden Datenvariablen vom Uniontyp sind. Natürlich erwartet man, daß die Verfolgung verschiedener Pfade nach sich zieht, daß man verschiedene Datentypen erreicht. Das ist teilweise richtig, wenn man Anfragen an Daten von verschiedenen Quellen hat, z.B. können verschiedene Autoren ihre Kapitel unterschiedlich strukturieren.
  3. Pfadvariable können auch außerhalb von From-Klauseln benutzt werden. Zum Beispiel ist der Ausdruck
    my_article PATH_p.title
    eine Abfrage, die eine Menge von Pfaden zu einem Titelfeld zurückliefert.
  4. Pfad ist ein Datentyp, der mit einigen Funktionen ausgestattet ist. Z.B. können Listenfunktionen teilweise auf Pfade angewendet werden. Beispiel: Vorausgesetzt sei, das "P" ein Pfad mit dem Wert ".sections[0].subsectns[0]" ist, dann kann man die Länge des Pfades "P" ausrechnen ( length(P)=4 ) und "P" auf seine ersten beiden Elemente projizieren P[0:1] = .sections[0].
  5. Wenn Pfadvariablen in Pfadausdrücken benutzt werden, besteht immer die Gefahr der Schleifenbildung ( sowohl im Schema als auch in den Daten ).

Für ein weiteres Beispiel der Benutzung von Abfragen mit Pfaden ohne die genaue Struktur des Dokumentes zu kennen, sei "my_old_article" der Name einer älteren Version von "my_article". Dann läßt sich die folgende Abfrage durchführen:

Q4: Zeige die strukturellen Unterschiede der zwei Versionen von "my_article"

Der linke Teil der Differenzbildung liefert eine Menge von Pfaden beginnend bei "my_article" ( beim rechten Teil analog, aber beginnend bei "my_old_article" ). Die Differenzoperation liefert die Pfade zurück, die in der neuen Version von "my_article" enthalten sind und nicht in der Alten. Ergänzende Bedingungen in der Datenstruktur des Dokumentensystems könnten so eine Erkennung von Aktualisierungen oder Umstellungen von Textobjekten im inneren der Dokumentstruktur ermöglichen.

Im der nächsten Abfrage werden auch Attribute verwendet.

Q5: Finde die Attribute, die in "my_article" definiert sind, und deren Belegung den Wert "final" enthält.

In diesem Beispiel erstreckt sich der Bereich der Variablen "val" über Daten, die von "my_article" aus über einen Pfad, hier "PATH_p" erreicht werden können ( auch leerer Pfad ist möglich ), bis zum Attribut, das von ATT_a geliefert wird. Entsprechend dem Initialtyp von "val" wird die Vereinigung aller möglichen Typen die in "myarticle" vorkommen gefunden. Die Unterabfrage " val contains ("final") " benutzt die "implicit selection" "val.a" wobei "a: string" ein Attribut vom Typ String im entsprechenden Uniontyp ist. O2SQL ordnet "val" den Typ string zu. Die zurückgelieferten Attribute sind die, deren Wert "final" enthält. Mit dieser Möglichkeit ist eine weitere Qualitätsstufe bei Abfragen auf objektorientierten Datenbanken realisiert. Die Funktion "name" liefert eine Zeichenkette zurück, hier den Namen des Attributes.

Abfragen über Attributen bezüglich ihrer Position

In diesem Abschnitt wird das Problem der geordneten Tupel besprochen. In SGML-Dokumenten werden geordnete Tupel für die Repräsentation der Daten benutzt. Die Eigenschaft des Geordnetseins läßt die Betrachtung eines geordneten Tupels als heterogene Liste zu. Als Beispiel nehmen wir an, daß unsere Datenbank Briefe enthält. Diese Briefe besitzen eine Einleitung, die unter anderem die Empfänger- ( Attribut "to" ) und die Absenderadresse ( Attribut "from" ) enthält. Eine Reihenfolge beider Attribute ist von der SGML-Deklaration her nicht vorgesehen ( Verwendung des "&" Verbinders ). Damit läßt sich folgende Abfrage konstruieren:

Q6: Finde die Briefe, in denen in der Einleitung der Absender vor dem Empfänger steht.

Bei dieser Abfrage muß man beachten, das bei den Tupeln ( to: string ; from: string ; ... ), welche die Einleitung eines Briefes als eine Liste von Elementen, die zu einem Uniontyp [( to: string + from:string + ... )] gehören, repräsentieren, jeder der Typen durch den Attributsnamen des Originaltupels bezeichnet ist.
Eine ausführlichere Erläuterung: "letter.preamble[i].to" und "letter.preamble[j].from" bearbeiten immer den gleichen Brief ( "letter" ) ( erster Teil der From-Klausel ) , "i" in "letter.preamble[i].to" gibt die Position des Attributes "to" im entsprechenden Tupel an, "j" in "letter.preamble[j].from" gibt die entsprechende Position des Attributes "from" im entsprechenden Tupel an.

Also definiert die from-Klausel drei Datenvariablen: "letter" der alle Briefe umfaßt, sowie "i" und "j" die über die Positionen der Marker "from" und "to" in den entsprechenden Briefen reichen. Die where-Klausel wird benutzt, um die gewünschten Tripel ( Brief, i, j ) zu selektieren, und die select-Klausel gibt die entsprechenden Briefe zurück.

4.2.4 Probleme bei der automatischen Erzeugung von Objektklassen aus einer DTD

Generell ist die automatische Erzeugung von Objektklassen aufgrund der großen Menge von Dokumenten notwendig. Da man aber in einer Datenbank Dokumente mit verschiedenen DTD's aufbewahren kann, kommt es unter Umständen zu Schwierigkeiten. Zum Beispiel ist es denkbar, daß in unterschiedlichen DTD's unterschiedliche Bezeichnungen für die Einheit "Kapitel" verwendet werden, was sich nachteilig für die Formulierung von Abfragen auswirkt. Eine einheitliche DTD läßt sich aber in einem größerem bzw. universellen System nicht direkt bzw. nur unter größeren Umständen realisieren. Denkbar wäre eine Übersetzung der SGML-Dokumente auf eine im Datenbanksystem benutzte DTD. Diese Übertragung läßt sich aber im allgemeinen nicht vollständig automatisieren. Außerdem können spezielle Konstruktionen einer DTD nicht immer 100% sinnentsprechend auf eine andere DTD übertragen werden.

5 Zusammenfassung

SGML läßt sich universell für die Beschreibung von Dokumenten einsetzen. Mit SGML erstellte Dokumente eignen sich für einen Dokumentenaustausch. Bei der Trennung von Inhalt und Layout überwiegen die Vorteile gegenüber einem konventionellen System. Der Hauptvorteil ist die Möglichkeit ein Dokument für verschiedene Medien aufzubereiten. Ein weiterer Vorteil besteht darin, verschiedene Sichten auf ein Dokument für verschiedene Zielgruppen zu erstellen. Mit SGML-Dokumenten lassen sich die Möglichkeiten der elektronischen Datenverarbeitung besser als bisher ausnutzen. Durch die Verwendung von speziellen SGML-Editoren kann die Erstellung von Dokumenten unterstützt werden. Mit SGML lassen sich Dokumentenmanagementsysteme realisieren. Die Errichtung einer digitalen Bibliothek, welche auch vom Internet aus recherchiert werden kann ist mit SGML-Unterstützung möglich. Der SGML-Standard erlangt immer mehr an Bedeutung, vor allem, weil durch die stark wachsende Dokumentenmenge Werkzeuge zu einer effektiven Bearbeitung gebraucht werden. Für die Abspeicherung von SGML-Dokumenten bieten sich objektorientierte Datenbanken an. Sie bieten alle wesentlichen Möglichkeiten, die ein effektives Arbeiten mit SGML-Dokumenten erfordert. Information Retrieval Systeme auf SGML-Basis stehen noch am Anfang ihrer Entwicklung. Die Umsetzung typischer IRS-Anfragen auf Objektorientierte Datenbanken bieten neue Möglichkeiten, wie z.B. der gezielten Suche in Überschriften oder einzelnen Kapiteln.

6 Literaturverzeichnis

ACM94 Christophides, V.; Abiteboul, S.; Cluet, S.; Scholl, M.: From structured documents to novel query facilities. Proc. ACM SIGMOD conf., 1994 , [R 9315]

BAN94 Böhm, K; Aberer, K.; Neuhold, E. : Administering structured documents in digital libraries. Proc. Workshop on Digital Libraries 1994 , ( LNCS 916 ), [K 8373]

BEHAHE96 Bergström, Peter; Haitto, Hasse; Helander, Erik u.a. : Quick Guide to HyTime Basics, Technical Report 1 from the HyTime Working Group, Swedish SGML User's Group 1996

BRYA93 Bryan, Martin : Standards for text and hypermedia processing. aus Information Services & Use 13, IOS Press 1993

COJA96 Colby, Martin; Jackson, David S. : Special Edition Using SGML QUE Corporation, 1996

SZ95 Szillat, Horst : SGML Eine Praktische Einführung. 1. Auflage, International Thomson Publishing, Bonn 1995 , [R 7468]

TO95 Tolksdorf, Robert : Die Sprache des Web - HTML 3 . 2. Auflage, dpunkt-Verlag

TRWA95 Travis B., Waldt D. : The SGML Implementation Guide. Springer Berlin 1995 , [R 8272]