-
GEBIET DER
ERFINDUNG
-
Die
Erfindung betrifft Verfahren zum Zugreifen auf Daten in einem beliebig
großen
Dokument, mittels denen eine Anpassung an die einer Vorrichtung
zur Verfügung
stehenden eingeschränkten
Ressourcen bewirkt wird, und insbesondere zum Verarbeiten von Daten,
die in einem XML-Dokument gespeichert sind, das größer ist,
als ein verfügbarer Speicher
manifestieren kann.
-
HINTERGRUND
DER ERFINDUNG
-
Die
Anzahl von Firmen, die Informationen auf elektronischem Weg austauschen,
nimmt stark zu. Die Firmen, welche die Informationen austauschen, haben
die Notwendigkeit einer allgemeinen Norm zur Darstellung von Daten
erkannt. "XML" (erweiterbare Auszeichnungssprache)
entwickelt sich gerade rasch zum allgemeinen Standard zur Darstellung
von Daten.
-
XML
beschreibt einen Datenkörper
und verleiht diesem Struktur, und zwar beispielsweise einer Datei
oder einem Datenpaket, das hier als XML-Dokument bezeichnet wird.
XML-Standards stellen Tags (Markierungen) bereit, die Abschnitte
eines XML-Dokumentes begrenzen und die als XML-Elemente, oder einfach "Elemente" bezeichnet werden.
-
Ein
Element kann verschiedene Typen von Daten enthalten, einschließlich Elementattributen und
anderen Elementen. Ein Element, das in einem anderen Element enthalten
ist, wird als ein Abkömmling
oder Nachkomme dieses Elementes bezeichnet. Durch Definieren eines
Elementes, das Attribute und Abkömmlingselemente
enthält,
definiert das XML-Dokument hierarchische Beziehungen vom Eltern-Kind-Typ
zwischen dem Element, dessen Abkömmlingselementen
und dessen Attributen.
-
Der
Begriff Knoten wird verwendet, um auf einzelne Elemente und Elementattribute
in einem XML-Dokument Bezug zu nehmen. Somit definiert ein XML-Dokument
eine Hierarchie von Knoten, die Eltern-Kind-Beziehungen aufweisen.
Eine derartige Hierarchie wird hier als Knoten-Baum oder als Knoten-Hierarchie
bezeichnet.
-
Der
Begriff Attribut wird hier verwendet, um auf einen diskreten Teil
oder ein Element einer Struktur, beispielsweise einer Datenstruktur
oder eines Objektes Bezug zu nehmen, das zu einem Objekttyp gemäß der objektorientierten
Methodik gehört.
Ein Attribut kann ein komplexes Konstrukt sein, das eines oder mehrere
weitere Attribute enthält,
die hier als Element des Attributes bezeichnet werden. XML-Standards
sorgen für
Elementattribute in Form von Name-Wert-Paaren. Zwar umfasst der
Begriff Attribut, wie hier verwendet, die Bedeutung Elementattribute,
der Begriff ist jedoch nicht darauf eingeschränkt.
-
Industriestandards
definieren Strukturen zur Darstellung von XML-Dokumenten. Ein solcher
Standard ist das DOM (Document Object Model), das durch das W3C
(World Wide Web Consortium) promulgiert wird.
-
Damit
ein Computer mit einem XML-Dokument umgehen kann, wird im Speicher
eine Darstellung des XML-Dokumentes erzeugt. Im Allgemeinen wird
ein XML-Dokument aus einer Speichervorrichtung (d. h. einer Platte,
die XML-Einheiten enthaltende Dateien speichert) oder aus über einen
Kommunikationskanal empfangenen Daten geladen, um im Speicher dargestellte
Datenstrukturen zu erzeugen, die verwendet werden, um ein XML-Dokument darzustellen.
Die im Speicher befindlichen Datenstrukturen werden mittels Software
und Programme ausführenden
Computerprozessen gehandhabt. Der Prozess des Ladens eines XML-Dokumentes
in den Speicher und des Erzeugens einer im Speicher befindlichen
Darstellung des XML-Dokumentes wird als "Manifestierung" eines XML-Dokuments bezeichnet. Typischerweise
greifen Anwendungen auf die durch die Manifestierung erzeugten,
im Speicher befindlichen Datenstrukturen zu und handhaben diese,
und zwar mittels einer API (Programmierschnittstelle).
-
Bei
herkömmlichen
Lösungsansätzen zur Manifestierung
erfolgt, wenn ein XML-Dokument manifestiert wird, ein Manifestieren
des gesamten XML-Dokumentes. XML-Dokumente können sehr groß sein und
somit eine beträchtliche
Menge an Speicher erfordern, wenn sie manifestiert werden. Einige
XML-Dokumente sind so groß,
dass der Speicher, der benötigt
wird, um diese zu manifestieren, bei weitem den diesen zugewiesenen
Speicher übersteigt
und auch bei weitem die Kapazität
vieler Computer übersteigen
kann.
-
Basierend
auf dem zuvor Erwähnten,
ist es erwünscht,
einen Mechanismus bereitzustellen, der die Speichergröße verringert,
die benötigt
wird, um ein XML-Dokument zu manifestieren.
-
Bei
einem Lösungsansatz
wird ein XML-Dokument in eine Mehrzahl von ladbaren Einheiten aufgeteilt,
die separat in Datenbankobjekten eines Datenbanksystems gespeichert
werden können.
Dann werden, wenn ein Prozess versucht, Daten aus dem XML-Dokument
zu manifestieren, lediglich die ladbaren Einheiten, welche die interessierenden
Daten enthalten, aus der Datenbank in den Speicher geladen. Es erfolgt
keine Manifestierung des gesamten XML-Dokumentes. Eine ladbare Einheit
ist ein Satz aus einem oder mehreren Knoten eines XML-Dokumentes.
Wenn ein einziger Knoten in der ladbaren Einheit manifestiert ist,
sind alle in der ladbaren Einheit befindlichen Knoten ebenfalls
manifestiert. Möglicherweise,
jedoch nicht notwendigerweise, können ladbare
Einheiten mit Inhaltsstrukturen korrelieren, welche die Knoten im
dauerhaften Speicher speichern. Dieser Lösungsansatz wird nachfolgend
als Lösungsansatz
von Pannala bezeichnet.
-
Zwar
ist das System von Pannala für
viele Zwecke nützlich,
jedoch können
gewisse Operationen keinen Nutzen aus den separat gespeicherten und
geladenen ladbaren Einheiten ziehen. Derartige Operationen verlangen
weiterhin nach übermäßig großen Speichermengen;
sie bewerkstelligen keine Anpassung an große XML-Dokumente. Derartige Operationen
beinhalten Operationen, die an vielen oder allen ladbaren Einheiten
eines großen
XML-Dokumentes "Interesse
ausdrücken", sowie Operationen,
die anfänglich
ein großes
XML-Dokument insgesamt in einen dauerhaften Speicher, beispielsweise in
ein Datenbanksystem einbringen.
-
Basierend
auf dem zuvor Erwähnten,
ist es erwünscht,
Verfahren zum Reduzieren der Speichermenge bereitzustellen, die
Operationen benötigen, bei
denen die Menge an ladbaren Einheiten eines XML-Dokumentes ausreicht,
einen verfügbarer
Speicher zu übersteigen.
-
Außerdem nimmt
der Lösungsansatz
von Pannala an, dass die Inhalte der in den Speicher geladenen ladbaren
Einheiten dort nicht verändert
werden, so dass eine ladbare Einheit immer dadurch ersetzt werden
kann, dass die ladbare Einheit aus dem dauerhaften Speicher nachgeladen
wird. Jedoch unterscheiden sich bei vielen Operationen bei einer oder
mehreren der ladbaren Einheiten die Inhalte im Speicher von denen,
die separat im dauerhaften Speicher gespeichert sind. Beispielsweise
befinden sich, während
des anfänglichen
Einbringens in ein Datenbanksystem, keine der ladbaren Einheiten,
die als erstes in den Speicher geladen werden, als separat gespeicherte
Einheiten in der Datenbank des dauerhaften Speichers. Man bezeichnet
derartige ladbare Einheiten als "dirty" (verfälscht).
Der Lösungsansatz
von Pannala ist für
ladbare "Dirty"-Einheiten nicht
geeignet.
-
Basierend
auf dem zuvor Erwähnten,
ist es weiter erwünscht,
Verfahren zum Bewahren von Information während Operationen bereitzustellen,
bei denen ladbare "Dirty"-Einheiten eines
XML-Dokumentes beteiligt sind.
-
Die
letzten Lösungsansätze, die
in diesem Abschnitt beschrieben wurden, könnte man verfolgen, diese sind
jedoch nicht notwendigerweise Lösungsansätze, die
zuvor geplant oder verfolgt wurden. Daher sind, wenn hier nicht
anders angegeben, die in diesem Abschnitt beschriebenen Lösungsansätze nur
aufgrund des Vorhandenseins dieser Lösungsansätze in diesem Hintergrundabschnitt,
nicht als Stand der Technik für
die Ansprüche
dieser Anmeldung zu betrachten.
-
Der
Artikel "The XML
Garbage Collector" von K.
Chakraborty und
EP
1 241 589 A2 offenbaren jeweils eine Speicherbereinigungseinrichtung,
die Knoten eines XML-DOM-Baumes,
deren Nutzung zeitlich am weitesten zurückliegt, aus einem Cache-Speicher entfernt.
Ein fester Schwellenwert für
die Größe des verwendeten
Cache-Speichers ist festgelegt. Wenn der Schwellenwert überschritten
wird, entfernt die Speicherbereinigungseinrichtung Einträge aus dem Cache,
bis die Cache-Speichernutzung unter den Schwellenwert abfällt. Ein
LRU-Algorithmus (= Algorithmus auf Basis der zeitlich am weitesten
zurückliegenden
Nutzung) wird verwendet, um zu bestimmen, welche Knoten während dieses
Prozesses aus dem Cache entfernt werden sollen.
-
US
2002/0056025 A1 offenbart ein Speicherverwaltungsverfahren, das
eine Vielschicht-Warteschlangen-Verwaltungsstruktur
verwendet. Mindestens eine Puffer-Warteschlange ist in einer Pufferschicht
enthalten, und mindestens eine Cache-Warteschlange ist in einer
Cache-Schicht enthalten. Alle Warteschlangen folgen einer LRU-Organisierung (Organisierung,
die sich an der zeitlich am weitesten zurückliegenden Nutzung orientiert.
Die "vertikale Verwaltung" von Speicherblöcken, d.
h. die Zuweisung und die Neuzuweisung von Speicherblöcken zwischen
der Pufferschicht und der Cache-Schicht erfolgt auf Basis des Verbindungsstatus,
d. h. ob auf einen Speicherblock aktuell zugegriffen wird, oder nicht.
-
Die
Erfindung ist durch die unabhängigen Ansprüche definiert.
Die abhängigen
Ansprüche
legen optionale Merkmale einiger Ausführungsformen der Erfindung
dar.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
Erfindung ist in den Figuren der anliegenden Zeichnungen beispielhaft
und nicht einschränkend
dargestellt, und in diesen sind ähnliche
Elemente mit den gleichen Bezugszeichen bezeichnet; in diesen sind:
-
1 ein
Blockdiagramm, das Strukturen darstellt, die von einem Server verwendet
werden, um ein XML-Dokument zu verarbeiten, das den verfügbaren Speicher übersteigt,
gemäß einer
Ausführungsform;
-
2 ein
Ablaufdiagramm, das ein zu einer hohen Ebene gehöriges Verfahren zur Verarbeitung eines
einen verfügbaren
Speicher übersteigenden XML-Dokumentes
gemäß einer
Ausführungsform darstellt;
und
-
3 ein
Blockdiagramm, das ein Computersystem darstellt, in das eine Ausführungsform
der Erfindung implementiert werden kann.
-
DETAILLIERTE
BESCHREIBUNG DER ERFINDUNG
-
Ein
Verfahren und ein Fertigungsgegenstand zum Zugreifen auf Daten in
einem großen
Dokument mittels einer Vorrichtung mit eingeschränkten Ressourcen wird beschrieben.
In der folgenden Beschreibung werden zu Erläuterungszwecken zahlreiche
spezifische Details dargelegt, um für ein grundlegendes Verständnis der
Erfindung zu sorgen. Es ist jedoch offensichtlich, dass die Erfindung
ohne diese spezifischen Details ausgeführt sein kann. In anderen Fällen sind
wohlbekannte Strukturen in Vorrichtungen in Blockdiagrammform dargestellt,
um unnötige
Unklarheiten bei der Erfindung zu vermeiden.
-
Ausführungsformen
der Erfindung werden hier im Kontext einer Verwendung der Gesamtheit oder
eines Teils eines XML-Dokumentes beschrieben, welches, falls es
vollständig
im Speicher manifestiert wäre,
die auf einem Datenbank-Server verfügbare Speichermenge überschreiten
würde.
Jedoch ist die Erfindung nicht auf diesen Kontext eingeschränkt. Weitere
Ausführungsformen
der Erfindung können
auf andere Kontexte angewandt werden, bei denen der Server kein
Datenbank-Server ist, sondern weitere Dienste basierend auf dem
XML-Dokument bereitstellt. Bei noch weiteren Ausführungsformen
kann das XML-Dokument als Eingabe für eine eigenständige Anwendung
verwendet werden, bei der es sich nicht um einen Server handelt,
d. h. eine Anwendung, die nicht auf Anfragen von einem separaten
Client-Prozess antwortet. Bei einigen Ausführungsformen ist das Dokument,
auf das zugegriffen wird, kein XML-Dokument, sondern ein Dokument, das
aus mehrfachen Konstrukten gemäß einer
weiteren Auszeichnungssprache besteht. Bei einigen Ausführungsformen
ist es nicht der Speicher, der eingeschränkt ist, sondern irgendeine
andere Ressource, wie beispielsweise Puffer oder eine Eingabe- oder Ausgabevorrichtung,
die mit dem Host-Computer oder der das Dokument verarbeitenden Anwendung verbunden
ist, oder ein Bandbreite einer Netzwerkverbindung, über die
das Dokument gesendet werden soll.
-
Bei
den dargestellten Ausführungsformen werden
Abschnitte des XML-Dokumentes, auf die separat zugegriffen werden
kann (beispielsweise die "ladbaren
Einheiten", LU,
von Pannala), in den Speicher geladen, und eine Nutzung dieser Abschnitte wird überwacht.
Wenn zusätzlicher
Speicher gewünscht
wird, wird der Speicher, der einem oder mehreren dieser Abschnitte
zugewiesen ist, freigegeben, und zwar basierend auf der Nutzung.
Bei spielsweise wird der Speicher, der dem Abschnitt zugewiesen ist,
dessen Nutzung zeitlich am weitesten zurückliegt, freigegeben. Der Abschnitt,
der den ihm zugewiesenen Speicher "verliert", wird als "aus dem Speicher entladen" bezeichnet. Bei
einigen Ausführungsformen
wird, wenn der zu entladende Abschnitt "dirty" ist (z. B. er Daten enthält, die
nicht dauerhaft als separater Abschnitt wie beispielsweise eine
ladbare Einheit in einem oder mehreren Behältern einer Datenbank gespeichert
sind), dann dieser Abschnitt dauerhaft gespeichert, bevor eine Neuzuweisung des
Speichers zu einem weiteren Abschnitt des Dokumentes erfolgt. Da
auf jede ladbare Einheit vom dauerhaften Speicher unabhängig zugegriffen
werden kann, kann die ladbare Einheit aus dem dauerhaften Speicher
anschließend
ausgelesen werden, wenn diese erneut verwendet werden soll. Bei
einigen Ausführungsformen
wird der Abschnitt dauerhaft direkt in einer objektrelationalen
Datenbankstruktur einer Datenbank gespeichert; bei einigen Ausführungsformen
wird der Abschnitt dauerhaft in einer temporären Datei in einer dauerhaften
Speichervorrichtung gespeichert.
-
Die
Verfahren der Erfindung ermöglichen, dass
eine Dokumentverarbeitungsvorrichtung mit eingeschränkten Ressourcen
angepasst wird, um ein großes
Dokument zu verarbeiten, das andernfalls die verfügbaren Ressourcen übersteigen
würde.
Dies ist ein Vorteil, wenn ein großes XML-Dokument, das nicht
vollständig
im verfügbaren
Speicher manifestiert werden kann, zum ersten Mal als Vielzahl von ladbaren
Einheiten in eine Datenbank oder einen anderen dauerhaften Speicher
eingebracht wird. Dies ist auch ein Vorteil, nachdem die unterschiedlichen Abschnitte
des großen
XML-Dokumentes separat in einen dauerhaften Datenspeicher eingebracht
wurden, wenn bei einer Operation mehr Abschnitte involviert sind
als in einem Speicher gleichzeitig manifestiert werden können, oder
wenn die Operation die Inhalte einer ladbaren Einheit modifiziert.
Beispiele derartiger Operationen sind eine Operation, um das gesamte
Dokument für
eine Darstellung auf einer graphischen Benutzeroberfläche unter
Verwendung eines XML-Stylesheet (XML-Formatvorlage) zu formatieren,
und eine Operation, die beliebige Elemente eines großen XML-Dokumentes
editiert.
-
GESAMTAUFBAU
-
1 ist
ein Blockdiagramm, das Datenstrukturen darstellt, die von einem
Server in einem XML-Verarbeitungssystem 100 verwendet werden, um
ein XML-Dokument zu verarbeiten, das einen verfügbaren Speicher übersteigt,
gemäß einer
Ausführungsform.
Das System 100 beinhaltet einen Datenbank-Server 120,
der einen schnellen Server-Speicher 150 beinhaltet,
der zur Verarbeitung eines XML-Dokumentes zugewiesen wird. Wie hier
verwendet, bezeichnet der Begriff schneller Speicher einen Speicher,
der für
einen Prozessor sehr schnell verfügbar ist, um Daten und Anweisungen
außerhalb des
Prozessors zu speichern. Bei aktuellen Technologien weist der zu
diesem Zweck verwendete Speicher eine schnelle Reaktionszeit auf;
jedoch bleiben Daten in einem derartigen Speicher nicht bestehen, wenn
die Stromversorgung des Speichers ausfällt. Tendenziell ist schneller
Speicher teurer als andere Speichertypen, und ist daher häufig knapper
als andere Speichertypen. Der Server 120 beinhaltet auch eine
oder mehrere dauerhafte Speichervorrichtungen, die für den Server
einen dauerhaften Speicher 130 bereitstellen. Bei aktuellen
Technologien bleiben die Daten in einem derartigen dauerhaften Speicher erhalten,
wenn die Stromversorgung ausfällt;
jedoch ist ein derartiger Speicher langsam und wird für eine Verwendung
als sehr schnell verfügbarer
Speicher für
einen Prozessor nicht angestrebt. Der dauerhafte Speicher beinhaltet
einen Speicherbereich, der für
einen temporären
Speicher 132 reserviert ist, und einen Speicherbereich,
der für
den Datenbank-Speicherraum 140 verwendet wird.
-
Der
Datenbank-Speicherraum 140 beinhaltet einen Speicher für eine oder
mehrere objektrelationale Strukturen 144a, 144b und
weitere, die durch Ellipsen 146 angegeben sind, die nachfolgend
hier insgesamt als objektrelationale Strukturen 144 bezeichnet
werden. Die objektrelationalen Strukturen 144 speichern
Datenobjekte in einer oder mehreren relationalen Datenbankstrukturen,
wie beispielsweise Tabellen, Zeilen, Spalten und gespeicherten Prozeduren.
-
Das
System 100 verarbeitet eine Datenstruktur 102 vom
XML-Dokumenttyp, welche die Attribute eines jeden Elementtyps definiert,
die durch ein XML-Dokument, die eine Instanz des Typs ist, verwendet
werden kann. Die Datenstruktur kann auf einem beliebigen computerlesbaren
Medium vorliegen, wie in einem späteren Abschnitt noch detaillierter beschrieben
wird, welches von einem Server 120 gelesen werden kann,
beispielsweise auf einer entnehmbaren magnetischen oder optischen
Platte, oder über einen
Kommunikationskanal. Der Datenbank-Speicherraum 140 beinhaltet
einen Abbildungsspeicher 142 zwischen den Elementattributen,
oder Elementen, die in den XML-Dokumenten und den Datenobjekten
in einer oder mehreren objektrelationalen Strukturen 144 verwendet
werden. Das System 100 erzeugt die Inhalte des Abbildungsspeichers 142,
basierend auf den Inhalten der Datenstruktur 102 vom XML-Dokumenttyp
unter Verwendung eines beliebigen in der Technik bekannten Mechanismus.
Bei einigen Ausführungsformen
werden die objektrelationalen Strukturen tatsächlich basierend auf den Inhalten
der Datenstruktur 102 vom XML-Dokumenttyp definiert und
erzeugt. Bei einer Ausführungsform
wird der in Pannala beschriebene Mechanismus verwendet, um Elemente
und Attribute der Datenstruktur vom XML-Dokumenttyp auf Datenobjekte
der objektrelationalen Datenstrukturen 144 abzubilden.
-
Ein
XML-Dokument 110 ist eine Instanz des Typs, die in der
Datenstruktur 102 definiert ist. Das XML-Dokument 110 beinhaltet
eines oder mehrere Elemente, die jeweils eines oder mehrere Attribute umfassen
können,
bei denen es sich jeweils um ein weiteres Element handeln kann,
wie in der Datenstruktur 102 vom Dokumenttyp definiert.
Das XML-Dokument 110 stellt auf diese Weise eine spezielle
Hierarchie der Knoten her, wobei jeder Kind-Knoten ein Attribut
seines Eltern-Knoten repräsentiert,
und jedes Attribut einen für
seinen Typ geeigneten Wert hat.
-
Zu
Darstellungszwecken sei angenommen, dass ein XML-Dokument 110 mehrere
Attribute hat, einschließlich
eines Attributes, das durch das Element 112a repräsentiert
ist, und eines weiteren Attributes, das durch das Element 112b repräsentiert
ist. Weiter sei angenommen, dass das Element 112a mehrere
Attribute aufweist, einschließlich
Attributen, die durch Elemente 114a, 114b, 115 und
weitere Elemente repräsentiert
sind, die durch die Ellipsen 113 repräsentiert sind. Weiter sei angenommen,
dass Elemente 114a, 114b weitere Attribute beinhalten können, die
weitere nicht dargestellte Elemente beinhalten. Es sei ebenfalls
angenommen, dass ein Element 115 ein Block von Daten ist,
die durch die Datenstruktur 102 vom XML-Typ nicht weiter
unterteilt oder definiert sind. Es wird als "opakes" Element bezeichnet und kann ziemlich
groß sein.
Beispielsweise könnte
das opake Element 115 einen Text für eine lange Beschreibung von
Geschäftsbedingungen eines
Kaufvertrages beinhalten, oder könnte
eine Zeichenkette beinhalten, die eine genetische Codesequenz repräsentiert.
Es sei weiter angenommen, dass das Element 112 mehrere
Attribute beinhaltet, einschließlich
Attributen, die durch die Elemente 116, 117 repräsentiert
sind, sowie weiteren Elementen, die durch die Ellipsen 118 repräsentiert
sind.
-
Der
Server erstellt eine oder mehrere ladbare Einheiten (LU) aufweisende
Datenstrukturen, wie beispielsweise 152a, 152b,
und weitere, die durch die Ellipsen 153 repräsentiert
sind und nachfolgend insgesamt als LU-Datenstrukturen 152 bezeichnet werden.
Während
der Verarbeitung werden Daten für einen
oder mehrere Knoten des XML-Dokumentes 110 im Speicher 150 für ein Speichern
im dauerhaften Speicher 130 in eine LU umgewandelt. Für einige LU
sind die Werte der Attribute in der LU enthalten. Für einige
LU ist der Wert für
ein Attribut, wie beispielsweise ein Kind-Element, nicht in der
LU enthalten. Stattdessen ist das andere Attribut selbst eine unterschiedliche
LU. Ein Ortsanzeiger (Locator) bezeichnet einen Ort für die unterschiedlichen
LU im dauerhaften Speicher 130. Der Ortsanzeiger für die unterschiedlichen
LU ist in der Eltern-LU enthalten. Somit enthält die LU genügend Information,
um den verbleibenden Teil des XML-Baums, bei Knoten jenseits der Knoten
in der Eltern-LU zu laden. Eine LU, die durch einen Ortsanzeiger
in einer Eltern-LU bezeichnet ist, wird manchmal als eine "aus dem Rahmen fallende" LU ("Out-of-Line"-LU) bezeichnet,
da sie häufig
in einer oder mehreren Datenstrukturen gespeichert sind, die von
der Datenstruktur, welche die Eltern-LU speichert, verschieden sind.
-
Der
Server 120 erstellt auch eine Nutzungsdatenstruktur 156,
in der die Nutzung der Daten in den LU-Datenstrukturen 152 aufgezeichnet
ist. Beispielsweise beinhaltet die Nutzungsdatenstruktur 156 ein
erstes Datenelement, das angibt, ob ein Prozess auf dem Server 120 mit
der Verarbeitung der Daten fertig ist, die sich in einer speziellen
LU-Datenstruktur 152 im
Speicher 150 befinden. Bei einigen Ausführungsformen beinhaltet die
Nutzungsdatenstruktur ein zweites Datenelement, das eine relative Zeit
bezeichnet, zu der die Daten der speziellen LU-Datenstruktur 152 zuletzt
verwendet wurden.
-
Der
Server 120 erstellt auch eine Ortsanzeiger-Datenstruktur 158.
Die Ortsanzeiger-Datenstruktur 158 enthält einen
Ortsanzeiger, der angibt, wo auf einem dauerhaften Speicher 130 eine
spezielle LU gespeichert ist, und ordnet diesem Ortsanzeiger eine LU-Kennung zu, wie beispielsweise
einen LU-Namen. Beispielsweise bezeichnet ein Ortsanzeiger einen
Dateinamen und eine Distanzadresse für Daten, die in einem großes Objekt
(LOB) im temporären Speicher 132 gespeichert
sind. Bei einem weiteren Beispiel bezeichnet ein Ortsanzeiger ein
Datenelement, wie beispielsweise eine Zeile in einer oder mehreren
objektrelationalen Strukturen 144 im Datenbank-Speicherraum 140.
Objektrelationale Strukturen 144 können u. a. eine Datenbank-LOB-Struktur beinhalten.
-
GESAMTFUNKTION
-
2 ist
ein Ablaufdiagramm, das ein zu einer hohen Ebene gehöriges Verfahren 200 zur
Verarbeitung eines den verfügbaren
Speicher übersteigenden
XML-Dokumentes gemäß einer
Ausführungsform
darstellt. Zwar sind die Schritte in 2 in einer speziellen
Reihenfolge dargestellt, jedoch können bei weiteren Ausführungsformen
die Schritte in einer unterschiedlichen Reihenfolge, oder zeitlich überlappend
ausgeführt
werden.
-
Bei
Schritt 202 werden die ladbaren Einheiten für ein Dokument
basierend auf den Elementtyp-Definitionen der Datenstruktur 102 vom
XML-Dokumenttyp bestimmt. Normen für XML definieren eine schematische
Sprache zum Spezifizieren der Struktur eines XML-Dokumentes, wobei
diese Sprache in der Datenstruktur 102 verwendet werden kann.
Die Struktur, die in der Datenstruktur 102 vom XML-Dokumententyp
definiert ist, wird hier als XML-Schema bezeichnet. Der Datenbank-Server 120 verfügt über die
Fähigkeit,
eine Datenstruktur 102 vom XML-Dokumententyp zu interpretieren
und objektrelationale Strukturen 144 zu erzeugen oder zu modifizieren,
die zur Unterstützung
des XML-Schemas benötigt
werden. Beispielsweise wird das XML-Schemakonstrukt "<Komplextyp>" auf
einen Objekttyp in der Datenbank abgebildet. Zusätzliche Benutzerkommentare
im XML-Schema werden verwendet, um spezielle Speicherparameter zu
spezifizieren, wodurch ermöglicht
wird, das einige Abschnitte des XML-Dokumentes in zusätzlichen
Tabellen, großen
Objekten (LOBs) und anderen Datenbankbehältern gespeichert werden. Bei
weiteren Ausführungsformen
verfügt
ein unterschiedlicher Server über
die Fähigkeit,
eine Datenstruktur 102 vom XML-Dokumententyp zu interpretieren
und weitere Datenbehälter
zu erzeugen oder zu modifizieren, die zur Unterstützung des
XML-Schemas benötigt werden.
-
Bei
Schritt 210 wird eine ladbare Einheit (LU) in den schnellen
Speicher 150 geladen, welcher der Verarbeitung des XML-Dokumentes
zugewiesen ist, und wird in einer LU-Datenstruktur 152 gespeichert. Die
LU kann aus der Datenbank im Datenspeicherraum 140, oder
aus einem temporären
Speicher 132, oder aus einem XML-Dokument 110,
oder irgendeinem anderen computerlesbaren Medium ausgelesen werden.
Wenn eine LU, die einen Ortsanzeiger für eines oder mehrere Attribute
verwendet, von einem temporären
Speicher 132 oder einem XML-Dokument 110 geladen
wird, wurde möglicherweise
noch kein Wert für
den Ortsanzeiger für
den Ort des Attributes in der Datenbank erstellt; in derartigen
Fällen wird
ein temporärer
Wert für
den Ortsanzeiger verwendet, beispielsweise ein Name des ersten Elementes,
das der LU entspricht.
-
Beispielsweise
sei zu Darstellungszwecken angenommen, dass das Element 112a einer
einzigen ladbaren Einheit entspricht, und Elemente 114a, 114b und 115 jeweils
unterschiedliche ladbare Einheiten sind. Somit verwendet die LU
für das
Element 112a Ortsanzeiger anstelle von tatsächlichen
Werten für
Attribute, die den Elementen 114a, 114b und 115 entsprechen.
Wenn das Element 112a aus einem neuen XML-Dokument 110 durch
den Server 120 ausgelesen wird, wird eine LU-Datenstruktur 152 (z. B. 152b)
im Speicher 150 erzeugt, um dieses Element zu speichern,
jedoch wurden die Elemente 114a, 114b, 115 noch
nicht in den dauerhaften Speicher 130 eingelesen oder gespeichert,
und daher sind noch keine Ortsanzeiger für die LU-Datenstrukturen definiert,
welche diese LUs speichern werden. Wenn diese Elemente gelesen werden,
werden LU-Datenstrukturen erzeugt.
-
Bei
Schritt 220 wird eine Nutzung für die LUs bestimmt, die in
den Speicherdatenstrukturen 152 gespeichert sind, und die
Nutzung wird in der Nutzungsdatenstruktur 156 gespeichert.
Bei einer Ausführungsform
beinhaltet die Nutzungsdatenstruktur 156 ein LU-Speicheradressenfeld
(nachfolgend als "MEM_ADDR" bezeichnet), ein
Zählfeld
(nachfolgend als "ZÄHLER" bezeichnet) und
ein Zeitfeld (nachfolgend als "ZEIT" bezeichnet), und
zwar für jede
LU-Datenstruktur im Speicher 150. Bei einigen Ausführungsformen
ist die Nutzerdatenstruktur 156 von den LU-Datenstrukturen 152 separat,
und ein separater Datensatz wird der Benutzerdatenstruktur 156 für jede LU-Datenstruktur 152 hinzugefügt. Wenn
eine LU-Datenstruktur 152 im Speicher 150 erzeugt
wird, wird eine Zeile der Nutzungsdatenstruktur 158 hinzugefügt, die
Werte in diesen Feldern aufweist. Der Wert für das MEM_ADDR-Feld bezeichnet,
an welcher Stelle im Speicher 150 die LU-Datenstruktur 152 beginnt.
Der Wert für
das ZÄHLER-Feld wird
auf "1" gesetzt, um anzugeben,
dass ein einziger Prozess die LU-Datenstruktur verwendet (in diesem Fall
der Prozess, der die Datenstruktur erzeugt). Der Wert für das ZEIT-Feld
wird auf die aktuelle Systemzeit gesetzt, um anzugeben, wann die
LU-Datenstruktur zuletzt verwendet wurde.
-
Bei
weiteren Ausführungsformen
wird eine größere oder
eine geringere Anzahl von Feldern in der Nutzungsdatenstruktur 156 verwendet.
Beispielsweise ist bei einigen Ausführungsformen ein Größenfeld
(nachfolgend als "GRÖSSE" bezeichnet) für jede LU-Datenstruktur 152 hinzugefügt, um die
Größe der LU-Datenstruktur 152 anzugeben.
Bei einigen Ausführungsformen
wird ein "DIRTY"-Flag-Feld (nachfolgend
als "DIRTY"-Feld bezeichnet) für jede LU-Datenstruktur 152 hinzugefügt, um anzuzeigen,
ob Inhalte der LU "dirty" sind, d. h. sich
möglicherweise von
den Inhalten dieser LU unterscheiden, die sich im dauerhaften Speicher 130 befinden.
Das DIRTY-Feld enthält
einen oder zwei Werte; der eine Wert bezeichnet, dass die entsprechende
LU "dirty" ist, und der andere
bezeichnet, dass die entsprechende LU nicht "dirty" ist.
-
Bei
einigen Ausführungsformen
ist die Nutzungsdatenstruktur 156 Teil der LU-Datenstruktur 152.
Bei derartigen Ausführungsformen
kann das MEM_ADDR-Feld entfallen, und wenn eine LU-Datenstruktur 152 im
Speicher 150 erzeugt wird, werden Werte in den übrigen Feldern
der Nutzungsdatenstruktur 156 gespeichert, wie zuvor beschrieben.
-
Immer
wenn ein Prozess des Servers 120, der eine LU-Datenstruktur 152 verwendet,
beginnt, wird der Wert im ZÄHLER-Feld,
welcher dieser LU entspricht, um 1 erhöht, und der Wert des ZEIT-Feldes,
das dieser LU entspricht, wird aktualisiert. Der Beginn eines Prozesses,
der eine LU-Datenstruktur verwendet, wird nachfolgend als ein "Berühren" dieser LU-Datenstruktur
bezeichnet. Immer wenn ein Prozess eines Servers 120, der
eine LU-Datenstruktur 152 verwendet, endet, wird der Wert
im ZÄHLER-Feld,
der dieser LU entspricht, um 1 vermindert, und der Wert des ZEIT-Feldes,
der dieser LU entspricht, wird aktualisiert. Beispielsweise bewirkt
ein Prozess, der einfach Daten aus dem XML-Dokument 110 lädt, dass
der Wert des entsprechenden ZÄHLER-Feldes
den Wert 1 hat, wenn die LU-Datenstruktur 152 erzeugt wird,
und der Wert des ZÄHLER-Feldes
wird auf Null vermindert, wenn die LU vollständig in die Datenstruktur 152 geladen
ist. Sobald die LUs, die den Attributen entsprechen, geladen sind,
wird die Eltern-LU als vollständig
geladen betrachtet.
-
Bei
einer dargestellten Ausführungsform
beinhaltet die Nutzungsdatenstruktur 156 eine Liste von ladbaren
Einheiten. Wenn der Wert des ZÄHLER-Feldes
Null erreicht, wird die entsprechende LU-Datenstruktur zur Liste
hinzugefügt.
Ein beliebiges Verfahren kann verwendet werden, um die LU auf der
Liste zu bezeichnen. Bei einem Beispiel wird eine LU in der Liste
durch ihre Speicheradresse angegeben. Bei weiteren Ausführungsformen
können von
Null verschiedene Werte des ZÄHLER-Feldes verwendet
werden, um zu bewirken, dass die LU-Datenstruktur zur Liste der
ladbaren Einheiten hinzugefügt
wird. Ausführungsformen,
welche diese Liste verwenden, brauchen das ZEIT-Feld in der Nutzungsdatenstruktur 156 nicht
beizubehalten, da die LU-Datenstrukturen zur Liste der nicht-ladbaren
Einheiten in der zeitlichen Reihenfolge von der, die als erste unladbar
wird, bis zu der, die als letzte unladbar wird, hinzugefügt werden.
-
Bei
Schritt 230 wird bestimmt, ob eine Bedingung zur Freigabe
von Speicher, der einer oder mehreren LU-Datenstrukturen 152 zugeordnet
ist, erfüllt ist.
Bei der dargestellten Ausführungsform
besteht die Bedingung zur Freigabe von Speicher darin, dass die
Gesamtnutzung von Speicher 150 durch die LU-Datenstrukturen 152 einen
Schwellenwert übersteigt.
Der Schwellenwert wird typischerweise so gewählt, dass er geringer ist als
der gesamte zugewiesene Speicher. Beispielsweise kann die Bedingung zur
Freigabe von Speicher sein, dass mehr als 75 % des Speichers 150 durch
die LU-Datenstrukturen 152 verbraucht wird. Der gesamte
verbrauchte Speicher kann dadurch berechnet werden, dass alle Werte
der GRÖSSE-Felder
in der Nutzungsdatenstruktur 156 aufaddiert werden. Wenn
bei Schritt 230 bestimmt wird, dass die Bedingung zur Freigabe
von Speicher nicht erfüllt
ist, dann geht die Steuerung zurück
auf Schritt 210, um die nächste LU in den schnellen Speicher
zu laden. Wenn bei Schritt 230 bestimmt wird, dass die
Bedingung zur Freigabe von Speicher erfüllt ist, dann geht die Steuerung
weiter auf Schritt 240.
-
Bei
Schritt 240 werden eine oder mehrere der LU-Datenstrukturen
ausgewählt,
um basierend auf der Nutzung entladen zu werden. Beispielsweise wird
die LU-Daten struktur, deren Nutzung zeitlich am weitesten zurückliegt,
für ein
Entladen ausgewählt. Die
LU-Datenstruktur, deren Nutzung zeitlich am längsten zurückliegt, kann dadurch bestimmt
werden, dass die LU-Datenstruktur 152 aufgefunden wird,
die dem frühesten
Wert im ZEIT-Feld entspricht.
-
Um
zu vermeiden, dass eine LU entladen wird, die noch von einem Prozess
verwendet wird, werden bei einigen Ausführungsformen lediglich LU-Datenstrukturen,
deren ZÄHLER-Werte
Null sind, für
ein Entladen in Betracht gezogen. Bei einigen derartigen Ausführungsformen
wird die LU, deren Nutzung zeitlich am längsten zurückliegt, lediglich aus der
Liste der entladbaren Einheiten bestimmt, wie zuvor beschrieben.
Die LU-Datenstruktur,
deren Nutzung zeitlich am weitesten zurückliegt, ist die erste LU-Datenstruktur,
die in der Liste der entladbaren Einheiten angegeben ist.
-
Bei
Schritt 250 wird der Speicher, welcher der ausgewählten LU-Datenstruktur
zugewiesen ist, freigegeben. Bei einigen Ausführungsformen beinhaltet Schritt 250 die
Schritte 252, 254, 256.
-
Bei
Schritt 252 wird bestimmt, ob die Inhalte der ausgewählten LU-Datenstruktur 152 separat
im dauerhaften Speicher gespeichert sind. Bei Ausführungsformen,
bei denen ein DIRTY-Feld jeder LU-Datenstruktur 152 zugeordnet
ist, kann Schritt 252 dadurch ausgeführt werden, dass bestimmt wird,
ob das DIRTY-Feld angibt, dass die LU-Datenstruktur 152 nicht "dirty" ist. Wenn bestimmt
wird, dass die ausgewählte
LU-Datenstruktur 152 nicht "dirty" ist, dann geht die Steuerung weiter
auf Schritt 256, der nachfolgend beschrieben ist, ohne
dass ein Schreiben der Inhalte in den dauerhaften Speicher erfolgt.
-
Falls
bei Schritt 252 bestimmt wird, dass die ausgewählte LU-Datenstruktur "dirty" ist, geht die Steuerung
weiter auf Schritt 254. Bei Schritt 254 werden
die LU-Inhalte in der LU-Datenstruktur 152 in eine LU-Datenstruktur
im dauerhaften Speicher 130 geschrieben. Bei einigen Ausführungsformen
wird die LU in eine Datenstruktur im dauerhaften Speicher 132 geschrieben.
Bei einigen Ausführungsformen wird
die LU in eine objektrelationale Struktur 144 im Datenbank-Speicherraum 140 geschrieben.
In der einen oder anderen Ausführungsform
wird ein Ortsanzeiger zurückgegeben,
der einen Ort der LU im dauerhaften Speicher 130 angibt,
so dass die LU zu einem späteren
Zeitpunkt in den Spei cher 150 nachgeladen werden kann.
Bei der dargestellten Ausführungsform
wird der zurückgegebene
Ortsanzeiger in der Ortsanzeiger-Datenstruktur 158 gespeichert,
in welcher der Ortsanzeiger der LU-Kennung zugeordnet ist, beispielsweise
dem LU-Namen oder dem Namen des ersten entsprechenden XML-Elementes.
-
Bei
Schritt 256 erfolgt eine Aufhebung der Zuordnung des Speichers,
welcher der ausgewählten
LU-Datenstruktur 152 zugeordnet ist, im schnellen Speicher 152,
und dieser wird für
ein Zuordnen zu einer unterschiedlichen LU-Datenstruktur verfügbar gemacht.
Bei einigen Ausführungsformen
beinhaltet dieser Schritt ein Löschen
der Nutzungsinformation entsprechend der ausgewählten LU-Datenstruktur aus
der Nutzungsdatenstruktur 156. Die Steuerung geht dann
zurück
auf Schritt 230, um zu bestimmen, ob die Bedingung für ein Freigeben
von Speicher weiterhin erfüllt
ist.
-
Diese
Verfahren erlauben, dass bei einer Vorrichtung mit eingeschränkten Ressourcen,
wie beispielsweise einer eingeschränkten Menge an schnellem Speicher,
eine Größenanpassung
durchgeführt
wird, um beliebig große
Dokumente zu verarbeiten. Diese Fähigkeit ist ein Vorteil, wenn
ein großes
XML-Dokument, das in einem verfügbaren
Speicher nicht vollständig
manifestiert werden kann, als Vielzahl von ladbaren Einheiten das
erste Mal in eine Datenbank oder einen anderen dauerhaften Speicher
eingebracht wird. Diese Fähigkeit
ist ebenfalls ein Vorteil, nachdem die unterschiedlichen Abschnitte
eines großen
XML-Dokumentes separat in einen dauerhaften Datenspeicher eingebracht
wurden, wenn eine Operation eine größere Anzahl von Abschnitten
beinhaltet als im Speicher gleichzeitig manifestiert werden können, und
zwar beispielsweise während
einer Bearbeitung eines gesamten XML-Dokumentes, um Styles (Formate)
anzuwenden, die in einem XML-Stylesheet-Dokument (XSL-Dokument)
spezifiziert sind. Die Nutzungsmöglichkeiten
der dargestellten Ausführungsform
für diese
zwei Fälle
sind in den nächsten
zwei Abschnitten beschrieben.
-
EINBRINGEN EINES XML-DOKUMENTES
IN EINE DATENBANK
-
Um
diesen Fall zu erläutern,
sei angenommen, dass die objektrelationalen Strukturen 144 in der
Datenbank bereits basierend auf einem XML-Schema, das in der Datenstruktur 102 vom XML-Dokumenttyp
dargelegt ist, erzeugt oder modifiziert wurden, und zwar wäh rend Schritt 202.
Es sei weiter angenommen, dass das XML-Dokument 110 von
irgendeiner externen Quelle, beispielsweise über einen Kommunikationskanal
oder von einer entnehmbaren optischen Platte empfangen wird und
in die Datenbank eingebracht werden soll. Es sei weiter angenommen,
dass schneller Server-Speicher 150 zur Verarbeitung des
Dokumentes 110 zugewiesen wurde. Es sei weiter angenommen,
dass das ZÄHLER-Feld,
das GRÖSSE-Feld
und ein DIRTY-Feld der Nutzungsdatenstruktur 156 in jeder
LU-Datenstruktur
enthalten sind und dass die Nutzungsdatenstruktur 156,
abgesehen von den LU-Datenstrukturen 152, eine Liste von
nicht-ladbaren Einheiten beinhaltet, welche die LU-Datenstrukturen
bezeichnet, deren ZÄHLER-Wert
Null ist. Eine LU-Datenstruktur ist in der Liste durch die Speicheradresse
des ersten Byte in der LU-Datenstruktur 152 identifiziert.
Es sei weiter angenommen, dass die Menge an schnellem Speicher 150,
die diesem Dokument zugeordnet ist, 2 Millionen Byte (2 MB) beträgt und der
Schwellenwert zu Entladen einer ladbaren Einheit 1,5 MB beträgt.
-
Während Schritt 210 erzeugt
der Server 120 eine erste LU-Datenstruktur 152a,
die nachfolgend als "LU-A" bezeichnet wird,
um den höchsten
Knoten in der XML-Hierarchie, den Dokumentebenen-Knoten für Dokument 110,
zu speichern. Das ZÄHLER-Feld
wird mit dem Wert 1 initialisiert. Das DIRTY-Feld wird mit dem Wert
1 initialisiert, von dem zu Darstellungszwecken angenommen sei,
dass er eine "dirty" LU-Datenstruktur
bezeichnet. Die LU-Datenstruktur LU-A, 152a, ist "dirty", da die Inhalte
noch nicht dauerhaft als LU gespeichert wurden. Das GRÖSSE-Feld
wird mit einer minimalen Größe für die Dokumentebenen-LU
initialisiert, die genügend Platz
für die
Werte der Attribute und Ortsanzeiger für die Elemente 112a, 112b,
etc. bis zur minimalen Anzahl von für das Dokument 110 erwarteten
Elementen beinhaltet, und zwar basierend auf dessen Schema. Es sei
zu Darstellungszwecken angenommen, dass die GRÖSSE von LU-A den Wert 0,01
MB hat. Der Server 120 verarbeitet die ersten paar Zeilen
des XML-Dokumentes 110 und lädt die Werte der Attribute
des Dokumentes in die LU-A, 152a. Der Server gelangt dann
zu einer Zeile des XML-Dokumentes, die mit dem Element 112a beginnt,
bevor die Ortsanzeiger der "aus
dem Rahmen fallenden" LUs,
die den Elementen 112a, 112b zugeordnet sind,
bestimmt wurden. Somit wird der Ladeprozess bei der LU-A nicht abgeschlossen,
und das ZÄHLER-Feld
bleibt auf einen Wert von 1 gesetzt.
-
Während Schritt 220 wird
bestimmt, dass der gesamte von den LU-Datenstrukturen 152 verwendete
Speicher die GRÖSSE
von LU-A ist. Die Liste von nicht-ladbaren Einheiten in der Nutzungsdatenstruktur 156 ist
leer. Bei Schritt 230 wird bestimmt, dass diese Menge an
Speicher (0,01 MB) den Schwellenwert von 1,5 MB nicht übersteigt,
und die Steuerung geht zurück
auf Schritt 210, um mit dem Laden der nächsten LU zu beginnen.
-
Während dieser
Iteration von Schritt 210 erzeugt der Server 120 eine
zweite zu einer ladbaren Einheit gehörige Datenstruktur 152b,
die nachfolgend als "LU-B" bezeichnet wird,
um den dem Element 112a zugehörigen Knoten zu speichern.
Das ZÄHLER-Feld
und das DIRTY-Feld werden jeweils mit dem Wert 1 initialisiert.
Das GRÖSSE-Feld
wird mit einer minimalen Größe für die LU
für Element 112 initialisiert,
welches ausreichend Platz für
die Werte von Attributen und Ortsanzeigern für die Elemente 114a, 114b, 115,
etc. bis zur minimalen Anzahl von für Element 112a erwarteten
Elementen aufweist, und zwar basierend auf dem Schema von diesem.
Zu Erläuterungszwecken
sei angenommen, dass die Größe von LU-B
den Wert 0,1 MB hat. Der Server 120 verarbeitet die ersten
paar Zeilen des Elementes 112a und lädt die Werte der Attribute
des Elementes in LU-B, 152b. Der Server gelangt dann zu
einer Zeile des XML-Dokumentes, das mit dem Element 114a beginnt,
bevor Ortsanzeiger der "aus
dem Rahmen fallenden" LUs,
die den Elementen 114a, 114b, 115 zugehörig sind,
bestimmt werden. Somit wird der Ladeprozess bei LU-B nicht abgeschlossen,
und das ZÄHLER-Feld
bleibt auf einen Wert von 1 gesetzt.
-
Während der
nächsten
Iteration von Schritt 220 wird bestimmt, dass der gesamte
von den LU-Datenstrukturen 152 verwendete Speicher die GRÖSSE von
LU-A und LU-B ist. Die Liste von nicht-ladbaren Einheiten in der
Nutzungsdatenstruktur 156 ist leer. Bei der nächsten Iteration
von Schritt 230 wird bestimmt, dass diese Menge an Speicher (0,11
MB) den Schwellenwert von 1,5 MB nicht übersteigt, und die Steuerung
geht zurück
auf Schritt 210, um mit dem Laden der nächsten LU zu beginnen.
-
Der
Prozess fährt
mit den nächsten
LUs fort, die den Kind-Elementen von 112a zugehörig sind, einschließlich den
Elementen 114a, 114b, 115. Zu Darstellungszwecken
sei angenommen, dass Elemente 114a, 114b und 115 keine
Kind-Elemente beinhalten und dass die Werte für die GRÖSSE-Felder der drei Elemente
0,2 MB, 0,2 MB bzw. 1,1 MB be trägt.
Es sei weiter angenommen, dass, basierend auf dem Vorhandensein
von Elementen 114b und 115, zusätzliche
Ortsanzeiger zu LU-B hinzugefügt wurden
und die Größe des GRÖSSE-Feldes
in LU-B dadurch auf 0,11 vergrößert wird.
Sobald ein jedes vollständig
in die LU-Datenstrukturen LU-C, LU-D bzw. LU-E (nicht dargestellt)
im Speicher 150 geladen ist, werden die Werte des ZÄHLER-Feldes
auf Null vermindert, und die Adressen der drei LU-Datenstrukturen
werden zur Liste der nicht-ladbaren Einheiten in der Nutzungsdatenstruktur 156 hinzugefügt.
-
Während der
nächsten
Iteration von Schritt 220 wird bestimmt, dass der gesamte
durch die LU-Datenstrukturen 152 verwendete Speicher die Summe
der Werte in den GRÖSSE-Felder von LU-A, LU-B,
LU-C, LU-D und LU-E ist. Die Liste von nicht-ladbaren Einheiten
in der Nutzungsdatenstruktur 156 beinhaltet die Speicheradressen
von LU-C, LU-D und LU-E. Bei der nächsten Iteration von Schritt 230 wird
bestimmt, dass diese Menge an Speicher (1,62 MB) den Schwellenwert
von 1,5 MB nicht übersteigt,
und die Steuerung geht auf Schritt 240, um eine LU-Datenstruktur 152 zum
Entladen aus dem Speicher 150 zu wählen.
-
Bei
Schritt 240 wird die LU-Datenstruktur, deren Nutzung zeitlich
am weitesten zurückliegt,
in der Liste von nicht-ladbaren Einheiten ausgewählt. Die erste LU-Datenstruktur
in der Liste, welche LU-C ist, die Element 114a entspricht,
ist die, deren Nutzung zeitlich am weitesten zurückliegt. Daher wird LU-C als
zu entladende Datenstruktur ausgewählt. Bei weiteren Ausführungsformen
können
andere Auswahlkriterien verwendet werden. Beispielsweise kann die LU-Datenstruktur
LU-E mit dem größten Wert
(1,1 MB) von GRÖSSE
ausgewählt
werden. Die geeignete Auswahl wird basierend auf der An und Weise
bestimmt, auf die ein System verwendet wird. Es wird erwartet, dass
die zuletzt verwendet LU diejenige ist, deren erneute Nutzung am
wahrscheinlichsten ist, und dass diejenige, deren Nutzung zeitlich
am weitesten zurückliegt,
am wenigsten wahrscheinlich erneut verwendet wird. Daher wird die
am wenigsten Wahrscheinliche ausgewählt, um das Entladen einer LU
zu vermeiden, bei der ein erneutes Laden wahrscheinlicher ist.
-
Bei
Schritt 252 wird bestimmt, ob die LU-C "dirty" ist. Da der Wert des DIRTY-Feldes angibt, dass
LU-C "dirty" ist, geht die Steuerung
auf Schritt 254. Bei Schritt 254 wird LU-C in
eine objektrelationale Struktur 144 der Datenbank geschrieben,
und ein Anzeiger für
LU-C, der hier als "L-C" bezeichnet wird, wird
beim Prozess zurückgegeben.
Der Server 120 schreibt den Wert "L-C" in
die Anzeiger-Datenstruktur 158, und zwar zugehörig zu einer
Kennung der LU, die für
Element 114a erzeugt wird. Bei allen LU-Datenstrukturen 152 im
Speicher, die nicht-aufgelöste Verweise
zu Element 114a als Attribut haben, werden diese Verweise
unter Verwendung dieses Anzeigers "L-C" aufgelöst. Bei
jeder LU-Datenstruktur, die ihren letzten nicht-aufgelösten Anzeiger
empfängt,
erfolgt ein Dekrementieren seines ZÄHLER-Feldes. Falls die LU-Datenstruktur
einem ZÄHLER-Wert zugehörig ist,
der Null erreicht, dann wird die LU-Datenstruktur der Liste von
nichtladbaren Einheiten hinzugefügt. Bei
Schritt 256 wird der Speicher, der LU-C zugewiesen ist,
freigemacht, so dass er einer anderen LU-Datenstruktur zugeordnet
werden kann. Ebenso wird bei Schritt 256 die Nutzungsinformation
für LU-C
in der Nutzungsdatenstruktur 156 gelöscht.
-
Die
Steuerung geht dann zurück
auf Schritt 230, um zu bestimmen, ob die Speichernutzung
weiterhin den Schwellenwert überschreitet.
Der gesamte von den LU-Datenstrukturen 152 verwendete Speicher
ist die Summe der Werte in den GRÖSSE-Feldern von LU-A, LU-B,
LU-D und LU-E (ohne LU-C). Die Liste von nicht-ladbaren Einheiten
in der Nutzungsdatenstruktur 156 beinhaltet die Speicheradressen
von LU-D, LU-E (ohne LU-C). Es wird bestimmt, dass diese Menge an
Speicher (1,42 MB) den Schwellenwert von 1,5 MB nicht überschreitet, und
die Steuerung geht zurück
auf Schritt 210, um die nächste ladbare Einheit in den
Speicher 150 zu laden.
-
Auf
diese Weise kann ein XML-Dokument beliebiger Größe in eine Datenbank unter
Verwendung eines Servers mit einer eingeschränkten Menge an dem Dokument
zugewiesenem Speicher eingebracht werden.
-
Bei
einigen Ausführungsformen
ist das XML-Dokument ein transientes Dokument, das lediglich für einen
kurzen Zeitraum verwendet wird, jedoch nicht dauerhaft in der Datenbank
gespeichert wird. Bei derartigen Ausführungsformen sind die Schritte ähnlich,
abgesehen davon, dass während
eines Schreibens in den dauerhaften Speicher, bei Schritt 254,
die LU in Datenstrukturen im temporären Speicher geschrieben werden.
Bei einer Ausführungsform
dieser Gruppe ist die Datenstruktur des temporären Speichers eine LOB- Datei mit einer Anzahl
von Distanzadressen-Bytes, bei denen die LU beginnt, und die Zuordnung
oder Abbildung 142 wird weiterhin in der Datenbank gespeichert.
-
VERARBEITEN
EINES XML-DOKUMENTES VON EINER DATENBANK
-
Um
diesen Fall zu erläutern,
werden die beim vorhergehenden Fall verwendeten Annahmen erneut getroffen,
abgesehen davon, dass, anstatt dass das XML-Dokument 110 aus
einer externen Quelle erhalten wird, sich dies bereits in der Datenbank
befindet. Somit hat jede LU, die eine "aus dem Rahmen fallende" Kind-LU hat, einen
definierten Anzeiger für
diese Kind-LU. Es sei weiter angenommen, dass mit dem gesamten XML-Dokument
gearbeitet werden muss, um eine Darstellung zu erzeugen, deren Format
gemäß einem
XSL-Dokument ist, wobei das formatierte Ergebnis an eine Anzeigevorrichtung
gesendet wird.
-
Während Schritt 210 erzeugt
der Server 120 die zur ersten ladbaren Einheit gehörige Datenstruktur 152a,
die als "LU-A" bezeichnet wird,
um den höchsten
Knoten der XML-Hierarchie, den Dokumentebenen-Knoten für Dokument 110 zu
speichern. Das ZÄHLER-Feld
wird mit dem Wert 1 initialisiert. Das DIRTY-Feld wird mit dem Wert
Null initialisiert, um eine LU-Datenstruktur zu bezeichnen, die
nicht "dirty" ist. Die LU-Datenstruktur ist
nicht "dirty", da die Inhalte
aus dem dauerhaften Speicher in der Datenbank ausgelesen wurden
und nicht verändert
wurden. Das GRÖSSE-Feld
wird mit der tatsächlichen
Größe für die Dokumentebene
LU initialisiert. Der Server 120 verarbeitet die ersten
paar Attribute des XML-Dokumentes 110 gemäß dem XSL-Dokument
und sendet das Ergebnis an das Ziel, und zwar die Anzeigevorrichtung.
Der Server muss dann das Formatierungselement 112 starten,
bevor eine Formatierung des gesamten Dokumentes erfolgt. Somit wird
der Formatierungsprozess bei LU-A nicht abgeschlossen, und das ZÄHLER-Feld
bleibt auf einen Wert von 1 gesetzt.
-
Wie
zuvor wird während
Schritt 220 bestimmt, dass der gesamte von den LU-Datenstrukturen 152 verwendete
Speicher die GRÖSSE
von LU-A ist. Die Liste von nicht-ladbaren Einheiten in der Nutzungsdatenstruktur 156 ist
leer. Bei Schritt 230 wird bestimmt, dass diese Menge an
Speicher (0,01 MB) den Schwellenwert von 1,5 MB nicht übersteigt,
und die Steuerung geht zurück
auf Schritt 210, um mit dem Laden der nächsten LU zu beginnen.
-
Während dieser
Iteration von Schritt 210 erzeugt der Server 120 eine
zu einer zweiten ladbaren Einheit gehörige Datenstruktur 152b,
die als "LU-B" bezeichnet wird,
um den zum Element 112a zugeordneten Knoten zu speichern.
Das ZÄHLER-Feld
und das DIRTY-Feld werden mit den Werten 1 bzw. 0 initialisiert.
Das GRÖSSE-Feld
wird mit der tatsächlichen
Größe für die LU
für Element 112 initialisiert.
Zu Erläuterungszwecken
sei angenommen, dass die GRÖSSE
von LU-B den Wert 0,11 MB hat. Der Server 120 formatiert" die ersten paar
Attribute von Element 112a und sendet die Ergebnisse an
die das Ziel darstellende Anzeigevorrichtung. Der Server gelangt zu
einem Formatieren eines Attributes, das dem Element 114a entspricht,
bevor das Formatieren von Element 112a abgeschlossen ist.
Somit wird der Formatierungsprozess bei LU-B nicht abgeschlossen, und
das ZÄHLER-Feld
bleibt auf einen Wert von 1 gesetzt.
-
Während der
nächsten
Iteration von Schritt 220 wird bestimmt, dass der gesamte
von den LU-Datenstrukturen 152 verwendete Speicher die GRÖSSE von
LU-A und LU-B ist. Die Liste der nicht-ladbaren Einheiten in der
Nutzungsdatenstruktur 156 ist leer. Bei der nächsten Iteration
von Schritt 230 wird bestimmt, dass diese Menge an Speicher (0,12
MB) den Schwellenwert von 1,5 MB nicht überschreitet, und die Steuerung
geht zurück
auf Schritt 210, um mit dem Laden der nächsten LU zu beginnen.
-
Der
Prozess wird mit den nächsten
LUs fortgesetzt, die den Kind-Elementen von 112a zugehörig sind,
einschließlich
Elementen 114a, 114b, 115. Wie zuvor
beschrieben, sei zu Darstellungszwecken angenommen, dass die Elemente 114a, 114b und 115 keine
Kind-Elemente beinhalten,
und dass die Größen für die GRÖSSE-Felder
der drei Elemente 0,2 MB, 0,2 MB bzw. 1,1 MB sind. Sobald jedes
vollständig
in die LU-Datenstrukturen LU-C, LU-D bzw. LU-E (nicht dargestellt)
im Speicher 150 geladen ist, wird das ZÄHLER-Feld auf 1 inkrementiert;
wenn das Formatieren beginnt, wird das ZÄHLER-Feld erneut auf 2 imkrementiert. Wenn
das Formatieren abgeschlossen ist, wird das ZÄHLER-Feld auf 1 dekrementiert, und
wenn das Ergebnis an die das Ziel darstellende Anzeigevorrichtung
gesendet wird, wird das ZÄHLER-Feld
erneut auf Null dekrementiert. Wenn das ZÄHLER-Feld für jede der drei LU-Datenstrukturen auf
Null dekre mentiert ist, wird die Adresse einer jeden zur Liste der
nicht-ladbaren Einheiten in der Nutzungsdatenstruktur 156 hinzugefügt.
-
Während der
nächsten
Iteration von Schritt 220 wird bestimmt, dass der gesamte
von den LU-Datenstrukturen 152 verwendete Speicher die Summe
der Werte in GRÖSSE-Feldern
von LU-A, LU-B, LU-C, LU-D und LU-E ist. Die Liste von nicht-ladbaren
Einheiten in der Nutzungsdatenstruktur 156 beinhaltet die
Speicheradressen von LU-C, LU-D, LU-E. Bei der nächsten Iteration von Schritt 220 wird
bestimmt, dass diese Menge an Speicher (1,62 MB) den Schwellenwert
von 1,5 MB überschreitet,
und die Steuerung geht zurück
auf Schritt 240, um eine LU-Datenstruktur 152 zum
Entladen aus dem Speicher 150 auszuwählen.
-
Bei
Schritt 240 wird die LU-Datenstruktur, deren Nutzung zeitlich
am weitesten zurückliegt,
in der Liste von nicht-ladbaren Einheiten ausgewählt. Die erste LU-Datenstruktur
in der Liste, bei der es sich um LU-C entsprechend Element 114a handelt,
ist diejenige, deren Nutzung zeitlich am weitesten zurückliegt.
Daher wird LU-C als die zu entladende LU-Datenstruktur ausgewählt.
-
Bei
Schritt 252 wird bestimmt, ob LU-C "dirty" ist. Da der Wert des DIRTY-Feldes angibt,
dass LU-C nicht "dirty" ist, geht die Steuerung
auf Schritt 256. Bei Schritt 256 wird der LU-C
zugewiesene Speicher freigemacht, um einer anderen LU-Datenstruktur
zugeordnet zu werden, und die Nutzungsinformation für LU-C in
der Nutzungsdatenstruktur 156 wird gelöscht.
-
Die
Steuerung geht dann zurück
auf Schritt 230, um zu bestimmen, ob die Speichernutzung
weiterhin den Schwellenwert überschreitet.
Es wird bestimmt, dass der gesamte durch die LU-Datenstrukturen 152 verwendete
Speicher die Summe der Werte in den GRÖSSE-Feldern von LU-A, LU-B,
LU-D und LU-E (ohne LU-C) ist. Die Liste von nicht-ladbaren Einheiten
in der Nutzungsdatenstruktur 156 beinhaltet die Speicheradressen
von LU-D, LU-E (ohne LU-C). Bei der nächsten Iteration von Schritt 230 wird bestimmt,
dass diese Menge an Speicher (1,42 MB) den Schwellenwert von 1,5
MB nicht überschreitet, und
die Steuerung geht zurück
auf Schritt 210, um die nächste ladbare Einheit in den
Speicher 150 zu laden.
-
Somit
kann ein XML-Dokument beliebiger Größe von einer Datenbank unter
Verwendung eines Servers mit eingeschränkter Größe von dem Dokument zugeordnetem
schnellen Speicher verarbeitet werden.
-
HARDWARE-ÜBERSICHT
-
3 ist
ein Blockdiagramm, das ein Computersystem 300 darstellt,
auf dem eine Ausführungsform
der Erfindung implementiert werden kann. Das Computersystem 300 beinhaltet
einen Bus 302 oder einen anderen Kommunikationsmechanismus zum
Weiterleiten von Information, und einem mit dem Bus 302 verbundenen
Prozessor 304 zum Verarbeiten von Informationen. Das Computersystem 300 beinhaltet
auch einen Hauptspeicher 306, wie beispielsweise einen
RAM (Direktzugriffsspeicher) oder eine andere dynamische Speichervorrichtung,
die mit dem Bus 302 verbunden ist, um Informationen und durch
den Prozessor 304 auszuführende Anweisungen zu speichern.
Der Hauptspeicher 306 kann auch zum Speichern von temporären Variablen
oder anderen Zwischeninformationen während eines Ausführens von
durch den Prozessor 304 auszuführenden Anweisungen verwendet
werden. Das Computersystem 300 beinhaltet weiter einen
ROM (Nur-Lese-Speicher) 308 oder eine andere mit dem Bus 302 verbundene
statische Speichervorrichtung zum Speichern statischer Informationen
und Anweisungen für den
Prozessor 304. Eine Speichervorrichtung 310, wie
beispielsweise eine Magnetplatte oder eine optische Platte, ist
vorgesehen und mit dem Bus 302 verbunden, um Informationen
und Anweisungen zu speichern.
-
Das
Computersystem 300 kann über einen Bus 302 mit
einer Anzeigeeinrichtung 312 wie beispielsweise einer Kathodenstrahlröhre (CRT)
verbunden sein, um einem Computerbenutzer Informationen anzuzeigen.
Eine Eingabevorrichtung 314, die alphanumerische und weitere
Tasten beinhaltet, ist mit dem Bus 302 verbunden, um Informationen
und ausgewählte
Befehle an den Prozessor 304 zu übermitteln. Ein weiterer Typ
vom Benutzereingabevorrichtung ist eine Cursorsteuerung 316,
wie beispielsweise ein Maus, ein Trackball oder Cursor-Richtungstasten,
um Richtungsinformationen und ausgewählte Befehle an den Prozessor 304 zu übermitteln und
die Cursorbewegung auf der Anzeige vorrichtung 312 zu steuern.
Diese Eingabevorrichtung weist typischerweise zwei Freiheitsgrade
in zwei Achsen auf, einer ersten Achse (z. B. x) und einer zweiten
Achse (z. B. y), was ermöglicht,
dass die Vorrichtung Positionen in einer Ebene bezeichnen kann.
-
Die
Erfindung betrifft die Verwendung eines Computersystems 300 zum
Implementieren der hier beschriebenen Verfahren. Gemäß einer
Ausführungsform
der Erfindung werden diese Verfahren durch ein Computersystem 300 durchgeführt, und zwar
reagierend darauf, dass der Prozessor 304 eine oder mehrere
Sequenzen von einer oder mehreren im Hauptspeicher 306 enthaltenen
Anweisungen ausführt.
Derartige Anweisungen können
in den Hauptspeicher 306 von einem weiteren computerlesbaren
Medium, wie beispielsweise einer Speichervorrichtung 310,
eingelesen werden. Ein Ausführen der
im Hauptspeicher 306 enthaltenen Anweisungssequenzen bewirkt,
dass der Prozessor 304 die hier beschriebenen Prozessschritte
durchführt.
Bei alternativen Ausführungsformen
kann eine fest verdrahtete Schaltungsanordnung verwendet werden,
und zwar anstelle von Softwareanweisungen oder in Kombination mit
diesen, um die Erfindung zu implementieren. Daher sind die Ausführungsformen
der Erfindung nicht auf irgendeine spezielle Kombination aus Hardware-Schaltungsanordnung
und Software eingeschränkt.
-
Der
Begriff "computerlesbares
Medium", wie hier
verwendet, betrifft ein beliebiges Medium, das daran beteiligt ist,
Anweisungen an den Prozessor 304 zum Ausführen zu
liefern. Ein derartiges Medium kann viele Formen annehmen, einschließlich, jedoch nicht
eingeschränkt
auf nicht-flüchtige
Medien, flüchtige
Medien und Übertragungsmedien.
Nicht-flüchtige
Medien beinhalten beispielsweise optische oder magnetische Platten,
wie beispielsweise die Speichervorrichtung 310. Flüchtige Medien
beinhalten einen dynamischen Speicher, wie beispielsweise den Hauptspeicher 306. Übertragungsmedien
beinhalten Koaxialkabel, Kupferdraht- und Glasfaserkabel, einschließlich der
Drähte,
die den Bus 302 beinhalten. Übertragungsmedien können auch
die Form von akustischen Wellen oder Lichtwellen annehmen, beispielsweise
solche, die während
Radiowellen- und Infrarot-Datenkommunikationen
erzeugt werden.
-
Übliche Formen
vom computerlesbaren Medien beinhalten beispielsweise eine Floppy-Disk, eine Diskette,
eine Festplatte, ein Magnetband oder ein beliebiges anderes magneti sches
Medium, eine CD-ROM, ein beliebiges anderes optisches Medium, Lochkarten,
Papierband, ein beliebiges anderes physisches Medium mit Lochmustern,
ein RAM, ein PROM und ein EPROM, ein FLASH-EPROM, einen beliebigen
anderen Speicherchip oder eine -kassette, eine Trägerwelle
wie nachfolgend beschrieben, oder ein beliebiges anderes Medium,
von dem ein Computer lesen kann.
-
Verschiedene
Formen von computerlesbaren Medien können daran beteiligt sein,
eine oder mehrere Sequenzen von einer oder mehreren Anweisungen
zum Prozessor 304 zur Ausführung zu transportieren. Beispielsweise
können
sich die Anweisungen zu Anfang auf einer Magnetscheibe eines entfernt
angeordneten Computers befinden. Der entfernt angeordnete Computer
kann die Anweisungen in seinen dynamischen Speicher laden und die
Anweisungen über
eine Telefonleitung unter Verwendung eines Modems senden. Ein Modem,
das sich lokal beim Computersystem 300 befindet, kann die
auf der Telefonleitung befindlichen Daten empfangen und eine Infrarot-Übertragungseinrichtung
verwenden, um die Daten in ein infrarotes Signal umzuwandeln. Eine
Infrarot-Erfassungseinrichtung kann die im Infrarot-Signal transportierten
Daten empfangen, und eine geeignete Schaltungsanordnung kann die
Daten auf dem Bus 302 platzieren. Der Bus 302 transportiert die
Daten zum Hauptspeicher 306, von dem aus der Prozessor 304 die
Anweisungen ausliest und ausführt.
Die vom Hauptspeicher 306 empfangenen Anweisungen können optional
in der Speichervorrichtung 310 gespeichert werden, und
zwar entweder vor oder nach dem Ausführen durch den Prozessor 304.
-
Das
Computersystem 300 beinhaltet auch eine Kommunikationsschnittstelle 318,
die mit dem Bus 302 verbunden ist. Die Kommunikationsschnittstelle 318 sorgt
für eine
Zweiweg-Datenkommunikationsverbindung zu einem Netzwerk-Verbindungsglied 320,
das mit einem lokalen Netz 322 verbunden ist. Beispielsweise
kann die Kommunikationsschnittstelle 318 eine ISDN-(Integrated
Services Digital Network)-Karte oder ein Modem sein, um eine Datenkommunikationsverbindung
zu einem entsprechenden Typ von Telefonleitung bereitzustellen.
Als weiteres Beispiel kann die Kommunikationsschnittstelle 318 eine
LAN-(Local Area Network)-Karte sein, um eine Datenkommunikationsverbindung
zu einem kompatiblen LAN bereitzustellen. Drahtlose Verkehrsverbindungen
können
auch implementiert sein. Bei jeder derartigen Implementierung sendet
und empfängt
die Kommunikationsschnittstelle 318 elektrische, elektromagnetische
oder optische Signale, welche digitale Datenströme transportieren, die verschiedene
Typen von Information repräsentieren.
-
Das
Netzwerk-Verbindungsglied 320 sorgt typischerweise für eine Datenkommunikation über eines
oder mehrere Netze zu anderen Datenvorrichtungen. Beispielsweise
kann das Netzwerk-Verbindungsglied 320 eine Verbindung über ein
lokales Netz 322 zu einem Host-Computer 324 oder
zu einer Datenanlage bereitstellen, die durch einen Internetdienstanbieter
(ISP) 326 betrieben wird. Der ISP 326 stellt seinerseits
Datenkommunikationsdienste über das
weltweite Paketdaten-Kommunikationsnetz bereit, das heutzutage allgemein
als "Internet" 328 bezeichnet
wird. Das lokale Netz 322 und das Internet 328 verwenden
beide elektrische, elektromagnetische oder optische Signale, welche
digitale Datenströme
transportieren. Die über
die verschiedenen Netzwerke übertragenen
Signale, und die beim Netzwerk-Verbindungsglied 320 und über die
Kommunikationsschnittstelle 318 übertragenen Signale, welche
die digitalen Signale vom Computersystem 300 weg und zu
diesem hin transportieren, sind beispielhafte Formen von die Informationen
transportierenden Trägerwellen.
-
Das
Computersystem 300 kann Nachrichten senden und Daten, einschließlich Programmcode empfangen,
und zwar über
das/die Netzwerk(e), das Netzwerk-Verbindungsglied 320 und
die Kommunikationsschnittstelle 318. Beim Beispiel des
Internet könnte
ein Server 330 einen angeforderten Code für ein Anwendungsprogramm über das
Internet 328, den ISP 326, das lokale Netz 322 und
die Kommunikationsschnittstelle 318 übertragen.
-
Der
empfangene Code kann durch den Prozessor 304 bei seinem
Empfang ausgeführt
werden, und/oder in der Speichervorrichtung 310 oder einem anderen
nicht-flüchtigen
Speicher zur späteren
Ausführung
gespeichert werden. Auf diese Weise kann das Computersystem 300 Anwendungscode
in Form einer Trägerwelle
erhalten.
-
Bei
der vorhergehenden Beschreibung wurde die Erfindung mit Bezug auf
spezielle Ausführungsformen
von dieser beschrieben. Es versteht sich jedoch, dass verschiedene
Modifikationen und Änderungen
an dieser vorgenommen werden können,
ohne vom Schutzumfang der Erfindung abzuweichen, der durch die Ansprüche definiert
ist. Die Beschreibung und die Zeichnungen sind demgemäß beispielhaft
und nicht einschränkend
zu verstehen.