|
![]() |
Dieses Dokument ist eine Einführung zu dem von Amaya bereitgestellten Mechanismus der strukturierten Transformation. Es beschreibt die Syntax der Transformationssprache und wie Transformationen im Editor durchgeführt werden.
Die Datei HTML.trans im Verzeichnis amaya
enthält die Beschreibung der Transformationen. Diese Datei wird während einer
Sitzung mit Amaya dynamisch geparst wenn die
Transformationsprozedur vom Editor aufgerufen wird, sodass neue
Transformationen während einer Editiersitzung hinzugefügt werden können. Die
Datei kann, während man mit Amaya arbeitet, editiert werden.
Warnung: Da die Beschreibung der Transformationen HTML-Tags enthalten kann, sollte diese Datei nicht mit Amaya editiert werden. Man muss irgend einen anderen Editor benutzen.
Kommentare beginnen mit ! und gehen bis zum
Zeilenende.
Die Datei enthält eine Liste von Transformationsbeschreibungen. Jede Transformation wird durch drei Teile beschrieben:
Der Name erscheint im Menü Transformation und identifiziert die Transformation.
Das Muster beschreibt die spezifische Organisation der Elemente, welche transformiert werden sollen. Es agiert als Filter über der DTD von HTML. Der Zweck des Musters ist eine spezielle Kombination von Elementen zu identifizieren auf die die Transformation angewendet werden kann. Mit einem Muster ist es möglich Bedingungen für die Sequenz von Tags, den Inhalt eines Tags oder die Existenz eines Wertes oder Attributs anzugeben.
Formal enthält ein Muster einen HTML-Tag (möglicherweise mit Attributen) und Operatoren:
| Auswahl (oder)
, Geschwister
+ Sequenz
? Option
( ) Gruppierung von Knoten
Die Klammern {
} definieren den Inhalt eines Knotens.
Das Symbol * ist ein Token, welches auf
jedes Element zutrifft.
Es ist möglich ein Tag umzunennen, indem man ihm einen Namen, gefolgt von
einem Doppelpunkt (:). voranstellt
Das Tag kann Attribute haben. Ist kein Wert angegeben, dann trifft ein Element zu, wenn es das entsprechende Attribut hat. Ist ein Wert für ein Attribut angegeben, dann trifft ein Element zu, wenn das entsprechende Attribut vorhanden ist und den entsprechenden Wert hat.
Beispiele von Mustern findet man am Ende des Dokuments
Eine Regel besagt, wie die, durch ein Muster identifizierten Elemente
transformiert werden. Eine Regel besteht aus zwei Teilen, die durch das
Symbol > getrennt sind:
Die Liste selbst besteht aus zwei, durch einen Doppelpunkt
(:) getrennten Teilen:
Der Pfad wird im äußersten linken Ast des Dokumentenbaums gesucht und zwar vom Elternelement des Elements welches dem obersten Symbol im Suchmuster entsprach.
In der Tagliste wird der Punkt (.) benutzt
um in der Baumstruktur hinabzuwandern
Wenn das Symbol Stern (*) am Ende der zu
generierenden Tagliste steht, so wird das ursprüngliche Tag nicht verändert,
kann aber an eine andere Stelle verschoben werden.
Taucht ein Tag oder ein Name im linken Teil der Regel mehrmals in einem Muster auf, dann transformiert die Regel alle die Elemente, welche im Muster vorkommen.
Wählt der Benutzer den Befehl Transformiern aus dem Menü
Bearbeiten, dann parst Amaya die Datei
HTML.trans. Danach werden die markierten Elemente mit dem Muster
jeder Transformation gesucht. Die Namen der gefundenen Transformationen
werden dem Benutzer in einem Popup-Menü angezeigt.
Treffen mehrere Transformationen mit gleichem Namen auf die markierten
Elemente zu, dann wird die Transformation auf der obersten Ebene dem Benutzer
angezeigt. Treffen mehrere Transformationen auf der gleichen Ebene zu, dann
wird die erste in der Datei HTML.trans gefundene genommen. Daher
sollte man spezifische Muster vor den allgemeinen anlegen.
Nachdem eine Transformation vom Benutzer ausgewählt wurde, wird die Zielstruktur gemäß den Regeln erstellt, indem die markierten Elemente transformiert werden.
Am Ende wird der Inhalt der zu transformierenden Elemente (Text, Bilder, aber auch strukturierte Elemente) in die transformierten Elemente verschoben.
Der Transformationsprozess für HTML-Elemente ist vollständig in Interactively Restructuring HTML Documents beschrieben, ein Dokument, welches auf der fünften internationalen WWW-Konferenz in Paris im Mai 96 von Cécile Roisin und Stéphane Bonhomme vorgestellt wurde.
Merge Lists: (ul{li+})+;
{
li > ul:li;
}
Das Muster trifft auf eine Sequenz von unsortierten Listen zu, welche eine Sequenz von Listenelementen (li+) enthalten.
Die Regel besagt, dass jedesmal, wenn ein Element beim Durchgang über die passenden Elemente angetroffen wird, ein neues li-Tag innerhalb einer ul erzeugt werden soll. Wird die Regel das erste Mal angewendet, dann ist die resultierende Struktur noch leer. Es gibt noch kein ul-Element, in das ein li-Element gelegt werden kann. Daher wird das ul-Element zuerst erzeugt damit die Regel angewendet werden kann.
Table: dl{(dt|dd)+};
{
dt > <table border=1>.tbody:tr.td;
dd > <table border=1>.tbody.tr:td;
}
Das Muster passt auf jedes Definitionslistenelement (dl).
Die Regel beschreibt, wie die Tabelle inkrementell erstellt werden soll, wenn die Struktur der markierten Definitionsliste durchlaufen wird:
Remove Table:
table{?caption,?(body:*{(tr{(td{(?cell_content:*)+}|
th{(?cell_content:*)+}
)})+})+};
{
caption>h3;
cell_content>:*;
}
Das Muster passt auf eine beliebige Tabelle und identifiziert den Inhalt einer jeglichen Tabellenzelle (cell_content).
Die zweite Regel besagt, dass der Inhalt jeder Zelle an die ursprüngliche Stelle im Dokument verschoben werden soll.
amaya/HTML.trans enthält weitere Beispiele.