Les Bases de Données
- Une Base de données est un ensemble de données stockées dans des fichiers et accessibles à le demande.
- Une BD est gérée par un SGBD, Système de Gestion de Base de Données
- Une BD est structurée selon un modèle de données, et s'utilise par un langage de données (Data sublanguage).
- Un langage de définition de données sert à définir la BD et un langage de manipulation de données sert à exploiter la BD
- Les modèles hiérarchiques et réseaux sont navigationnels avec des langages procéduraux (3G), et le modèle relationnel et ensembliste avec un langage, SQL, déclaratif (4G).
- Un BD relationnelle est constituée d'un ensemble de relations.
- Une relation est un ensemble de n-uplets ou tuples.
- Une relations est définie par un schéma donnant le nom de la relation, la liste des attributs avec leur domaine, la clé primaire et les éventuelles clés étrangères.
- Des contraintes référentielles lient les relations entre elles.
PART ----------------------------------------
| PNUM | PNAME | COLOR | WEIGHT | CITY |
|----------------------------------------|
| P1 | Nut | Red | 12.0 | London |
| P2 | Bolt | Green | 17.0 | Paris |
| | | | | |
SHIPMENT -------------------
| SNUM | PNUM | QTY |
|-------------------|
| S1 | P1 | 100 |
| S1 | P2 | 200 |
| | | |
- SHIPMENT[PNUM] --> PART[PNUM]
Le Web HTML et XML
- Le Web vu comme une gigantesque base de données (conçue de façon non conventionnelle...)
- Internet est le réseau (gigantesque aussi) sur lequel cette base est répartie
- La notion d'HyperTexte structure les informations en
permettant à des documents de faire référence à d 'autres documents ou
partie de documents. Cela se fait par le moyen d'un lien incorporé dans le document source.
- Un logiciel graphique, navigateur, permet de visualiser le document et de suivre les liens par un simple click.
- URI, Uniforme Resource Identifier, est le mécanisme qui permet d'identifier et faire référence à un document ou ressource sur le Web
- HTML, HyperText Markup Language, est le langage qui permet de créer des documents avec des instructions sur comment ils doivent être affichés
- L'utilisateur perçoit cette BD (le Web) à travers un navigateur Web comme distribuée sur un ensemble de sites (sites web) chacun ayant son propre serveur web et est identifié par une URI.
- Chaque site contient un ensemble de pages web, chacune ayant un document racine qui lui correspond et qui définit entre autres comment la page est affichée.
- Ce document racine contient des liens (URIs) vers divers types
d'informations, textes, images, audio, vidéo etc ... dans divers
autres sites.
- Les informations dans un site donné, peuvent être stockées
dans des fichiers systèmes ou, de plus en plus
actuellement, dans une base de données SQL ou autre.
- Le serveur web doit alors interagir avec un SGBD.
- XML, Extensible Markup Language, est aussi unlangage
de balisage, qui se distingue de HTML par le fait qu'il permet de
spécifier la structure du contenu d'un document plutôt que la façon
de le présenter.
- XML est plus un métalangage qui permet de définir d'autres langages: XHTML, SVG, XSLT, SMIL, MathML ...
- Un document XML est traité par un analyseur (parser) qui le valide avant de le transmettre à une application particulière.
Aperçu sur XML
- Un document XML est un document créé en utilisant les facilités XML
<?xml version="1.0" encoding="utf-8"?>
<voeux genre="simple">
Bonne fête.
</voeux>
- <? ...?> déclaration de document XML. (Instruction au parser)
- Le reste est formé d'une suite d'éléments XML.
- Un élément est composé de balise de début, données (character data) , balise de fin.
- Le mot voeux est utilisé indifféremment pour parler de balise "voeux" (<voeux> </voeux>)
ou de l'élément de type "voeux". Dans ce dernier cas, on peut aussi
parler d'instance d'élément. (e.g plusieurs instances d'un même
élément)
- Pour un élément on peut définir des attributs nom="valeur", à l'intérieur de la balise de début.
- L'attribut genre="simple", sert ainsi à compléter l'information portés par un élément de document XML.
- Un document XML est destiné à être compris par un humain aussi bien qu'une machine (facile à traiter par une application).
- Deux instances d'un même élément peuvent être de tailles différentes.
- De nouveaux éléments peuvent être ajoutés à un document XML sans affecter ses utilisateurs actuels.
- Cela implique qu'il suffit que le créateur et le
destinataire d'un document soient d'accords sur l'interprétation du
balisage, pour que XML serve à l'échange de données quelconques.
(comparer par rapport à l'EDI)
Développement de XML
- GML, Generalized Markup Language, langage IBM pour décrire le format de documents
- SGML, Standard Generalized Markup Language, plus général (métalangage)
- HTML est conçu au départ comme une application SGML.
- HTML permet de décrire plusieurs genre de choses, <titre> (sémantique), <h1> (structure), <font> (présentation)... et est tolérant aux erreurs.
- XML, développé par le W3C, World Wide Web Consortium, pour avoir les avantages de SGML et de HTML ((métalangage et orienté structure pour l'un, simplicité
pour l'autre) sans en avoir les inconvénients (complexité pour
l'un, tolérant aux fautes et orienté présentation pour l'autre).
- XML est en fait un sous ensemble de SGML.
- L'usage de XML s'est étendu à plusieurs domaines comme l'échange
de données entre applications, les protocoles de ces échanges
etc...
- Besoin de stocker des documents XML dans des BDs,
- ou de mettre des données sous format document XML
Documents XML dans Base de Données
Exemple: Soit la relation
PART (PNUM, PNAME, COLOR, WEIGHT, CITY, IMAGE)
Document SVG, image d'une pièce, dans une relation PART dans une BD "Objet/relationnelle"

De façon similaire, on peut ajouter un attribut DESCRIPTION dans cette relation PART, par commentaire sous forme de document XML.
Base de Données dans Documents XML
Exemple: XML peut être utilisé pour stocker des relations
<?xml version="1.0"?>
<PartsRelation>
<PartTuple>
<PNUM>P1</PNUM>
<PNAME>Nut</PNAME>
<COLOR>Red</COLOR>
<WEIGHT>12.0</WEIGHT>
<CITY>London</CITY>
</PartTuple>
<PartTuple>
<PNUM>P2</PNUM>
<PNAME>Bolt</PNAME>
<COLOR>Green</COLOR>
<WEIGHT>17.0</WEIGHT>
<CITY>Paris</CITY>
</PartTuple>
...
</PartsRelation>
source
A noter:
- les espaces et saut de lignes ne sont pas significatifs
- Les valeurs des "attributs" relationnels sont ici sous forme texte (CDATA)
- Les éléments vides sont permis <COLOR></COLOR> ou <COLOR/> (contiennent un texte de taille zéro)
- L'ordre
des "lignes/colonnes" est significatif dans une représentation XML. XML
définit un ordre dans ses éléments, de haut en bas et de gauche à
droite.
- Certaines informations peuvent être représentées par des attributs XML.
<?xml version="1.0"?>
<PartsRelation>
<PartTuple CITY="London">
<PNUM>P1</PNUM>
<PNAME>Nut</PNAME>
<COLOR>Red</COLOR>
<WEIGHT>12.0</WEIGHT>
</PartTuple>
<PartTuple CITY="Paris">
<PNUM>P2</PNUM>
<PNAME>Bolt</PNAME>
<COLOR>Green</COLOR>
<WEIGHT>17.0</WEIGHT>
</PartTuple>
...
</PartsRelation>
source
Structure d'unDocument XML
- XML est un métalangage qui permet de définir des langages qui permettent de définir des documents
- Un document XML se représente par un arbre qui consiste en un noeud racine et une séquence de noeuds enfants. Chaque noeud enfant à ses propres noeuds enfants et n'a qu'un seul noeud parent.

- Le noeud document, racine de l'arbre, désigne tout le document.
- Chaque noeud intermédiaire représente un élément.
- Les noeuds feuilles représentent les données (character data). Ils peuvent représenter aussi les attributs, les commentaires, les espaces ...
- Cette hiérarchie, s'appelle aussi Infoset (information set) pour le document.
- L'API, pour cet arbre est fournie par la spécification Document Object Model (DOM), qui permet à un programme d'application de naviguer dans cet arbre, chercher, ajouter, modifier des noeuds.
- XML et les standards associés
Données Structurées vs Semi Structurées
- Des documents XML peuvent obéir à une même structure générale
hiérarchique et varier dans les détails (Infosets ayant une même
structure générique.)
- Un livre est composé d'un titre, d'une préface optionnelle, d'une
séquence de chapitres (...), d'une table des matières et d'un index
optionnel etc... Mais tous n'ont pas un index, une préface etc...
- Si une relation est dite contenant des données structurées, un document XML est dit contenant des données semi structurées. (Mot surtout utilisé dans l'industrie.)
- Modèle de données XML?
- Un modèle est accompagné d'opérateurs. XPath? XQuery?
- Relation ou document XML sont en fait deux moyens différent de structurer des données.
- On peut passer de l'une à l'autre: Relation ➝ XML et inversement XML ➝ Relation (à la limite avec un seul tuple)
Langage de Définition de XML
- Comme pour une BD, un document XML est souvent accompagné d'information de description.
- Informations qui peut être spécifiée
- soit par DTD, Document Type Definition, écrite dans un langage de définition de DTD
- Soit par XML schema , décrit dans un langage appelé XML Schema aussi.
Document Type Definition
- DTD fait partie du standard XML
- Exemple de document XML
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ... >
<PartsRelation>
<NOTE>Revised version</NOTE>
<PartTuple CITY="London">
<PNUM>P1</PNUM>
<PNAME>Nut</PNAME>
<WEIGHT>12.0</WEIGHT>
<NOTE>Part color is Red by default</NOTE>
</PartTuple>
<PartTuple COLOR="Green" CITY="Paris">
<PNUM>P2</PNUM>
<PNAME>Bolt</PNAME>
<WEIGHT>17.0</WEIGHT>
</PartTuple>
<PartTuple CITY="Oslo" COLOR="Blue">
<PNUM>P3</PNUM>
<PNAME>Screw</PNAME>
<WEIGHT>17.0</WEIGHT>
</PartTuple>
</PartsRelation>
source
- Exemple de DTD correspondant
1 <!ELEMENT PartsRelation (NOTE?, PartTuple*)>
2 <!ELEMENT NOTE (#PCDATA)>
3 <!ELEMENT PartTuple (PNUM, PNAME, WEIGHT, NOTE?)>
4 <!ATTLIST PartTuple
5 CITY (London | Oslo | Paris) #REQUIRED
6 COLOR (Red | Green | Blue) "Red">
7 <!ELEMENT PNUM (#PCDATA)>
8 <!ELEMENT PNAME (#PCDATA)>
9 <!ELEMENT WEIGHT (#PCDATA)>
- Ligne 1: root element (un seul). Contient un élément NOTE optionnel (?) et zéro ou plusieurs éléments PartTuple.
- Ligne 2: élément NOTE contient des "données analysées" (parsed Character Data #PCDATA). Idem lignes 7, 8 et 9
- Ligne 3: chaque tuple PartTuple contient exactement un PNUM suivie de un PNAME, un WEIGHT et peut-être un NOTE.
- Lignes 4-6: chaque balise ouvrante PartTuple contient un attribut CITY obligatoire de valeur London, Paris ou Oslo et un attribut optionnel COLOR de valeur par défaut "Red".
- Une DTD peut être donnée dans le document <!DOCTYPE racine type chemin [ ..... ]>
- <!DOCTYPE PartRelation [ ... ]>
- ou dans un fichier externe.
- <!DOCTYPE PartRelation SYSTEM "maDTD.dtd">
source
Document Bien Formé et Document Valide
- La spécification XML définit deux niveaux de conformité pour un document XML. Document bien formé (well-formed) et document valide (valid)
- Un document X est dit bien formé vis à vis de XML ssi:
- il satisfait la grammaire et les règles (12) définies par la spécification XML
- chaque document Y référencée directement ou indirectement par X est bien formé à son tour
- Les règles sont de type: un seul élément racine, si balise ouvrante alors balise fermante de même nom, imbrication propre, etc...
- Un document X est dit bien formé vis à vis de XML ssi:
- il est bien formé
- est conforme à une DTD donnée.
Attributs de type ID et IDREF
- Les DTDs supportent quelques cas simples de contraintes
d'intégrité, e.g. les valeurs possibles pour des attributs, mais rien
sur les données réelles contenues dans les éléments XML.
- Les DTD supportent aussi, mais de façon limitée, l'unicité de "clés" et la contrainte référentielle.
- Attributs DTD de type ID et IDREF.
- L'information (champ) devant contenir la clé, devrait être définie comme attribut <!ATTRIBUTE ...> au lieu de élément <!ELEMENT ...>
- Exemple
1 <!ATTLIST SupplierTuple SNUM ID #REQUIRED>
2 <!ATTLIST PartTuple PNUM ID #REQUIRED>
3 <!ATTLIST ShipmentTuple SNUM IDREF #REQUIRED>
4 <!ATTLIST ShipmentTuple PNUM IDREF #REQUIRED>
- Lignes 1 2: Chaque élément PartTuple aura une valeur unique pour PNUM. De même pour SupplierTuple.
- Lignes 3 4: Chaque élément ShipmentTuple aura une valeur pour SNUM qui apparaît comme valeur d'un attribut de type ID dans le document. De même pour PNUM.
sources PartRelation, ShipmentRelation.
Clé et Intégrité Référentielle
ID et IDREF ne représentent pas exactement les notions de clé et d'intégrité référentielle.
- Les clés sont des caractères
- Pas de clé composée, e.g. (SNUM, PNUM)
- La valeur PNUM (resp. SNUM) est unique par rapport à tout autre attribut ID dans le document entier. Pas seulement par rapport aux éléments PartTuple (resp. SupplierTuple).
i.e. SNUM ne peut être égale à PNUM.
- De même, PNUM dans ShipmentTuple, n'est pas garanti être égale à PNUM de PartTuple. Il est juste égale à un autre attribut de type ID.
- Contrainte référentielle intra document et non inter document.
(vérifiée que dans le contexte d'un même document, et pas entre
documents)
Limitations de DTDs
Autres limitations des DTDs
- Ne sont pas eux-mêmes des documents XML (n'utilisent pas la syntaxe XML) et ne peuvent être traités par un parser. (cf. XML Schema)
- Ne supportent pas la notion de type. Toutes les données sont des caractères. (Re:cf. XML Schema)
- Imposent un ordre dans les données (les attributs de relation),
même si ce n'est pas nécessaire. A moins d'énumérer dans la DTD toutes les combinaisons possibles. (120 (5!) pour la relation PART)
- ...
- Mais les DTDs restent des standards bien établis et très utilisés dans la pratique.
XML Schema
- XML Schema, est un langage dérivé de XML.
- C'est une alternative aux DTDs.
- Un document écrit en XML Schema décrit un autre document XML.
- Il peut lui donner plus de propriétés qu'une DTD ne peut.
- En particulier, peut imposer certaines contraintes sur les éléments et les attributs.
- Notion de "type de données" pour éléments ou attributs
- Types primitifs ou construits (boolean, decimal, string, integer, positiveInteger, ...)
- Types simples ou complexes définis par l'utilisateur
Exemple de Schema
<?xml version="1.0"?>
<!-- XML Schema schema for PartsRelation documents -->
<!DOCTYPE xsd:Schema SYSTEM "http://www.w3.org/2001/XMLSchema.dtd">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="NOTE" type="xsd:string" />
<xsd:element name="PartsRelation"> <!-- Racine PartsRlations-->
<xsd:complexType> <!-- de type complexe -->
<xsd:sequence> <!-- séquence de -->
<xsd:element ref="NOTE" minOccurs="0" /> <!-- elmt NOTE optionel -->
<xsd:element name="PartTuple" type="PartTupleType"
minOccurs="0" maxOccurs="unbounded" />
<!-- 0 ou +r elmt PartTuple de type PartTupleType -->
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="PartTupleType"> <!-- Definiion du type PartTupleType -->
<xsd:sequence>
<xsd:element name="PNUM" type="PartNum" /> <!-- type utilisateur -->
<xsd:element name="PNAME" type="xsd:string" />
<xsd:element name="WEIGHT"> <!-- type de WEIGHT donné inline -->
<xsd:simpleType>
<xsd:restriction base="xsd:decimal"> <!-- ss-ens de decimal -->
<xsd:totalDigits value="5" />
<xsd:fractionDigits value="1" fixed="true" />
<xsd:minInclusive value="0.1" /> <!-- 0.1, 0.2, ... 9999.9 -->
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element ref="NOTE" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="CITY" type="City" /> <!-- autres types utilisateur -->
<xsd:attribute name="COLOR" type="Color" default="Red" />
</xsd:complexType>
<!-- définitions types utilisateur -->
<xsd:simpleType name="PartNum">
<xsd:restriction base="xsd:string">
<xsd:pattern value="P[0-9]{1,3}" /> <!-- valeurs définies par exp. régulière -->
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Color">
<xsd:restriction base="xsd:string"> <!-- valeurs type Color énumérées -->
<xsd:enumeration value="Red" />
<xsd:enumeration value="Green" />
<xsd:enumeration value="Blue" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="City">
<xsd:restriction base="xsd:string"> <!-- valeurs type City énumérées -->
<xsd:enumeration value="London" />
<xsd:enumeration value="Oslo" />
<xsd:enumeration value="Paris" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Source
Remarques:
- Types PICTURE-like
- Les types XML Schema ne font que définir des représentations de string.
XML Schema vs DTD
- XML Schema = documents XML
- XML Schema offre mécanismes évolués de définitions de types
- XML Schema permet de spécifier l'apparition dans un ordre quelconque des éléments composants un autre
- XML Schema supporte les notions de clé et de référence (key et keyref) plus proches de celles du modèle relationnel.
- Clé pouvant être composée, éventuellement de valeurs provenant d'éléments plus imbriqués. cf. "unique within parent" du modèle hiérarchique
- XML Schema, plus complexes (?) que DTDs
- XML Schema ont leur propre DTD.
- XML Schema ont leur propre DTD.
Un document XML Schemas donné ou une DTDs donnée, sont en fait des définitions de langages (dérivés de XML) adaptés à un besoin particulier (avec des balises propres définies par l'utilisateur).
Langage de manipulation de XML
- XQuery, Recommandation W3C, est le langage de manipulation des documents XML.
- XQuery est basé sur XPath , recommandation W3C aussi.
- XQuery est un langage de consultation.
- La mise à jour peut se faire par DOM ou par un langage propriétaire
- :-( DOM est une API, donc pour programmeur (vs utilisateur final)
- :-( Langages propriétaires non standards
- :-) XUpdate est un langage en cours de développement par le consortium XML:DB
- XQuery opère en réalité sur la forme abstraite (~arbre) d'un document XML, i.e. un Infoset validé (forme dite aussi "instance of the XQuery Data Model").
- Une expression XQuery a pour résultat un pseudo-Infoset. Sa transformation vers un document XML, est laissée aux applications utilisateur.
XPath
- XQuery s'appuie sur des expressions de chemin XPath.
- XPath est une expression qui part d'un noeud source, navigue le long d'un (ou plusieurs) chemin dans cet arbre pour trouver le ou les noeuds cibles recherchés.
- Syntaxe: séquence d'étapes (steps) séparées par /. La première pouvant commencer par / ou //
[/ | //] step / step ... /step
- / au début signfie partir du noeud racine (celui de tout le document)
- // siginifie partir de tous les noeuds à tour de rôle, i.e naviguer sur tout l'arbre (de haut en bas, de droite à gauche.)
- Sinon, partir du noeud courant, i.e. le plus récemment accédé.
- Exemples: (voir le document XML PartsRelation.)
- /PartsRelation/PartTuple
retourne la séquence de noeuds correspondant aux 3 éléments tuples.
- /PartTuple
retourne la séquence vide, le noeud racine n'a pas de fils PartTuple.
- //PartTuple
identique au cas 1.
XPath (suite)
- Chaque étape d'une expression XPath est évaluée dans le contexte du résultat de l'étape précédente (chaque noeud résultat devient à son tour le noeud contexte de l'étape courante.)
- Etape = <axe, noeud, [prédicat]>
- axe: direction de navigation; up (parent ou ancêtre), down (fils ou descendant), left (précédent ou frère précédent) et right (suivant ou frère suivant).
Par défaut, fils du noeud courant.
- test de noeud: le genre de noeud(s) à considérer; e.g. nom du noeud
- prédicat: un ou plusieurs prédicats optionnels, pour sélectionner des noeuds (cf. clause where)
- Exemple: (voir le document XML PartsRelation.)
/PartsRelation/PartTuple[WEIGHT="17.0"]
- / indique que le noeud courant pour l'étape qui suit est la racine de document
- PartsRelation est en fait une abréviation de child::PartsRelation . Résultat de l'étape, le seul noeud PartsRelation.
- PartTuple, ou child::PartTuple, donne la séquence des trois noeuds PartTuple, fils du noeud PartsRelation.
- Le prédicat [child::WEIGHT="17.0"] sélectionne uniquement les noeuds pour lesquels la valeurs du fils WEIGHT, est 17.0.
- Résultat final: séquence des deux noeuds PartTuple correspondant dans l'ordre aux pièces P2 et à P3.
La notion de "courant" qui implique une naviguation et
une exécution contextuelle, rappelle les langauges des anciens systèmes
(hiérarchiques). Que le modèle relationnel est venu corriger...
XQuery
- XQuery se distingue de XPath par la capacité de construire de nouveau noeuds.
- XQuery permet, en quelque sorte, le Join en plus du Restrict et Project
- Exemle: Soit la BD PartsRelation , SuppliersRelation et ShipmentsRelation.
"Pour chaque expédition, chercher le nom du fournisseur, de la pièce fournie et la quantité"
<Result>
{ for $spx in document("ShipmentsRelation.xml")
//ShipmentTuple,
$sx in document("SuppliersRelation.xml")
//SupplierTuple[SNUM = $spx/SNUM],
$px in document("PartsRelation.xml")
//PartTuple[PNUM = $spx/PNUM]
order by SNAME, PNAME
return
<ResultTuple>
{ $sx/SNAME, $px/PNAME, $spx/QTY }
</ResultTuple> }
</Result>
Source
Boucles imbriquées et création de tuples composés de noeuds XPath.
XQuery (suite)
A noter:
- Toute l'expression s'évalue à (construit) un élément Result contenant une séquence d'éléments ResultTuple.
- Expression calcul relationnel analogue (sans ordre):
{SX.SNAME, PX.PNAME, SPX.QTY} WHERE SX.SNUM = SPX.SNUM
AND PX.PNUM = SPX.PNUM
- Expression algébrique analogue (sans ordre):
PROJECT ( JOIN (SX, JOIN (PX, SPX), PX.PNUM = SPX.PNUM), SX.SNUM = SPX.SNUM),
SNAME, PNAME, QTY)
- La formulation XQuery est plus procédurale (boucles impriquées).
- Les variables XQuery $sx, $px, $spx sont des variables de contrôle (vs. des alias de relations en 2. et 3.)
XQuery (suite)
Examen à la loupe:
- L'expression document("ShipmentRelation"), donne l'arbre abstrait correspondant au document XML en paramètre, avec le noeud document racine comme contexte. //ShipmentTuples spécifie ensuite les éléments ShipmentTuples de ce document et le for "for $spx in", permet de les parcourir un à un (dans l'ordre d'apparition dans le document).
- La partie suivante du for "$sx in document("SuppliersRelation.xml")//SupplierTuple[SNUM = $spx/SNUM]", fait parcourir le variable $sx sur les éléments SuppliersTuples mais uniquement ceux dont la valeur SNUM égale à la valeur courante de $sx.
- Le for suivant est analogue
- La clause return, est exécutée pour chaque combinaison de valeurs des variables $spx, $sx, $px dans l'ordre des clause for.
- La clause order by, ordonne le résultat produits par for. Apparaît avant return (pourquoi?)
Forme FLOWR
for let where order return
"Numéros de pièces et la qté totale pour les pièces fournies par plus d'un fournisseur"
for $pnum in distinct-values(document("ShipmentsRelation.xml")//PNUM)
let $spx := document("ShipmentsRelation.xml")
//ShipmentTuple[PNUM = $pnum]
where count ( $spx ) > 1
order by PNUM
return
<Result>
{ $pnum,
<totqty> { sum ( $spx/qty ) } </totqty> }
</Result>
Source
A noter:
- $pnum parcours seulement les valeurs PNUM distinctes (distinct-values)
- Let affecte à la variable $spx la séquence spécifiée (exercice laquelle?) dans sa totalité (là où le for itère). Cette séquence devient la séquence courante.
- La clause where filtre pour la suite du traitement, et ne garde que la séquence Shipments de cardinale supérieur à 1.
- XQuery permet les fonctions agrégats habituelles, count, sum, avg, min, max.
- L'expression "sum($spx/qty)", somme les valeurs des noeuds qty de la séquence $spx courante.
XQuery, Autre Exemple
Soit le document XML SupplierOverShipments conçu différemment d'une BD classique (1FN)

Le document PartsRelations restant le même. Soient les requêtes
"Les fournisseurs qui fournissent P2" et "Les pièces fournies par S2"
- Formulation requête "Les fournisseurs qui fournissent P2"
for $sx in document("SuppliersOverShipments.xml")//Supplier
where $sx//PNUM = "P2"
return
<Result>
{ $sx//SNUM, $sx//SNAME, $sx//STATUS, $sx//CITY }
</Result>
- Formulation requête "Les pièces fournies par S2"
let $sx := document("SuppliersOverShipments.xml")//Supplier[SNUM = "S2"]
return
<Result>
{ document("PartsRelation.xml")//PartTuple[PNUM = $sx//PNUM] }
</Result>
- La formulation n'est pas symétrique comme elle le serait en relationnel.
SX WHERE EXISTS SPX ( SPX.SNUM = SX.SNUM AND SPX.PNUM = 'P2' )
PX WHERE EXISTS SPX ( SPX.PNUM = PX.PNUM AND SPX.SNUM = 'S2' )
- XQuery supporte aussi les opérateurs union, intersection et difference.
- Il y a aussi les quantificateurs existence et universel.
- Mais il n'y a pas le concept de complétude comme dans le modèle relationnel...
XML et les Bases de Données
- Besoin de stocker des documents XML ("données XML") dans une BD, les interroger et les mettre à jours.
- Besoins de convertir en forme XML d'autres données,
e.g. celles retrouvées dans des BD habituelles, en vue de les
transmettre etc...
- Trois approches
- XML Column, tout un document XML est mis comme valeur d'un attribut dans un tuple.
- Shred & publish,
"découper" le document et mettre les différents morceaux comme
valeurs régulières dans différents attributs dans différentes tables.
Le recomposer à la demande.
- XML DataBase, tout les documents dans une "BD" à part, dédiée et qui ne contient que du XML.
Document Comme Valeur d'Attribut
Tout un document XML est mis comme valeur d'un attribut dans un tuple
- Définir un nouveau type de données, e.g. XMLDOC, dont les valeurs sont des documents XML. Exemple, fichier SVG, image d'une pièce. Une valeur XMLDOC devrait être au moins bien définie. Possibilité de compresser fichier si volumineux.
- SQL INSERT INTO et DELETE s'appliquent. UPDATE aussi pour remplacer tout le document.
- Le type XMLDOC devrait avoir des opérations associées, e.g. pour accéder aux différents éléments.
- Cas d'applications:
- Documents déjà existants, et/ou manipulés globalement.
- Mises à jours assez rares.
- Recherche uniquement sur une petite partie bien définie d'éléments et d'attributs.
- Applications de type document-centric. documents à usage humain.
- SGBD avec un minimum de support pour Objets. PostgresSQL.
- SQL/XML, en cours de standardisation ?
Découper pour Stocker et Recomposer (Shred & Publish)
Différents morceaux du document comme valeurs dans différents attributs
- Pas de nouveaux types de données
- Documents décomposés (shred) en morceaux, éléments et attributs XML, stockés dans des champs normaux dans des tables.
- N'est pas incompatible avec précédente approche.
- Comme conséquence, le SGBD n'a aucune connaissance des "documents XML originaux".
- Recombiner des valeurs régulières d'une BD (résultat d'un SELECT)
pour recomposer ces documents est du ressort d'une application externe.
Peut-être un serveur Web.
- Publish, est le processus de création d'un document XML à partir des valeurs de tables.
publish
-------->
Tables XML
<--------
shred
- Les règles de conversions, données régulières <===> données XML, peuvent elles mêmes être stockées sous forme XML (cf. XSLT)
- Approche dite aussi, XML Collection
Shred & Publish(suite)
XML views
- Publish est d'une certaine façon supporter des vues XML.
- Schéma conceptuel de type relationnel et schéma externe, vues, de type XML.
- Vues consultables.
- Pour la màj, fonction inverse (shred)
Impedence Mismatch
- Problème (?) dit d'impédence mismatch entre le "modèle XML" (de nature hiérarchique) et le modèle relationnel.
- Les noeuds fils d'un noeud donné dans un modèle XML sont ordonnés, alors que les tuples d'une relation ne le sont pas.
- Si cet ordre est porteur d'informations en XML, celle-ci est
perdue (et non récupérable) en relationnel. e.g. les indentations et
les espaces sont perdues au re-publishing.
Cas d'application
- Données déjà existantes, sous forme de tables et doivent être reliées aux données correspondantes en XML.
- Opérations fréquentes au niveau éléments et attributs
- Màj fréquentes des données XML
- Des programmes déjà écrits utilisent des interfaces SGBD relationnel.
- Applications de type data-centric. documents avec données opérationnelles ou décisionnelles.
Base De Données XML
Tout les documents dans une nouvelle "BD" XML
- BD XML-natif
- Infrastructure relationnelle à refaire
- Intégrité, sécurité, reprise, concurrence d'accès, optimisations...
- Efforts en recherche/développement/commercialisation d'une nouvelle technologie de bases de données
Annexe: Facilités SQL
SQL/XML en cours de standardisation. Supporte les deux approches "SQL Column" et "XML Collection"
- Règles de correspondance des caractères, identificateurs,
types de données et valeurs SQL vers les caractères, noms,
types de données et valeurs XML.
- Règles de correspondance d'une table (ou plus) SQL vers
deux documents XML, un pour les données en tant que telles, et un
document XML Schema pour le schéma.
Exemple-1:
CREATE TABLE P
( PNUM CHAR(6),
PNAME CHAR(20),
COLOR CHAR(6),
WEIGHT NUMERIC(5,1),
CITY CHAR(20)
) ;
Texte XML correspondant
XML Schema
Exemple-2:
INSERT INTO RESULT ( XMLCOL)
SELECT XMLGEN ( '<Result>
<SNAME>{SX.SNAME}</SNAME>
<PNAME>{PX.PNAME}</PNAME>
<QTY>{SPX.QTY}</QTY>
</Result>',
SX.SNAME, PX.PNAME, SPX.QTY ) AS Result
FROM S AS SX, P AS PX, SP AS SPX
WHERE SX.SNUM = SPX.SNUM
AND PX.PNUM = SPX.PNUM ;
UPDATE P
SET DRAWING = XMLFILETOCLOB ( 'BoltDrawing.svg' )
WHERE PNUM = 'P2' ;
SELECT XMLCONTENT ( DRAWING, 'RetrievedBoltDrawing.svg' )
FROM P
WHERE PNUM = 'P2' ;
UPDATE P
SET WEIGHT = XMLEXTRACTREAL
( 'PartsRelation.xml', '//PartTuple[PNUM = "P3"]/WEIGHT' )
WHERE PNUM = 'P3' ;
UPDATE SP
SET PARTDETAIL = XMLUPDATE
( PARTDETAIL, '//PartTuple/COLOR', 'Green' )
WHERE SNUM = 'S4' ;
Bibliographie
- Bob Boiko: “Understanding XML,” http://www.metatorial.com/articles/xml.asp (2000).
- Angela Bonifati and Stefano Ceri: “Comparative Analysis of Five XML Query Languages,” ACM SIGMOD Record 29, No. 1 (March 2000).
- Jon Bosak and Tim Bray: “XML and the Second-Generation Web,” http://www.sciam.com (May 1999).
- Ron Bourret: “XML and Databases,” http://rpbourret.com/xml/XMLAndDatabases.htm (November 2002).
- Peter Buneman, Wenfei Fan, Jérôme Siméon, and Scott Weinstein:
“Constraints for Semistructured Data and XML,” ACM SIGMOD Record 30,
No. 1 (March 2001).
- International Organization for Standardization (ISO): XML-Related
Specifications (SQL/XML) Working Draft, Document ISO/IEC
JTC1/SC32/WG3:DRS-020 (August 2002).
- W3C: Document Object Model (DOM) Level 2 Core Specification, http://www.w3.org/TR/DOM-Level-2-Core (November 13, 2000).
- W3C: Extensible Markup Language (XML) 1.0 (2d ed.), http://www.w3.org/TR/REC-xml (October 6, 2000). See also Tim Bray: “The Annotated XML 1.0 Specification,” http://www.xml.com (lien “Annotated XML”).
- W3C: XML Path Language (XPath) Version 2.0 Working Draft, http://www.w3.org/TR/2002/WD-xpath20/ (November 15, 2002).
- W3C: XML Schema Part 0: Primer; Part 1: Structures; Part 2: Datatypes, http://www.w3.org/TR/xmlschema-0/, -1/, -2/ (May 2, 2001).
- W3C: XQuery 1.0: An XML Query Language Working Draft, http://www.w3.org/TR/2002/WD-xquery-20021115 (November 15, 2002).
- XML:DB: XML Update Language Working Draft, http://www.xmldb.org/xupdate/xupdatewd.html (September 14, 2000).