APSQL

Extraire les données au format XML

L'instruction SELECT dispose de l'option FOR XML qui permet de mettre au format XML les données issues de la requête. L'option FOR XML peut être utilisée dans les 4 modes suivants:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

FOR XML RAW

Avec cette option chaque ligne de résultat est un élément de type row (ligne) qui possède comme attribut les colonnes retournées par la requête.

Exemple utilisation FOR XML RAW

Il est toutefois possible d'influer sur cette mise en forme par défaut en ajoutant la directive ELEMENTS (for xml raw,elements). Ainsi les valeurs issues des différentes colonnes ne sont elles plus présentées comme des attributs de la balise row mais plutot comme la valeur de sous éléments de RAW.

Exemple utilisation for xml raw, elements

L'option TYPE permet quand à elle de récupérer les valeurs directement au format xml. Les données à ce format peuvent alors être enregistrées directement dans une colonne au format xml.

Enfin avec l'option XMLSCHEMA il est possible de récupérer directement un fichier XSD de description de la structure des données au format XML.

FOR XML AUTO

Cette option est sans aucun doute la plus connue car c'est aussi la plus facile d'accès. Les données vont être retournées sur un ou plusieurs niveau en respectant la hiérarchie des données. Cependant dans le cas ou la structure est complexe, il est préférable d'utiliser l'option EXPLICIT. Cependant pour des requêtes simples le résultat est très pratique.

Requete exemple for xml auto

Exemple résultat for xml auto

FOR XML EXPLICIT

Avec ce mode il est possible de contrôler et de structurer comme on le souhaite le document de sortie. Cependant avec le mode explicit, toutes les informations relatives à la structuration XML du résultat doivent être intégrée à la requête SELECT, cette contrainte pèse sur FOR XML EXPLICIT aussi l'option FOR XML PATH peut elle donner un résultat satisfaisant dans de nombreux cas avec l'avantage de conserver une requête d'extraction des données plus simple à écrire.

Pour afficher les informations au format XML, l'option EXPLICIT se base sur les 2 premières colonnes de la requête qui sont Tag et Parent. La colonne Tag contient le numéro (sous forme de valeur entière) de la balise tandis que la colonne Parent contient le numéro de la balise parent. Ces 2 premières colonnes permettent de mettre en place la structure hiérarchique du document XML.

En plus de cette contrainte portant sur les 2 premières colonnes de la requête, le nom des autres colonnes est structuré de façon à pouvoir former correctement le document XML. Le nom des colonnes va permettre de spécifier le nom des balises,  des attributs.

Cette ensemble de contraintes sur la struture du résultat peut rendre la requête SQL parfois complexe à écrire mais offre l'avantage de maitriser complètement le format du résultat.

Le nom des colonnes doit respecter la structure suivante nomBalise! numeroBalise!nomatribut!directive avec la signification suivante

  • nomElement : permet de définir le nom de la balise XML qui va contenir l'information
  • numeroBalise : ce numéro est associée à la valeur contenue dans la colonne Tag et permet ainsi de construire l'exact hiérarchie souhaitée.
  • nomAttribut : permet de spécifier le nom de l'attribut qui va contenir la valeur.
  • directives : permet de spécifier de façon optionnelle des options relatives à la construction du document XML comme par exemple la création de liens à l'intérieur du document.

L'exemple suivant permet de fournir au format xml le nom des différentes, les colonnes et leur type de données.

Le résultat est alors le suivant

FOR XML PATH

Le mode PATH à pour objectif de combiner les modes auto, dans lequel ne nombre de réglages est limité avec le mode explicit, qui est très complet mais également relativement lourd à utiliser. Le mode PATH utilise la nom de colonnes pour établir la structure des documents. Le nom des colonnes doivent utiliser les caractères @ et / pour préciser que la colonne va structurer une balise ou bien un attribut.

L'exemple suivant illustre les possibilités offertes par cette instruction.