Base de Données XML : Création, modification et suppression de données avec BaseX.

Manipulation de la BDD et des données

Mise en place BaseX

  • 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 :

Télécharger

On aurait un fichier dont nom est sous forme "PrixCarburants_xxxxxxx.xml". Renommz-le en "PrixCarburants.xml" pour simplifier l'exercice en suite.

Question

Créer la BDD à partir du fichier téléchargé. Nommez-le en Open_Data

Indice

Choisir le fichier XML en tant qu'input

Solution

Création de la BDD

Database -> new -> browse file -> ok

Question

Ajouter le fichier XML suivant à la base de données et vérifier sur l'interface graphique

Produit.xml

Indice

Utiliser la commande ADD [input]

Indice

Penser à bien spécifier le chemin jusqu'au fichier, le répertoire actuel est ../basex/bin/

Solution

Ajout du fichier

1
ADD /path/to/Produit.xml

Question

Supprimer la "table" qui vient d'être créée et vérifier sur l'interface graphique

Indice
1
DELETE [path]
Solution
1
DELETE /Produit.xml

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

suppressionNoeud.xq

Question

Exécutez le suppressionNoeud.xq et vérifiez le résultat dans l'interface graphique.

Question

Exporter PrixCarburants.xml modifié.

Indice

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.

Solution
1
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

1
<pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R">
2
    <adresse>596 AVENUE DE TREVOUX</adresse>
3
    <ville>SAINT-DENIS-LèS-BOURG</ville>
4
    <ouverture debut="01:00:00" fin="01:00:00" saufjour=""/>
5
    <services>
6
      <service>Station de gonflage</service>
7
      <service>Vente de gaz domestique</service>
8
      <service>Automate CB</service>
9
    </services>
10
    <prix nom="Gazole" id="1" maj="2016-11-14T09:11:30" valeur="1119"/>
11
    <prix nom="SP95" id="2" maj="2016-11-14T09:11:30" valeur="1309"/>
12
    <prix nom="SP98" id="6" maj="2016-11-14T09:11:30" valeur="1355"/>
13
    <rupture id="5" nom="E10" debut="2015-02-09T16:02:00" fin="2016-11-20T00:11:42"/>
14
  </pdv>

Question

Comment on accède un document XML en passant par file system ?

Solution
1
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 ?

Solution

Dans la ligne de commandes, entrer : SET WRITEBACK TRUE

Question

Que est XQuery pour faire telle modification ?

Indice

Écrire un nouveau nœud

Indice

Déterminer le XPath pour insérer la nouvelle tache

Indice

Réfléchissiez comment on va mettre à jour le fichier source.

Solution

Insertion

1
let $update := doc('path/to/PrixCarburants.xml')//pdv_liste
2
let $node := <pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R">
3
    <adresse>596 AVENUE DE TREVOUX</adresse>
4
    <ville>SAINT-DENIS-LèS-BOURG</ville>
5
    <ouverture debut="01:00:00" fin="01:00:00" saufjour=""/>
6
    <services>
7
      <service>Station de gonflage</service>
8
      <service>Vente de gaz domestique</service>
9
      <service>Automate CB</service>
10
    </services>
11
    <prix nom="Gazole" id="1" maj="2016-11-14T09:11:30" valeur="1119"/>
12
    <prix nom="SP95" id="2" maj="2016-11-14T09:11:30" valeur="1309"/>
13
    <prix nom="SP98" id="6" maj="2016-11-14T09:11:30" valeur="1355"/>
14
    <rupture id="5" nom="E10" debut="2015-02-09T16:02:00" fin="2016-11-20T00:11:42"/>
15
  </pdv>
16
return insert node $node as first into $update

Question

Est-ce qu'on voit la modification dans l'interface graphique ? Pour quoi ?

Solution

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

1
REPLACE PrixCarburants.xml /path/to/PrixCarburants.xml

Question

Supprimer la base de données en ligne de commandes

Solution

Suppression de la BDD

1
DROP DB [nomDb]
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Alexandra Duval, Simei YIN, 2015-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)