Der Datentyp XMLType der XML-Datenbank Oracle XDB bietet nicht nur einfache Möglichkeiten zur Validierung der enthaltenen Daten mit XML Schema, sondern auch ein Unterprogramm für die XSLT-Transformation. Dieser kurze Artikel soll dieses spezielle Unterprogramm vorführen.
Ohne einen Parser starten zu müssen, können Sie eine Spalte bzw. eine Variable, deren Datentyp XMLType ist, direkt mit Hilfe von XSLT transformieren. Dies verkürzt eine entsprechende Anwendung erheblich und beschränkt sie nur auf die Beschaffung der Daten, die Transformation über die SQL-Funktion XMLtransform() oder die XMLType-Methode transform() und das Speichern der Ergebnisdaten in einer geeigneten Variable. Die grundlegende Technologie, die für die Transformation bzw. für den Algorithmus der Transformation verwendet werden muss, ist dann XSLT.
Im folgenden Beispiel speichern wir in einer ähnlichen Tabelle wie bisher sowohl XML-Daten als auch XSLT-Daten. Dies ermöglicht es, direkt in SQL eine Transformation durchzuführen, weil auch die geeigneten Transformationsdaten in einer Tabellenspalte liegen. Es ist aber nicht weiter schwer, sich eine PL/SQL-Variante vorzustellen, in der die jeweiligen Spaltenwerte als Variablenwerte vorliegen und das Ergebnis nicht in der SQL-Ergebnismenge vorliegt, sondern ebenfalls in einer Variable zwischengespeichert wird.
-- Tabelle löschen
DROP TABLE termin_d;
-- Tabelle anlegen
CREATE TABLE termin_d(
t_knr NUMBER(7),
t_xml XMLType,
t_xslt XMLType);
/
-- Werte einfügen
INSERT INTO termin_d VALUES(1015068, XMLType('<Termin Nr="498">
<Beginn>10.06.03</Beginn>
<Ende>13.06.03</Ende>
<Kurs>1015068</Kurs>
</Termin>'), XMLType('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Termin">
<html>
<head>
<title>Termin</title>
</head>
<body>
<ul>
<xsl:for-each select="child::*">
<li>
<xsl:value-of select="local-name(.)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>'));
/
SELECT XMLTransform(t_xml, t_xslt).getStringVal()
FROM termin_d;
Der einfache Termin in der XML-Spalte wird durch die Transformationsvorgaben in der XSLT-Spalte in einen HTML-Quelltext umgewandelt, der in der Ergebnismenge vorliegt.
XMLTRANSFORM(T_XML,T_XSLT).GETSTRINGVAL()
<html>
<head>
<title>Termin</title>
</head>
<body>
<ul>
<li>Beginn10.06.03</li>
<li>Ende13.06.03</li>
<li>Kurs1015068</li>
</ul>
</body>
</html>
comelio.com
