Queries 2: Transformationsmechanismen für semistrukturierte Daten Klemens Böhm Interoperable Informationssysteme - 1 Transformation - Gliederung Einleitung CSS XSL XSLT Formating Objects YAT Einleitung Cascading Stylesheets (CSS) Extensible Stylesheet Language (XSL) Transformation XSLT – XSL Transformations Formatobjekte YAT Klemens Böhm Interoperable Informationssysteme - 2 Logische Struktur vs. Layout-Struktur Einleitung CSS XSL XSLT Logische Dokumentbestandteile Elementtypen können beliebige Bedeutung haben, Layout-Struktur – Darstellung des Dokuments. Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 3 Architekturüberlegungen Einleitung CSS XSL XSLT Formating Objects Client, z.B. IE5.0 Client, insbes. ‘alte’ Browser LayoutKonvert . YAT Client Konvert . Proxy/ Firewall Konvert . LayoutKonvert . Server Server Client, z.B. IE5.0 Server Konvert . Server Wann könnte serverseitige Konvertierung sinnvoll/vorteilhaft sein? Klemens Böhm Interoperable Informationssysteme - 4 Stylesheets für XML Einleitung CSS XSL XSLT Formating Objects YAT Beschreiben, wie Dokumente mit irgendeinem Medium dargestellt werden Es gibt zwei Sprachen mit unterschiedlichen Fähigkeiten: CSS (‚Cascading Stylesheets‘) – auch für HTML, keine Transformation, XSL – auch Transformationen. Klemens Böhm Interoperable Informationssysteme - 5 CSS - Eigenschaften Einleitung CSS XSL XSLT Formating Objects YAT Komplementär zu strukturierten Dokumenten, d.h. komplementär zur Dokumenterstellung, plattformunabhängig, einfach, flexibel durch Cascading, d.h. Kombination mehrerer Stylesheets, erlaubt Einbettung von Scripts. Klemens Böhm Interoperable Informationssysteme - 6 Aufbau von CSS-Stylesheets Begriffsbildung: selector { property1: wert1; property2: wert2 } Einleitung Beispiel: CSS <HEAD> <TITLE>CSS Example</TITLE> <STYLE TYPE="text/css"> H1 { font-size: x-large; color: red } H2 { font-size: large; color: blue } </STYLE> </HEAD> XSL XSLT Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 7 Einbettung externer Stylesheets Beispiel: Einleitung CSS XSL XSLT Formating Objects YAT <HEAD> <TITLE>CSS Example</TITLE> <LINK REL=StyleSheet HREF="style.css” TYPE="text/css” MEDIA=screen> <LINK REL=StyleSheet HREF="color-8b.css" TYPE="text/css” TITLE="8-bit Color Style" MEDIA="screen, print"> <LINK REL="Alternate StyleSheet" HREF="color-24b.css” TYPE="text/css" TITLE="24-bit Color Style" MEDIA="screen, print"> <LINK REL=StyleSheet HREF="aural.css” TYPE="text/css” MEDIA=aural> </HEAD> Klemens Böhm Interoperable Informationssysteme - 8 Einbettung externer Stylesheets (2) Einleitung CSS XSL XSLT Formating Objects YAT Mehrere Stylesheets können einen Style definieren (TITLE muss gleich sein). REL=StyleSheet + TITLE -> kommt zur Anwendung. MEDIA-Wert falsch – Stylesheet wird ignoriert. Alternate Style – Idee ist, dass Benutzer es aktivieren kann, Browser unterstützen es aber nicht. Klemens Böhm Interoperable Informationssysteme - 9 Beispiel für CSS-Stylesheet golfplatz Einleitung { display: background-color: border-width: border-style: margin: CSS padding: XSL XSLT Formating Objects YAT block; #eeeeee; thin; solid; 0.75em 0.75em 0.75em 0.75em; 0.5em 0.5em 0.5em 0.5em; } adresse { display: block; } saison { display: block; font-style: italic; } greenfee, platz, telefon, fax, plz { display: none; } club { font-size: 140%; color: blue; font-weight: bold; display: block; } Klemens Böhm Interoperable Informationssysteme - 10 Pattern Matching mit CSS Beispiel: DIV H1 EM { font-size: x-large; color: red } Einleitung CSS Erläuterung: EM-Element in H1-Element in DIV-Element. XSL XSLT Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 11 Cascading Order Einleitung CSS XSL XSLT Formating Objects YAT Im allgemeinen Fall sind mehrere Ersetzungen anwendbar. Welcher Selektor gewinnt im Konfliktfall? ‚!important‘-Label für Regeln, Autor-Regel vs. Leser-Regel (Autor-Regel gewinnt), ‚Specificity‘, Reihenfolge (letzte Regel gewinnt). Klemens Böhm Interoperable Informationssysteme - 12 Konvertierung vs. Transformation (1) Einleitung CSS XSL XSLT Formating Objects YAT Konvertierung: Unterschied zwischen Layout und logischer Dokumentstruktur wurde bereits besprochen, Stylesheets beschreiben, wie Dokumente mit irgendeinem Medium dargestellt werden. D.h. sie ermöglichen Ableitung von Layout-Struktur aus logischer Struktur. Transformation: Erzeugung einer anderen Struktur aus der Ausgangsstruktur Klemens Böhm Interoperable Informationssysteme - 13 Konvertierung vs. Transformation (2) Einleitung CSS XSL Gute Darstellung eines Dokuments erfordert sowohl Transformation als auch Konvertierung. DOM und SAX erfordern Programmierung, XSL-Stylesheets sind deklarativ und bewegen sich auf höherer Ebene. XSLT Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 14 Eigenschaften von XSL Einleitung CSS XSL XSLT Formating Objects YAT XSL verwendet XML Syntax, unabhängig von einzelnem Dokument, deklarativ, erweiterbar (Erweiterungen in Scripting Languages), umfasst CSS-Funktionalität. Klemens Böhm Interoperable Informationssysteme - 15 XSL – Konzepte (1) Einleitung CSS XSL XSLT XSL besteht aus zwei Teilen: Sprache für Dokumenttransformation, XML Vokabular zur Spezifikation der Formatierung, nicht obligatorisch. Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 16 XSL – Konzepte (2) Einleitung CSS XSL XSLT Formating Objects YAT Sogenannte Template Rules spezifizieren die Dokumenttransformation. Template Rule besteht aus zwei Teilen: Pattern, das m. dem Source Tree gematcht wird, Template, das instanziiert wird, u. diese Instanziierung ist Teil des Result Trees. Höhere Wiederverwertbarkeit von XSL-Code. Klemens Böhm Interoperable Informationssysteme - 17 XSL Formatierungsprozess CSS XSL Interpretation = Formating Objects The Times New Roman Browser The Times New Roman PDF XSLT HTML Transformation Einleitung Papier YAT Elementbaum Klemens Böhm Formatierungsobjekte Baum (FOT) JFC XSL Stylesheet GUI Treibersprache Ausgabemedium Interoperable Informationssysteme - 18 XSLT - Übersicht Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts Structural Recursion, Stylesheets, Template Rules, Conflict Resolution, “Kontrollstrukturen”, z.B. Schleife, bedingter Output Variablen, sonstige Features (werden nur aufgelistet). - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 19 Structural Recursion Einleitung CSS XSL XSLT - Structural Recursion Mechanismus zur Beschreibung komplexer Transformationen, Alternative zu Datalog-Programmen. Enger Zusammenhang zwischen Structural Recursion und XSL. - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 20 Structural Recursion – Beispiel Finden aller Integer-Zahlen in der Datenbank. Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen f1(v) = if isInt(v) then {result: v} else {} f1({}) = {} f1({l: t}) = f1(t) f1(t1 union t2) = f1(t1) union f1(t2) Erläuterungen: Zugrundeliegendes Modell: OEM, Ergebnis ist Menge von Werten, v steht für Blattknoten, Innerer Knoten ist Menge seiner Teilbäume plus Kanten. - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 21 Structural Recursion – Beispiel Konvertieren aller Integer-Werte in Strings. Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts f2(v) = if isInt(v) then int2String(v) else v f2({}) = {} f2({l: t}) = {l: f2(t)} f2(t1 union t2) = f2(t1) union f2(t2) Erläuterungen: Ergebnis ist Baum. Vier Fälle; {} und t1 union t2 sind immer gleich. - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 22 Structural Recursion – weiteres Beispiel Einleitung CSS XSL XSLT - Structural Recursion Konvertieren aller Integer-Werte in Strings, aber nur innerhalb von book-Objekten. f3(v) = v f3({}) = {} f3({l: t}) = if l = book then {l: g3(t)} else {l: f3(t)} f3(t1 union t2) = f3(t1) union f3(t2) - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen g3(v) = if isInt(v) then int2String(v) else v g3({}) = {} g3({l: t}) = {l: g3(t)} g3(t1 union t2) = g3(t1) union g3(t2) - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 23 Einfaches Stylesheet (1) Einleitung CSS XSL <HTML><HEAD><TITLE> <xsl:value-of select ="bookstore/book/title"/> </TITLE></HEAD> <BODY>Hello world.</BODY> </HTML> Template XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects Erläuterungen: XSL-Stylesheets sind XML-Dokumente. xsl:value-of ist XSL-Kommando XSL verwendet XML-Syntax und Namespace-Mechanismus. Parameter select identifiziert das, was ausgegeben werden soll. select-Parameter ist Pfad-Ausdruck. YAT Klemens Böhm Interoperable Informationssysteme - 24 Einfaches Stylesheet (2) Einleitung Erläuterungen (Fortsetzung): Ergebnis ist nicht zwangsläufig HTML. Demo: http://dbs12/~boehm/books6.xml CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 25 XSL - Konzepte Einleitung Komplexe Suchmuster sind möglich. Beispiele: <xsl:value-of select ="bookstore/*/title"/> CSS XSL XSLT <xsl:value-of select ="//title"/> - Structural Recursion - value-of Auch Pfadausdrücke möglich, die ‘nach oben’ oder ‘zur Seite’ gehen. - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 26 XSL - Konzepte Einleitung CSS XSL XSLT - Structural Recursion - value-of Beispiel-Stylesheet von eben verwendet value-of Konstrukt; dieses Konstrukt allein bringt nicht genügend Flexibilität. Beispiel: Wir wollen mehrere Elemente konvertieren, z.B. alle Titel kursiv und alle Namen fett, egal wo im Dokument sie vorkommen. - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 27 XSL - Konzepte Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Probleme der Folie von eben sind Motivation für Template Rules. Template Rules spezifizieren die Dokumenttransformation. Template Rule besteht aus zwei Teilen: Pattern, das mit dem Source Tree gematcht wird, Template, das instanziiert wird, und diese Instanziierung ist Teil des Result Trees. Template – Struktur, die den Output des Transformationsschrittes spezifiziert. Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 28 Patterns Einleitung CSS XSL Syntax von Patterns ist Teilmenge der Syntax von (XPath-)Ausdrücken, Location Paths können (mit kleinen Einschränkungen) als Patterns verwendet werden. XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 29 Template Rules Einleitung CSS XSL <xsl:template match=„title"> <I> <xsl:apply-templates/> </I> </xsl:template> Template Pattern XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 30 Template Rules (1) CSS Erläuterungen: xsl:template gibt an, dass es sich um Template Rule handelt. title ist das Pattern. XSL Einleitung XSLT - Structural Recursion - value-of - Template Rules XSL-Interpreter bewegt sich durch das Dokument und kennt aktuelle Position. Das title-Element muss Kind des aktuellen Patterns sein. Patterns mit komplexerer Struktur sind möglich. - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 31 Template Rules (2) Einleitung CSS XSL XSLT - Structural Recursion - value-of Erläuterungen (Fortsetzung): Der lila unterlegte Teil ist das Template und erscheint im Output-Dokument. I im Template ist HTML-Markup. xsl:apply-templates bedeutet ‚Transformiere Inhalt des aktuellen Elements gemäss der Regel, die anwendbar ist‘. Regelanwendung löst Anwendung weiterer Regel aus. - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 32 Vergleich mit ECA-Modell aus aktiven Datenbanken Event: XSL-Interpreter betrachtet Element. Condition: Element ist vom Typ title. Einleitung CSS XSL XSLT - Structural Recursion Action: Einschalten des Kursiv-Modus, Anwendung weiterer Regeln auf die Kinder, Ausschalten des Kursiv-Modus. - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 33 XML-Dokument mit Stylesheet-Referenz Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="portfolio.xsl"?> <portfolio xmlns:dt="urn:schemas-microsoftcom:datatypes" xml:space="preserve"> <stock exchange="nyse"> <name>zacx corp</name> <symbol>ZCXM</symbol> <price dt:dt="number">28.875</price> </stock> <stock exchange="nasdaq"> <name>zaffymat inc</name> <symbol>ZFFX</symbol> <price dt:dt="number">92.250</price> </stock> <stock exchange="nasdaq"> ... </stock> </portfolio> YAT Klemens Böhm Interoperable Informationssysteme - 34 Beispiel-Spreadsheet <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges <xsl:template match="/">... <HTML><HEAD><TITLE>Beispiel</TITLE></HEAD> <BODY><xsl:apply-templates select="node()"/></BODY> </HTML> </xsl:template> <xsl:template match=„title"> <I> <xsl:apply-templates/> </I> </xsl:template> Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 35 Beispiel-Spreadsheet Fortsetzung Einleitung CSS XSL <xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> XSLT - Structural Recursion - value-of - Template Rules <xsl:template match="text()"> <xsl:value-of select=“.“/> </xsl:template> - Conflicts - Kontrollstrukturen </xsl:stylesheet> - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 36 Beispiel-Dokument Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges <?xml version='1.0’?> <bookstore> <book genre="autobiography"> <title>The Autobiography of Benjamin Franklin</title> <author> <first-name>Benjamin</first-name> <last-name>Franklin</last-name> </author> <price>8.99</price> </book> <book genre="novel"> … </book> </bookstore> Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 37 Ergebnis der Transformation (1) Einleitung CSS XSL XSLT - Structural Recursion <HTML><HEAD><TITLE>Beispiel</TITLE></HEAD> <BODY><bookstore> <book genre=„autobiography“> - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 38 Ergebnis der Transformation (2) Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules <HTML><HEAD><TITLE>Beispiel</TITLE></HEAD> <BODY><bookstore> <book genre=„autobiography“> <I>The autobiography of Benjamin Franklin</I> <author> ... - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 39 Erzeugen von Attributwerten und Zugriff auf Attributwerte Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen <xsl:for-each select="portfolio/stock"> <TR> <xsl:attribute name="TITLE"> <xsl:value-of select="symbol"/> is listed on the <xsl:value-of select="@exchange"/> stock exchange. </xsl:attribute> <TD><xsl:value-of select="symbol"/></TD> <TD><xsl:value-of select="name"/></TD> <TD><xsl:value-of select="price"/></TD> </TR> </xsl:for-each> - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 40 Erzeugen von Elementen Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges In vorangegangenen Beispielen wurde das Element, das Teil der Zielstruktur ist, direkt hingeschrieben. Man kann Elementnamen auch on-the-fly generieren. Beispiel für die Verwendung des entsprechenden Konstrukts (namespace ist optionales Attribut): <xsl:element name = "DIV" namespace = "http://…"> <!– Content: template --> </xsl:element> Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 41 Conflict Resolution Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects Es kann i.a. sein, dass ein Knoten mehrere Template Rules matcht. Default Priority ist wie folgt: Importierte oder inkludierte Regeln haben niedrigere Priorität, Spezifischere Patterns haben höhere Priorität als weniger spezifische. Beispiel: Test, ob irgendein Knoten existiert, ist weniger spezifisch als Test für Knoten mit konkretem Namen. Wenn es mehrere gleichberechtigte Regeln gibt, ist dies ein Fehler. YAT Klemens Böhm Interoperable Informationssysteme - 42 Das folgende Spreadsheet Einleitung erzeugt HTML-Liste der Bücher, generiert HTML-Layout für Bestandteile der Buchbeschreibungen. CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 43 Beispiel-Spreadsheet (1) <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects <xsl:template match="/"> <HTML> <HEAD> <TITLE>Bookstore Inventory</TITLE> </HEAD> <BODY> <H1>Bookstore Inventory</H1> <UL> <xsl:for-each select="bookstore/book"> <LI><xsl:apply-templates /></LI> </xsl:for-each> </UL> </BODY> </HTML> </xsl:template> YAT Klemens Böhm Interoperable Informationssysteme - 44 Beispiel-Spreadsheet (2) Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects <xsl:template match=„book"> <DIV> <H2> <xsl:value-of select="title"/> </H2> <xsl:apply-templates/> </DIV> </xsl:template> <xsl:template match=„author"> <I><xsl:apply-templates /></I> </xsl:template> <xsl:template match="name"> <B><xsl:apply-templates /></B> </xsl:template> YAT Klemens Böhm Interoperable Informationssysteme - 45 Beispiel-Spreadsheet (3) Einleitung CSS XSL XSLT <xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen <xsl:template match="text()"> <xsl:value-of select=“.“/> </xsl:template> </xsl:stylesheet> - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 46 Ergebnis der Transformation (1) Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules <HTML> <HEAD> <TITLE>Bookstore Inventory</TITLE> </HEAD> <BODY> <H1>Bookstore Inventory</H1> ... - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 47 Ergebnis der Transformation (2) Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen <HTML> <HEAD> <TITLE>Bookstore Inventory</TITLE> </HEAD> <BODY> <H1>Bookstore Inventory</H1> <UL> <LI> <DIV> <H2> The Autobiography… </H2> ... - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 48 Ergebnis der Transformation (3) Einleitung CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges <HTML><HEAD> <TITLE>Bookstore Inventory</TITLE> </HEAD> <BODY> <H1>Bookstore Inventory</H1> <UL><LI><DIV> <H2> The Autobiography… </H2> <I> <first-name>Benjamin</first-name> <last-name>Franklin</last-name> </I> <price>8.99</price> </LI>... Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 49 Sortierung und bedingter Output Sortierung: <xsl:for-each select=“bookstore/book” order-by=“price”> Einleitung order-by=“author; - number(price)” CSS XSL XSLT - Structural Recursion - value-of - Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects Bedingter Output: <xsl:if author=„@nationality[.=‚U.S.‘]“>* </xsl:if> <xsl:choose> <xsl:when author=…> <xsl:when author=…> … </xsl:choose> YAT Klemens Böhm Interoperable Informationssysteme - 50 Templates mit Namen Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen Templates mit Namen können direkt aufgerufen werden. Beispiel: Kopieren von bestimmten Attributen in den Zielbaum, unabhängig vom Elementtyp. Template-Definition: <xsl:template name="apply-temp-copy-lang"> <xsl:for-each select="@xml:lang"> <xsl:copy/> </xsl:for-each> <xsl:apply-templates/> </xsl:template> Aufruf: <xsl:call-template name="apply-temp-copylang"/> anstelle von <xsl:apply-templates/> - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 51 Variablen Einleitung Zwei Arten der Variablendefinition: Mittels select-Attribut: Variablendefinition: <xsl:variable name="n" select="2"/> ... CSS Verwendung XSL <xsl:value-of select="item[$n]"/> XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT der Variablen: Wert des select-Attributes ist Expression. Variablenbelegung ergibt sich durch Auswertung des Ausdrucks. Über den Inhalt des xsl:variable-Elements: Variablendefinition: <xsl:variable name="n">2</xsl:variable> Verwendung der Variablen: <xsl:value-of select="item[position()=$n]"/> Variable steht für Menge von Teilbäumen. Klemens Böhm Interoperable Informationssysteme - 52 Variablen – Beispiel (1/3) Einleitung CSS XSL XSLT Ergebnis der Transformation: Chapter Chapter Chapter Chapter A B C D (1/4) (2/4) (3/4) (4/4) - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 53 Variablen – Beispiel (2/3) <xsl:variable name="totalChapters"> <xsl:value-of select="count(//chapter)"/> </xsl:variable> Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen <xsl:template match="/"> <TABLE> <xsl:for-each select="//chapter"> <TR> <TD> <xsl:value-of select="."/> <xsl:text> (</xsl:text> <xsl:value-of select="position()"/> <xsl:text> /</xsl:text> <xsl:value-of select="$totalChapters"/> <xsl:text> )</xsl:text> </TD></TR> </xsl:for-each> </TABLE> </xsl:template> - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 54 Variablen – Beispiel (3/3) Einleitung Variablenzuweisung Alternative: <xsl:variable name="totalChapters" select='count(//chapter)'/> CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 55 Einbettung von DOM-Methoden in XSL-Stylesheets Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects Methodenaufruf im Stylesheet: <xsl:eval>formatNumber(invoiceTotal(this), "$#,##0.00")</xsl:eval> Methodendefinition: <xsl:script><![CDATA[ function invoiceTotal(invoice) { items = invoice.selectNodes("items/item"); var sum = 0; for (var item = items.nextNode(); item; item = items.nextNode()) { … return sum; } …]]></xsl:script> YAT Klemens Böhm Interoperable Informationssysteme - 56 Zusätzliche Features Einleitung CSS XSL Unter anderem: Import und Inkludierung von Stylesheets, Erzeugung von Processing Instructions und Kommentaren. XSLT - Structural Recursion - value-of -Template Rules Sowie low-level Features: Whitespace Stripping, Numerierung, - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 57 XSL - Schlussbemerkungen Einleitung CSS XSL XSLT - Structural Recursion - value-of -Template Rules - Conflicts - Kontrollstrukturen - Variablen - Sonstiges Formating Objects Zusammenfassung: Regelbasierter Mechanismus: Aufbau der Regeln Regeln können geschachtelt sein. “Kontrollstrukturen”, die Regelanwendung flexibler machen. Transformationen, z.B. Transformation der Relationen aus Kapitel 1, sind möglich. Fazit: XML allein kann HTML nicht ersetzen, es braucht XSL-artige Mechanismen. XSL: Nicht in erster Linie Grundlage für Anwendungsentwicklung, obwohl erweiterbar, Transformationsmechanismus YAT Klemens Böhm Interoperable Informationssysteme - 58 XSL - LayoutBeschreibungsmechanismen Einleitung CSS XSL XSLT Formating Objects YAT Bisherige Beispiele: Direkte Erzeugung von HTML aus XML; Jetzt: Erzeugung einer ‚abstrakten‘, plattformunabhängigen Beschreibung des gelayouteten Dokuments. XSL standardisiert das Vokabular dieser Beschreibungssprache; Implementierung als XML-Namespace. Klemens Böhm Interoperable Informationssysteme - 59 XSL Regelmodell – Formating Objects <xsl:template match="warnung"> Einleitung CSS XSL XSLT Formating Objects YAT … <warnung> … </warnung> ... XML-Dokument ... <fo:block font-size="24pt" font-family="serif”> <xsl:text> Warnung: </xsl:text> <xsl:applytemplates/> </fo:block> </xsl:template> warnung Regel Muster <fo:block font-size ="24pt" font-family ="serif”> Warnung: ... </fo:block> Aktion Plattformunabhängige Beschreibung ... Warnung: ... ... ... Text zwischen <xsl:text> und </xsl:text> wird explizit ausgegeben. ... ... ... ... Klemens Böhm Stylesheet . Interoperable Informationssysteme - 60 Formatting Objects Einleitung CSS XSL XSLT Formating Objects YAT XSL Spezifikation: Formatting is the process of turning the result of an XSL transformation into a tangible form for the reader or listener. XSL Formatting Objects – spezifizieren die Formatierung, wichtige Struktur: area tree, Beispiel für Formatting Objects: block – block Formatting Object erlaubt die Erzeugung einer Block-Level Area mit Textzeilen. Beispiel: Schriftgrösse. XSL legt nicht fest, wie genau das Formatting, z.B. Zeilenumbruch, Letterspacing, Hyphenation, implementiert sein muss, lediglich Constraints. Klemens Böhm Interoperable Informationssysteme - 61 Formatting Model Einleitung CSS XSL XSLT Formating Objects YAT Areas sind das Ergebnis des Formatting. Areas reservieren Platz und nehmen Inhalt auf. Areas können ein Koordinatensystem definieren und andere Areas enthalten. Formatting Object, durch das die Area erzeugt wurde, spezifiziert Eigenschaften der Area wie margin oder border. Vier Arten von Areas mit unterschiedlichen Eigenschaften: regions, block-areas, line-areas, und inline-areas, (regions: eigenes Koordinatensystem, eigener writing mode, im Gegensatz zu block-areas). Klemens Böhm Interoperable Informationssysteme - 62 XSL Beispiel Stylesheet konstruiert Baum unter Verwendung des Formatting Object Vocabulary. Einleitung CSS XSL XSLT Formating Objects YAT <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl” xmlns:fo="http://www.w3.org/TR/WD-xsl/FO” Wert dieses Attributs gibt Output des XSL Processors an. result-ns="fo"> Ist mit IE5.0 immer XML (inkl. HTML). <xsl:template match="/"> <fo:basic-page-sequence font-family="serif"> <xsl:apply-templates/> </fo:basic-page-sequence> Regel ist für den Wurzelknoten. </xsl:template> Regel ist für <xsl:template match="para"> para-Elemente. <fo:block font-size="10pt" spacebefore="12pt"> <xsl:apply-templates/> para-Elemente werden </fo:block> Block Formatting Objects. </xsl:template> </xsl:stylesheet> Klemens Böhm Interoperable Informationssysteme - 63 XSL Beispiel Ausschnitt aus XML-Dokument: This is an <emph>important</emph> point. Regel matcht Elemente vom Typ emph und erzeugt ein fo:inline-sequence Formatting Object. <xsl:template match="emph"> <fo:inline-sequence fontweight="bold"> <xsl:apply-templates/> </fo:inline-sequence> </xsl:template> Einleitung CSS XSL XSLT Formating Objects YAT Klemens Böhm Interoperable Informationssysteme - 64 XSL - Zusammenfassung Einleitung CSS XSL XSLT Formating Objects Konstrukte von XSLT: Template Rules, Kontrollstrukturen, Variablen, Formating Objects. YAT Klemens Böhm Interoperable Informationssysteme - 65 YAT Einleitung CSS XSL XSLT Formating Objects YAT System zur einfachen Manipulation von Transformationsprogrammen, Explizite Beschreibung des Inputs und Outputs von Transformationsprogrammen, YAT beinhaltet Typen von Datenstrukturen (Mengen, Listen), akademische Entwicklung (INRIA, Frankreich, 1998). Klemens Böhm Interoperable Informationssysteme - 66 YAT Einleitung CSS XSL XSLT Formating Objects Was für Features? Customization: Programm wird automatisch in Spezifischeres transformiert, das dann von Hand modifiziert werden kann. Automatische Zusammensetzung von Transformationsprogrammen. YAT Abfolge: 1. Modell vorstellen - erlaubt Vererbung, 2. Transformationssprache nicht speziell, wird aber gebraucht, um Customization zu illustrieren, 3. Customization, Composition Klemens Böhm Interoperable Informationssysteme - 67 Modell Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. Modell: Beschreibung dessen, was Input/Output der Konvertierung sein kann, z.B. Schema, d.h. Menge von Dokumenten, aber auch (pathologischer Fall) einzelnes Dokument. Modell besteht aus Patterns und Wertebereichen der Variablen. Fundamentaler Aspekt: Vererbung/Instanziierung. Begriff ‘Instanziierung’ allgemeiner als im XMLKontext: Spezielleres Schema ist Instanz des allgemeinen Schemas, nicht nur ‘Dokument ist Instanz eines Schemas’. Wichtig für Customization. Klemens Böhm Interoperable Informationssysteme - 68 Customizing InputModell Einleitung CSS Programm OutputModell XSL XSLT Formating Objects Instanziierung Prog.‘ YAT InputModell‘ - Modell - Transform. sprache InputModell‘ - Customiz. Customizing Klemens Böhm Interoperable Informationssysteme - 69 YAT - Modelle (1) Car Schema - Modell: Pcar: class Psup: Einleitung car CSS ... XSL XSLT name desc suppliers S1: string S2: string set * &Psup Formating Objects YAT - Modell - Transform. sprache - Customiz. &Pcar Kleinbuchstaben: Konstanten, Grossbuchstaben: Variable, fett: Patterns ‘*’ bedeutet, dass Kante in Instanziierung mehrmals vorkommen darf. Klemens Böhm Interoperable Informationssysteme - 70 YAT - Modelle (2) Einleitung ‘Golf’ Modell: CSS XSL XSLT c1: class s1: ... s2: ... car Formating Objects YAT - Modell - Transform. sprache - Customiz. name desc suppliers “Golf” “Der Golf besticht durch …” set Klemens Böhm &s1 &s1 Interoperable Informationssysteme - 71 YAT - Modelle (3) ODMG Modell: Pclass: Einleitung class Class_name * Att CSS XSL XSLT Formating Objects Ptype YAT - Modell - Transform. sprache - Customiz. Ptype: Y: Int String tuple * Att Z: (set, list, * bag, array) Ptype &Pclass Ptype Klemens Böhm Interoperable Informationssysteme - 72 Erläuterungen Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. Kanten-Labels sind Occurrence-Indicators (kein explizites Label genau 1). Variablen: Bei Instanziierung sind Einschränkungen des Wertebereichs möglich, z.B. ‘Int String’ ‘String’, Patterns: können in Blättern Patterns oder Pattern-Referenzen enthalten (Rekursion, Sharing + Zykel). Klemens Böhm Interoperable Informationssysteme - 73 Modell-Instanziierung ODMG Modell: Pclass: Ptype: class Class_name * Att Einleitung CSS XSL Y: Int String tuple * Att Z: (set, list, &Pclass * bag, array) Ptype Ptype Ptype XSLT Formating Objects YAT - Modell Pcar: Psup: car - Transform. sprache - Customiz. class ... name desc suppliers S1: string S2: string set * &Psup Klemens Böhm &Pcar Interoperable Informationssysteme - 74 YAT - das allgemeinste Modell YAT Modell: Einleitung CSS XSL XSLT Formating Objects Yat: L &Yat L * Yat YAT - Modell - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 75 Text-Syntax für Modelle Einleitung Pcar: class car < name S1: String, desc S2: String, suppliers set * &Psup> CSS XSL XSLT Formating Objects YAT Psup: class supplier < name S1: String, city S2: String, zip S3: String> - Modell - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 76 DTD für Beispiel <!DOCTYPE <!ELEMENT brochure [ brochure -- <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT number title model desc spplrs supplier name address --------- Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. Klemens Böhm (number, title, model, desc, spplrs)> (#PCDATA)> (#PCDATA)> (#PCDATA)> (#PCDATA)> (sup)*> (name, address)> (#PCDATA)> (#PCDATA)> ] > Interoperable Informationssysteme - 77 Beispiel-Regel Einleitung CSS XSL XSLT Psup(SN): class supplier < name SN, city C, zip Z> Formating Objects YAT - Modell - Transform. sprache Output-Pattern entspricht Supplier-Pattern. - Customiz. Pbr: brochure < number Num, title T, model Year, desc D, suppls * supplier < name SN, address Add >>, Year > 1975, C is city(Add), Z is Zip(Add) Input-Pattern entspricht Beispiel-DTD. Klemens Böhm Interoperable Informationssysteme - 78 Erläuterungen Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. Body der Regel enthält nicht nur Pattern, sondern auch Prädikate, Aufrufe externer Funktionen für Umrechnungen. Parametrisierter Pattern-Name (hier ist ‘SN’ der Parameter von ‘Psup’), Erzeugung eines Objekts für jeden Wert von SN (d.h. SN ist quasi Schlüsselattribut, sonst undefiniertes Systemverhalten). Klemens Böhm Interoperable Informationssysteme - 79 Rule Processing - Abfolge Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache 1. Pattern Matching für Rule Bodies 2. Evaluierung externer Funktionen 3. Evaluierung der Prädikate 4. Zuordnung von OIDs (der OutputStrukturen) zu parametrisierten Pattern-Namen (global für das ganze Programm) 5. Konstruktion der Output Patterns. - Customiz. Klemens Böhm Interoperable Informationssysteme - 80 Beispiel-Regel 2 Einleitung CSS XSL XSLT Formating Objects Pcar(Pbr): class car < name T, desc D, suppliers set {} &Psup(SN)> YAT - Modell Pbr: brochure < number Num, title T, model Year, desc D, suppls * supplier < name SN, address Add>> - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 81 Erläuterungen Einleitung CSS XSL XSLT Formating Objects Verwendung von Referenzen Dereferenzierung wäre auch möglich, d.h. in der Regel stünde ‘set {} Psup(SN)’, und statt einer Referenz erhielte man eine Kopie des Teilbaums; Erzeugung von Mengen von Söhnen. YAT - Modell - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 82 Typing Einleitung CSS XSL XSLT Programm: Modell Modell Aussagen über Typen anhand von Input-/Output-Patterns, Signaturen von Prädikaten und Funktionen, Wertebereiche von Variablen. Formating Objects YAT - Modell - Transform. sprache - Customiz. Nutzen von Typing: Kombinierbarkeit von Programmen Zusammenhang zwischen Input- und Output-Modellen von Programmen, z.B. ‘Ist _ Generalisierung von _?’, Customizing von Programmen. Klemens Böhm Interoperable Informationssysteme - 83 Beispiel für Customizing - Regeln Einleitung CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. HtmlPage(Pclass): html< head title Classname, body< h1 Classname, ul * li < Att2, HtmlElement(Ptype)>>> Pclass: class Classname * Att Ptype, Att2 is concat(Att, “ : “) HtmlElement(Ptype): S Ptype: Data, S is data_to_string(Data) Für jede Klasse ein HTMLDokument. Explizite Typisierung, z.B. Variable X HtmlElement(Ptype): ul * li HtmlElement(P2: Ptype)> Ptype: X: {set, bag} * P2: Ptype> Weitere Regeln für andere Bestandteile des ODMG-Modells Klemens Böhm Interoperable Informationssysteme - 84 Beispiel (Fortsetzung 1) HtmlPage(Pclass): html< head title car, body< h1 car, ul< li< Einleitung li< CSS XSL li< XSLT Formating Objects YAT “name: “, T1>, “age: “, D1>, “suppliers: “, ul * li a < href &HtmlPage(Psup), cont Classname>>>>> Pcar: class car < name T, desc D, suppliers set * &Psup>, Psup: class Classname P2: Ptype, T1 is data_to_string(T), D1 is data_to_string(D) - Modell - Transform. sprache - Customiz. Diese Regel wird aus den vorhandenen Regeln und dem Input-Modell automatisch erzeugt. Klemens Böhm Interoperable Informationssysteme - 85 Beispiel (Fortsetzung 2) Einleitung HtmlPage(Pclass): html< head title car, body < h1 car, ul< li< CSS li< XSL XSLT Formating Objects “name: “, T1>, “age: “, D1>>>> Pcar: class car < name T, desc D, suppliers set * &Psup>, T1 is data_to_string(T), D1 is data_to_string(D) YAT - Modell - Transform. sprache - Customiz. Automatisch erzeugte Regel lässt sich von Hand anpassen. Besser, als Programm neu schreiben zu müssen. Klemens Böhm Interoperable Informationssysteme - 86 Composition Einleitung Automatische Generierung eines Programms aus zwei oder mehr existierenden, Benutzer kann es dann wieder anpassen. CSS XSL XSLT Formating Objects YAT - Modell - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 87 Zusammenfassung YAT Einleitung CSS XSL XSLT Formating Objects “Entwicklungsumgebung” für Transformationsprogramme, Input-/Output-Modelle, Customization und Kombinierbarkeit von Transformationsprogrammen. YAT - Modell - Transform. sprache - Customiz. Klemens Böhm Interoperable Informationssysteme - 88