Manipulation de la BDD et des données
Mise en place BaseX
BaseX est léger et portable, sous Linux, on peut l'utiliser directement par extraire l'archive.
Lien de téléchargement : http://basex.org/products/download/all-downloads/
Sous Linux : Zip Archive
Sous Windows : Windows Installer
Pour accéder à l'interface de BaseX, exécuter .../basex/bin/basexgui avec
./basexgui
Créer une base de données à partir d'un fichier XML
Nous prendrons comme base de travail, un fichier XML de données Open Data, sur les prix des carburants mises à disposition quotidiennement :
On aurait un fichier dont nom est sous forme "PrixCarburants_xxxxxxx.xml". Renommz-le en "PrixCarburants.xml" pour simplifier l'exercice en suite.
Question
Question
Question
XQuery Update
Syntax de XQuery :
Syntax
Explication
Example
let
Déclaration d'une variable et/ou affectation de sa valeur.
Une variable est toujours précédée par le symbole "$"
let $var := "maVariable"
return
Clause qui permet de construire le résultat.
Elle est obligatoire.
return + [XQuery Update]
Étudier le fichier suivant puis s'en servir pour supprimer le premier nœud <pdv> du fichier PrixCarburants.xml.
Télécharger le fichier suivant
Question
Exécutez le suppressionNoeud.xq et vérifiez le résultat dans l'interface graphique.
Question
Exporter PrixCarburants.xml modifié.
Exportation : Par défaut, BaseX ne propage pas les modifications dans le fichier source, il y a deux solutions montrées en cours. Réfléchissez qu'on doit utiliser laquelle.
EXPORT path/to/result
Ou avec GUI : Database → Export, choisir le répertoire cible
Supplémentaire : Remettre le nœud qu'on vient de supprimer dans le fichier PrixCarburants.xml en passage de file système
<pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R">
<adresse>596 AVENUE DE TREVOUX</adresse>
<ville>SAINT-DENIS-LèS-BOURG</ville>
<ouverture debut="01:00:00" fin="01:00:00" saufjour=""/>
<services>
<service>Station de gonflage</service>
<service>Vente de gaz domestique</service>
<service>Automate CB</service>
</services>
<prix nom="Gazole" id="1" maj="2016-11-14T09:11:30" valeur="1119"/>
<prix nom="SP95" id="2" maj="2016-11-14T09:11:30" valeur="1309"/>
<prix nom="SP98" id="6" maj="2016-11-14T09:11:30" valeur="1355"/>
<rupture id="5" nom="E10" debut="2015-02-09T16:02:00" fin="2016-11-20T00:11:42"/>
</pdv>
Question
Comment on accède un document XML en passant par file system ?
doc("path/to/Produit.xml")
Le répertoire actuel est où vous stockez le fichier .xq
Question
Qu'est-ce qu'on doit faire pour mettre à jour le fichier source ?
Dans la ligne de commandes, entrer : SET WRITEBACK TRUE
Question
Que est XQuery pour faire telle modification ?
Écrire un nouveau nœud
Déterminer le XPath pour insérer la nouvelle tache
Réfléchissiez comment on va mettre à jour le fichier source.
Insertion
let $update := doc('path/to/PrixCarburants.xml')//pdv_liste
let $node := <pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R">
<adresse>596 AVENUE DE TREVOUX</adresse>
<ville>SAINT-DENIS-LèS-BOURG</ville>
<ouverture debut="01:00:00" fin="01:00:00" saufjour=""/>
<services>
<service>Station de gonflage</service>
<service>Vente de gaz domestique</service>
<service>Automate CB</service>
</services>
<prix nom="Gazole" id="1" maj="2016-11-14T09:11:30" valeur="1119"/>
<prix nom="SP95" id="2" maj="2016-11-14T09:11:30" valeur="1309"/>
<prix nom="SP98" id="6" maj="2016-11-14T09:11:30" valeur="1355"/>
<rupture id="5" nom="E10" debut="2015-02-09T16:02:00" fin="2016-11-20T00:11:42"/>
</pdv>
return insert node $node as first into $update
Question
Est-ce qu'on voit la modification dans l'interface graphique ? Pour quoi ?
Des modifications ne sont pas visibles dans l'interface graphique, parce que ce document XML n'est pas ajouté dans une base de données, il existe seulement en mémoire. Mais les fichiers sources sont bien modifiés avec WRITEBACK
vrai
Pour vérifier : Remplacer le document xml dans la BDD pour vérifier le résultat
REPLACE PrixCarburants.xml /path/to/PrixCarburants.xml
Question
Supprimer la base de données en ligne de commandes
Suppression de la BDD
DROP DB [nomDb]