Beispiel

Werbung
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
Herunterladen