1/28/2004 XMLXML-Inhalt Î XMLXML-Inhalt XMLXML-Inhalt Î XMLXML-Inhalt Kundenauftrag Kundenauftrag Namedes desVerkäufers Verkäufers Name Datum Datum Produktbezeichnungaus aus an Produktbezeichnung passen Großhandelskatalog Großhandelskatalog Anzahl übernehmen Anzahl Namedes desKunden Kunden Name Kundenauftrag Zulieferer Großhandel Zulieferauftrag Zulieferauftrag Datum Datum Produktbezeichnungaus aus Produktbezeichnung Zuliefererkatalog Zuliefererkatalog Anzahl Anzahl Auftraggeber Auftraggeber © Klaus Schild 2003 1 Das Stylesheet für das Beispiel <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>JohnDoe</salesperson> Doe</salesperson> <salesperson>John <item>Production-ClassWidget</item> Widget</item> <item>Production-Class <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <day>13</day> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml <year>2000</year> <year>2000</year> <order> <order> </date> </date> <date>2000/1/13</date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer> <customer>Sally <customer>CompanyA</customer> A</customer> <customer>Company </order> </order> <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> <xsl:templatematch="item"> match="item"> <xsl:template … … </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet> method="xml": XML-Deklaration wird erzeugt. indent="yes": Prozessor darf (muss aber nicht) KindElemente einrücken. 3 Datum transformieren © Klaus Schild 2003 4 KundenKunden-Element erzeugen <xsl:templatematch="/"> match="/"> <xsl:template <order> <order> <date> <date> <xsl:value-ofselect="order/date/year"/> select="order/date/year"/>// <xsl:value-of <xsl:value-ofselect="order/date/month"/> select="order/date/month"/>// <xsl:value-of <xsl:value-ofselect="order/date/day"/> select="order/date/day"/> <xsl:value-of </date> </date> … … </order> </order> Ergebnis Ergebnis </xsl:template> </xsl:template> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml <order> <order> <date>2000/1/13</date> <date>2000/1/13</date> … … </order> </order> Name, Abteilung 2 Kundenauftrag <xsl:templatematch="/"> match="/"> <xsl:template … … </xsl:template> </xsl:template> © Klaus Schild 2003 © Klaus Schild 2003 Datum transformieren <?xmlversion="1.0"?> version="1.0"?> <?xml <xsl:stylesheetversion="1.0" version="1.0" <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:outputmethod="xml" method="xml"indent="yes" indent="yes"encoding="UTF-8"/> encoding="UTF-8"/> <xsl:output © Klaus Schild 2003 <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>John Doe</salesperson> <salesperson>John Doe</salesperson> <item>Production-ClassWidget</item> Widget</item> <item>Production-Class XSLT <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <year>2000</year> <order> <year>2000</year> <order> </date> <date>2000/1/13</date> </date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer><customer>Company A</customer> <customer>Sally <customer>Company A</customer> </order> <item> </order> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> Kundenauftrag <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>John Doe</salesperson> <salesperson>John Doe</salesperson> <item>Production-ClassWidget</item> Widget</item> <item>Production-Class <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <year>2000</year> <order> <year>2000</year> <order> </date> <date>2000/1/13</date> </date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer><customer>Company A</customer> <customer>Sally <customer>Company A</customer> </order> <item> </order> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> 5 © Klaus Schild 2003 6 1 1/28/2004 KundenKunden-Element erzeugen Anzahl übernehmen <xsl:templatematch="/"> match="/"> <xsl:template <order> <order> <date> <date> <xsl:value-ofselect="order/date/year"/>/ select="order/date/year"/>/ <xsl:value-of <xsl:value-ofselect="order/date/month"/>/ select="order/date/month"/>/ <xsl:value-of <xsl:value-ofselect="order/date/day"/> select="order/date/day"/> <xsl:value-of </date> </date> <customer>CompanyA</customer> A</customer> <customer>Company … … Ergebnis </order> Ergebnis </order> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> </xsl:template> <?xml </xsl:template> <order> <order> <date>2000/1/13</date> <date>2000/1/13</date> <customer>CompanyA</customer> A</customer> <customer>Company … … </order> </order> © Klaus Schild 2003 Kundenauftrag <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>John Doe</salesperson> <salesperson>John Doe</salesperson> <item>Production-ClassWidget</item> Widget</item> <item>Production-Class <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <year>2000</year> <year>2000</year> <order> <order> </date> </date> <date>2000/1/13</date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer><customer>Company A</customer> <customer>Sally <customer>Company A</customer> </order> </order> <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> 7 Anzahl übernehmen © Klaus Schild 2003 Artikelnummer erstellen <xsl:templatematch="/"> match="/"> <xsl:template <order> <order> <date>…</date> <date>…</date> <customer>CompanyA</customer> A</customer> <customer>Company <item> <item> … … <quantity> <quantity> <xsl:value-ofselect="order/quantity"/> select="order/quantity"/> <xsl:value-of Ergebnis Ergebnis </quantity> </quantity> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml </item> </item> <order> <order> </order> </order> <date>2000/1/13</date> <date>2000/1/13</date> </xsl:template> </xsl:template> <customer>Company A</customer> Kundenauftrag <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>John Doe</salesperson> <salesperson>John Doe</salesperson> <item>Production-ClassWidget</item> Widget</item> <item>Production-Class <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <day>13</day> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml <year>2000</year> <year>2000</year> <order> <order> </date> </date> <date>2000/1/13</date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer> <customer>Sally <customer>CompanyA</customer> A</customer> <customer>Company </order> </order> <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> <customer>Company A</customer> <item>… … <item> <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> © Klaus Schild 2003 9 © Klaus Schild 2003 Artikelnummer erstellen Artikelnummer erstellen <xsl:templatematch="/"> match="/"> <xsl:template <order> <order> <date>…</date> <date>…</date> <customer>CompanyA</customer> A</customer> <customer>Company <item> <item> <xsl:apply-templatesselect="order/item"/> select="order/item"/> <xsl:apply-templates <quantity> <quantity> <xsl:value-ofselect="order/quantity"/> select="order/quantity"/> <xsl:value-of </quantity> </quantity> </item> </item> </order> </order> </xsl:template> </xsl:template> <xsl:templatematch="item"> match="item"> <xsl:template <part-number> <part-number> <xsl:choose> <xsl:choose> <xsl:whentest=". test=".=='Production-Class 'Production-ClassWidget'">E16-25A</xsl:when> Widget'">E16-25A</xsl:when> <xsl:when <xsl:whentest=". test=".=='Economy-Class 'Economy-ClassWidget'">E16-25B</xsl:when> Widget'">E16-25B</xsl:when> <xsl:when <xsl:otherwise>00</xsl:otherwise> <xsl:otherwise>00</xsl:otherwise> Ergebnis Ergebnis </xsl:choose> </xsl:choose> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml </part-number> </part-number> <order> <order> … … <date>2000/1/13</date> <date>2000/1/13</date> </xsl:template> </xsl:template> <customer>CompanyA</customer> A</customer> <customer>Company <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> … … <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> © Klaus Schild 2003 Name, Abteilung 8 11 © Klaus Schild 2003 10 12 2 1/28/2004 Zugriff auf externe Datenbanken Artikelbeschreibung übernehmen <xsl:templatematch="item"> match="item"> <xsl:template <part-number> <part-number> <xsl:choose> <xsl:choose> <xsl:whentest=". test=".=='Production-Class 'Production-ClassWidget'">E16-25A</xsl:when> Widget'">E16-25A</xsl:when> <xsl:when <xsl:whentest=". test=".=='Economy-Class 'Economy-ClassWidget'">E16-25B</xsl:when> Widget'">E16-25B</xsl:when> <xsl:when <xsl:otherwise>00</xsl:otherwise> <xsl:otherwise>00</xsl:otherwise> </xsl:choose> </xsl:choose> </part-number> </part-number> … … </xsl:template> </xsl:template> Kundenauftrag Kein direkter Zugriff auf eine Datenbank möglich. xsl:import erlaubt jedoch importieren externer Templates. Lösung: Datenbank Î Templates Î xsl:import © Klaus Schild 2003 13 Artikelbeschreibung übernehmen © Klaus Schild 2003 14 Artikelbeschreibung übernehmen <xsl:templatematch="item"> match="item"> <xsl:template <part-number>…</part-number> <part-number>…</part-number> <description> <description> <xsl:value-ofselect="."/> select="."/> <xsl:value-of </description> </description> Ergebnis Ergebnis </xsl:template> </xsl:template> <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> <?xml <order> <order> <date>2000/1/13</date> <date>2000/1/13</date> <customer>CompanyA</customer> A</customer> <customer>Company <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> <xsl:templatematch="item"> match="item"> <xsl:template <part-number>…</part-number> <part-number>…</part-number> <description> <description> <xsl:value-ofselect="."/> select="."/> <xsl:value-of </description> </description> </xsl:template> </xsl:template> Beachte: "." bezeichnet aktuellen Knoten, hier den Knoten, auf den das Template angewandt wird ("item"). © Klaus Schild 2003 <?xmlversion="1.0"?> version="1.0"?> <?xml <order> <order> <salesperson>John Doe</salesperson> <salesperson>John Doe</salesperson> <item>Production-ClassWidget</item> Widget</item> <item>Production-Class <quantity>16</quantity> <quantity>16</quantity> <date> <date> Zulieferauftrag <month>1</month> <month>1</month> <day>13</day> <day>13</day> <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <year>2000</year> <year>2000</year> <order> <order> </date> </date> <date>2000/1/13</date> <date>2000/1/13</date> <customer>SallyFinkelstein</customer> Finkelstein</customer> <customer>Sally <customer>CompanyA</customer> A</customer> <customer>Company </order> </order> <item> <item> <part-number>E16-25A</part-number> <part-number>E16-25A</part-number> <description>Production-ClassWidget</description> Widget</description> <description>Production-Class <quantity>16</quantity> <quantity>16</quantity> </item> </item> </order> </order> 15 © Klaus Schild 2003 16 Fazit aus dem Beispiel Stylesheets nicht einfach zu verstehen und zu debuggen Anbindung von Datenbanken umständlich: Datenbank Î Templates Î xsl:import Transformation sollte auf dem Server durchgeführt werden, da Kundenauftrag extern nicht sichtbar sein sollte. Auf dem Server kann aber für die Transformation eine beliebige andere Programmiersprache benutzt werden. © Klaus Schild 2003 Name, Abteilung 17 3