|
NOTE:
These slides have not been updated since 2003. They have been superseded by the book
Anders Møller and Michael Schwartzbach, February 2006 |
|
| THE XML REVOLUTION - TECHNOLOGIES FOR THE FUTURE WEB |
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="collection">
<nutrition>
<xsl:apply-templates select="recipe"/>
</nutrition>
</xsl:template>
<xsl:template match="recipe">
<dish name="{title/text()}"
calories="{nutrition/@calories}"
fat="{nutrition/@fat}"
carbohydrates="{nutrition/@carbohydrates}"
protein="{nutrition/@protein}"
alcohol="{number(concat(0,nutrition/@alcohol))}"/>
</xsl:template>
</xsl:stylesheet>
|
produces a different view of the recipes:
<nutrition>
<dish alcohol="0"
protein="32"
carbohydrates="45"
fat="23" calories="1167"
name="Beef Parmesan with Garlic Angel Hair Pasta"/>
<dish alcohol="0"
protein="18"
carbohydrates="64"
fat="18"
calories="349"
name="Ricotta Pie"/>
<dish alcohol="0"
protein="29"
carbohydrates="59"
fat="12"
calories="532"
name="Linguine Pescadoro"/>
<dish alcohol="2"
protein="4"
carbohydrates="45"
fat="49"
calories="612"
name="Zuppa Inglese"/>
<dish alcohol="0"
protein="39"
carbohydrates="28"
fat="33"
calories="8892"
name="Cailles en Sarcophages"/>
</nutrition>
|
which validates according to the DSD2 schema:
<dsd:dsd xmlns:dsd="http://www.brics.dk/DSD/2.0"
root="nutrition">
<dsd:if><dsd:element name="nutrition"/>
<dsd:declare><dsd:contents>
<dsd:repeat><dsd:element name="dish"/></dsd:repeat>
</dsd:contents></dsd:declare>
</dsd:if>
<dsd:if><dsd:element name="dish"/>
<dsd:declare>
<dsd:required><dsd:attribute name="name"/></dsd:required>
<dsd:attribute name="calories"/>
<dsd:attribute name="carbohydrates"/>
<dsd:attribute name="protein"/>
<dsd:attribute name="alcohol"/>
<dsd:attribute name="fat"/>
</dsd:declare>
</dsd:if>
</dsd:dsd>
|
and using the XSLT stylesheet:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="nutrition">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="../style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<table border="1">
<tr>
<th>Dish</th>
<th>Calories</th>
<th>Fat</th>
<th>Carbohydrates</th>
<th>Protein</th>
</tr>
<xsl:apply-templates select="dish"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="dish">
<tr>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@calories"/></td>
<td><xsl:value-of select="@fat"/>%</td>
<td><xsl:value-of select="@carbohydrates"/>%</td>
<td><xsl:value-of select="@protein"/>%</td>
</tr>
</xsl:template>
</xsl:stylesheet>
|
then produces the following XHTML table:
| Dish | Calories | Fat | Carbohydrates | Protein |
|---|---|---|---|---|
| Beef Parmesan with Garlic Angel Hair Pasta | 1167 | 23% | 45% | 32% |
| Ricotta Pie | 349 | 18% | 64% | 18% |
| Linguine Pescadoro | 532 | 12% | 59% | 29% |
| Zuppa Inglese | 612 | 49% | 45% | 4% |
| Cailles en Sarcophages | 8892 | 33% | 28% | 39% |
|
| COPYRIGHT © 2000-2003 ANDERS MØLLER & MICHAEL I. SCHWARTZBACH |
|