SQL Server, IIS et XML

MS SQL Server 2000 propose un traitement intéressant de XML pour exporter et importer des données depuis une base de données SQL en conjonction avec le serveur Internet Information Server de Microsoft.

Il convient d'abord de configurer correctement le serveur IIS afin de déclarer divers répertoires virtuels grâce à un procédure simple et parfaitement documentée. On pourra alors appeler des URL de la forme :

http://serveur/bibli?SQL=SELECT+Nom+Prénom+from+Auteur+for+xml+Raw&root=auteurs

qui retournera un fichier xml simple.

On peut rajouter en paramètre une feuille de style qui permettra un affichage de meilleure qualité.

Interrogation de la base de données

La limite à la longueur des chaînes que l'on peut transmettre restreint quelque peu l'intérêt de la procédure précédente.

MS SQL propose une syntaxe permettant d'écrire directement une requête dans une page xml. Ainsi, la page suivante permet d'interroger la base de données Bibli (correctement configurée) pour obtenir la liste des auteurs

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

<AUTEURS xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <sql:query>

    SELECT Nom, Prénom, Nationalité

    FROM Auteur

    ORDER BY Nom

    FOR XML AUTO, ELEMENTS

  </sql:query>

</AUTEURS>

L'appel se fait par une url de la forme

http://serveur/bibli/Template/auteurs.xml

Mise en forme des données

Il suffit maintenant de rajouter la feuille xslt adéquate pour obtenir une présentation sous forme de tableau :

 

<?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="/">

    <html>

    <head>

      <title>Liste des auteurs</title>

      <STYLE>

          body {background-color: #FFFFCC}

          h1 {text-align: center; font-size: large;font-family: "Times New Roman"}

      </STYLE>

    </head>

    <xsl:apply-templates/>

    </html>

  </xsl:template>

  <xsl:template match="AUTEURS">

    <body>

      <h1>Auteurs</h1>

        <table border="1">

          <th width="30%">Nom</th>

          <th width="30%">Prénom</th>

          <th width="30%">Nationalité</th>

          <xsl:apply-templates/>

        </table>

      </body>

    </xsl:template>

 

    <xsl:template match="Auteur">

      <tr>

        <td><xsl:value-of select="child::Nom"/></td>

        <td><xsl:value-of select="child::Prénom"/></td>

        <td><xsl:value-of select="child::Nationalité"/></td>

      </tr>

    </xsl:template>

</xsl:stylesheet>

Interrogation avec paramètres

Pour enrichir le traitement de données, on peut définir des paramètres en rajoutant avant la requête un code du type :

<sql:header>
  <sql:param name='AutName'>B%</sql:param>
</sql:header>

et en précisant dans le corps de la requête une condition du type

WHERE Nom Like @AutName

L'URL suivante (utilisant un caractère spécial pour coder le % nécessaire au Like) :

http://localhost/bibli/Template/auteurs2.xml?AutName=A%25

permet alors de passer le paramètre A% à la requête pour obtenir le Like 'A%'