Labeling dynamischer XML-Bäume

Werbung
Labeling dynamischer XML-Bäume
Seminararbeit
von
Jochen Leitz
vorgelegt am
Lehrstuhl für Praktische Informatik III
Prof. Dr. Guido Moerkotte
Universität Mannheim
im
Februar 2004
Inhaltsverzeichnis
1 Einleitung
3
2 Grundlagen
5
2.1 Strukturelle Anfragen . . . . . . . . . . . . . . . . . . . . . . .
5
2.2 Labeling-Algorithmen . . . . . . . . . . . . . . . . . . . . . . .
6
2.2.1
Präfixbäume . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.2
Intervallbäume . . . . . . . . . . . . . . . . . . . . . .
8
2.3 Anwendung struktureller Labels . . . . . . . . . . . . . . . . .
8
3 Statisches Labeling
9
4 Dynamisches Labeling
11
4.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Labeling mittels Präfixbäumen . . . . . . . . . . . . . . . . . . 12
4.3 Labeling mittels Intervallbäumen . . . . . . . . . . . . . . . . 13
4.3.1
Ganzzahlige Markierung . . . . . . . . . . . . . . . . . 14
4.3.2
Intervall-Labeling . . . . . . . . . . . . . . . . . . . . . 17
4.3.3
Erweiterung des Intervall-Labeling . . . . . . . . . . . 17
5 Clues
19
5.1 Größe eines Labels . . . . . . . . . . . . . . . . . . . . . . . . 19
5.1.1
Statisches Labeling . . . . . . . . . . . . . . . . . . . . 19
5.1.2
Dynamisches Labeling . . . . . . . . . . . . . . . . . . 19
5.2 Subtree Clues . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3 Sibling Clues . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6 Zusammenfassung
24
Literaturverzeichnis
24
2
1
Einleitung
Der Inhalt eines XML-Dokuments [1] kann als eine Menge von Dokumentknoten dargestellt werden. Um die Knoten innerhalb eines Dokuments unterscheiden zu können, muss jeder mit einem eindeutigen Kennzeichner (Label )
versehen werden.
Diese Labels sind grundsätzlich beim gezielten Zugriff auf Dokumentinhalte, wie bei der Anfragebearbeitung, notwendig. Bei geschickter Wahl können Labels nicht nur zum Identifizieren von Knoten dienen, sondern erlauben
auch die Beantwortung von strukturellen Anfragen ausschließlich durch Indexzugriff.
Labels können so gewählt werden, dass für zwei Knoten nur durch Vergleich ihrer Labels entschieden werden kann, ob zwischen den Knoten eine
Vorgänger-/Nachfolgerbeziehung besteht.
Zur Hilfe bei der effizienten Auswertung von Anfragen werden also zwei
Anforderungen an ein Label gestellt: es muss einen Knoten eindeutig identifizieren und Strukturinformation enthalten.
XML-Dokumente lassen sich als Bäume darstellen. Es werden für die
Vergabe von Labels statische Bäume betrachtet, in denen die Baumstruktur
bekannt ist, und dynamische Bäume, in denen sich die Struktur z. B. durch
Einfügen weiterer Knoten ändern kann.
Im statischen Fall ist es einfach, ein einziges Label, das beide der oben
genannten Anforderungen erfüllt, zuzuweisen. Im dynamischen Fall werden
häufig zwei Labels pro Knoten verwendet: ein eindeutiges, persistentes, das
beim Einfügen eines Knotens in das Dokument vergeben wird und immer
gleich bleibt, und ein strukturelles für die Strukturinformationen, das bei
weiteren Änderungen am Dokument neu berechnet werden muss, da sich die
strukturellen Beziehungen zwischen Knoten geändert haben könnten.
3
Die hier behandelte Arbeit von Cohen, Kaplan und Milo [3] untersucht
Labeling-Algorithmen für statische und dynamische XML-Bäume. Für die
dynamische Variante wird gezeigt, wie ein einziges persistentes, strukturelles
Label beim Einfügen jedes Knotens vergeben werden kann. Des Weiteren
wird die Größe der von beiden Varianten erzeugten Labels verglichen, um
den benötigten Speicherplatz abzuschätzen.
Der weitere Verlauf ist wie folgt: In Abschnitt 2 werden Grundlagen erklärt. Um die Auswertung struktureller Anfragen ohne Zugriff auf Nutzdaten
zu zeigen, wird statisches Labeling an einem Beispiel in Abschnitt 3 betrachtet. In Abschnitt 4 werden dynamische Labeling-Algorithmen vorgestellt.
Weiter zeigt die Arbeit in Abschnitt 5 einen Vergleich des Speicherverbrauchs
beim statischen und dynamischen Labeling, und wie die Größe der Labels im
dynamischen Fall verringert werden kann, wenn Hinweise (clues) auf die zukünftige Dokumentstruktur vorhanden sind. Zuletzt erfolgt in Abschnitt 6
die Zusammenfassung.
4
2
Grundlagen
2.1
Strukturelle Anfragen
Um den Begriff des strukturellen Labels genauer zu erklären, wird er anhand
seines Einsatzgebiets vorgestellt. Ein Beispiel für eine strukturelle Anfrage,
die durch Labels unterstützt werden kann, ist die Suche nach allen Titeln
von Büchern in einem XML-Literaturverzeichnis. In diesem Fall sollen alle
Dokumentknoten vom Typ titel geliefert werden, die als Vorgänger einen
buch-Knoten haben, und nicht einen artikel- oder zeitschrift-Knoten
(siehe Abb. 1).
literatur
buecher
zeitschriften
buch
buch
zeitschrift
titel
titel
titel
Abbildung 1: Beispieldokument
Über diese Vorgänger-/Nachfolgerbeziehung soll nur durch Betrachten der
strukturellen Labels, ohne Untersuchung der Nutzdaten, entschieden werden
können. Damit wird vermieden, für jeden titel-Knoten im Dokument durch
Textsuche zu überprüfen, ob er innerhalb eines buch-Knotens vorkommt,
oder nicht.
5
2.2
Labeling-Algorithmen
Bei der Berechnung von strukturellen Labels werden in dieser Arbeit statische
und dynamische Labelingverfahren unterschieden. Im Folgenden ist L(B)
die Menge der strukturellen Labels eines Baums B und L(v) das Label eines
Knotens v aus der Knotenmenge des Baums V (B). L(B) wird als gültig
bezeichnet, wenn jedem Knoten ein eindeutiges Label zugeordnet ist, so dass
ein Vergleich zwischen zwei Labels dieselbe Beziehung ergibt, wie sie auch
tatsächlich im Baum zwischen den Knoten besteht.
statischer Labeling-Algorithmus:
Eingabe: B mit bekannter Struktur
Ausgabe: L(B) = {L(v) : v ∈ V (B)}
gültig für die gegebene Struktur von B
dynamischer Labeling-Algorithmus:
Eingabe: B mit teilweise bekannter Struktur
Ausgabe: L(B) = {L(v) : v ∈ V (B)}
gültig für alle möglichen Fortsetzungen von B
Bei der statischen Variante ist somit das Labeling an eine feste Baumstruktur (statischer Baum) gebunden, und die Labels müssen für alle Knoten neu berechnet werden, wenn sich die Struktur z. B. durch Einfügen neuer
Knoten ändert. Für statische Bäume genügt diese Art Algorithmus. Wenn jedoch bei dynamischen Bäumen Knoten nach Änderungen weiterhin eindeutig
identifiziert werden sollen, muss zusätzlich zum strukturellen ein eindeutiges
persistentes Label existieren.
Ein dynamischer Labeling-Algorithmus erhält als Eingabe einen dynamischen Baum, in den noch Knoten eingefügt werden können. Labels werden
so vergeben, dass das Labeling trotzdem in obigem Sinne gültig bleibt. D. h.
6
beim Einfügen neuer Knoten müssen die Labels bereits vorhandener Knoten nicht neu berechnet werden, die Labels sind eindeutig und anhand ihnen
kann über strukturelle Beziehungen entschieden werden. Ein solches kann
also als persistentes strukturelles Label verwendet werden.
Gleichgültig welches Verfahren verwendet wird, es gibt zwei wesentliche
Möglichkeiten, strukturelle Labels zu berechnen. Entweder wird der Baum
als Präfixbaum, oder als Intervallbaum aufgefasst.
2.2.1
Präfixbäume
Ein Präfixbaum ist in dieser Arbeit so definiert, dass für zwei Knoten u,v
und ihre zugeordneten Präfixe L(u),L(v) gilt:
v Nachfolger von u ⇐⇒ L(u) Präfix von L(v)
Zum Beispiel ist in Abbildung 2 das Label 10 Präfix aller anderen Labels
und damit ist sein Knoten Vorgänger aller anderen.
[1, 8]
10
100
1010
[2, 5]
1000
[6, 7]
[3, 4]
Abbildung 2: Präfixbaum
Abbildung 3: Intervallbaum
7
2.2.2
Intervallbäume
Ein Intervallbaum ist hier folgendermaßen definiert: Für zwei Knoten u,v
und ihre zugeordneten Intervalle L(u),L(v) gilt:
v Nachfolger von u ⇐⇒ L(v) ⊆ L(u)
Die Intervalle werden als Labels verwendet. So sind in Abb. 3, die einen
durch Tiefensuche nummerierten Baum zeigt, die Intervalle [2, 5], [6, 7] und
[3, 4] Teilmengen des Intervalls der Wurzel [1, 8], und die dazugehörigen Knoten sind somit Nachfolger des Wurzelknotens.
Durch mit Präfix- und Intervallbäumen berechnete Labels kann also über
Beziehungen zwischen Knoten entschieden werden, ohne den tatsächlichen
Baum zu betrachten, d. h. die Struktur der Nutzdaten zu untersuchen.
2.3
Anwendung struktureller Labels
Die Tatsache, dass anhand der Labels über Strukturbeziehungen entschieden werden kann, wird insbesondere bei der Speicherung von Dokumenten
in XML-Datenbankmanagementsystemen (XDBMS) interessant. Diese besitzen Indexstrukturen, die eine schnellere Auswertung von Anfragen auf die
gespeicherten Dokumente erlauben.
Eine mögliche Indexstruktur ist ein Key-Value - Index. Die Schlüssel
(keys) sind die Elemente, Attribute und Worte eines XML-Dokuments. Jedem Schlüssel wird folgender Wert (value) zugeordnet: die Liste der Dokumente in denen er vorkommt, und pro Dokument die Labels der betroffenen
Knoten. Handelt es sich um strukturelle Labels, kann über Beziehungen zwischen Knoten nur durch Betrachtung der Labels in der Indexstruktur entschieden werden. Hier ist ein dynamischer Labeling-Algorithmus sinnvoll, da
es bei Updates auf Dokumente nicht erwünscht ist, Labels neu zu berechnen,
und dadurch die Indexstruktur ebenfalls aktualisieren zu müssen.
8
3
Statisches Labeling
Beim statischen Labeling ist die Struktur des Baums bekannt, und er kann
Knoten für Knoten mit Labels versehen werden. Im folgenden Beispiel entsteht durch Tiefensuchenummerierung ein strukturelles Label, das zugleich
eindeutig ist. Somit können die Knoten über ihre Label z. B. in eine Hashtabelle abgebildet werden.
literatur
buecher
[1, 18]
[2, 11]
zeitschriften
[12, 17]
buch
[3, 6]
buch
[7, 10]
zeitschrift
[13, 16]
titel
[4, 5]
titel
[8, 9]
titel
[14, 15]
Abbildung 4: statisches Labeling durch einen Intervallbaum
...
−→ . . .
{<buecher>} −→ {dokument1, {[2, 11]}}
{<buch>}
−→ {dokument1, {[3, 6], [7, 10]}}
{<titel>}
−→ {dokument1, {[4, 5], [8, 9], [14, 15]}}
...
−→ . . .
Abbildung 5: Auschnitt eines Key-Value - Index
In den Abbildungen 4 und 5 wird der Zusammenhang zwischen Labels
und Index gezeigt. Zur Vereinfachung wird nur ein Dokument verwendet. Betrachtet wird nun eine Anfrage an ein Literaturverzeichnis mit verschiedenen
9
Arten von Quellen wie Büchern, Zeitschriften, u. s. w. nach allen Buchtiteln
(z. B. in der XML-Anfragesprache XPath[2]: //buch/titel).
Es müssen alle titel-Knoten in die Ergebnismenge, die einen buchKnoten als Vorgänger haben, d. h. das Intervall des titel-Knotens muss
Teilmenge des Intervalls eines buch-Knotens sein. Bei den titel-Knoten
mit Label [4, 5] und [8, 9] ist dies wegen
[4, 5] ⊆ [3, 6]
und
[8, 9] ⊆ [7, 10]
der Fall. Für den titel-Knoten mit Label [14, 15] gibt es keinen buchKnoten, dessen Intervall seines umfasst.
Erst wenn so die Labels der relevanten Knoten bestimmt wurden, muss
auf die Nutzdaten zugegriffen werden, um das tatsächliche Ergebnis der Anfrage, in diesem Fall den Inhalt der titel-Knoten, zu liefern.
Wenn dieser Baum durch das Einfügen oder Entfernen von Knoten dynamisch wird, gibt es jedoch einige Probleme, die im folgenden Abschnitt
erklärt werden.
10
4
Dynamisches Labeling
4.1
Motivation
Wenn Knoten aus einem mit statischem Labeling bearbeiteten Baum wie
im letzten Abschnitt entfernt werden, bleibt die Teilmengenbeziehung zwar
erhalten, es entstehen aber unnötige Lücken zwischen den Wertebereichen der
Labels. Kleine Werte bleiben unbenutzt, dafür werden größere verwendet.
Dies ist nicht erwünscht, da Labels möglichst klein sein sollen, um sie schnell
vergleichen und effizient speichern zu können.
Beim Einfügen neuer Knoten in den Baum müssen die Labels neu berechnet werden, da z. B. unter den Blättern kein Platz mehr für neue Intervalle
ist. Die Möglichkeit, im Voraus Lücken zwischen den Labels zu definieren,
um Platz für zukünftige Knoten zu lassen, hat den Nachteil, dass Wertebereiche für Labels reserviert sind, die vielleicht niemals gebraucht werden,
oder dass zuwenig Platz reserviert wird, was eine Neuberechnung notwendig
macht.
Um trotz der Neuberechnung des strukturellen Labels jedem Knoten ein
eindeutiges, dauerhaftes Label zuzuordnen, wird zusätzlich zu dem aus einem
statischen Labeling gewonnenen strukturellen Label ein zweites persistentes
Label pro Knoten verwendet, das beim Einfügen des Knotens zugewiesen
wird.
Dynamisches Labeling sorgt nun dafür, dass Bäume mit persistenten
strukturellen Labels versehen werden können, so dass diese bei Updates nicht
neu berechnet werden müssen. Als Updates werden hier Einfügen und Entfernen betrachtet.
Verschieben wird als Entfernen mit anschließendem Einfügen modelliert,
da sich hierbei die Dokumentstruktur und damit Vorgänger- oder Nachfolgerbeziehungen zwischen Knoten ändern, die bereits mit Labels versehen waren. In einem solchen Fall müssten Labels auch bei dynamischem Labeling
11
neu berechnet werden. Wenn z. B. ein Blattknoten an die Stelle der Wurzel verschoben wird, kann sein strukturelles Label nicht mehr zum Vergleich
verwendet werden, da bei seiner Berechnung von einer anderen Position im
Baum ausgegangen wurde. Hier wird statt der Aktualisierung des Labels
der Knoten gelöscht, an der neuen Position eingefügt und ein neues Label
vergeben.
Im Folgenden wird dynamisches Labeling mit Präfix- und Intervallbäumen an Beispielen vorgeführt..
4.2
Labeling mittels Präfixbäumen
In dem hier betrachteten Präfixbaum werden Labels wie folgt vergeben:
1. Die Wurzel erhält einen leeren Text als Label.
2. Angenommen, der Knoten v ist von links gezählt das i-te Kind eines
Knotens u. Dann berechnet sich das Label von v, indem an das Label
von u die Zeichenkette 00 1i−1 000 angehängt wird.
L(v) = L(u).00 1i−1 000 .
Für zwei Knoten u, v gilt:
L(u) Präfix von L(v) ⇐⇒ u Vorgänger von v
Das liegt daran, dass an ein Label L(u), um Nachfolgerlabels zu erhalten,
nur Zeichenketten angehängt werden. Somit ist L(u) Präfix aller Labels im
Teilbaum unter u.
An einem Beispiel lässt sich das einfach veranschaulichen. In Abbildung 6
sind an den Kanten die anzuhängenden Zeichenketten, und in den Knoten die
Labels eingetragen. Hier ist die Idee, die dynamisches Labeling ermöglicht,
sichtbar. In jedem Knoten werden die Labels, die für den darunterliegenden
Teilbaum zukünftig benötigt werden, durch einen Präfix reserviert.
12
””
0
0
10
0
00
110
10
110
0
100
10
0
1010
1100
Abbildung 6: dynamisches Labeling durch einen Präfixbaum
Der Knoten mit Label 0 reserviert für seinen Teilbaum alle möglichen
Labels mit Präfix 0. Der darunterliegende Knoten reserviert alle mit Präfix
00. Genauso reserviert der Knoten mit 10 alle denkbaren Labels mit Präfix
10, und so weiter.
Bei anderen Knoten außer Vorgänger und Nachfolger kann es durch diese
Konstruktion nicht passieren, dass ein Label Präfix des anderen ist. Das
liegt daran, dass für verschiedene Teilbäume verschiedene Präfixe reserviert
werden, und bei Kindern diese Präfixe immer verlängert werden.
Es kann somit über Vorgänger-/Nachfolgerbeziehungen entschieden werden. Zudem müssen die Labels beim Einfügen von Knoten nicht neu berechnet werden, da die Blätter beliebig erweiterbar sind.
4.3
Labeling mittels Intervallbäumen
Bei Intervallbäumen kann kein so frei erweiterbares Schema gefunden werden
wie bei Präfixbäumen, da eine obere Intervallgrenze festgelegt werden muss.
Bei Präfixbäumen ist die obere Grenze des Wertebereichs für einen Teilbaum
offen. Es gibt aber eine Möglichkeit, die Intervalle einfach zu vergrößern,
wenn keine Teilmengen dieser Intervalle mehr gebildet werden können [3, S.
10].
13
Zunächst wird an einem Beispiel ein dynamischer Labeling-Algorithmus
aus dem Artikel vorgestellt, der dieser Seminararbeit zugrunde liegt [3, S.
6]. Wie auch der Artikel klar sagt, ist der Algorithmus nur ein analytisches
Werkzeug, da die Laufzeit abschreckend ist.
Im folgenden Algorithmus ist die Baumstruktur unbekannt. Die Anzahl
zukünftiger Knoten im Dokument wird zwar vorausgesetzt, es ist aber durch
die später vorgestellte Methode der Intervallvergrößerung möglich, weitere
Knoten in das Dokument einzufügen. Bei ihrer Anwendung müssen zugewiesenen Labels nicht neu berechnet werden, so dass das Verfahren zu den
dynamischen gezählt werden kann.
4.3.1
Ganzzahlige Markierung
Gegeben sei eine Sequenz von einzufügenden Knoten {a, b, c, d} in ein leeres
Dokument. Der fertige Baum soll die Gestalt wie in Abbildung 7 haben.
a
b
c
d
Abbildung 7: Dokument
Dazu betrachten wir alle möglichen Präfix-Labels nach dem Algorithmus
aus Abschnitt 4.2 für Bäume, die mit dieser Anzahl Knoten, also 4, gebildet
werden können (siehe Abb. 8).
Nun kann für jeden Knoten v eine ganzzahlige Markierung N (v) berechnet
werden. Sie ergibt sich aus der Anzahl verschiedener Labels, die an mögliche
14
””
a
0
0
0
b
00
c
10
10
10
110
110
100
010
d
100
0
000
Abbildung 8: mögliche Labels für einen Baum mit 4 Knoten
15
Nachfolgerknoten von v vergeben werden können, plus 1. Mögliche Nachfolgerknoten sind dabei alle Knoten, die in der Einfügesequenz hinter v stehen.
Sie können aber an beliebigen Stellen im Teilbaum von v eingefügt werden.
Nur die Reihenfolge muss die gleiche bleiben, wie in der Einfügesequenz.
Im Beispiel heißt das
• für a: Die Nachfolgerknoten sind b, c und d. Sie können an allen Stellen
unterhalb der Wurzel auftauchen. Dabei wird die Reihenfolge „erst b,
dann c, dann d “ beibehalten, nur die Knoten, an denen eingefügt wird,
ändern sich. Somit sind 7 Labels möglich: 0, 00, 010, 000, 10, 100, 110
⇒ N (a) = 7 + 1 = 8
• für b: Die Nachfolgerknoten sind c und d. Der Knoten b ist jetzt
eingefügt und hat das für ihn einzig mögliche Label 0. Nur wenn c und
d unter 0 eingefügt werden, sind sie Nachfolger von b. Unterhalb 0 gibt
es 3 mögliche Labels: 00, 010, 000
⇒ N (b) = 3 + 1 = 4
• für c: Der Nachfolgerknoten ist d. c ist eingefügt und hat das Label 00.
Der Knoten d ist nur Nachfolger von c, wenn er unterhalb 00 eingefügt
wird. Dafür gibt es eine Möglichkeit: 000
⇒ N (c) = 1 + 1 = 2
• für d: Der Knoten d hat keine Nachfolgerknoten.
⇒ N (d) = 0 + 1 = 1
Den markierten Baum zeigt die linke Seite in Abbildung 9. Die Zweierpotenzen sind Zufall, wie an einem Beispiel mit fünf Knoten gezeigt werden
könnte.
16
8
[1, 8]
4
[1, 4]
2
1
[1, 2]
[3, 3]
Abbildung 9: Labeling durch ganzzahlige Markierung
4.3.2
Intervall-Labeling
Mit dieser Markierung kann nun ein Intervall-Labeling (siehe Abb. 9) erfolgen:
1. Die Wurzel root erhält das Intervall [1, N (root)].
2. Alle anderen Knoten v erhalten ein N (v) großes Intervall aus dem Intervall ihres Elternknotens. Intervalle von Geschwistern werden dabei
aneinandergereiht.
Am Beispiel sieht man, wie hinsichtlich der Struktur eines Baums noch
Platz für zukünftige Nachfolger gelassen wird. Wenn in einem Intervall kein
Platz mehr für Teilmengen ist, kann es leicht vergrößert werden.
4.3.3
Erweiterung des Intervall-Labeling
Intervalle können erweitert werden, indem in der Binärdarstellung eines Intervalls [a, b] an a eine Sequenz 0en und an b eine gleichlange Sequenz 1en
angehängt wird. Beim Anhängen von n Bits multipliziert sich die Größe des
Intervalls mit Faktor 2n (siehe Abb. 10).
Dabei ist zu beachten, dass das Label, also das Intervall, nicht neu gespeichert werden muss. Es muss lediglich für die Vergleichsfunktion vermerkt
werden, wieviel Zeichen beim binären Vergleich zweier Intervalle jedesmal
17
[1, 8]
[0001, 1000]
⇐⇒
[1, 4]
[1, 2]
[0001, 0100]
[0001, 0010]
[3, 3]
↓
[4, 35]
2 Bit virtuelle Erweiterung
↓
[000100, 100011]
⇐⇒
[4, 19]
[4, 11]
[0011, 0011]
[12, 15]
[000100, 010011]
[000100, 001011]
[001100, 001111]
Abbildung 10: Erweitern von Intervallen
angehängt werden müssen, wenn auf Vorgänger-/Nachfolgerbeziehungen getestet wird. Somit werden nur beim Vergleich Zeichen angehängt, das persistente strukturelle Label bleibt unverändert. Es handelt sich somit um einen
dynamischen Labeling-Algorithmus.
In Abb. 10 werden die tatsächlichen und die um 2 Bits erweiterten Labels
dargestellt. Hier konnte z. B. das Intervall [1, 8] vor der Erweiterung 8 Labels
aufnehmen. Das virtuell erweiterte Intervall [4, 35] kann danach 32, also 22 =
4mal soviel aufnehmen. Ebenso wird das Intervall [3, 3] durch Erweiterung
auf [12, 15] von Größe 1 auf 4 gebracht.
18
5
Clues
Die Präfix- und Intervall-Labels beim dynamischen Labeling sind länger als
beim statischen und verbrauchen damit mehr Speicherplatz. Einen Vergleich
und Verbesserungen beim dynamischen Labeling durch Hinweise auf die zukünftige Dokumentstruktur, sogenannte Clues, liefert dieser Abschnitt.
5.1
5.1.1
Größe eines Labels
Statisches Labeling
Hier wird ein anderes Labeling durch Intervalle betrachtet, als in den bisherigen Abschnitten. Der Algorithmus besteht aus zwei Schritten:
1. Nummeriere die Blätter in einem Baum von links nach rechts.
2. Weise jedem Knoten ein Intervall mit folgenden Eigenschaften zu: Die
untere Grenze ist die kleinste Nummer eines Blatts in seinem Teilbaum,
die obere Grenze ist die größte Nummer.
Da ein Baum mit n Knoten maximal n−1 Blätter hat, ist die größte Nummer
n − 1. Diese lässt sich mit O(log n) Bits darstellen. Es kann gezeigt werden
[3, S. 2], dass die untere Schranke für die maximale Länge eines Labels in
Ω(log n) liegt, es also keinen Algorithmus gibt, der asymptotisch kürzere
Labels erzeugt. Die maximale Länge eines Labels ist damit in Θ(log n).
5.1.2
Dynamisches Labeling
Zur Untersuchung von dynamischem Labeling wird ein Präfixbaum mit geringer Tiefe und einer großen Anzahl Kinder pro Knoten betrachtet (siehe
Abb. 11). Mit 9 Knoten wird maximal die Länge 8 für ein Label erreicht.
Dadurch, dass für das Label des i-ten Kindes eines Knotens nur 1i−1 0 angehängt wird, ist bei einem Baum mit n Knoten die maximale Länge eines
Labels n − 1, also in O(n). Dies kann durch Induktion gezeigt werden. Es
lässt sich wieder allgemein beweisen [3, S. 3f], dass die untere Schranke für
19
””
0 10 110
0
10
110
1110
0
11100
1110
10
110
111010
1110
1110110
11101110
Abbildung 11: „breiter“ Präfixbaum
die maximale Länge eines Labels in Ω(n) liegt, also beliebige dynamische
Labeling-Algorithmen ohne Clues nur um einen konstanten Faktor kürzere
Labels erzeugen. Die maximale Länge eines Labels ist also in Θ(n).
Beim statischen Labeling ist bei einem Baum mit n Knoten die maximale
Länge in Θ(log n), beim dynamischen Labeling in Θ(n). Dieser exponentielle
Unterschied ist anschaulich so erklärbar, dass beim dynamischen Labeling
exponentiell viele Labels für mögliche zukünftige Nachfolger reserviert werden müssen, wohingegen beim statischen die Struktur feststeht und deshalb
effizient Labels vergeben werden können.
So werden z. B. in Abb. 11 im ganz linken Knoten 0 alle kurzen Labels
mit Präfix 0 vorreserviert, obwohl sie niemals gebraucht werden, was beim
Einfügen von 0 nicht bekannt ist. Statt den nicht-verwendeten kurzen Labels
werden immer längere Labels zugewiesen. Ziel des nächsten Abschnitts ist
es nun, dynamisches Labeling zu verbessern, um insgesamt kürzere Labels
zu ermöglichen. Der Punkt dabei ist, unnötiges Reservieren kurzer Labels
zu vermeiden.
20
[1, 8]
[1, 4]
[1, 4]
[1, 2]
[1, 2]
[3, 3]
[1, 1]
[2, 2]
Abbildung 12: Labeling mit/ohne Subtree Clues
5.2
Subtree Clues
Dynamisches Labeling kann verbessert werden, wenn beim Einfügen eines
Knotens Informationen über die zukünftige Baumstruktur aus einer DTD
oder einem XML-Schema bekannt sind und in den Algorithmen ausgenutzt
werden. Eine solche Information sind subtree clues.
Der Subtree Clue eines Knotens v ist ein Intervall [l(v), h(v)], wobei l(v)
die minimale Anzahl zukünftiger Knoten im Teilbaum mit Wurzel v ist, und
h(v) die maximale. Dieses Intervall ist beim Einfügen eines Knotens gegeben. Ein Labeling-Algorithmus kann es verwenden, um kürzere Labels zu
erzeugen.
Der Teilbaum links aus Abbildung 12 entstand ohne Clues. Der rechte
zeigt die Situation, wenn beim Einfügen des obersten Knotens der Subtree
Clue [4, 4] vorhanden ist. Dann gibt es genau 4 Knoten im Teilbaum, und es
genügt im obersten Knoten das kürzere Label [1, 4] zu vergeben. Auf mehr
als die Idee der Subtree Clues wird hier nicht eingegangen.
Durch Subtree Clues liegt die maximale Länge von Labels beim dynamischen Labeling in Θ(log 2 n) [3, S.7].
21
5.3
Sibling Clues
Ähnlich zu den Subtree Clues sind sibling clues, bei denen beim Einfügen
eines Knotens noch Informationen über die zukünftige Anzahl Geschwister
und die Größe ihrer Teilbäume bekannt sind. Dies bringt einen weiteren
Vorteil.
Angenommen, ein Knoten v1 hat eine hohe Anzahl potentieller Nachfolger, und durch den Subtree Clue seines Elternknotens u ist ebenfalls eine
hohe Anzahl möglich. Wenn nun ein Sibling Clue vorliegt, der Aussage über
die Anzahl zukünftiger Knoten in Teilbäumen von Geschwistern von v1 gibt,
müssen für den Teilbaum von v1 ggf. weniger Labels reserviert werden, als
ohne den Sibling Clue. Die Anzahl zukünftiger Knoten im Teilbaum eines
Geschwisterknotens kann die potentielle Anzahl Knoten im Teilbaum von v1
reduzieren, da beide der maximalen Anzahl Knoten aus dem Subtree Clue
des Vaterknotens u unterworfen sind.
u
max 40 Nachfolger
max. 30 Nachfolger v1
v2
min. 30 Nachfolger
⇒ in v1 nur noch max. 10 Nachfolger
Abbildung 13: Sibling Clues
Das kann an einem Beispiel besser erklärt werden (siehe Abb. 13). Die
im Bild eingetragenen Einschränkungen sind durch Clues gegeben. Wenn
beim Einfügen von v1 nicht durch den Sibling Clue für v2 bekannt wäre,
dass dort mindestens 30 Knoten zu erwarten sind, so würden in v1 30 Labels
reserviert werden. Durch den Clue ist jedoch bekannt, dass von den maximal
22
40 Nachfolgern von u allein 30 für den Teilbaum von v2 aufgebraucht werden.
In v1 muss also nur noch Platz für 10 Labels reserviert werden.
Mit Sibling Clues liegt beim dynamischen Labeling die maximale Länge
der Labels in Θ(log n). Für eine genauere Betrachtung sei, wie bei den Subtree Clues, auf den Artikel von Cohen, Kaplan und Milo [3, S. 8] verwiesen.
Der Vergleich der maximalen Länge von Labels für alle Verfahren wird im
nächsten Abschnitt zusammengefasst.
23
6
Zusammenfassung
Die hier behandelte Arbeit von Cohen, Kaplan und Milo [3] stellt die Möglichkeit vor, Knoten eines XML-Baums bei ihrem Einfügen mit einem einzigen
persistenten strukturellen Label zu versehen. Durch diese Labels kann ein
Knoten eindeutig identifiziert werden, und sie unterstützen strukturelle Anfragen dadurch, dass anhand ihnen über Vorgänger-/Nachfolgerbeziehungen
zwischen Knoten entschieden werden kann. Die Labels können mit Präfixoder Intervallbäumen berechnet werden.
Bei den Labeling-Algorithmen werden statische, für bekannte Baumstruktur, und dynamische, für sich ändernde Baumstruktur unterschieden. Der
Mehrverbrauch an Speicherplatz für die Labels beim dynamischen Labeling
gegenüber dem statischen, kann durch Hinweise auf die zukünftige Baumstruktur ausgeglichen werden.
statisch
Grenzen
Θ(log n)
dynamisch
keine Clues
Subtree Clues
Sibling Clues
Θ(n)
Θ(log 2 n)
Θ(log n)
Tabelle 1: maximale Länge der Labels (Baum mit n Knoten)
Die maximale Länge der Labels wird in Tabelle 1 zusammengefasst. Interessant ist dabei vor allem der Beweis für die unteren Schranken, d. h. die
Tatsache, dass es für diese Voraussetzungen nur Algorithmen gibt, die um
einen konstanten Faktor kürzere Labels erzeugen.
Literatur
[1] Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, and Eve Maler.
Extensible markup language (xml) 1.0 (second edition).
Techni-
cal report, World Wide Web Consortium (W3C) Recommendation,
http://www.w3.org/TR/2000/REC-xml-20001006, 2000.
24
[2] James Clark and Steve DeRose. Xml path language (xpath) version 1.0.
Technical report, World Wide Web Consortium (W3C) Recommendation,
http://www.w3.org/TR/xpath, 1999.
[3] Edith Cohen, Haim Kaplan, and Tova Milo. Labeling dynamic xml trees.
2002.
25
Herunterladen