Zahlen und Berechnungen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

"Mit Mathematik ist es möglich, bis 20 zu zählen, ohne die Schuhe auszuziehen"
Mickey Maus

Einleitung

Unter Strings habe ich das Fehlen fortgeschrittener Stringverarbeitungseinrichtungen in nativem XSLT 1.0 bejammert. Im Vergleich dazu ist die Behandlung mathematischer Berechnungen in XSLT wirklich schwach! XSLT 1.0 bietet Ihnen Möglichkeiten für grundlegende Berechnungen, das Zählen, Summieren und Formatieren von Zahlen, die weitere Mathematik ist jedoch rein Ihrem Verstand überlassen. Glücklicherweise erlauben es die rekursiven Fähigkeiten von XSLT genau wie bei Strings, mit vernünftigem Aufwand vernünftige mathematische Funktionen zu realisieren.

In XPath/XSLT 2.0 wurden einige der näherliegenden mathematischen Funktionen aufgenommen, einschließlich abs( ), avg( ), max( ), min( ) und round-to-half-even( ). Außerdem gibt es nun weitere numerische Typen (xs:integer, xs:double und die anderen numerischen Typen, die in den XML-Schema-Datentypen definiert sind), während XSLT 1.0 nur einen einzigen Gleitkommatyp aufwies. Dankenswerterweise erkennt XPath 2.0 nun eine wissenschaftliche Notation, deren Fehlen zu den größeren Unannehmlichkeiten in 1.0 gehörte.

Ob Sie nun aber 1.0 oder 2.0 verwenden, erwarten Sie nicht, in diesem Abschnitt Rezepte zur Matrixmultiplikation oder zur schnellen Fourier-Transformation vorzufinden. Falls Sie auf XML-kodierten Daten tatsächlich höhere Mathematik ausführen wollen, dann ist XSLT nicht die richtige Sprache für Sie. Überführen Sie die Daten stattdessen in eine für mathematische Aufgaben besser geeignete Sprache, indem Sie einen XSLT-Frontend-Konverter oder die native SAX- oder DOM-Schnittstelle verwenden. Nichtsdestotrotz enthält eine Webseite namens »Gallery of Stupid XSL and XSLT Tricks« einige interessante mathematische XSLT-Kuriositäten, wie das Berechnen von Primzahlen und das Differenzieren von Polynomen. Diese Tricks können sehr lehrreich sein, da sie möglicherweise Ihr Verständnis von XSLT erweitern. Dieses Kapitel konzentriert sich stattdessen auf Rezepte, die häufig eingesetzte Berechnungen demonstrieren, die innerhalb der Grenzen von XSLT ökonomisch implementiert werden können.

Einige der ersten Beispiele dieses Kapitels lesen sich eher wie Anleitungen dafür, wie die XSLT innewohnende Funktionalität eingesetzt wird. Ich füge diese Beispiele ein, weil sie XSLT-Eigenschaften verdeutlichen, die manchmal missverstanden werden.

Viele der hier gezeigten Rezepte sind Implementierungen der mathematischen Definitionen von EXSLT. Wenn unter EXSLT.org eine reine XSLT-Implementierung verfügbar ist, werden wir diese zuerst besprechen und anschließend alternative Lösungen in Betracht ziehen. (Anmerkung: Die gezeigten EXSLT-Implementierungen sind so, wie sie zu dem Zeitpunkt existierten, als dieses Buch geschrieben wurde. Natürlich können sie mit der Zeit verbessert oder auch mit dem Auftauchen neuer Versionen von XPath und XSLT wieder verworfen werden.)

Reine XSLT-Implementierungen werden für alle Erweiterungen geliefert, die in der EXSLT-Mathematik definiert sind, mit Ausnahme von trigonometrischen Funktionen (sin, cos usw.). Falls Sie unbedingt eine reine XSLT-Implementierung trigonometrischer Funktionen benötigen, weist Ihnen das Rezept Gebräuchliche mathematische Funktionen implementieren die allgemeine Richtung.

Viele Diskussionsabschnitte in diesem Kapitel erkunden alternative Implementierungen der Lösung. Leser, die an den technischen Einzelheiten nicht interessiert sind, werden aufgefordert, einfach das Beispiel zu verwenden, das in der Lösung gezeigt wird, da es sich entweder um die beste Lösung handelt oder sie zumindest genauso gut ist wie die Alternativen.

  

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de