Terme
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
Terme
Terme
Terme
Terme
Terme
Terme
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.
Eingabedaten können an Xcerpt entweder als XML- oder dem kürzeren Xcerpt-Format (folgend als XcerptV2 bezeichnet) übergeben werden. Sie werden als Datenterme repräsentiert, welche aus
- Basis-Konstanten (bspw. Strings und Integer-Werte),
- Bezeichner (Labels) und
- zwei Arten von Term-Spezifikationen (eckige und geschweifte Klammern)
aufgebaut sind.
Im Vergleich zu XML wird ein Tag-Namen durch einen Bezeichner mit darauffolgender Term-Spezifikationen dargestellt. Darin eingeschoben sind die dazugehörigen Subterme.
<html> |
html { |
Geschweifte Klammern ( { und }) spezifizieren, daß die direkten Unterterme in der Reihenfolge innerhalb der Sequenz ungeordnet auftreten. Durch eckige Klammern ([ und ]) wird hingegen eine Ordnung der direkten Subterme angezeigt. XML-Tags besitzen von Grund auf stets eine feste Reihenfolge. So folgt im obigen Beispiel der Paragraph "p" nach der Überschrift "h1".
Attribute
Attribute eines XML-Tags stellen eine weitere, beschreibende Instanz dar, sind jedoch als ungeordnet spezifiziert. Sie werden durch das Konstrukt dargestellt, wobei ein fester Bezeichner, und sowie ( ) die Namen von Attributen und deren respektiven Werten sind.
Datenterme
Jede Basiskonstante stellt einen Datenterm dar. Falls ein Bezeichner und jeweils Datenterme sind, so ist ein Datenterm mit definierter Reihenfolge der direkten Subterme und ein Datenterme mit undefinierter Reihenfolge dieser.
Der Subterm eines Datenterms ist zunächst der Term selbst. Jeder Subterm von ist ebenfalls ein Subterm von und , wobei ein Bezeichner ist.
Dabei sind direkte Subterme eines Datenterms und . Subterme von , mit Ausnahme von selbst sind indirekte Subterme von und .
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Aus dieser Definition wird ersichtlich, dass ein Unterschied zu XML besteht, bei dessen Baumstruktur jeder Inhalt mit Ausnahme der Attribute geordnet ist. Als Schlußfolgerung korrespondieren nicht alle Xcerpt-Datenterme mit XML-Daten.
Abfrage-Terme
Abfrageterme stellen die Muster zu passenden Datentermen dar. Jeder Basisterm ist gleichzeitig ein Abfrage-Term. Jeder Abfrageterm, von der Definition her ebenso ein Datenterm. Er enthält jedoch zur Musteridentifizierung die zusätzlichen Konstrukte der Variablen, Unvollständigkeiten, Eingaberesourcen sowie Abfrage-Konjunktionen.
Variablen
Allgemeine Abfrageterme beinhalten Variablen. Sie binden bei einer erfolgreichen Übereinstimmung eines Abfrageterms bestimmte Terme des Datenterme.
Man unterscheidet zwischen verschiedenen Auftreten von Variablen:
Variablen ohne Restriktionen (var B) können zu jedem Subterm gebunden werden und besitzen Platzhalter-Funktion. Sie können auch an Stelle eines Bezeichners im Anfrageterm auftreten. Falls x eine Variable ist, dann ist var x ein Abfrage-Term.
Variablen mit Restriktionen (var B -> label {}) sind nur an Subterme des Datenterms bindbar, die mit dem Muster, welches sie beschränkt, passen. Falls x eine Variable ist und G ein Abfrageterm, dann ist var x -> G ein Abfrageterm.
Unvollständigkeit
Da Abfrageterme die Rolle von Mustern für Datenterme übernehmen, muss für eine Abfrage nicht die komplette Struktur des Dokumentes bekannt sein. Es wird lediglich genügend Material benötigt, um eine eineindeutige Beschreibung zu erhalten. Unvollständige Abfrageterme können dabei in der Dimension der Breite, als auch der Tiefe definiert werden. Zusätzlich können optionale Subterme gekennzeichnet werden.
Breite
Unvollständigkeit in der Breite wird durch die teilweisen Termspezifikatoren [[ und ]] sowie {{ und }} ausgedrückt. Durch sie ausgezeichnete Terme können optional zusätzliche, nicht aufgelistete Subterme enthalten. Ihnen gegenüber stehen die bereits zu Beginn eingeführten totalen Termspezifikationen [ und ] bzw. { und }, welche vollständig angegebene Subterm-Mengen definieren.
|
|
Eine Klammer nach dem Bezeichner zeigt demnach, daß nur die angegebenen Elemente in der gegebenen Reihenfolge auftreten. Zwei Eckklammern nach dem Bezeichner (teilweise Termspezifikation) definieren die spezifizierte Reihenfolge, jedoch können andere Elemente ebenfalls vorkommen. Geschweifte Klammern können anstelle der Eckklammern genutzt werden, um anzuzeigen, daß die Reihenfolge nicht signifikant ist.
|
|
Ein Abfrageterm mit Eckklammern findet einen Datenterm nur, wenn die Bezeichner des Abfrageterms genau zu den Bezeichnern des Datenterm passen, sowie die direkten Subterme des Abfrageterms in korrekter Reihenfolge zu den direkten Subterm des Bezeichners im Datenterm.
Falls der Abfrageterm eine totale Termspezifikation besitzt, muss die Anzahl der direkten Subterme des Datenterms identisch zur Nummer der direkten Subterme des Abfrageterms sein. Falls der Abfrageterm eine teilweisen Termspezifikation besitzt, muss die Anzahl der direkten Subterme der Datenterme größer oder gleich zur Anzahl der direkten Subterme des Abfrageterms sein.
Die zusätzlichen direkte Subterme können unbestimmt innerhalb der direkten Subterme auftreten. Ein Abfrageterm mit geschweiften Klammern findet Datenterme in ähnlicher Weise mit der Ausnahme, dass die Datenterme nicht in eine bestimmte Ordnung passen müssen. falls W ein Bezeichner (l) oder eine Variable Abfrage Term (var X) und Abfrageterme sind, dann sind , , und ebenfalls Abfrageterme.
Tiefe
Unvollständigkeit in der Tiefe wird durch den Bezeichner desc ausgedrückt. desc t findet somit einen Term, wenn dieser den Bezeichner t trägt. Er findet allerdings auch den Subterm eines Termes, wenn dieser Subterm den Bezeichner t trägt. Dabei ist es unerheblich, ob es sich dabei um einen direkten oder einen indirekten Subterm handelt. Falls q ein Abfrageterm ist, dann stellt des q ebenfalls ein Abfrageterm dar.
|
|
Eingaberesourcen
Eingaberesourcen werden zum Durchsuchen externer Ressourcen genutzt. Dies können derzeit lokale sowie über das HTTP-Protokoll erreichbare Quellen im xml-, xcerpt- und eingeschränkt auch html-Format sein.
Falls eine URI und ein Type (bspw. Format) definiert, so sind und Resourcenausdrücke.
Die URI kennzeichnet das zu verwendende Protokoll (file: oder http:) und weitere protokollspezifische Informationen, wie der zum Zugriff nötige Pfad. Falls das Suffix der URI von Xcerpt erkannt wird, wird nicht benötigt.
Falls eine URI ist und eine Resource identifiziert, dann sind und Resourcenausdrücke.
Falls ein Ressourcenausdruck und eine Abfrage ist, so sind und gezielte Abfrageterme.
Falls Resourcenausdrücke sind, so sind und ebenfalls Resourcenausdrücke.
Ein -Resourcenausdruck identifiziert verschiedene Resourcen gleichzeitig. Die Abfrage wird dann auf alle Datenterme von jeder der identifizierten Resourcen angewendet. Für die Zielabfrage zum Treffer muss den Datenterm in mindestens einer der Resourcen finden.
Ein gezielter Abfrageterm assoziiert die Resourcen (n), welche durch den Resourenausdruck r mit einer Abfrage beschrieben werden. Eine Resource speichert Datenterme (oder XML-Terme, welche mit den Datentemen korrespondieren). Die Bedeutung eines gezielten Abfrageterms ist, das nicht gegen Daten in den Resource(n), welche durch beschrieben sind, gefunden werden muss.
Abfragen im Körper einer Regel, welche keine Resourcenausdrücke besitzen, werden mit dem durch die Konstruktionsregeln des Xcerpt-Programmes generiert Datenterme verglichen.
Abfragen
Eine Abfrage ist eine Verbindung von 0...* möglicherweise gezielten Abfragetermen unter Nutzung der logischen Verbindungen „and“, „or“ und „not“. Eine Abfrage ist wie folgt induktiv definiert:
Ein Abfrageterm oder gezielter Abfrageterm ist eine Abfrage.
Falls Abfragen sind, so sind , , sowie Abfragen.
Falls eine Abfrage ist, dann ist ebenfalls eine Abfrage
Dabei verbindet eine „or“ Abfrage ähnlich einer „union“ in relationalen DBMSs die Ergebnismengen von Variablenbindungen der Ergebnisse ,..., . Eine „and“ Abfrage verbindet, ähnlich einem „join“, die gemeinsamen Variablenbindungen in ,..., .
Die „ “ Abfrage nutzt Negation als Fehler und ist erfolgreich, falls fehlschlägt.
Konstruktterme
Konstruktterme sind ähnlich zu Datentermen, enthalten ebenfalls Variablen, jedoch zusätzlich den - und den -Ausdruck. Sie werden im Kopf von Ziel- und Konstruktionsregeln genutzt und beinhalten typischerweise Variablen. Die Variablenbindungen, welche im Konstruktionsterm gebunden werden, werden im Körper der Goal- und Konstruktionsregeln (durch Abfragen) aufgelöst.
Ein Konstruktionsterm ist induktiv wie folgt definiert:
Jede Basiskonstante ist ein Konstruktterm.
Falls eine Variable ist, ist ein Konstrukt-Term. Falls ein Bezeichner oder eine Variable ist und Konstruktterme sind, dann sind und Konstruktionsterme. Falls ein Konstruktterm ist, dann ist ein Konstruktterm. Falls ein Konstruktterm und ein natürliche Nummer, dann ist ein Konstruktionsterm. Damit ist jeder Datenterm ein Konstruktterm.
Sammelkonstrukte
Falls vor einem Konstrukt-Term der Quantor auftritt, konstruiert einen Datenterm per Variablenbindung der Variablen innerhalb der Liste .
Die möglichen Datenterme, welche durch gebildet werden, besitzen ein oberes Limit und sind nichtdeterministisch gewählt. Es werden also nur die k ersten Terme der Listenkonstruktion ausgegeben. Falls die Variable x an die Werte „eins“, „zwei“ und „drei“ gebunden wird (im Körper eines Konstrukt-Regel oder Zielregel), produziert der Konstrukt-Term
results [ all result [ var X ] ] |
results [ some 2 result [ var X ] ] |
liefert das Ergebnis | liefert das Ergebnis |
results [ |
results [ |
Durch das Konstrukt „sort by“ können Ergebnismengen nach in Klammern genannten Variablen auf- bzw. absteigend sortiert werden.
Das Konstrukt „group by“ ermöglicht die Gruppierung nach Werten einer Menge von Variablen, wie dies auch aus dem DBMS-Sektor bekannt ist.
Zusammenfassung
Durch die soeben vorgestellten Konstrukte ist es möglich, über die Vorgabe eines Musters einfach entfernte Datenquellen auf Terme, Bezeichner und Attribute abzufragen. Die Unterstützung der Unvollständigkeit in der Breite läßt zum Einen Varianzen bei der in XML stets geordneten Datenrepräsentation zu, zum Anderen kann in wichtigen Fällen die Reihenfolge genutzt werden.
Der Xcerpt-Ansatz eignet sich für die Erstellung von Wrappern [Gamma94], um lokale Datenschemata auf ein integriertes Schema zu vereinen. Es ist übersichtlich und gibt im Gegensatz zu XQuery durch reguläre Ausdrücke die Möglichkeiten der grundlegenden Datenanpassung..
Zum jetzigen Zeitpunkt müssen entsprechende Wrapper jedoch von Hand generiert werden. Im folgenden sollen daher Möglichkeiten vorgestellt werden, wie über Methoden der Strukturanalyse Schemen selbständig erkannt werden können.