Chapitre 5 : BD relationnelles et XML Introduction Ouvrir les BD au

publicité
Chapitre 5 : BD relationnelles et XML
1. Introduction
Ouvrir les BD au Web
Mettre les données des BD sur le Web (passerelles d’accès aux BD)
– exportation de données (vers HTML)
– BD comme repository d’un intranet
Couplage HTML-bases de données
• Serveur HTTP dynamique
– Basé sur CGI
– Serveur Web dédié aux BD : Oracle WebDB, VersantWeb, etc.
• Serveur de pages dynamiques
– Les langages de haut niveau permettant de définir des actions à faire exécuter sur le serveur
• ASP (MS Active Server Page)
• JSP (Java Server Page)
• PHP (Hypertext Preprocessor)
Accès base de données
Limitations du couplage HTML-BD
• Solutions propriétaires
– Excepté JSP
• Pas de protocole pour publier les données
– SQL n’est pas conçu pour le Web
• Pas de format d’échange de données standard :
HTML est un format de présentation
– Mélange présentation et contenu
– Pas de structure, pas de sémantique, pas de contrainte d’intégrité
– Perd la structure (schéma) provenant de la BD
Le contenu doit être abstrait et indépendant du stockage et de la présentation
– Permet l’intégration uniforme de données hétérogènes
• Provenant de différentes sources de données
– Permet des applications dynamiques
• La présentation peut être différente selon le médium, le temps, la requête ou le profil de
l’utilisateur
67
Chapitre 5 : BD relationnelles et XML
XML est une bonne solution pour l’échange de données
– Standard du W3C
– Décrit le contenu, pas la présentation
• Structure, type, schéma, requêtes, etc.
– Fournit l’indépendance des données au stockage et à la présentation
2. Passage BDR/XML
Exemple : gestion des commandes des clients.
Client (Nclient, nom, prenom, adresse)
Commande (Ncmde, Nclient, date)
Produit (Nproduit, Catégorie, prix)
détails-commande (Ncmde, Nproduit, Quantité)
=> Un schéma avec clés primaires et clés étrangères
Nclient
01234
01235
nom
razak
soltane
Nproduit
500
501
502
prenom
ali
hamza
Table : client
Catégorie
ZZZT
YYYB
AAAB
Ncmde
012
013
014
Ncmde
012
012
013
014
adresse
Constantine
Annaba
prix
200,00
100,00
400,00
Table : Produit
Nclient
date
01234
20-02-2010
01234
15-12-2010
01235
10-01-2011
Table : commande
Nproduit
500
501
502
503
Table : détails-commande
Réprésentation XML: avec éléments
Trois niveaux d’éléments dans l’arbre : table, lignes, attributs
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Clients>
<Client>
<Nclient>01234</Nclient>
<nom>razak</nom>
<prenom>Ali</prenom>
<adresse>Constantine</adresse>
68
Quantité
300
200
400
100
Chapitre 5 : BD relationnelles et XML
</Client>
</Clients>
Tous représentés par des éléments
Réprésentation XML: avec attributs
Deux niveaux d’éléments tables et lignes :
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Clients>
<Client Nclient=’01234’
nom=’razak’
lieu=’Ali’
Adresse=’Constantine’
/>
</Clients>
Attributs relationnels attributs XML
La représentation avec attributs est plus proche du relationnel car :




Absence d’ordre sur les attributs en XML comme en relationnel.
On ne peut pas avoir deux fois un attribut avec le même nom.
On peut, avec une DTD, donner la liste des valeurs acceptées pour un attribut.
De plus, moins volumineux
Représentation des associations 1 à plusieurs
L’équivalent du relationnel en XML
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Clients>
<Client Nclient=’01234’
nom=’razak’
prenom=’Ali’
Adresse=’Constantine’/>
<Commande Ncmde=’012’
Nclient=’01234’
date=’ 20-02-2010’ />
<Commande Ncmde=’013’
Nclient=’01234’
date=’15-12-2010’ />
</Clients>
Relationnel vs XML
En relationnel :
 On associe les lignes par le système clé primaire/clé étrangère
 On fait le rapprochement par un calcul (la jointure) assez coûteux
 Intérêt : simple, raisonnablement efficace, évite les redondances
En XML
Le modèle est plus puissant
 Même représentation possible
 Toujours aussi coûteux
 On peut exploiter une représentation imbriquée
Représentation imbriquée
On exploite le fait qu’une activité est relative à une seule station
69
Chapitre 5 : BD relationnelles et XML
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Clients>
<Client Nclient=’01234’
nom=’razak’
prenom=’Ali’
Adresse=’Constantine’>
<Commande Ncmde=’012’
date=’ 20-02-2010’ />
<Commande Ncmde=’013’
date=’15-12-2010’ />
<Client>
</Clients>
Associations plusieurs à plusieurs
Beaucoup moins évident à gérer. Exemple avec l’association Commande/Produit
 Une commande peut contenir plusieurs produits
 Un produit peut passer dans plusieurs commandes
En relationnel, on crée une table intermédiaire (détails-commande)
détails-commande (Ncmde, Nproduit, Quantité)
Exemple
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Commande Ncmde=’012’ Nclient=’01234’ date=’20-02-2010’>
<detailscommande Nproduit=’500’ Quantité=’300’/>
<detailscommande Nproduit=’501’ Quantité=’200’/>
</Commande>
<Commande Ncmde=’013’ Nclient=’01234’ date=’ 15-12-2010’>
<detailscommande Nproduit=’502’ Quantité=’400’/>
</Commande>
<Produit Nproduit=’500’ Catégorie=’ZZZT’
Prix=’ 200,00’/>
Solution ultime
On choisit une racine (par exemple les Clients) et on imbrique tout
 Les commandes sont des éléments dans le Client
 Les détailscommandes sont des éléments dans les commandes
On introduit une certaine redondance : les produits apparaissent plusieurs fois
Exemple
<?xml version=’1.0’ encoding=’ISO-8859-1?>
<Clients>
<Client Nclient=’01234’
nom=’razak’ prenom=’Ali’ Adresse= ‘Constantine’>
<Commande Ncmde=’012’ date=’20-02-2010’>
<detailscommande Nproduit=’500’ Quantité=’300’/>
</Commande>
<Commande Ncmde=’013’ date=’ 15-12-2010’>
<detailscommande Nproduit=’502’ Quantité=’400’/>
</Commande>
</Client>
<Client Nclient=’01235’
70
Chapitre 5 : BD relationnelles et XML
nom=’soltane’ prenom=’hamza’ Adresse= ‘Annaba’>
<Commande Ncmde=’014’ date=’10-01-2011’>
<detailscommande Nproduit=’503’ Quantité=’100’/>
</Commande>
</Client>
<Praoduit Nproduit= ‘500’ catégorie=’ZZZT’ prix=’200,00’ />
<Praoduit Nproduit= ‘501’ catégorie=’YYYB’ prix=’100,00’ />
……………………………………………….
</Clients)
Déclaration de la DTD
En général on exporte une base de données pour fournir une « vue » XML à d’autres utilisateurs.
Il faut donc fournir une description de la structure XML.
On suppose que :
 Les colonnes sont représentées par des attributs XML;
 Le chemin d’accès principal est le Client ;
 Pour chaque client on trouve, imbriqués, les commandes d’un client, et dans chaque
commande les détails des produits commandés;
 Les produits on sont représentées par des éléments indépendants, avec un lien de
navigation.
Exemple général :
<!ELEMENT Clients (Client*, Produit*)>
<!ELEMENT Client (commande*)>
<!ELEMENT commande (détailscommande*)>
<!ELEMENT détailscommande EMPTY>
<!ELEMENT Produit EMPTY>
<!ATTLIST Client
Nclient ID #REQUIRED
nom #REQUIRED
prenom CDATA #REQUIRED
Adresse CDATA #REQUIRED >
<!ATTLIST commande
Ncdme ID #REQUIRED
date CDATA #REQUIRED >
<!ATTLIST Produit
Nproduit ID #REQUIRED
Catégorie CDATA #REQUIRED
prix CDATA #REQUIRED>
On déclare une référence depuis details-commande vers produit.
<!ATTLIST detailscommande
Nproduit IDREF #REQUIRED
Quantité CDATA #REQUIRED>
3. L’utilitaire XSQL d’ORACLE
Oracle propose un XML Development Kit avec : DOM, SAX, processeur XSLT et nombreux
utilitaires (en java).
XSQL est un SQL mis à la sauce XML. Il permet :
 De se connecter à la base
71
Chapitre 5 : BD relationnelles et XML



D’effectuer une requête
De mettre en forme XML le résultat, selon certains paramètres
D’enchaîner avec une transformation XSLT
C’est un document XML
Les instructions XSQL sont identifiées par l’espace de nom xsql:
Le résultat c’est encore un document XML, avec la représentation en éléments du résultat de la
requête.
<GestionVente NO="1">
<Description>
Cette semaine nous proposons une promotion exceptionnelle sur ……..
</Description>
<xsql:query connection="connexionBase" xmlns:xsql="urn:oracle-xsql">
SELECT * FROM Client WHERE Nclient=’01234’
</xsql:query>
</ GestionVente >
Par défaut le format de sortie est le suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<ROWSET>
<ROW num="1">
<NCLIENT>Passac</NCLIENT >
<NOM>Razak</NOM>
<PRENOM>Ali</PRENOM>
<Adresse>Constantine</Adresse>
</ROW>
</ROWSET>
Pour effectuer une transformation
On ajoute une instruction indiquant le programme de transformation à appliquer.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="pres.xsl"?>
<xsql:query connection="connexionBase" xmlns:xsql="urn:oracle-xsql">
SELECT ……………………………………………………………..
</xsql:query>
NB: la requête est effectuée avant la transformation.
Contrôle du résultat XML
On peut remplacer ROWSET et ROW par des noms explicites.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsql:query
connection="maConnexion" xmlns:xsql="urn:oracle-xsql"
rowset-element=’CLIENTS’
row-element=’CLIENT’>
SELECT * FROM Client WHERE Nclient=’01234’
</xsql:query>
Le résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<CLIENTS>
72
Chapitre 5 : BD relationnelles et XML
<CLIENT num="1">
<NCLIENT>Passac</NCLIENT >
<NOM>Razak</NOM>
<PRENOM>Ali</PRENOM>
<Adresse>Constantine</Adresse>
</CLIENT>
</CLIENTS>
Ce qu’on peut faire avec XSQL
On fait les choses simples simplement, et on peut faire des choses compliquées.
 Utiliser des paramètres dans la requête
 Placer plusieurs requêtes dans une page
 Contrôler le format XML de sortie
 Produire plusieurs formats de sortie avec XSLT
Exemple de paramètres
Des paramètres (HTTP, Cookies, autre) peuvent être exploités dans la requête.
<?xml version="1.0"?>
<xsql:query
connection="maConnexion"
xmlns:xsql="urn:oracle-xsql">
SELECT * FROM Client WHERE NClient=’{@num}’
</xsql:query>
73
Téléchargement