Sans Titre PDF
Sans Titre PDF
Sans Titre PDF
M1 IAD
BDWEB
Support de TD/TME
n° 1
Site : http://www-master.ufr-info-p6.jussieu.fr/2006/Ext/naacke/bdweb2008
PLAN
Chemin d’accès 2
ODMG 5
Syntaxe OQL 10
SQL3 ................... 11
Syntaxe SQL3 15
BD réparties 19
XML DTD 21
XSchema 26
Xpath 36
XQuery 38
1
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Soit une base de données portant sur les cours d’amphi dont le schéma est le suivant :
On note que, comme les étudiants sont nombreux, ils sont répartis, pour chaque module, en plusieurs
sections, chaque section correspondant à un amphi et donc à un prof. La répartition en sections peut
varier d’un module à un autre.
Question 2 : Exprimer les requêtes suivantes en algèbre relationnelle, en calcul relationnel à variable
n-uplet, et en SQL :
Exercice 2 : arbre B+
Question 1 : On considère un arbre B+ dont les nœuds et les feuilles peuvent contenir au plus 4 clés
et au minimum (sauf la racine) 2 clés. A l'état initial, la racine de l'arbre contient la clé 50. Un seul
niveau intermédiaire contient (tous nœuds confondus) les clés 8, 18, 32, 40 73, 85. Les feuilles
contiennent (toutes feuilles confondues) les valeurs 1, 2, 5, 6, 8, 10, 18, 27, 32, 39, 41, 45, 52, 58, 73,
80, 91, 99.
2
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Question 2 (facultatif) : On considère un arbre B+ dont les nœuds et les feuilles peuvent contenir au
plus 4 clés et au minimum (sauf la racine) 2 clés. A l'état initial, la racine de l'arbre contient les clés
13, 17, 24, 30. Les feuilles contiennent (toutes feuilles confondues) les valeurs2, 3, 5, 7, 14, 16, 19,
20, 22, 24, 27, 29, 33, 34, 38, 39.
1. Dessiner l'état initial de l'arbre.
2. Donner 4 valeurs de clé telles que leur insertion successive puis leur suppression dans l'ordre
inverse résulte dans un état identique à l'état initial.
3. Donner une valeur de clé dont l'insertion suivie de la suppression résulte dans un état
différent de l'état initial.
4. Combien au minimum faut-il insérer de clé pour que l'arbre gagne 2 niveaux en hauteur ?
Exercice 3 : hachage
Question 1 : Rappeler les principes du hachage statique. Quels en sont les inconvénients lorsqu'un
fichier diminue ou augmente beaucoup. Quelle est la seule solution pour y remédier ? Peut-elle être
utilisée à tout moment ?
Question 2 : Une structure de hachage extensible contient des entrées dont les valeurs de hachage
x*=h(x) sont les suivantes : 1, 4, 5, 7, 10, 12, 15, 16, 19, 21, 32.
3
Université Pierre et Marie Curie Master Informatique - Module BDWEB
7. insérer 29*
8. Donner un exemple de plus petit ensemble de clés à supprimer pour obtenir une division par
2 du répertoire
4
Université Pierre et Marie Curie Master informatique (M1) Module BDWEB
Description de l’application
I. Données
Les données concernent le territoire français, où on s’intéresse plus particulièrement aux régions et
aux départements.
Une région est caractérisée par un nom (identifiant), une description, un plan, une préfecture, et un
certain ensemble de départements.
Un département est caractérisé par un numéro (identifiant), un nom, une préfecture, une surface, et
un ensemble d’agglomérations.
Une agglomération est identifiée par un numéro de code postal, elle possède un nom, un nombre
d’habitants, une description (historique, géographique,…) et peut posséder certaines caractéristiques
culturelles (monuments, spécialités culinaires, …).
On distingue deux types d’agglomérations, les villes et les villages :
Une ville est une agglomération possédant au moins 5000 habitants, et dispose d’une
capacité d’accueil (restaurants, hôtel, hôtel-restaurant).
- Un hôtel est caractérisé par un nom, une adresse, un nombre de lits et un nombre
d’étoiles (de 0 à 5 étoiles).
- Un restaurant est caractérisé par un nom, une adresse, un nombre de couverts, et un
nombre de toques (de 0 à 5 toques).
Un village est une agglomération de moins de 5000 habitants. On ne s’intéresse pas dans ce
cas à la capacité d’accueil.
Les agglomérations sont reliées entre elles par un ou plusieurs réseaux de transport. On peut ainsi se
déplacer d’une agglomération à une autre par le train (ter ou tgv), la route (RN à 2 voies ou
autoroute à 4 voies) ou l’avion (hélice ou jet).
II. Traitements
L’application qui sera développée devra permettre l’exécution d’un certain nombre de requêtes
administratives ou topologiques.
Des requêtes administratives concernant les régions, les départements et les agglomérations :
« Quels sont les départements d’une région données ? »
« Quels sont les villes, les villages d’un département ou d’une région données ? »
« Superficie, nombre d’habitants d’un département ou d’une région ? »
Des requêtes topologiques :
« Quels sont les départements limitrophes d’un département donné ? »
« Quels sont les trajets possibles entre deux agglomérations ? »
5
Université Pierre et Marie Curie Master informatique (M1) Module BDWEB
Question 2. Représenter graphiquement les types abstraits et les différents liens qui les relient
(héritage, association) en utilisant la représentation graphique du langage ODL.
Question 5. Définir les requêtes suivantes en OQL. Pour chaque requête, on précisera le type
retourné et la description des opérations invoquées.
6
7
8
9
SYNTAXE OQL
1. Opérateur DEFINE
Cet opérateur permet de nommer le résultat d'une question et d'utiliser ce nom dans une autre question
define <identificateur>
as <question>
2. Forme générale d'une requête
select [distinct] <résultat recherché>
from <noms des collections et des variables>
[where <conditions>]
Le résultat recherché (projection), peut être structuré avec le constructeur struct(nom : valeur, …).
Il y a deux syntaxes équivalentes pour la clause from :
from x1 in E1, x2 in E2, …
ou from E1 as x1, E2 as x2 … (le mot clé as est facultatif)
avec la variable xi appartenant à l’ensemble Ei.
6. Les quantificateurs
Comme en SQL, on dispose des quantificateurs EXISTS et FOR ALL
for all x in Les_Professeurs : x.age > 60
Cette expression rend vrai ssi le prédicat x.age>60 est vrai pour tout x de l’ensemble Les_Professeurs.
exists x in Les_Professeurs : x.age > 60
Cette expression rend vrai ssi il existe au moins un x tel que le prédicat x.age>60 est vrai.
10
Université Pierre et Marie Curie Master Informatique (M1) Module BDWEB
Ce TD/TME contient 2 exercices. Le premier exercice est une introduction aux concepts des SGBD objet relationnels ; il
présente progressivement chaque étape pour la définition, l’instanciation et l’utilisation d’une base de données objet
relationnelle. Le deuxième exercice est une étude de cas.
Exercice 1
Cet exercice illustre les concepts des SGBD objet relationnels.
1.5 Requêtes
Ecrire en SQL3 les requêtes suivantes :
11
Université Pierre et Marie Curie Master Informatique (M1) Module BDWEB
2.1 Introduction
L'objectif est d'étudier et de modéliser une application en vue d'en établir une base de données objet-relationnelle. On utilisera
le système objet-relationnel Oracle8i comme support d'implantation.
Dans une entreprise, on souhaite développer une application CAO pour connaître l'ensemble des éléments entrant dans la
composition d'une pièce. On considère deux types de pièces :
• les pièces de base,
• les pièces composites obtenues par assemblage d'autres pièces (composites ou non).
Voir l’exemple de données (table, billard) ci-dessous.
Les données
On veut constituer une base de données comportant tous ces types de pièces :
• pour les pièces de base, on stockera son nom et sa matière. On suppose en effet qu'il existe différents types de pièces de
base (cubique, sphérique, cylindrique, parallélépipède...) réalisées dans différente matière (bois, acier, plastique...) et dont
on connaît les dimensions. Pour chaque matière on connaît son nom, son prix au kilo et sa masse volumique.
• pour les pièces composites, on stockera son nom, le coût de son assemblage, l'ensemble des différentes pièces entrant dans
sa fabrication en précisant la quantité et l'ensemble des pièces dans la fabrication desquelles elles entrent en précisant la
quantité.
Les traitements
On veut pouvoir calculer le prix de revient et les différentes caractéristiques physiques (masse, volume) d'une pièce dont on
connaît le nom. On veut aussi pouvoir connaître le nombre exact de pièces de base entrant dans la fabrication d'une pièce
composite. Enfin, pour une pièce donnée, on veut savoir dans la fabrication de quelle(s) pièce(s) elle entre.
12
Université Pierre et Marie Curie Master Informatique (M1) Module BDWEB
Question 3 : Requêtes
Écrire les requêtes suivantes en SQL3. Pour chaque requête, donner le type du résultat.
R1. Quel est le nom et le prix au kilo des matières ?
R2. Quel est le nom des matières dont le prix au kilo est inférieur à 5 euros ?
R3. Quelles sont les pièces de base en bois ?
R4. Quel est le nom des matières dont le libellé contient "fer" ?
R5. Donner le nom des pièces formant la pièce nommée 'billard. Le résultat est la liste {boule, canne, table}
R6. Donner le nom de chaque matière avec son nombre de pièces de bases.
R7. Quelles sont les matières pour lesquelles il existe au moins 3 pièces de base ?
13
Université Pierre et Marie Curie Master Informatique (M1) Module BDWEB
RM 7. Quel est le nom des pièces composites qui n'ont aucun clou?
RM 8. (*) Quel est le nom des pièces finales (i.e. celle qui n’entrent dans la fabrication d’aucune pièce)?
RM 9. (*) Combien de pièces de base entrent dans la composition d'une pièce donnée ?
14
Université Pierre et Marie Curie – Paris 6 Mention informatique révi du 10/09/2008
Syntaxe SQL3
La syntaxe simplifiée du langage SQL3 est exprimée au moyen d’une grammaire BNF. La syntaxe de la grammaire est :
un caractère du langage est représenté en gras,
<mot> représente un élément non terminal
Les trois opérateurs d’occurrence sont :
(x)* représente 0 ou plusieurs fois l’élément x,
(x)+ représente 1 ou plusieurs fois l’élément x,
[x] :représente une occurrence optionnelle de x.
x|y représente l’élément x OU y.
1 . Définition du schéma
1.1 Définition d’un type de données
<schema> =
( <définition_type_objet> | <définition_type_ensembliste>
| <déclaration_type>)*
<définition_type_objet> =
create type <type_objet> as Object (
(<nom_attr> [ref] <type>, )+
(<declaration_methodes>, )*
);
/
<définition_type_ensembliste> =
create type <type_ensembliste> as (Table | Varray(<longueur>) ) of <type> ;
/
Déclaration d’un type incomplet qui sera complété ultérieurement.
<déclaration_type > =
create type <type_objet> ; --Utile pour définir un type qui mentionne un autre type qui n'est pas encore défini.
/
15
Université Pierre et Marie Curie – Paris 6 Mention informatique révi du 10/09/2008
<déclaration_fonction> =
member function <nom_fonction> [ (<nom_paramètre> in <type>, ...) ]
return <type_du_resultat>
<déclaration_procédure> =
member procedure <nom_procedure> [ (<nom_paramètre> in <type>, ...) ]
Le corps des méthodes est défini ensuite au moyen de la commande :
create or replace type body <type_objet> as
<déclaration_methode> is
<déclaration_variables_locales>
begin
corps de la méthode
end <nom_methode>;
…
end;
16
Université Pierre et Marie Curie – Paris 6 Mention informatique révi du 10/09/2008
<définition_table> =
create table <nom_table> of <nom_type>
( nested table <nom_attribut> store as <nom_table_imbriquée> , )* ;
Inutile de préciser de nested table pour le type ensembliste Varray. En revanche, définir une table imbriquée pour chaque
attribut ensembliste de type «table of». Toute instance possédant un identifiant d'objet doit être stockée dans une relation.
Il ne peut y avoir de référence à une instance qui n’est pas stockée dans une relation. Ne pas compiler les instructions de
création de table. (i.e., pas de / après un create table).
Utiliser une procédure PL/SQL pour traiter l’insertion : définir une procédure d’insertion, puis l’exécuter
<définition_procédure> =
create procedure <nom_procédure> as
<declaration_variables_locales>
begin
…
end;
@compile
Compiler chaque définition de procédure individuellement avec la commande « / » ou @compile
<exécution_procédure> =
begin
<nom_procédure>
end;
/
17
Université Pierre et Marie Curie – Paris 6 Mention informatique révi du 10/09/2008
4 . Requêtes SQL3
Forme générale d'une requête
select [distinct] <projection>
from <données>
[where <conditions>]
La clause select exprime le résultat recherché (i.e., la projection). La syntaxe simplifiée est :
<projection> = (<attribut_proj>, ) +
<attribut_proj> = <chemin> | value(<chemin>) | ref(<chemin>) | deref(<chemin>)
<chemin> = <elt_chemin> | <elt_chemin>.<chemin>
<elt_chemin> = <variable> | <attribut> | <nom_fonction>
La clause from exprime l’ensemble des données accédées. La syntaxe simplifiée est :
<données> =
( <collections> <variable> | Table(<chemin>) <variable> )*
Les quantificateurs
Comme en SQL, on dispose des quantificateurs exists et all.
exists (sous-requête)
Cette expression rend vrai ssi le résultat de la sous requête n’est pas vide.
Requêtes imbriquées
Comme en SQL, les clauses select , from et where peuvent contenir des sous requêtes imbriquées.
18
Université Pierre et Marie Curie - Master d’informatique - rév: 10/09/2008
1 - Conception de BD réparties
Schéma global de la base
La base de données hospitalière de la région Alsace a le schéma suivant :
Service (Snum, nom, hôpital, bât, directeur)
le directeur d’un service est un docteur désigné par son numéro
Salle (Snum, SAnum, surveillant, nbLits)
le numéro de salle est local à un service, i.e., il peut y avoir des salles avec le même
numéro dans des services différents d'un même hôpital.
nbLits est le nombre total de lits d’une salle,
un surveillant de salle est un infirmier désigné par son numéro
Employé (Enum, nom, adr, tél)
Docteur (Dnum, spéc) -- spéc est la spécialité du médecin
Infirmier (Inum, Snum, rotation, salaire)
Un employé est soit infirmier soit docteur (Inum et Dnum font référence à Enum).
Patient (Pnum, Snum, SAnum, lit, nom, adr, tél, mutuelle, pc)
L'attribut pc est la prise en charge par la mutuelle
Acte (Dnum, Pnum, date, description, coef) -- coef est le coefficient de l'acte médical
Question 1
Exprimer en SQL la question suivante: “Donner le nom des cardiologues qui ont traité un ou plusieurs
patients hospitalisés dans un service de gérontologie.”
Question 2
Proposer (et justifier) une bonne décomposition de la base hospitalière sur ces trois sites. On pourra utiliser
la fragmentation horizontale et/ou verticale ainsi que la réplication des données, en se basant sur les
hypothèses suivantes (H1 à H5) :
• H1: Les sites Strasbourg et Colmar ne gèrent que les hôpitaux correspondants.
• H2 : Les infirmiers sont employés dans un service donné.
• H3 : Les docteurs travaillent le plus souvent sur plusieurs hôpitaux (ou cliniques).
• H4 : La gestion des lits d’hôpitaux est locale à chaque hôpital.
• H5 : On désire regrouper la gestion des frais d’hospitalisation au centre régional.
Pour chaque fragment, on donnera sa définition en algèbre relationnelle à partir du schéma global.
19
td_a_fragm-requete1.doc
Université Pierre et Marie Curie - Master d’informatique - rév: 10/09/2008
Question 3
Indiquer comment se calcule chaque relation de la base globale à partir de ses fragments.
Question 4
Proposer un plan d’exécution réparti pour la requête SQL vue en Question 1, sachant maintenant que les
données sont réparties sur les trois sites selon la décomposition proposée à la Question 2.
On suppose que l’hôpital de Belfort est rattaché à la base de donnée hospitalière de la région Alsace après
son implémentation répartie. L’hôpital de Belfort possède donc son propre site de traitement qui doit être
connecté aux autres sites.
Le schéma de la base à Belfort avant l’intégration est le suivant:
B_Service (Snum, Nom, Bâtiment, Directeur)
B_Salle (Snum, SAnum, Surveillant, NbLits)
B_Docteur (Dnum, Nom, Adresse, Téléphone, spécialité)
B_Infirmier (Inum, Nom, Adresse, Téléphone, Snum, Salaire)
B_Patient (Pnum, Snum, SAnum, Lit, Nom, Adresse, Téléphone, Mutuelle, PriseEnCharge)
B_Acte (Dnum, Pnum, Date, Description, Code)
Question 5
Discuter les problèmes et proposer des solutions pour l'intégration de la base Belfort au système réparti déjà
défini. L’intégration devra se faire sans transfert d’information et sans modification de des bases existantes,
mais uniquement par définition de vues.
Question 6
Définir le nouveau schéma global intégrant la base Belfort. Chaque relation du schéma global (Service2,
Salle2, …Acte2) est définie en fonction des fragments sur les 4 sites.
Question 7
L’hypothèse H5 est-t-elle toujours respectée après l’intégration de la base Belfort ? Si non, quelles sont les
modifications de schéma nécessaires pour respecter H5 ?
Question 8
Proposer une décomposition et un plan d’exécution pour la question SQL précédente après l’intégration de la
base “Belfort”.
20
td_a_fragm-requete1.doc
Université Pierre et Marie Curie Master Informatique - Module BDWEB
TD : XML
Modèle de données, DTD
L’objectif de ce TD est de maîtriser le langage de définition de type de données DTD, le langage de représentation
des données XML. La plupart des exercices peuvent être fait sur machine à titre de préparation, avant la séance de
TD.
Préparation
Lire la documentation en ligne (lien TME XML depuis la page d’accueil).
Pré-requis : connaître la syntaxe des DTD décrite dans le cours : définition d’un élément et de son contenu,
définition des attributs d’un élément.
Installation des fichiers :
cd // aller dans le répertoire $HOME
tar zxvf $BD_TOOL/xml.tgz // installer l’archive
cd xml // aller dans le répertoire de travail
21
Université Pierre et Marie Curie Master Informatique - Module BDWEB
1.1) Une DTD représente la structure en arbre d’un document XML. Quelle est la profondeur du document1
(ie., le nombre de niveaux de l’arbre). Quelle est la profondeur maximale d’un document XML
respectant le type de donnée T ?
1.2) Pour chaque document, déterminer s’il est bien formé et s’il est valide pour le type de donnée T ?
Expliquer chaque erreur que vous détectez.
1.3) Vérifiez les réponses de la question précédente en utilisant l’outil de validation.
valide documentN.xml // N ∈[1,5]
1.4) Corriger les documents (en effectuant le minimum de modifications) pour qu’ils soient tous bien formés
et valides
Pour faciliter l’échange de données entre deux serveurs de données touristiques, le format commun d’échange
est défini en XML.
2.1) Définir une DTD (fichier ville.dtd) correspondant à la classe Ville du schéma objet telle que les objets
complexes (ville et plus beau monument) et les attributs (nom, département et tarif) soient représentés par
des éléments XML.
Ecrire le guide (ville.xml) conforme à la DTD ville.dtd , en ajoutant la ville Paris, département 75. Le plus
beau monument de Paris est le Louvre dont l’entrée coûte 8 €. Valider la DTD et les données du guide guide
avec la commande :
valide ville.xml
2.2) Définir une deuxième DTD (ville2.dtd) correspondant au type Ville du schéma telle que :
- un élément XML représente un objet complexe (Ville)
- un attribut XML représente un attribut atomique (nom, département, tarif, …).
Ecrire le guide (ville2.xml) conforme à la DTD ville2.dtd et contenant la ville Paris avec son plus beau
monument. Valider la DTD et les données du guide avec la commande :
valide ville2.xml
2.3) Définir la DTD restaurant.dtd pour représenter un restaurant avec ses menus.
Ecrire le guide restaurant.xml pour qu’il contienne le restaurant universitaire de Paris, sans étoile, ferme le
week-end, dont Le menu unique coûte 2 €.. Valider.
22
Université Pierre et Marie Curie Master Informatique - Module BDWEB
4.2) Le document base-sans-contrainte.xml ne respectant pas les contraintes ci-dessus, vérifier que la
validation du document base-sans-contrainte.xml produit 6 erreurs :
valide base-sans-contrainte.xml
Pour chaque erreur, indiquer quelle est la contrainte non respectée.
4.3) (facultatif) Que faut-il modifier dans la DTD base1.dtd pour qu’elle soit suffisamment générale pour
valider base1.xml et base-sans-contrainte.xml ?
Exercice 2 : TD DTD
1. Expressivité d’une DTD
La traduction d’un schéma objet-relationnel vers une DTD s’effectue-t-elle avec perte d’information ?
Expliquer comment exprimer, dans une DTD, les concepts suivants du modèle objet-relationnel : type
élémentaire, type complexe, type ensembliste, attribut, identifiant d’objet.
23
Université Pierre et Marie Curie Master Informatique - Module BDWEB
obligatoire.
Créer une instance de schema-relationnel.dtd pour décrire le schéma Cinema.
Question 3 : Une fois le schéma défini, il faut introduire les données dans la base. Nous voulons que les
données de chaque schéma relationnel soient introduites dans un document XML qui suivra une DTD dédiée à
ce schéma relationnel. Cette DTD est générée à partir de la définition du schéma (par exemple cinema.xml) au
travers d’un ensemble de règles. Déterminez cet ensemble pour que la DTD puisse prendre en compte les
contraintes d’intégrité suivantes : attribut non nul avec valeur par défaut, unicité, clé primaire composée de
plusieurs attributs, intégrité référentielle, contrainte de domaine, contrainte de tuple, contrainte globale.
Créer la DTD pour le schéma Cinéma.
Question 4 : Finalement, écrire l’instance de Cinema.dtd qui permet d’introduire les tuples («A», 32), (« B »,
5000) et (4, « Le fabuleux destin d’Amelie Poulain », « A », « B ») dans les relations REALISATEUR,
PRODUCTEUR et FILM, respectivement.
24
Université Pierre et Marie Curie Master Informatique - Module BDWEB
fichier base1.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <ville nom="Avignon" departement="84">
<!DOCTYPE base SYSTEM "base1.dtd"> <plusBeauMonument nom="le pont" tarif="0"/>
</ville>
<base>
<restaurant nom="la tour d'argent" etoile="3" ville="Paris"> <restaurant nom="Les 4 saisons" etoile="1" ville="Paris">
<fermeture>dimanche et lundi</fermeture> <fermeture>mardi</fermeture>
<menu nom="buffet" prix="200" /> <menu nom="assiette printaniere" prix="50" />
<menu nom="gourmet" prix="300"/> <menu nom="salade d'ete" prix="30"/>
</restaurant> <menu nom="menu d'automne" prix="150"/>
<menu nom="menu d'hiver" prix="99"/>
<ville nom="Paris" departement="75"> </restaurant>
<plusBeauMonument nom="tour Eiffel" tarif="30"/>
</ville> <ville nom="Brest" departement="29">
<plusBeauMonument nom="oceanopolis" tarif="95"/>
<restaurant nom="chez Bocuse" etoile="2" ville="Lyon"> </ville>
<fermeture>dimanche</fermeture>
<menu nom="specialites lyonnaises" prix="200"/> </base>
<menu nom="vegetarien" prix="299"/>
</restaurant>
<base>
<restaurant nom="la tour d'argent" etoile="4" ville="Paris">
<fermeture>dimanche et lundi</fermeture>
<menu nom="gourmet" prix="300"/>
</restaurant>
<ville nom="Paris">
<plusBeauMonument nom="tour Eiffel" tarif="30"/>
<plusBeauMonument nom="notre dame" tarif="50"/>
</ville>
25
Université Pierre et Marie Curie Master Informatique - Module BDWEB
TD/TME : XSCHEMA
L’objectif de ce TD/TME est de maîtriser le langage de définition de schéma XSchema.
Préparation
Lire la documentation en ligne (page d'accueil -> lien TME XML -> paragraphe XSchema ). Connaître la
syntaxe de Xschema décrite dans le cours : définition d’un élément, d'un attribut, d'une restriction, …
juicer.dtd
<!ELEMENT juicers (juicer)*>
<!ELEMENT juicer (name, image, description, warranty?, weight?, cost+, retailer)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT image (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT warranty (#PCDATA)>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT cost (#PCDATA)>
<!ELEMENT retailer (#PCDATA)>
juicer.xml
<?xml version="1.0"?>
<juicer>
<name>OJ Home Juicer</name>
<image>images\mighty_oj.gif</image>
<description>There's just no substitute for a properly squeezed
orange in the morning. So delicate and refreshing.</description>
<warranty>lifetime warranty</warranty>
<cost>41.95</cost>
<retailer>http://www.thewhitewhale.com/oj.htm</retailer>
</juicer>
<juicer>
<name>Wheateena Wheatgrass Juicer</name>
<image>images\wheateena.jpg</image>
<description>Wheatgrass juice contains 70% "crude"
chlorophyll</description>
<warranty>Motor Guarantee: For Home Use: one (1) year. For Commercial
Use: six (6) months.</warranty>
<weight>46</weight>
<cost>639.99</cost>
<retailer>http://www.rawfoods.com/marketplace/heavyduty.html</retailer>
</juicer>
</juicers>
26
Université Pierre et Marie Curie Master Informatique - Module BDWEB
juicer.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.juicers.org"
xmlns="http://www.juicers.org"
elementFormDefault="qualified">
<xsd:element name="juicers">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="juicer" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="juicer">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name"/>
<xsd:element ref="image"/>
<xsd:element ref="description"/>
<xsd:element ref="warranty" minOccurs="0"/>
<xsd:element ref="weight" minOccurs="0"/>
<xsd:element ref="cost" maxOccurs="unbounded"/>
<xsd:element ref="retailer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="image" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="warranty" type="xsd:string"/>
<xsd:element name="weight" type="xsd:string"/>
<xsd:element name="cost" type="xsd:string"/>
<xsd:element name="retailer" type="xsd:string"/>
</xsd:schema>
La règle du jeu indique qu'un joueur gagne la partie dès que sa main a 5 cartes et vaut au moins p points. La
valeur totale d'une main est la somme des valeurs des cartes de la main. Pour cela on associe une valeur à
chaque carte, quelle que soit sa couleur: l'as vaut 5 points, le roi 3 points, la dame 2 points, le valet 1 point, les
autres cartes (nombres 7, 8, 9 et 10) ne valent rien.
27
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Par exemple, les mains gagnantes possibles valant au moins 20 points sont :
4 as et 1 carte quelconque, // valeur ≥ 4*5
3 as et un roi, puis un roi ou une dame // valeur : 3*5 + 3 + 3 ou 3*5 + 3 + 2
On suppose que toute main est triée par ordre décroissant de valeur de carte (i.e., dans l'ordre A, R, D, V, N).
Soit G(p) l'ensemble de toutes les mains gagnantes triées, ayant 5 cartes et une valeur de main au moins égale
à p. On a G(p) contient toutes les mains de G(p+1), plus toutes les mains valant p points :
• G(23) contient une seule main : 4 as et un roi,
• G(22) contient toutes les mains de G(23), et toutes les mains valant 22 points
…
• G(20) contient toutes les mains de G(21), et toutes les mains valant 20 points. (rmq: l'exemple ci-
dessus correspond à G(20).
• G(19) contient toutes les mains de G(20), et toutes les mains valant 19 points.
Question 1 :
1.1) Existe-t-il des documents XML validant la DTD ci-dessus, mais qui ne représentent pas une main
possible avec un jeu de 32 cartes. Si oui, donner deux exemples de tels documents.
1.2) Ecrire la DTD validant toutes les mains appartenant à G(19), et seulement celles-ci. Toute main non
gagnante (d'une valeur inférieure à 19 ou n'ayant pas 5 cartes) ne doit pas être conforme à cette DTD.
Votre réponse doit être la plus factorisée possible.
Question 2 :
On propose plusieurs schémas. Pour chaque schéma répondre à la question :
Existe-t-il un p tel que le schéma valide toutes les mains de G(p), et seulement celles-ci ?
Si oui, quelle est la valeur de p ?
Si non : Décrire en une seule phrase l'ensemble des mains conformes au schéma. Quelle est valeur
Vmin de la "plus faible" main conforme au schéma (i.e., celle de valeur minimum) ? Quelle est la valeur Vmax
de la plus forte main conforme au schéma ?
2.1) Schéma S1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="main">
<xs:complexType>
<xs:sequence>
<xs:element name="A" minOccurs="4" maxOccurs="4"/>
<xs:choice>
<xs:element name="R"/>
<xs:element name="D"/>
<xs:element name="V"/>
<xs:element name="N"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
28
Université Pierre et Marie Curie Master Informatique - Module BDWEB
2.2) Schéma S2
29
Université Pierre et Marie Curie Master Informatique - Module BDWEB
22 </xs:complexType>
23 </xs:element>
24
25 <xs:simpleType name="nom_carte">
26 <xs:restriction base="xs:string">
27 <xs:enumeration value="A"/><xs:enumeration value="R"/>
28 <xs:enumeration value="D"/><xs:enumeration value="V"/>
29 <xs:enumeration value="10"/><xs:enumeration value="9"/>
30 <xs:enumeration value="8"/><xs:enumeration value="7"/>
31 </xs:restriction>
32 </xs:simpleType>
33 <xs:simpleType name="coul_carte">
34 <xs:restriction base="xs:string">
35 <xs:enumeration value="Pi"/><xs:enumeration value="Co"/>
36 <xs:enumeration value="Ca"/><xs:enumeration value="Tr"/>
37 </xs:restriction>
38 </xs:simpleType>
39 </xs:schema>
3.1) On souhaite modifier le schéma afin que les contraintes suivantes soient vérifiées :
C1: Une main a exactement 5 cartes,
C2: il y a entre 2 et 4 joueurs (avec une main par joueur).
C3: Chaque carte est unique, il ne peut y avoir deux fois la même carte de même couleur dans le jeu.
Pour chaque contrainte, indiquer le numéro des lignes à modifier, puis écrivez seulement le morceau modifié
du schéma.
3.2) (question subsidiaire) On suppose maintenant que les cartes d'une main ne sont plus triées. Expliquer
brièvement comment modifier le schéma pour qu'il valide toutes les mains de G(20) et seulement celles-ci.
3.3) (question subsidiaire) On souhaite réutiliser ce schéma pour le jeu de tarot. Expliquer brièvement
comment étendre ce schéma pour représenter les cartes supplémentaires du tarot: 4 cavaliers, 21 atouts, les
petites cartes de nombre (2 à 6) et le joker. Les atouts ont un numéro de 1 à 21 mais pas de couleur.
30
Université Pierre et Marie Curie Master Informatique - Module BDWEB
b) Ecrire le document XML conforme au schéma de la question a) et contenant les pièces suivantes :
P1
serveur
P2 P3 P4
lecteur DVD processeur carte graphique
Légende : contient
X Y
<!ELEMENT PB EMPTY>
<!ATTLIST PB num ID #REQUIRED
description CDATA #IMPLIED
contenue_dans IDREFS #IMPLIED>
31
Université Pierre et Marie Curie Master Informatique - Module BDWEB
stock1.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<Stock>
<PC num="P1" contientPB="P2 P3" contientPC="P4"/>
<PB num="P2" contenue_dans="P1"/>
<PB num="P3" contenue_dans="P1 P4"/>
<PC num="P4" contientPB="P3" contenue_dans="P1"/>
<PB num="P1"/> <!-- une PB avec le même numéro qu'une PC -->
</Stock>
Stock2.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<Stock>
<PC num="P1" contientPB="P2 P3" contientPC="P4"/>
<PB num="P2" contenue_dans="P1"/>
<PB num="P3" contenue_dans="P2 P4"/>
<PC num="P4" contientPB="P3" contenue_dans="P1"/>
</Stock>
base3.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<base xmlns="Espace_TPXML"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="Espace_TPXML
base3.xsd">
32
Université Pierre et Marie Curie Master Informatique - Module BDWEB
</base>
4.2) Définir le schéma (base-contrainte.xsd) du guide touristique (base-contrainte.xml) pour vérifier les
contraintes suivantes :
c1 : un restaurant a toujours au moins 2 menus
c2 : une ville peut avoir un plus beau monument, certaines villes n’en ont pas.
c3 : un monument a toujours un nom et un tarif
c4 : une ville a toujours un nom et un département
c5 : un restaurant a entre 0 et 3 étoiles.
c6 : la ville d’un restaurant doit exister dans la base (i.e., il doit exister un élément ville pour chaque nom de
ville référencé dans un élément restaurant). Pour définir cette contrainte, utiliser les éléments key et keyref
33
Université Pierre et Marie Curie Master Informatique - Module BDWEB
base-contrainte.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="base-contrainte.xsd">
…. idem base3.xml
</base>
<BookStore xmlns="http://www.books.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.books.org/BookStore.xsd">
<Book>
<Title>My Life and Times</Title>
<Author>Paul McCartney</Author>
<Date>1998</Date>
<ISBN>1-56592-235-2</ISBN>
<Publisher>McMillin Publishing</Publisher>
</Book>
<Book>
<Title>Illusions The Adventures of a Reluctant Messiah</Title>
<Author>Richard Bach</Author>
<Date>1977</Date>
<ISBN>0-440-34319-4</ISBN>
<Publisher>Dell Publishing Co.</Publisher>
</Book>
<Book>
<Title>The First and Last Freedom</Title>
<Author>J. Krishnamurti</Author>
<Date>1954</Date>
<ISBN>0-06-064831-7</ISBN>
<Publisher>Harper & Row</Publisher>
</Book>
</BookStore>
5.2) Ecrire le schéma BookStore2.xsd en imbriquant au maximum la définition des éléments. La racine du
schéma (élément xs:schema) ne doit posséder qu'un seul sous élément direct xs:element.
5.3) Ecrire le schéma BookStore3.xsd en séparant la définition des types et des éléments. Définir d'abord tous
les types complexes (xs:complexType), puis définir ensuite tous les éléments.
5.4) Ecrire le schéma BookStore4.xsd en définissant un type Publication, ainsi qu'un sous-type
BookPublication qui en hérite.
5.5) Ecrire le schéma BookStore5.xsd en définissant un type, ISBN-type, basé sur le type String et permettant
d'imposer un format à l'élément ISBN.
34
Université Pierre et Marie Curie Master Informatique - Module BDWEB
juicer.dtd
<!ELEMENT juicers (juicer)*>
<!ELEMENT juicer (name, image, description, warranty?, weight?, cost+,
retailer)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT image (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT warranty (#PCDATA)>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT cost (#PCDATA)>
<!ELEMENT retailer (#PCDATA)>
juicer.xml
<?xml version="1.0"?>
<juicer>
<name>OJ Home Juicer</name>
<image>images\mighty_oj.gif</image>
<description>There's just no substitute for a properly squeezed
orange in the morning. So delicate and refreshing.</description>
<warranty>lifetime warranty</warranty>
<cost>41.95</cost>
<retailer>http://www.thewhitewhale.com/oj.htm</retailer>
</juicer>
<juicer>
<name>Wheateena Wheatgrass Juicer</name>
<image>images\wheateena.jpg</image>
<description>Wheatgrass juice contains 70% "crude" chlorophyll
</description>
<warranty>Motor Guarantee: For Home Use: one (1) year. For Commercial
Use: six (6) months.</warranty>
<weight>46</weight>
<cost>639.99</cost>
<retailer>http://www.rawfoods.com/marketplace/heavyduty.html</retailer>
</juicer>
</juicers>
6.2) Modifier le schéma de l'exercice 5.1 en employant XMLSchema comme namespace par défaut.
6.3) Modifier le schéma juicers.xsd de l'exercice 6.1 afin de le rendre plus compact en imbriquant la
déclaration de tous les éléments dans l'élément juicers.
6.4) Modifier le schéma juicers.xsd afin d'utiliser des types plus significatifs que le type String pour la
déclaration des éléments weight, cost, et retailer.
6.5) Modifier le schéma de l'exercice 6.4 en définissant un nouveau type, money, afin de l'utiliser dans la
déclaration de l'élément cost.
35
Université Pierre et Marie Curie Master Informatique - Module BDWEB
TD XPath
Exercice 1. Restaurant
Données: le GUIDE TOURISTIQUE (voir ex précédents)
Question 1
On veut extraire des données du guide touristique base1.xml. Pour chaque requête, peut-on
l'exprimer en une seule expression Xpath ? Si oui, donner la réponse, sinon expliquer pourquoi.
1) tous les menus à moins de 50 EUR
2) les menus des restaurants 2 ou 3 étoiles
3) le nom des villes dans le département 69
4) le nom des restaurants à Lyon
5) le nom des restaurants dans le département 75
6) le plus beau monument des villes ayant au moins 1 restaurant 3 étoiles
7) les restaurants 3 étoiles fermés le dimanche
8) les restaurants ouverts le lundi
9) (a) le 2ème menu de chaque restaurant
(b) le 2ème menu du guide touristique
10) (a) le 2ème menu à moins de 150 EUR de chaque restaurant.
(b)Le 2ème menu de chaque restau ssi il vaut moins de 150 EUR.
11) les restaurants dans une ville sans plus beau monument
12) les villes avec au moins un restaurant qui a au moins 4 menus
13) les villes avec au moins deux restaurants
14) les villes sans restaurant 3 étoiles
15) le nom des restaurants qui ont au moins un menu dont le prix est égal au tarif du plus beau
monument de la ville (du restaurant en question) ?
Question 2
Expliquer chaque expression en une seule phrase.
Evaluer les expressions suivantes sur le guide touristique puis décrire le résultat en une seule phrase
E1: /base/*/*
E2: //*
E3: /base/*[@* < 5]/@nom
36
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Exercice 2. Films
On veut extraire des données du fichier Films.xml, dont la DTD est donnée ci-dessous :
37
Université Pierre et Marie Curie Master Informatique - Module BDWEB
TD et TME : XQuery
L’objectif de ce TD/TME est de connaître XQuery le langage d’interrogation de données XML.
Préparation : Lire la documentation en ligne (lien TME Xquery).
Exercice 1
1) Requêtes
On utilise le langage d'interrogation XQuery pour consulter un guide touristique au format XML :
Le document guide.xml est :
<?xml version="1.0" encoding="ISO-8859-1"?>
<base>
<restaurant nom="la tour d'argent" etoile="3" ville="Paris">
<fermeture>dimanche et lundi</fermeture>
<menu nom="buffet" prix="200" />
<menu nom="gourmet" prix="300"/>
</restaurant>
Définir en XQuery les requêtes suivantes (une seule requête par fichier).
1.1) req1.xql : Donner le nom de tous les menus des restaurants
38
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Résultat:
<results>
<menu nom="buffet"/>
<menu nom="gourmet"/>
<menu nom="specialites lyonnaises"/>
<menu nom="vegetarien"/>
<menu nom="standard"/>
<menu nom="enfant"/>
<menu nom="big"/>
<menu nom="assiette printaniere"/>
<menu nom="salade d'ete"/>
<menu nom="menu d'automne"/>
<menu nom="menu d'hiver"/>
</results>
1.2) req2.xql : Donner le nom et le prix de tous les menus dont le prix est inférieur à 100.
Résultat:
<results>
<menu nom="standard" prix="35"/>
<menu nom="enfant" prix="20"/>
<menu nom="big" prix="49"/>
<menu nom="assiette printaniere" prix="50"/>
<menu nom="salade d'ete" prix="30"/>
<menu nom="menu d'hiver" prix="99"/>
</results>
1.3) req3.xql : Donner le nom des restaurants 2 étoiles avec leur nom de menu
Résultat:
<results>
<restaurant nom="chez Bocuse">
<menu nom="specialites lyonnaises"/>
<menu nom="vegetarien"/>
</restaurant>
</results>
1.4) req4.xql : Donner le nom de chaque restaurant avec son numéro de département
Résultat:
<results>
<restaurant nom="la tour d'argent" departement="75"/>
<restaurant nom="chez Bocuse" departement="69"/>
<restaurant nom="MacDo" departement="84"/>
<restaurant nom="Les 4 saisons" departement="75"/>
</results>
1.5) req5.xql : Quels sont les restaurants ayant (au moins) un menu dont le prix est égal au tarif de visite du
plus beau monument de la ville ? Donner le nom du restaurant et le tarif.
Résultat:
<results>
<result>
<restaurant nom="Les 4 saisons"/>
<tarif_monument prix="30"/>
</result>
</results>
Pour chaque requête, donner la DTD pour valider le résultat (fichier reqN.dtd).
39
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Exercice 2
Les données manipulées dans cet exercice sont représentées en XML. Il y a 4 types de données : les
références bibliographiques (bib), les critiques (review) et les prix comparatifs (price) et les livres (book). Les
données sont définies comme suit :
Les références bibliographiques
Le document bib.xml est :
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
<author><last>Stevens</last><first>W.</first></author>
<publisher>Addison-Wesley</publisher>
<price> 65.95</price>
</book>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
<author><last>Stevens</last><first>W.</first></author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
</book>
<book year="2000">
<title>Data on the Web</title>
<author><last>Abiteboul</last><first>Serge</first></author>
<author><last>Buneman</last><first>Peter</first></author>
<author><last>Suciu</last><first>Dan</first></author>
<publisher>Morgan Kaufmann Publishers</publisher>
<price> 39.95</price>
</book>
<book year="1999">
<title>The Economics of Technology and Content for Digital TV</title>
<editor>
<last>Gerbarg</last><first>Darcy</first>
<affiliation>CITI</affiliation>
</editor>
<publisher>Kluwer Academic Publishers</publisher>
<price>129.95</price>
</book>
</bib>
40
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Les livres
La DTD book.dtd est : Le document book.xml est :
<!ELEMENT chapter (title, section*)> <chapter>
<!ELEMENT section (title, section*)> <title>Data Model</title>
<!ELEMENT title (#PCDATA)> <section>
<title>Syntax For Data Model</title>
</section>
<section>
<title>XML</title>
<section>
<title>Basic Syntax</title>
</section>
<section>
<title>XML and Semistructured Data</title>
</section>
</section>
</chapter>
41
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Résultat:
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
</book>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
</book>
</bib>
R3 : Structure hiérarchique
Pour chaque livre, donner le titre et les auteurs regroupés dans un élément <result>.
42
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Résultat:
<results>
<result>
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</result>
<result>
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</result>
<result>
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
<first>Serge</first>
</author>
<author>
<last>Buneman</last>
<first>Peter</first>
</author>
<author>
<last>Suciu</last>
<first>Dan</first>
</author>
</result>
<result>
<title>The Economics of Technology and Content for Digital TV</title>
</result>
</results>
43
Université Pierre et Marie Curie Master Informatique - Module BDWEB
</author>
<title>Data on the Web</title>
</result>
<result>
<author>
<last>Suciu</last>
<first>Dan</first>
</author>
<title>Data on the Web</title>
</result>
</results>
R6 : Expression conditionnelle
Pour chaque livre ayant au moins un auteur, donner le titre et le nom d’au plus deux auteurs. Le nom des
auteurs suivants est remplacé par l’élément <et-al> (i.e., abréviation latine signifiant et les autres).
Résultat:
<bib>
<book>
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</book>
<book>
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</book>
<book>
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
<first>Serge</first>
44
Université Pierre et Marie Curie Master Informatique - Module BDWEB
</author>
<author>
<last>Buneman</last>
<first>Peter</first>
</author>
<et-al/>
</book>
</bib>
R7 : Tri
Donner, dans l’ordre alphabétique, le titre et l’année des livres publiés par Addison-Wesley après1991.
Résultat:
<bib>
<book year="1992">
<title>Advanced Programming in the Unix environment</title>
</book>
<book year="1994">
<title>TCP/IP Illustrated</title>
</book>
</bib>
R10 :
Dans le document price.xml, donner le prix le moins cher de chaque livre. Le résultat est une liste d’éléments
<minprice>.Le titre est un attribut de <minprice>, le prix est un élément de <minprice>.
Résultat:
<results>
<minprice title="Advanced Programming in the Unix environment">
<price>65.95</price>
</minprice>
<minprice title="TCP/IP Illustrated">
<price>65.95</price>
</minprice>
<minprice title="Data on the Web">
<price>34.95</price>
</minprice>
</results>
45
Université Pierre et Marie Curie Master Informatique - Module BDWEB
R11 :
Pour chaque livre avec au moins un auteur, donner le titre et les auteurs, pour chaque livre avec un éditeur,
donner une référence contenant le titre du livre et l’affiliation de l’éditeur.
Résultat:
<bib>
<book>
<title>TCP/IP Illustrated</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</book>
<book>
<title>Advanced Programming in the Unix environment</title>
<author>
<last>Stevens</last>
<first>W.</first>
</author>
</book>
<book>
<title>Data on the Web</title>
<author>
<last>Abiteboul</last>
<first>Serge</first>
</author>
<author>
<last>Buneman</last>
<first>Peter</first>
</author>
<author>
<last>Suciu</last>
<first>Dan</first>
</author>
</book>
<reference>
<title>The Economics of Technology and Content for Digital TV</title>
<affiliation>CITI</affiliation>
</reference>
</bib>
R12 :
Trouver les paires de livres qui ont les mêmes auteurs et des titres différents. Ne pas tenir compte de l’ordre
des auteurs.
Résultat:
<bib>
<book-pair>
<title>TCP/IP Illustrated</title>
<title>Advanced Programming in the Unix environment</title>
</book-pair>
</bib>
46
Université Pierre et Marie Curie Master Informatique - Module BDWEB
<joueur>
<identite>
<nom>Hewitt</nom>
<prenom>Lleyton</prenom>
<nationalite>AUS</nationalite>
</identite>
<classement>1</classement>
</joueur>
<joueur>
<identite>
<nom>Arthurs</nom>
<prenom>Wayne</prenom>
<nationalite>AUS</nationalite>
</identite>
<classement>55</classement>
</joueur>
<joueur>
<identite>
<nom>Mathieu</nom>
<prenom>Paul-Henry</prenom>
<nationalite>FR</nationalite>
</identite>
<classement>44</classement>
</joueur>
<joueur>
<identite>
<nom>Clement</nom>
<prenom>Arnaud</prenom>
<nationalite>FR</nationalite>
</identite>
<classement>37</classement>
</joueur>
<joueur>
<identite>
<nom>Costa</nom>
<prenom>Albert</prenom>
<nationalite>ESP</nationalite>
</identite>
<classement>8</classement>
</joueur>
<joueur>
<identite>
<nom>Gasquet</nom>
<prenom>Richard</prenom>
<nationalite>FR</nationalite>
</identite>
<classement>124</classement>
</joueur>
</joueurs>
47
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Les rencontres
Le document rencontre.xml est :
<rencontres>
<rencontre>
<joueur1>
<identite>
<nom>Hewitt</nom>
<prenom>Lleyton</prenom>
<nationalite>AUS</nationalite>
</identite>
</joueur1>
<joueur2>
<identite>
<nom>Arthurs</nom>
<prenom>Wayne</prenom>
<nationalite>AUS</nationalite>
</identite>
</joueur2>
<gagnant>1</gagnant>
</rencontre>
<rencontre>
<joueur1>
<identite>
<nom>Arthurs</nom>
<prenom>Wayne</prenom>
<nationalite>AUS</nationalite>
</identite>
</joueur1>
<joueur2>
<identite>
<nom>Hewitt</nom>
<prenom>Lleyton</prenom>
<nationalite>AUS</nationalite>
</identite>
</joueur2>
<gagnant>1</gagnant>
</rencontre>
<rencontre>
<joueur1>
<identite>
<nom>Hewitt</nom>
<prenom>Lleyton</prenom>
<nationalite>AUS</nationalite>
</identite>
</joueur1>
<joueur2>
<identite>
<nom>Mathieu</nom>
<prenom>Paul-Henry</prenom>
<nationalite>FR</nationalite>
</identite>
</joueur2>
<gagnant>2</gagnant>
</rencontre>
<rencontre>
<joueur1>
<identite>
<nom>Clement</nom>
<prenom>Arnaud</prenom>
<nationalite>FR</nationalite>
</identite>
</joueur1>
<joueur2>
<identite>
<nom>Mathieu</nom>
48
Université Pierre et Marie Curie Master Informatique - Module BDWEB
<prenom>Paul-Henry</prenom>
<nationalite>FR</nationalite>
</identite>
</joueur2>
<gagnant>2</gagnant>
</rencontre>
</rencontres>
R2 : Rebalisage
49
Université Pierre et Marie Curie Master Informatique - Module BDWEB
Lister les joueurs en donnant leur nom, prénom et nationalité séparés par des virgules.
Résultat :
<resultats>
<resultat>Hewitt,Lleyton,AUS</resultat>
<resultat>Arthurs,Wayne,AUS</resultat>
<resultat>Mathieu,Paul-Henry,FR</resultat>
<resultat>Clement,Arnaud,FR</resultat>
<resultat>Costa,Albert,ESP</resultat>
<resultat>Gasquet,Richard,FR</resultat>
</resultats>
R3 : Agrégation
Donner le nombre de joueurs par nationalité.
Résultat :
<resultats>
<resultat><nationalite>AUS</nationalite><nb_joueurs>2</nb_joueurs></resultat>
<resultat><nationalite>FR</nationalite><nb_joueurs>3</nb_joueurs></resultat>
<resultat><nationalite>ESP</nationalite><nb_joueurs>1</nb_joueurs></resultat>
</resultats>
R4 : Jointure
Pour chacune des rencontres, donner le classement des deux joueurs. Seules les rencontres entre joueurs de
classement inférieur à 50 sont conservées.
Résultat :
<resultats>
<resultat><classement>1</classement><classement>44</classement></resultat>
<resultat><classement>37</classement><classement>44</classement></resultat>
</resultats>
50