Sie sind auf Seite 1von 48

Bases de donnes et XML

valuation dun programme XSLT p.1/??

Quelques questions
XML, format de bases de donnes ? Pas vraiment : stockage inefcace, pas trs structur, pas (encore) de langage de requte Doit-on associer une BD XML ? Oui, pour lindexation, les transactions, les mises jour, etc => encore une fois, XML est plutt un format dchange et dintgration

valuation dun programme XSLT p.2/??

Donnes et documents
Dans une base, il y a des donnes : Trs structures Granularit ne Types Et dans un document XML ? Pas de typage Beaucoup de texte Une structure trs souple

valuation dun programme XSLT p.3/??

Situations mixtes
Systmes dinformation o la sparation donnes/document nest pas trs nette. Un part de description textuelle est de nature document Exemple : tout le texte prsentant un cinma, ses activits, etc Une part est contenue dans une base de donnes Exemple : les lms

valuation dun programme XSLT p.4/??

XML dynamique
XML : moyen de rendre publique (= publier) tout ou partie dune BD. Besoin : intgrer du XML statique, et des parties de code effectuant du SQL Mieux : comment viter le mlange programmation/gestion du contenu (sparation des points de vue) => mme problme que HTML + (PHP, ASP, JSP)...

valuation dun programme XSLT p.5/??

Architecture gnrale
Dclenchement du code par balises dynamiques
Partie statique Balises "dynamiques" Partie statique Document initial Code SQL Base de donnes Partie statique Publication <fragment XML> Partie statique Document intermdiaire XSLT

valuation dun programme XSLT p.6/??

Premire tape : transformation BD relationnelle vers XML

valuation dun programme XSLT p.7/??

Notre base de donnes


Des stations o sjournent des clients. Station (nomStation, capacit, lieu, rgion, tarif) Activit (nomStation, libell, prix) Client (id, nom, prnom, ville, rgion, solde) Sjour (idClient , station, dbut, nbPlaces) un schma avec cls primaires et cls trangres

valuation dun programme XSLT p.8/??

Une instance
nomStation Venusa Passac capacit 350 lieu rgion tarif 1200

Guadeloupe Antilles

400 Alpes La table Station nomStation Venusa Venusa Passac libell Voile Plonge Ski

Europe 1000

prix 150

200 20

Piscine Passac La table Activit

valuation dun programme XSLT p.9/??

Une instance
id 10 nom Fogg prnom Phileas Jack station Santalba Passac Venusa Farniente Farniente ville Londres New York dbut 2001-08-14 2001-08-15 2001-08-03 2002-06-24 2002-09-05 rgion Europe Amrique solde 12465 9812

30 Kerouac idClient 30 30 30 30 10

nbPlaces 5 3 3 5 3

valuation dun programme XSLT p.10/??

Rprsentation XML : avec lments


Trois niveaux dlments dans larbre : table, lignes, attributs
<?xml version=1.0 encoding=ISO-8859-1?> <Stations> <Station> <nomStation>Venusa</nomStation> <capacite>350</capacite> <lieu>Guadeloupe</lieu> <region>Antilles</region> <tarif>1200.00</tarif> </Station> </Stations>

Tous reprsents par des lments

valuation dun programme XSLT p.11/??

Rprsentation XML : avec attributs


Deux niveaux dlments tables et lignes :
<?xml version=1.0 encoding=ISO-8859-1?> <Stations> <Station nomStation=Venusa capacite=350 lieu=Guadeloupe region=Antilles tarif=1200.00 /> </Stations>

Attributs relationnels attributs XML

valuation dun programme XSLT p.12/??

Petite discussion
La reprsentation avec attributs est plus proche du relationnel car : Absence dordre sur les attributs en XML comme en relationnel. On ne peut pas avoir deux fois un attribut avec le mme nom. On peut, avec une DTD, donner la liste des valeurs acceptes pour un attribut. De plus, moins volumineux

valuation dun programme XSLT p.13/??

Reprsentation des associations


Lquivalent du relationnel en XML
<?xml version=1.0 encoding=ISO-8859-1?> <Stations> <Station nomStation=Venusa capacite=350 lieu=Guadeloupe region=Antilles tarif=1200.00 /> <Activite nomStation=Venusa libelle=Voile prix=150.00 /> <Activite nomStation=Venusa libelle=Plongee /> </Stations>

valuation dun programme XSLT p.14/??

Pourquoi cette reprsentation


En relationnel : tout est reprsent plat on associe les lignes par le systme cl primaire/cl trangre on fait le rapprochement par un calcul (la jointure) assez coteux Intrt : simple, raisonnablement efcace, vite les redondances

valuation dun programme XSLT p.15/??

Et en XML ?
Le modle est plus puissant mme reprsentation possible toujours aussi coteux pas ncessaire de garder la reprsentation plat On peut exploiter une reprsentation imbrique quand cest judicieux.

valuation dun programme XSLT p.16/??

Reprsentation imbrique
On exploite le fait quune activit est relative une seule station
<?xml version=1.0 encoding=ISO-8859-1?> <Stations> <Station nomStation=Venusa capacite=350 lieu=Guadeloupe region=Antilles tarif=1200.00> <Activite libelle=Voile prix=150.00/> <Activite libelle=Plongee/> </Station> </Stations>

valuation dun programme XSLT p.17/??

Associations plusieurs plusieurs


Beaucoup moins vident grer. Exemple avec lassociation Client/Station Un client peut aller dans plusieurs stations Un station peut accueillir plusieurs clients En relationnel, on cre une table intermdiaire (Les sjours) Sjour (idClient, station, dbut, nbPlaces)

valuation dun programme XSLT p.18/??

Exemple
<?xml version=1.0 encoding=ISO-8859-1?> <Station nomStation=Venusa region=Antilles tarif=1200.00> <Sejour idClient=30 debut=2001-08-03 nbPlaces=3/> </Station> <Station nomStation=Farniente region=Ocan Indien tarif=1500.00> <Sejour idClient=30 debut=2002-06-24 nbPlaces=5/> </Station> <Client id=30 nom=Kerouac prenom=Jack ville=New York/>

valuation dun programme XSLT p.19/??

Solution ultime
On choisit une racine (par exemple les stations) et on imbrique tout les sjours sont des lments dans les stations les clients sont des lments dans les sjours On introduit une certaine redondance : les clients apparaissent plusieurs fois

valuation dun programme XSLT p.20/??

Solution ultime : exemple


<?xml version=1.0 encoding=ISO-8859-1?> <Station nomStation=Venusa region=Antilles tarif=1200.00> <Sejour nom=Kerouac prenom=Jack ville=New York/> debut=2001-08-03 nbPlaces=3/> </Station> <Station nomStation=Farniente region=Ocan Indien tarif=1500.00> <Sejour nom=Kerouac prenom=Jack ville=New York debut=2002-06-24 nbPlaces=5/> </Station>

valuation dun programme XSLT p.21/??

Dclaration de la DTD

valuation dun programme XSLT p.22/??

Pourquoi une DTD ?


En gnral on exporte une base de donnes pour fournir une vue XML dautres utilisateurs. Il faut donc fournir une description de la structure XML. On utilise (pour linstant) les Document Type Denition NB : la DTD peut aussi servir valider des documents (en utilisant un parseur validant)

valuation dun programme XSLT p.23/??

DTD de la base Station


On suppose que : les colonnes sont reprsentes par des attributs XML ; le chemin daccs principal est la station ; pour chaque station on trouve, imbriqus, les sjours de la station, et dans chaque sjour les clients qui ont sjourn dans la station ; les activits de la station sont reprsentes par des lments indpendants, avec un lien de navigation.

valuation dun programme XSLT p.24/??

Quest-ce quune DTD ?


Un description du contenu (attributs et ls) de chaque lment. Exemple gnral :
<!ELEMENT Stations (Station*)> <!ELEMENT Station (Sejour*)> <!ATTLIST Station nomStation ID #REQUIRED capacite CDATA #IMPLIED lieu CDATA #REQUIRED tarif CDATA #REQUIRED region (Antilles Europe Amrique Asie) #REQUIRED >

valuation dun programme XSLT p.25/??

Contenu dun lment


La forme gnrale de dnition dun lment est : <!ELEMENT nom structure> La structure dcrit le modle de contenu avec le type, lordre et le nombre doccurrences des ls. A, B : un A suivi dun B A, B* : un A suivi de 0 ou plusieurs B A, B?, C+: un A, suivi de 0 ou 1 B, suivi dau moins un C A, (B|C)* : un A suivi de plusieurs B ou C dans nimporte quel ordre

valuation dun programme XSLT p.26/??

Types et contraintes dans une DTD


Les principaux types sont : CDATA (pour les attributs) et #PCDATA (pour les lments) : chanes de caractres ID : identiant dun nud dans le document. IDREF : rf. un nud du mme document Les contraintes : #IMPLIED pour les attributs facultatifs #REQUIRED pour les attributs obligatoires

valuation dun programme XSLT p.27/??

Suite de la DTD Station


<!ELEMENT Sejour (Client)> <!ATTLIST Sejour debut CDATA #REQUIRED nbPlaces CDATA #REQUIRED > <!ELEMENT Client EMPTY> <!ATTLIST Client id ID #REQUIRED nom CDATA #REQUIRED prenom CDATA #REQUIRED ville CDATA #REQUIRED region CDATA #REQUIRED solde CDATA #REQUIRED >

valuation dun programme XSLT p.28/??

Fin de DTD Station


On dclare une rfrence depuis Activit vers Station.
<!ELEMENT Activite EMPTY> <!ATTLIST Activite nomStation IDREF #REQUIRED libelle CDATA #REQUIRED prix CDATA #IMPLIED >

NB : identiants et rfrences ne tiennent pas compte du type des lments.

valuation dun programme XSLT p.29/??

Architectures

valuation dun programme XSLT p.30/??

Problmatique
une base de donnes, contenant des informations gres par des applications de gestion ou autre des informations textuelles et informelles relatives lactivit de lentreprise ncessit de publier toutes ces informations dans diffrents formats (le Web, une plaquette, un rapport dactivit...) Problme : comment viter de manipuler tous les outils la fois

valuation dun programme XSLT p.31/??

Sparation des points de vue


la base de donnes est relationnele : efcacit, simplicit, services avancs de traitement des donnes (transactions, scurit, etc) une vue XML des donnes, intgrant celles issues de la base, et les informations textuelles diverses des traitements de mise en forme, sappuyant sur la vue XML, chacun destination dun support particulier

valuation dun programme XSLT p.32/??

Lutilitaire XSQL dORACLE


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 deffectuer une requte de mettre en forme XML le rsultat, selon certains paramtres denchaner avec une transformation XSLT

valuation dun programme XSLT p.33/??

Une page XSQL minipale


Cest un document XML.
<?xml version="1.0"?> <xsql:query connection="maConnexion" xmlns:xsql="urn:oracle-xsql"> SELECT Hello World AS TEXT FROM Dual </xsql:query>

Les instructions XSQL sont identies par lespace de nom xsql:

valuation dun programme XSLT p.34/??

Le rsultat
Cest encore document XML, avec la reprsentation en lments du rsultat de la requte.
<?xml version="1.0"?> <ROWSET> <ROW num=1> <TEXT>Hello World</TEXT> </ROW> </ROWSET>

valuation dun programme XSLT p.35/??

Pour effectuer une transformation


Trs simple : on ajoute une instruction indiquant le programme de transformation appliquer.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="HelloWorld.xsl"?> <xsql:query connection="maConnexion" xmlns:xsql="urn:oracle-xsql"> SELECT Hello World AS TEXT FROM Dual </xsql:query>

NB : la requte est effectue avant la transformation.

valuation dun programme XSLT p.36/??

Utilisation plus gnrale de XSQL


<Promotion NO="1"> <Description> Cette semaine nous proposons une promotion exceptionnelle sur bla bla bla </Description> <xsql:query connection="connexionBase" xmlns:xsql="urn:oracle-xsql"> SELECT * FROM Station WHERE nomStation=Passac </xsql:query> </Promotion>

Utilisable dans les contextes Servlets, JSP, etc.

valuation dun programme XSLT p.37/??

Le format de sortie
Par dfaut le format de sortie est le suivant :
<?xml version="1.0" encoding="ISO-8859-1"?> <ROWSET> <ROW num="1"> <NOMSTATION>Passac</NOMSTATION> <CAPACITE>400</CAPACITE> <LIEU>Alpes</LIEU> <REGION>Europe</REGION> <TARIF>1000</TARIF> </ROW> </ROWSET>

Mais tout est paramtrable

valuation dun programme XSLT p.38/??

Ce quon peut faire avec XSQL


On fait les choses simples simplement, et on peut faire des choses compliques. Utiliser des paramtres dans la requte Placer plusieurs requtes dans une page Contrler le format XML de sortie Produire plusieurs formats de sortie avec XSLT Voir les exemples proposs en TD/TP.

valuation dun programme XSLT p.39/??

Exemple de paramtres
Des paramtres (HTTP, Cookies, autre) peuvent tre exploits dans la requte.
<?xml version="1.0"?> <xsql:query connection="maConnexion" xmlns:xsql="urn:oracle-xsql"> SELECT * FROM Station WHERE nomStation={@nom} </xsql:query>

valuation dun programme XSLT p.40/??

Contrle du rsultat 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=STATIONS row-element=STATION> SELECT * FROM Station WHERE nomStation=Passac </xsql:query>

valuation dun programme XSLT p.41/??

Le rsultat
<?xml version="1.0" encoding="ISO-8859-1"?> <STATIONS> <STATION num="1"> <NOMSTATION>Passac</NOMSTATION> <CAPACITE>400</CAPACITE> <LIEU>Alpes</LIEU> <REGION>Europe</REGION> <TARIF>1000</TARIF> </STATION> </STATIONS>

NB : on peut aussi indiquer lidentiant, grer les valeurs nulles, etc.

valuation dun programme XSLT p.42/??

Avec paramtres
Les paramtres peuvent aussi tre utiliss dans les atttributs de <xsql:query>. Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?> <xsql:query connection="connexionVisiteur" xmlns:xsql="urn:oracle-xsql" rowset-element="{@racine}" row-element="{@element}"> SELECT * FROM Station WHERE nomStation={@nomStation} </xsql:query>

valuation dun programme XSLT p.43/??

Et limbrication
Par dfaut la reprsentation est plat , comme en relationnel. On peut spcier la cration de XML imbriqu de la manire suivante :

SELECT nomStation, capacite, CURSOR(SELECT libelle, prix FROM Activite WHERE A.nomStation = S.nomStation) AS activites FROM Station S

valuation dun programme XSLT p.44/??

Le rsultat
<ROWSET> <ROW num=1> <nomStation>Passac</nomStation> <capacite>400</capacite> <activites> <activites_row num=1> <libelle>Ski</libelle> <prix>200.00</prix> </activites_row> <activites_row num=2> <libelle>Piscine</libelle> <prix>20.00</prix> </activites_row > </activites> </ROW> </ROWSET>

valuation dun programme XSLT p.45/??

Transformations XSLT

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="Film.xsl" type="text/xs <FILM> <TITRE>Alien</TITRE> <AUTEUR>Ridley Scott</AUTEUR> <ANNEE>1979</ANNEE> <GENRE>Science-fiction</GENRE> <PAYS>Etats Unis</PAYS> <RESUME>Prs dun vaisseau spatial chou plante, des Terriens en mission dcouv "oeufs". Ils en ramnent un bord, ign dintroduire parmi eux un huitime pass froce et meurtrier. </RESUME> </FILM>

valuation dun programme XSLT p.46/??

Avec xsql:include-xml
On inclut le document XML.
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="Cinema.xsl" type="text/xsl"?> <page xmlns:xsql="urn:oracle-xsql"> <xsql:include-xml href="Epee.xml"/> </page>

valuation dun programme XSLT p.47/??

Pour la version WML


Avantage : on peut lui appliquer une autre transformation XSLT.
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="CinemaWML.xsl" type="text/xsl"?> <page xmlns:xsql="urn:oracle-xsql"> <xsql:include-xml href="Epee.xml"/> </page>

valuation dun programme XSLT p.48/??