Datenbankzugriff mit XML und Cocoon


Inhaltsverzeichnis

Eine einfache XML-Datei: xql01.xml
Stylesheet: sql01.xsl

Eine XML-Datei sorgt für die Verbindung zur Datenbank und übergibt ihr die SQL-Befehlssätze:


<query connection="foo">						
  		select * from adressen						<!-- DB-Abfrage in sql -->
  	</query>

Eine einfache XML-Datei: xql01.xml

Für die Übergabe sorgt hier das SQL-Modul von Cocoon. Entsprechend ist der Datei-Header gestaltet.

Die vollständige XML-Datei:


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="sql01.xsl" type="text/xsl"?>

<?cocoon-process type="sql"?>
<?cocoon-process type="xslt"?>

<!DOCTYPE page SYSTEM "sql.dtd">

<page>												<!-- root-element -->

  <connectiondefs>
    <connection name="foo">							<!-- Name DB-Verbindung -->
      <driver>org.postgresql.Driver</driver>
      <dburl>jdbc:postgresql://localhost/xml</dburl><!-- URL DB-VERbindung -->
    	<username>root</username>
		<password>fritz</password>
	</connection>	
  </connectiondefs>
  
  <tab>
  	<query connection="foo">						<!-- Aufruf DB-Verbindung -->
  		select * from adressen						<!-- DB-Abfrage -->
  	</query>
  </tab>
   
</page>

Stylesheet: sql01.xsl

Die von der Datenbank kommende Antwort wird in XML überführt und vom Stylesheet in HTML (oder ein anderes Ausgabeformat) umgewandelt. Im Falle von HTML steht die Ausgabe sofort via Cocoon-Tomcat-Apache online zur Verfügung.


<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:template match="page">

	<!-- Anweisung zur Ausgabe von html -->
	
   	<xsl:processing-instruction name="cocoon-format">
		type="text/html"
	</xsl:processing-instruction>
	
	<!-- html-Körper -->
	
   	<html>
    	<head>
     		<title>
     			PostgreSQL Search Results
     		</title>
    	</head>
    	<body bgcolor="#FFF8DC">
			<font face="helvetica">
    		<h1>PostgreSQL</h1>
			
				<!-- übernimmt Inhalte der .xml-Datei -->
				
     			<xsl:apply-templates/>
			</font>
   		 </body>
   </html>
</xsl:template>
  
  
<!-- wählt das selbstdeklarierten Tag 'tab' aus -->
  
<xsl:template match="tab"> 
 	<table border="2" cellspacing="0" cellpadding="6"
	 bordercolor='#000099' bgcolor="#CCCCFF">
		<tr>
			<th>Name</th>
			<th>Vorname</th>
			<th>PLZ</th>
			<th>Ort</th></tr>
			
				<!-- übernimmt Inhalte von 'tab' und damit
				das Ergebnis der Datenbankabfrage -->
				
				<xsl:apply-templates/>
	</table>
</xsl:template>


<!-- Formatiert das Ergebnis der Datenbankabfrage -->

<xsl:template match="ROW">	
	<tr>		
     	<td><xsl:value-of select="name"/></td>
	 	<td><xsl:value-of select="vorname"/></td>
	 	<td><xsl:value-of select="plz"/></td>
	 	<td><xsl:value-of select="ort"/></td>	 
	</tr>
</xsl:template>

</xsl:stylesheet>