20.04.04

XSLT als Rule Engine

Yuri Boglaev hat schon länger einmal bei Java Pro über A Design Pattern for a Rule Engine geschrieben. Die Idee, die dahinter liegt ist, dass der XSLT Prozessor die Aufgabe der Rule Engine übernimmt. Die Regeln werden dabei als XSL Templates abgebildet, die eine bestimmte Action auslösen. Bei den Actions kann es sich um eine Java-Erweiterung handelt:
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:action="simple.rules.actions.SendMessage">

    <xsl:template name="rule1">
        ...
        <xsl:if test="$par &lt; 19430000">
            <xsl:value-of select="action:sendMsg2Stdout(
                concat('Promotion: account# ', $acc_num, '
                qualifies for free checking.'), $index)"/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>
Der Vorteil liegt darin, dass bei einer Regeländerung nicht der Quellcode der Anwendung angepasst und neu übersetzt werden muss.
Ob jedoch die Regel-Abbildung durch XSLT eine Vereinfachung ist? So müssen die zu überprüfenden Daten als XML vorliegen, und alternativ könnten Scriptsprachen, die sich mit Java vertragen, wie z.B. groovy oder jython, benutzt werden.
Posted by Lars at 23:23 | Comments (1) | TrackBack

28.03.04

XSL Tutorial

Von Roger L. Costello gibt es bei xfront.com das Tutorial in XSL (engl.). In einer zip-Datei sind neben ein paar Beispiele auch zehn Präsentationen (im ppt-Format) vorhanden. Die ersten fünf bieten einen guten Einstieg in XSL, während die restlichen Präsentationen problembezogener sind. Das jeweilige Highlight habe ich rausgezogen:

(Hinweis: Dieser Blog-Eintrag benutzt Beispiele, die unter dem XSL Tutorial License Agreement stehen.)

06 - Using XSLT and XPath to Transform XML Documents that contain Namespaces

Mit dem <xsl:copy/> Element können Namespace Deklarationen (z.B. xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance") kopieren werden.

07 - Using XSLT and XPath to Generate SVG

Die Präsentation zeigt, wie sich mit einer einzigen XSL mehrere Dateien gleichzeitig erstellen lassen. So wird eine HTML-Datei für das einbetten der SVG generiert und die SVG-Datei wird zusätzlich erzeugt. Das ganze funktioniert mit einer Saxon-Erweiterung:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:saxon="http://icl.com/saxon"
    extension-element-prefixes="saxon"
    version="1.0">

    <xsl:template ...>
        <saxon:output href="FitnessCenter.svg">
            ...
        </saxon:output>
    </xsl:template>

</xsl:stylesheet>

08 - Using XSLT with Web Services

In dieser Präsentation wird die Möglichkeit beschrieben, wie sich der Meerkat Web Service innerhalb einer XSL ansprechen lässt.

http://meerkat.oreillynet.com/?_fl=xml&s=REST&t=14DAY

Die Parameter haben folgende Bedeutung:
  • _fl gibt den flavor () des Ergebnisses zurück. Als Werte können xml, RSS 1.0, RSS 0.9, Minimal, Tokeerkat, Meerkat benutzt werden.
  • s der search String. Im Beispiel wird nach REST gesucht.
  • t steht für den Zeitraum. Mögliche Angabe können MINUTE, HOUR, DAY, ALL sein.
Das Ergebenis der document Funktion wird einer Variable zuweisen: <xsl:variable name="Meerkat" select="document('http://www.oreillynet.com/meerkat/?_fl=xml&amp;s=REST')"/>

... und mit einem <xsl:for-each select="$Meerkat/meerkat/story"> kann auf die jeweiligen title und description Elemente einer Story zugegriffen werden.

09 - Using XSL to Generate XHTML Documents

ältere Browser (der IE 6 ist zwar schon in die Jahre gekommen, aber ich glaube ihn trifft es nicht) können nichts mit einem geschlossenen <br/> anfangen. Sie benötigen ein Leerzeichen nach dem br und vor dem Schrägstrich: <br />
Eine andere Möglichkeit und auch eine, die mit einer XSL Transformation funktioniert, wäre das hinzufügen eines class-Attributs: <br class="empty"/>

Ein paar Gründe, die für XHTML sprechen:
  • Es fehlen keine schliessenden Tags.
  • XHTML Dateien müssen nur gegen die DTD getestet werden und nicht mit jedem Browser.
  • XHTML erleichtet es einem screen scraper, einen Screenshot von der Seite zu machen.

10 - Whitespace Handling

Ein Whitespace ist:
  • space (#x020)
  • tab (#x09)
  • newline (#x0A)
  • carriage return (#x0D)
<xsl:strip-space elements="*"/>
Bei allen Elementen das Whitespace entfernen.

<xsl:preserve-space elements="d e"/>
Bei den Elementen d und e kein Whitespace entfernen.

... oder man schreibt ein xml:space="preserve" Attribut direkt in das Element (im XML-Dokument).
Posted by Lars at 18:34 | Comments (0) | TrackBack

26.02.04

Gruppieren & Sortieren mit XSLT

bwolf erwähnt (XSLT & Gruppieren/Sortieren), dass ich gesagt habe, dass ein xsl:for-each wie BASIC Programmieren ist.

Hier ist meine GOSUB Lösung:

XML-Daten:


<?xml version="1.0" encoding="UTF-8"?>
<listing>
  <entry date="1" title="1"/>
  <entry date="2" title="3"/>
  <entry date="1" title="2"/>
  <entry date="3" title="4"/>
</listing>

XSL-Datei:


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
  <grouped-listing>
    <xsl:apply-templates select="//entry" mode="group">
      <xsl:sort select="@date"/>
    </xsl:apply-templates>
  </grouped-listing>  
</xsl:template>

<xsl:template match="entry" mode="group">
  <xsl:variable name="date" select="@date"/>
  <xsl:if test="not(preceding::entry[@date = $date])">
    <group k="{$date}">
      <xsl:apply-templates select="//entry[@date = $date]"/>
    </group>
  </xsl:if>
</xsl:template>
  
<xsl:template match="entry">
  <entry title="{@title}"/>
</xsl:template>

</xsl:stylesheet>

Ausgabe:


<?xml version="1.0" encoding="utf-8"?>
<grouped-listing>
   <group k="1">
      <entry title="1"/>
      <entry title="2"/>
   </group>
   <group k="2">
      <entry title="3"/>
   </group>
   <group k="3">
      <entry title="4"/>
   </group>
</grouped-listing>

Posted by Lars at 10:30 | Comments (0) | TrackBack

08.12.03

mtxslt - Multi-XSLT Ant Task

mtxslt is an Ant task that makes it easy to call multiple XSLT engines. Dadurch lässt sich eine XSL-Datei an mehreren Transformatoren testen. Es werden Saxon 6/7, Xalan for Java 2, and Oracle XDK for Java 9 unterstützt, und der Xslt/Style Ant Task wird erweitert.

Posted by Lars at 09:06 | Comments (0) | TrackBack

23.10.03

XML Schema Definition bei XSLT

Michael Kay, der Entwickler von Saxon, beantwortet bei p2p.wrox.com - xslt archive eine Frage, wie man die XML Schema Definition in einer XSLT Transformation einbauen kann:

<xsl:attribute name="xsi:schemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance"> <xsl:text>http://xmlns.schultz.dk/dokument http://schultzora.schultz.dk/schemas/schultz.xsd</xsl:text> </xsl:attribute>

Siehe auch:

Posted by Lars at 11:58 | Comments (1) | TrackBack

17.10.03

XPath Ausdrücke testen

lantern (A Java GUI application which allow users to test XPath expressions (and functions).) gibt es betreits die 1.0er Version.

Sollte eine XML Datei in einem Namespace verpackt sein, dann bietet lantern den def Namespace dafuer an.

Posted by Lars at 15:45 | Comments (0) | TrackBack

25.09.03

Seiten ohne XSLT erstellen

Bei meiner daypop-Suche nach XSLT bin ich auf den Artikel Moving Away From XSLT gestossen. Bei diesem geht es darum, dass Martin Fowler sein Bliki nicht mehr mit XSLT erstellt, sondern mit Ruby.

Seine Gruende hierfuer stehen hier: MovingAwayFromXslt

  • XML ist ein lausiger Syntax fuer eine Programmiersprache.
  • Subroutinen unter XSLT aufzurufen ist schmerzhaft (painful).
  • XSLT kann einfache Aufgaben loesen, jedoch bricht man sich einen ab, wenn es komplizierter wird.
  • Ruby ist eine saubere OO-Sprache mit klarem Syntax und einer kick-ass XML Libarary.
  • Es laesst sich template style Code mit transformer style Code mischen.
Posted by Lars at 00:28 | Comments (0) | TrackBack

04.09.03

eigene Funktionen mit XSLT 2.0

Auf XML.com gibt es zu lesen: Writing Your Own Functions in XSLT 2.0

Es wird beschrieben wie sich eigene XSLT Methoden entwickeln lassen. Dies mag fuer kleinere Methoden sinnvoll sein, jedoch komplexere Methoden wuerde ich dann doch in Java schreiben.

Am Ende wird auch ein wenig ueber functionale Programmiersprachen beschrieben.

Posted by Lars at 18:34 | Comments (0) | TrackBack

19.08.03

XSLT auf daypop

Heute mal bei daypop nach XSLT gesucht und folgende Ergebnisse näher angeschaut:

  • Gravy vergleicht XSLT Editoren, jedoch irgendwie nur Windowsdinger und ist mit keinem so richtig zufrieden... ich kann mich nur wiederholen: jEdit mit dem autom. Tag schliessen ist einfach wunderbar.
  • More Like This WebLog schreibt über TEI Markup and Style Sheet Example. Die Text Encoding Initiative (TEI) ist ein Markup für Gedichte (poems), Romane (romans), usw. während docbook für technische Dokumente entwickelt wurde (siehe auch Re: DOCBOOK-APPS: TEI & DocBook)
  • Zope Dispatches schreibt über eine Handful of XML
    Some quick notes on a few XML articles that I refer others to...
  • Danny's Raw Blog schreibt bei RDF/XML is not the only fruit folgendes:
    A direct mapping from the XML to the RDF model can be specified without actually having to carry out any transform.
Posted by Lars at 00:17 | Comments (0) | TrackBack

16.07.03

XSLT Code kürzen

Auf XML.com schreibt Manfred Knobloch zum Thema XML.com: Shortening XSLT Stylesheets. Der Artikel gibt ein paar Tipps zum Kürzen von XSLT Code, um diesen lesbarer zu machen.

Posted by Lars at 00:57 | Comments (0) | TrackBack

15.07.03

XSLT debuggen

Wie beim Programmieren, so könnte man hin und wieder auch beim XSLTen einen Debugger gebrauchen: XsltDebuggen (wiki)

Posted by Lars at 15:10 | Comments (0) | TrackBack

01.07.03

XSLT mit SVG visualisieren

Über xml/xsl/rss den Artikel Visualizing XSLT in SVG (By Chimezie Ogbuji) gefunden. Die im Artikel beschriebene XSL Datei transformiert XSL in SVG.

Posted by Lars at 12:13 | Comments (0)