Hauptseite | Liste aller Namensbereiche | Klassenhierarchie | Übersicht | Auflistung der Dateien | Elemente eines Namensbereiches | Datenstruktur-Elemente | Datei-Elemente

Parsen Speichern Finden Aktualisieren

1.0

Einleitung

Bei der Verarbeitung vom XML-Dateien, beispielsweise in einer Web-Anwendung, sieht man sich mit einem Performance Problem konfrontiert. Denn es ist recht aufwendig, alle XML-Dateien beispielsweise auf das Vorkommen eines bestimmten Tags zu untersuchen. Dieses Problem verschärft sich, wenn große Massen verarbeitet werden müssen. Deswegen liegt es nahe, die XML-Dateien vorzuverarbeiten, sie zu indizieren. Dadurch wird später der Suchaufwand minimiert. PSFA befaßt sich genau mit diesem Problem. Diese Arbeit stellt ein kleines Administrations-Programm, mit dem man solche Indices aufbauen kann, zur Verfügung. Das Programm baut auf einer C++-Bibliothek auf, die auch Methoden zur Verfügung stellt, die indizierten Daten wieder auszugeben. Um den Index aufzubauen, bedient sich die Bibliothek im Moment eines MySql-Datenbanksystems. Es ist aber möglich, dies zu ändern. PSFA ist auf Register-Funktionen ausgerichtet und indiziert deswegen nur Elemente die das Inhaltsmodell (#PCDATA) besitzen. Es ist kein allgemeines XML-Indizierungs-System. Die XML-Dateien, die mit dem System verarbeitet werden sollen, müssen mindestens wohlgeformt sein und die Dateierweiterung .xml besitzen. Wenn auf eine DTD oder ein Schema verwiesen wird, muß sichergestellt sein, daß der Parser die URL zur Grammatik auflösen kann. Ist eine Grammatik vorhanden, wird die XML-Datei auch validiert.

Begriffe

In dieser Dokumentation werden immer wieder grundlegende Begriffe verwendet, die nun definiert werden sollen.

Eine Datei ist eine Datei, die ein XML-Dokument enthält. Diese Datei kann eine oder mehrere Einheiten beinhalten.

Eine Einheit ist ein XML-Dokument, welches eine eindeutige ID enthält. Diese ID muß durch einen Tag innerhalb des Dokuments gekennzeichnet sein.

Ein Pool ist die Gesamtheit von Einheiten, die entweder das Wurzel-Element oder ein Container-Element gemeinsam haben. Dies hängt davon ab, ob sich mehrere Einheiten in einer Datei befinden oder nicht.

Ein Such-Tag ist der Name eines Elementes, der zur Indizierung ausgewählt wurde.

Ein Kontext-Tag ist der Name eines Elementes in dessen Kontext ein Such-Tag stehen kann. Näheres siehe die Beispiel-Konfiguration.

Ein Eintrag ist ein indiziertes Element in der Datenbank mit allen dazu gehörenden Informationen, wie etwa Inhalt, Such-Tag, Kontext-Tag, Pool, Einheit, Datei usw.

Eine-Datei-eine-Einheit.xml
<urkunde>    <!-- Wurzel-Element -->
...
<nr>123</nr> <!-- eindeutige ID dieser Einheit -->
....
<arenga>     <!-- ein Kontext-Tag -->
...
<name>       <!-- ein Such-Tag -->
Ottonis      <!-- der Inhalt eines Eintrages -->
</name> 
...
</arenga>

</urkunde>

----

Eine-Datei-mehrere-Einheiten.xml
<bap>        <!-- Wurzel-Element -->
<p>          <!-- Container-Element -->
...
<id>123</id> <!-- eindeutige ID dieser Einheit -->
...
</p>
<p>
...
<id>124</id> <!-- eindeutige ID nächste Einheit -->
...
</p>
</bap>

Konfiguration

Das System wird mittels einer XML-Datei konfiguriert. Die DTD der Konfiguratoin lautet wie folgt:
<!ELEMENT config ( pool+ ) >
<!ELEMENT pool ( name, entries+ ) >
<!ELEMENT name ( #PCDATA ) >
<!ELEMENT entries ( entry+ ) >
<!ELEMENT entry ( key, value+ ) >
<!ELEMENT key ( #PCDATA ) >
<!ELEMENT value ( #PCDATA ) >

Die Konfiguration besteht also aus mehreren Pool-Abschnitten. Diese Pools besitzen einen Namen und die Einträge mit den Schlüsseln und den dazugehörigen Werten. Der Pool mit den Namen "psfa" und "mysql" sind besondere Pools, da mit ihnen keine Einheiten verknüpft sind, sondern nur Konfigurationseinträge. Beide Pools müssen vorhanden sein. Die Bedeutungen der einzelnen Schlüssel und der möglichen Werte sind in der Beispiel-Konfiguration (contrib/psfa_conf.xml) dokumentiert.

Die Konfiguration kann mehrfach als Datei vorliegen. Gleiche Schlüssel werden aber nicht überschrieben. An den folgenden Orten und in der folgenden Reihenfolge wird die Konfiguration gesucht.

Das Administrationstool psfaAdmin

Mittels psfaAdmin kann die Datenbank mit den indizierten Elementen manipuliert werden. Der Aufruf lautet psfaAdmin Aktion [Parameter]. Folgende Aktionen können ausgeführt werden.

init Initialisiert die Datenbank. Legt alle Pools, die in der Konfiguration enthalten sind, an. Wenn sie schon vorhanden sind, werden sie vorher gelöscht. Danach können alle Pools indiziert werden.
delete Name_des_Pools Löscht einen Pool aus der Datenbank.
index Name_des_Pools Indiziert einen Pool gemäß der Konfiguration. Falls der Pool schon in einem vorherigne Lauf indiziert worden ist, werden nur die Veränderungen in die Datenbank integriert.
check Überprüft, ob der Stand der Datenbank noch aktuell ist. Wenn dies nicht der Fall sein sollte - weil die Konfiguration verändert wurde, oder weil die Dateien eines Pools sich geändert haben - wird eine entsprechende Meldung ausgegeben.

Die MySql-Datenbank

Zum Aufbau der MySql-Datenbank siehe die Beschreibung der psfa::DbWriteDriverMySql Klasse.
Erzeugt am Mon Jul 12 11:45:04 2004 für PSFA von doxygen 1.3.4