Gérer une fichothèque avec le logiciel BDF

Paramètre « posttransform » : appliquer une transformation finale à du XML pour le convertir en JSON

Le paramètre posttransform permet d’indiquer un traitement final à effectuer aux donnée. Celles-ci doivent être sous la forme d’une chaine XML valide. Deux transformations sont disponibles, elles permettent la conversion des données au format JSON. Les deux transformations sont les suivantes :

  • jsonml : transforme n’importe quel XML suivant la syntaxe JsonML (www.jsonml.org/), la transformation s’appuie sur le script XSLTJSON Lite codé par Bram Stein (XSLTJSON sur GitHub)

  • jsonstructure : transforme uniquement le XML qui suit la syntaxe de correspondance décrite ci-dessous

Ce paramètre va surtout être utilisé pour les données issues d’une extraction

Exemple d’utilisation du paramètre
colonneC
extraction
{transformation=nom_gabarit}
posttransform=jsonstructure

Syntaxe de correspondance

L’object de cette syntaxe de correspondance est de pouvoir définir le résultat en final en JSON de façon précise tout en gardant la souplesse du XML au sein du XSLT (il est tout à fait possible d’écrire du XSLT qui génère directement du JSON puisque que le JSON est du texte mais l’usage a montré que le traitement des blancs et l’échappement de certains caractères peuvent compliquer les choses).

Le principe est simple :

  • un objet JSON est indiqué par l’élément <object>

  • un tableau JSON est indiqué par l’élement <array>

  • l’élément racine du XML est soit un élément <object> ou un <array>

  • un élément <object> contient des éléments <pair> décrivant les couples nom/valeur de l’objet

  • un élément <pair> a un attribut @name obligatoire, il peut avoir un attribut @value ou posséder un élément <object>, <array>, <value>, <string>, <xml> ou <raw>

  • le contenu d’un élément <value> ou d’un attribut @value est traité comme une chaine de caractères, les nombres et les mots réservés true, false et null sont reconnus et ne sont pas mis entre guillemets, la chaine est nettoyée de ses espaces blancs

  • un élément <string> est traité comme une chaine sans modification de son contenu

  • un élément <xml> est traité comme une chaine avec reprise du balisage qu’il contient, il peut par exemple contenir du code XHTML

  • le contenu d’un élément <raw> est inséré tel quel dans le JSON résultant, son utilisation doit se faire avec précaution car cela peut aboutir à du JSON invalide

  • un élément <array> peut contenir un nombre quelconques d’éléments <object>, <array>, <value>, , <string> <xml> et <raw>

On peut en savoir plus en consultant le code source de la feuille de style XSLT.

Exemple

XML initial
<array>
    <object>
        <pair name="name" value="Name"/>
        <pair name="true" value="Name"/>
        <pair name="count" value="45"/>
        <pair name="count_string">
            <string>45</string>
        </pair>
        <pair name="count_raw">
            <raw>"45"</raw>
        </pair>
        <pair name="options">
            <object>
                <pair name="enable">
                    <value>true</value>
                </pair>
                <pair name="usages">
                    <array>
                        <value>window</value>
                        <value>internet</value>
                    </array>
                </pair>
            </object>
        </pair>
    </object>
    <array>
        <value>56.8</value>
        <raw>[null,"test"]</raw>
        <value> Text &#xA; "normalized" </value>
        <string> Text \n &#xA; "without normalization" </string>
    </array>
    <xml>Text with &#xA; <strong>XHTML</strong> <i>tags</i></xml>
</array>
JSON résultant
[
  {
    "name":"Name",
    "true":"Name",
    "count":45,
    "count_string":"45",
    "count_raw":"45",
    "options":{"enable":true,"usages":["window","internet"]}
  },
  [
    56.8,
    [null,"test"],
    "Text \"normalized\"",
    " Text \\n \n \"without normalization\" "
  ],
  "Text with \n <strong>XHTML</strong> <i>tags</i>"
]
Fiches voisines