13.07.2015 Aufrufe

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baumsDie Transformation in erneute Regeln wird in XSLT recht leicht gemacht: XSLT sieht bereits dieMöglichkeit vor, Namespace Aliase zu verwenden, die bei der Transformation in den entsprechenenNamespace übertragen werden. Somit schreibt sich <strong>ein</strong>e zu erzeugende Regel z.B. so:...Was b<strong>ein</strong>ahe der ursprünglichen Schreibweise entspricht.Für das Wurzelelement <strong>und</strong> die iterierten Strukturierungsknoten wird jeweils <strong>ein</strong>e eigene Regel <strong>ein</strong>gefügt.Daneben müssen aber in die Regeln noch die <strong>ein</strong>fachen Strukturierungsknoten <strong>und</strong> die Blätter<strong>ein</strong>gefügt werden.Dieses verschränkte Einfügen ist in XSLT mit <strong>ein</strong>em <strong>ein</strong>zigen Durchlauf nicht zu machen, sondernes müssen zuerst in jede Regel ihre enthaltenen Strukturierungsknoten <strong>ein</strong>gefügt werden <strong>und</strong> dann in<strong>ein</strong>em weiteren Durchlauf neue Regeln für möglicherweise vorgekommene iterierte Strukturierungsknotenerzeugt werden.Dieser mehrmalige Aufruf wird in XSLT durch die modes unterstützt, mit denen Regeln mit gleichemSelektor unterschieden werden können.Wenn im <strong>Layout</strong>beschreibungsbaum an unterschiedlichen Stellen iterierte Selektierungsknoten mitdem gleichen Selektor vorkommen, spielen die modes ebenfalls <strong>ein</strong>e wichtige Rolle: Normalerweisewürden zwei Regeln mit dem gleichen Selektor erzeugt werden, bei der zweiten Transformationwürde aber nur <strong>ein</strong>e davon verwendet werden bzw. <strong>ein</strong> Fehlerzustand auftreten. D.h. es würden, selbstwenn die Transformation durchgeführt würde, in den <strong>Layout</strong>baum falsche Strukturierungsknoten <strong>ein</strong>gefügt.Die Lösung ist naheliegend: Wenn für jeden iterierten Strukturierungsknoten <strong>ein</strong> eigener modeverwendet wird, wird die richtige Regel verwendet.In PEP ¡£¦¥¨§©wird auf drei unterschiedliche Arten auf <strong>ein</strong>zufügende Daten verwiesen:1. Durch ihre strukturelle Position in den Eingabedaten. Also z.B. <strong>ein</strong> Element Dozent, daß <strong>ein</strong>Vaterelement Dozenten hat. (In PEP ¡£ ¥§ © sind das die selector-Attribute.)2. Durch <strong>ein</strong>en berechneten Ausdruck, der wiederum mehrere Verweise wie in 1. enthalten kann,z.B. die Summe der Inhalte der Elemente St<strong>und</strong>e <strong>und</strong> Dauer. (In ¢¡¤£¦¥¨§© PEP sind das dieexpression-Attribute.)3. Durch <strong>ein</strong>e Referenz auf den Wert <strong>ein</strong>es id-Attributes von ihnen, z.B. <strong>ein</strong> Element, das <strong>ein</strong>id-Attribut mit dem Wert “Info1” besitzt. (In ¡£¦¥¨§© PEP sind das die reference-Attribute.)Die ersten beiden Arten werden in XSLT durch XPath 1.0 ermöglicht, die dritte durch <strong>ein</strong>en key-Mechanismus.Obwohl in XPath die Formulierung aller notwendigen Verweise möglich ist, enthält es doch <strong>ein</strong>e Stolperfalle:Die XPath-Ausdrücke beziehen sich nicht zwingend auf den aktuellen Kontext des Eingabedokuments,sondern können auf beliebige Knoten im Eingabedokument verweisen – auch welche in<strong>ein</strong>em anderen Teilbaum oder weiter oben im Baum. Dies erfordert besondere Sorgfalt bei der Formulierungder Selektoren. Andererseits ist man dadurch nicht darauf festgelegt, sich in <strong>ein</strong>em Teilbaumnur abwärts zu bewegen, sondern kann in iterierten Strukturierungsknoten <strong>und</strong> Werten auf beliebigeElemente verweisen.71

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!