Start
Unternehmen
ERP / PPS / Prozesse
Business Intelligence
Server-Technologien
Software-Technologien
Technologie-Beratung
Individual-Software
Produkte

Comelio GmbH
Rellinghauser Straße 10
D-45128 Essen
Deutschland
Fon: 0201-437517-0
Fax: 0201-437517-10
info@comelio.com

Comelio GmbH
Goethestraße 34
D-13086 Berlin
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Glockengießerwall 17
D-20095 Hamburg
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Mainzer Landstraße 27-31
D-60329 Frankfurt
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Stiglmaierplatz/Dachauer Str. 37
D-80335 München
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Liebknechtstr. 33
D-70565 Stuttgart
Deutschland
info@comelio.com

Comelio GmbH
Nevinghoff 16
D-48147 Münster
Deutschland

Comelio GmbH
Friedrich - List - Platz 1
D-04103 Leipzig
Deutschland

Comelio GmbH
St. Johanner Strasse 41-43
D-66111 Saarbrücken
Deutschland

Comelio GmbH
Kaiser-Wilhem-Ring 27–29
D-50672 Köln
Deutschland

Comelio GmbH
Münsterstraße 248
D-40470 Düsseldorf
Deutschland

Comelio GmbH
Fürther Strasse
D-90429 Nürnberg
Deutschland

Comelio GmbH

Bremen
Deutschland

Comelio-Blog > XSLT > SQL DDL aus XML

XSLT: SQL DDL aus XML erzeugen

Das XML Schema-Formt eignet sich besonders für die Erzeugung von SQL DDL-Befehlen zur Erzeugung von Datenbankskripten. Einfache und gleich strukturierte XML-Formte eignen sich allerdings ebenfalls für die Zusammenarbeit mit Datenbanen. Zum einen sei hier an die XSLT-getriebene Umwandlung in CSV-Daten gedacht als auch die automatische Erzeugung von SQL DML-Befehlen wie INSERT oder UPDATE. Dieser Artikel gibt ein Beispiel, wie solche einfachen XML-Dokumente aufgebaut und mit XSLT verarbeitet werden können.

Kontakt

Anrede* Herr Frau
Vorname*
Nachname*
Firma
E-Mail*
Tel-Nr.
Bereich*
Freitext

SQL DML aus XML erzeugen

XML-Daten eigenen sich auch für die Speicherung von kommagetrennten Werten bzw. zeichengetrennten Werten. Allerdings hat XML den Vorteil, dass es zwar trotz der größeren Datei die einzelnen Felder sehr genau beschreibt und man auch diese Daten sehr viel leichter lesen kann als eine Aneinanderreihung von Kurztexten oder Zahlen. Auch hier lässt sich eine attribut- und elementorientierte Form unterscheiden. In beiden Fällen repräsentieren die Kindelemente des Wurzelelements die einzelnen Datenreihen. Bei der attributorientierten Form stellen die einzelnen Attribute die Felder der Reihe dar. Bei der elementorientierten Form sind es die Kindelemente dieser Elemente.

Die Umwandlung von diesen Daten in tatsächliche kommagetrennte Werte (siehe Abschnitt CSV-Werte) erfolgt später. Hier soll es zunächst darum gehen, aus solchen Textdateien, die quasi die neuen CSV-Dateien in XML-Form darstellen, passende SQL-Befehle zu generieren, die dann sofort zur Datenbank geschickt werden können. Gesucht wird also ein XSLT-Transformationsdokument, das die INSERT-Befehle für die einzelnen Datensätze hervorbringt.

Folgendes Dokument enthält die zu transformierenden Daten. Es handelt sich um einen Ausschnitt der TARIF-Tabelle.

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="821_02.xslt"?>
<Tarifliste>
  <Tarif Name="Frühstück" Preis="0,5" Nr="1" Typ="p"/>
  <Tarif Name="Mittagspause" Preis="1" Nr="2" Typ="p"/>
  <Tarif Name="Abendessen" Preis="1" Nr="3" Typ="p"/>
  <Tarif Name="Mondschein1" Preis="0,5" Nr="4" Typ="p"/>
...
Attributorientierte »CSV-Werte«

Man durchläuft in der Transformation die einzelnen Reihen (Kinder des Wurzelelements) und innerhalb dieser Elemente dann die einzelnen Attribute (oder natürliche Elemente in der elementorientierten Form). Für jede Reihe werden die INSERT INTO- und VALUES-Klauseln erzeugt, wobei dann die einzelnen Attributwerte ausgegeben werden. Zur Sicherheit gibt man auch noch die einzelnen Spalten in der optionalen Spaltenliste an.

Erweiterungen dieser Datei könnte man darin sehen, dass für unterschiedliche Datenbanksysteme noch Variationen des SQL-Befehls zulässig oder über einen globalen Parameter auswählbar sind. Für MySQL könnte man z.B. mehrere INSERT-Befehle so aneinander hängen, dass nur die VALUES-Klauseln durch Komma getrennt mehrfach nacheinander auftreten. Dies verringert die Dateigröße. Zusätzlich ließe sich auch verhindern, die Spaltenliste auszugeben. Sie ist optional und wird nur dann benötigt, wenn eine Untermenge der in der Tabelle zur Verfügung stehenden Spalten und/oder eine andere Spaltenreihenfolge benutzt wird. Allerdings vergrößert die ständige Wiederholung der Spaltennamen natürlich die Dateigröße, sodass man sich hier überlegen könnte, sie tatsächlich entfallen zu lassen.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" version="1.0"
       encoding="ISO-8859-1" indent="yes"/>
  <xsl:template match="/">
    <!--Datenausgabe -->
    <xsl:for-each select="/*/*">
      <xsl:text>INSERT INTO </xsl:text>
      <xsl:value-of select="local-name(/*)"/>
      <!--Spaltenliste -->
      <xsl:text> (</xsl:text>
      <xsl:for-each select="/*/*[1]/@*">
        <xsl:value-of select="local-name(.)"/>
        <!--Trenner -->
        <xsl:if test="not(position()=last())">
          <xsl:text>, </xsl:text>
        </xsl:if>
      </xsl:for-each>
      <xsl:text>) 
</xsl:text>
      <xsl:text> VALUES (</xsl:text>
      <xsl:for-each select="@*">
        <xsl:text> '</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> ' </xsl:text>
        <!--Trenner -->
        <xsl:if test="not(position()=last())">
          <xsl:text>, </xsl:text>
        </xsl:if>
      </xsl:for-each>
      <xsl:text>); 
</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
Umwandlung der attributorientierten Form in SQL

Man erhält eine Auflistung von einzelnen INSERT-Befehlen für die angegebenen Spaltennamen und Werte.

INSERT INTO Tarifliste (Name, Preis, Nr, Typ) 
 VALUES ( 'Frühstück ' ,  '0,5 ' ,  '1 ' ,  'p ' ); 
INSERT INTO Tarifliste (Name, Preis, Nr, Typ) 
 VALUES ( 'Mittagspause ' ,  '1 ' ,  '2 ' ,  'p ' ); 
INSERT INTO Tarifliste (Name, Preis, Nr, Typ) 
 VALUES ( 'Abendessen ' ,  '1 ' ,  '3 ' ,  'p ' );
Ausgabe in SQL

Die Verarbeitung der attributorientierten Form ist tatsächlich bis auf zwei winzige Unterschiede völlig gleich. Es ließe sich auch überlegen, mit einem ODER-Ausdruck beide Varianten in einer Datei anzugeben. Wir drucken im nachfolgenden Quelltext nur einen Ausschnitt der Lösung für die attributorientierte Form ab und formatieren die geänderten Stellen fett.

    Comelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn KölnComelio GmbH XML Schema und XSLT: SQL aus XML Schema generieren Schema Handbuch XML Anleitung XSLT XML Manual Frankfurt Wuppertal Düsseldorf Dortmund Münster Essen Bochum Duisburg Hamburg Berlin Bonn Köln
Seminare