Exam Maitrise CMO partie BDO O2 janvier 2002

Transcription

Exam Maitrise CMO partie BDO O2 janvier 2002
Nom :
page 1
Prénom :
Université Pierre et Marie Curie - Paris 6 - UFR 922 - Licence d'informatique
Module Bases de Données et Sites Web
Examen du 26 mai 2008
Documents autorisés – Durée : 2h.
Exercice 1 : XML, DTD, XPath
5 pts
On considère le fichier Vehicules.xml suivant, décrivant des véhicules.
<?xml version="1.0" encoding="UTF-8"?>
<vehicules>
<voiture const='C1'>
<modele>
<nom>Clio</nom>
<type>TCE</type>
</modele>
<puissance>4</puissance>
</voiture>
<voiture const='C2'>
<modele>
<nom>Prius</nom>
<type>linea</type>
</modele>
<puissance>5</puissance>
</voiture>
<camion const='C2'>
<modele>
<nom>Tundra</nom>
<type>Double Cab</type>
</modele>
<puissance>8</puissance>
</camion>
<voiture const='C1'>
<modele>
<nom>Modus</nom>
<type>turbo</type>
</modele>
<puissance>4</puissance>
</voiture>
<voiture const='C2'>
<modele>
<nom>Camry</nom>
<type>BVA</type>
</modele>
<puissance>7</puissance>
</voiture>
<constructeur n='C1' nom='Renault'>
<pays>France</pays>
</constructeur>
<constructeur n='C2' nom='Toyota'>
<pays>Japon</pays>
</constructeur>
</vehicules>
Question1. Ecrire une DTD Vehicules.dtd représentant des véhicules pour laquelle ce document est
conforme.
Lettres initiales du Prénom et du Nom:
page 2
Question2.On considère les expressions XPath suivantes, appliquées au document Vehicules.xml. Pour
chacune d’elles, indiquez ce qu’elles signifient, et ce qu’elles renvoient.
a) //voiture[position()=4]/modele/nom
b) //voiture[position()=2][puissance > 4]/modele/nom
c) //voiture[position()=2 and puissance > 4]/modele/nom
d) //voiture [puissance > 4] [position()=2]/modele/nom
Question3. Exprimez en XPath les requêtes suivantes sur le fichier Vehicules.xml :
a) Nom des constructeurs de France
b) Pays du constructeur de la Clio
Lettres initiales du Prénom et du Nom:
page 3
c) Nom des modèles de voitures françaises
d) Nom des constructeurs qui ne construisent pas de camion.
Question 4. Indiquez pour chacune des requêtes suivantes la réponse correspondante parmi celles qui
sont proposées :
Requêtes :
R1. //voiture[modele/nom=’Modus’]@const
R2. //voiture/modele[nom=’Modus’]@const
R3. //voiture[//nom=’Modus’]@const
R4. //voiture[modele/nom=’Modus’]/@const
Réponses :
a) C1
b) C1 C2
c) C1 C2 C1 C2
d) Pas de réponse
R1 …………………….
R2……………………..
R3…………………….
R4…………………….
Exercice 2 : XSLT
5 pts
On considère des fichiers XML qui contiennent une liste de documents sur internet. Chaque document est
associé à son type (page web ou image), son url et à une description succincte du document. Ces fichiers
XML suivent la DTD docs.dtd suivante :
<!ELEMENT
<!ELEMENT
<!ATTLIST
<!ELEMENT
docs (doc*) >
doc (type, url, description) >
doc numero ID #REQUIRED>
type (#PCDATA) >
Lettres initiales du Prénom et du Nom:
page 4
<!ELEMENT url (#PCDATA) >
<!ELEMENT description (#PCDATA) >
Par exemple, le fichier exemple.xml ci-dessous contient deux documents (un de type “page web” et un
autre de type “image”) :
<docs>
<doc numero='1'>
<type>page web</type>
<url>http://www.upmc.fr</url>
<description>Site web de l'UPMC</description>
</doc>
<doc numero='2'>
<type>image</type>
<url>http://www.upmc.fr/logo.jpg</url>
<description>Nouveau logo de l'UPMC</description>
</doc>
</docs>
Remarque : L’exemple ci-dessus contient seulement deux documents, mais vous répondrez aux questions
suivantes afin que vos feuilles XSL puissent traiter tous fichiers XML au format docs.dtd.
Question 1. Compléter la feuille XSL suivante pour qu’elle transforme un document XML (qui suit la
DTD docs.dtd) en un autre document XML contenant seulement une liste d’URL. Ce nouveau document
suit la DTD :
<!ELEMENT adresses (ad*) >
<!ELEMENT ad (#PCDATA)>
Par exemple, le résultat obtenu pour le fichier exemple.xml est :
<
adresses>
<ad>http://www.upmc.fr</ad>
<ad>http://www.upmc.fr/logo.jpg</ad>
</adresses>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match= "…………………………………">
</xsl:template>
<xsl:template match= "………………………………….">
</xsl:template>
Lettres initiales du Prénom et du Nom:
page 5
</xsl:stylesheet>
Question 2. Compléter la feuille XSL suivante pour quelle génère un nouveau document XML (qui
respecte la DTD docs.dtd) contenant seulement les documents de type « image ».
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match=”…………………………………...”>
</xsl:template>
</xsl:stylesheet>
Question 3 : Compléter la feuille XSL ci-dessous pour qu’elle transforme le document XML en une page
HTML indiquant le nombre de documents de type « image » et le nombre de documents de type « page
web » dans le fichier XML. Par exemple, pour le fichier exemple.xml, le code HTML obtenu est :
<HTML>
<p>Nombre d’images : 1</p>
<p>Nombre de pages web : 1 </p>
</HTML>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match= "…………………………………">
</xsl:template>
</xsl:stylesheet>
Lettres initiales du Prénom et du Nom:
page 6
Question 4. Compléter la feuille XSL ci-dessous pour qu’elle transforme un document XML (suivant la
DTD docs.dtd) en un page HTML qui affiche un tableau HTML contenant une ligne par document. Pour
chaque document, on affiche seulement son numéro (première colonne du tableau) et son url (deuxième
colonne du tableau) : les urls des documents de type « page web » sont affichées comme des liens
cliquables ayant la description du document comme valeur du lien, et les urls des documents de type
« image » sont remplacées par l’image avec un attribut alt contenant la description du document.
Par exemple, pour le fichier exemple.xml, le code HTML obtenu est :
<HTML>
<TABLE BORDER="1">
<TR><TH>Numero</TH><TH>URL</TH></TR>
<TR><TD>1</TD><TD><A href="http://www.upmc.fr">Site web de
l'UPMC</A></TD></TR>
<TR><TD>2</TD><TD><IMG width="200" src="http://www.upmc.fr/logo.jpg"
alt="Nouveau logo de
l'UPMC"></TD></TR>
</TABLE>
</HTML>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match= "………………………………….">
</xsl:template>
<xsl:template match= "…………………………………">
page 7
Lettres initiales du Prénom et du Nom:
</xsl:template>
</xsl:stylesheet>
Exercice 3 : SQL3
5 pts
On considère une base de données pour la gestion des menus d’un restaurant, dont le schéma
Entité/Association est donné ci-dessous :
:
Equivalent
type
nom
:
poids
Nom
Préparation
composant_de
Recette
:
durée
:
:
:
:
:
Ingrédient_de
fait_partie
accompagne
:
:
Menu
Date
Vin
Nom
Type
Nom
On précise qu’un menu peut être composé des recettes suivantes (décrite par le type de recette) : une
entrée (optionnelle), d’un plat (obligatoire) et d’un dessert (optionnel). Une recette est faite de
préparations, elles-mêmes éventuellement composées d’autres préparations qui leur servent d’ingrédient.
Par exemple, la sauce béchamel peut servir (entre autres) à confectionner une sauce mornay (en lui
ajoutant de l’œuf et du fromage). Les ingrédients de base (beurre, œuf, etc) peuvent donc être considérés
comme des préparations n’ayant pas d’ingrédient et de durée nulle. Une préparation pouvant ne pas être
réalisable (manque d’un ingrédient de base par exemple), il existe éventuellement une préparation
Lettres initiales du Prénom et du Nom:
page 8
équivalente. Un vin a un type (« rouge », « rosé », « champagne », etc.) et chaque recette peut être
accompagnée d’un ou plusieurs vins.
Question 1 ( 1 points)
Compléter le schéma précédent en indiquant les cardinalités maximum:minimum dans les cadres prévus à
cet effet. On rappelle que les cardinalités s’expriment d’une entité vers une association, la flèche indique
le sens de lecture pour les associations réflexives. Une cardinalité peut-être un nombre entier (1, 2, 3…)
ou alors N, pour indiquer que le nombre ne peut être borné.
Question 2 ( 1 point)
Quelle(s) contrainte(s) d’intégrité sur un ou des attribut(s) de Préparation est induite par l’association
Ingrédient_de ? Répondre en français.
Question 3 ( 2 points)
Compléter la série d’instruction SQL3 suivante pour créer le schéma d’une telle base de données. Vous
ne pouvez pas créer de type supplémentaire ni de table supplémentaire.
CREATE TYPE .....................................................;
CREATE TYPE Vin AS OBJECT
(
………………………………………………………..
………………………………………………………..
………………………………………………………..
);
CREATE TYPE Menu AS OBJECT
(
nom VARCHAR2(50),
Lettres initiales du Prénom et du Nom:
date Date
);
CREATE TYPE LesVins AS ………………………. Vin;
CREATE TYPE Recette AS OBJECT
(
nom VARCHAR2(50),
type VARCHAR2(30),
fait_partie ……………………,
accompagne ………………….
);
CREATE TYPE EnsRecettes AS …………………………………….. Recette;
CREATE TYPE EnsPréparation AS …………………………………. Preparation;
CREATE TYPE Préparation AS OBJECT
(
nom ………………………………………………,
durée ……………………………………………..,
poids……………………………………………...,
composant_de ……………………………………...,
équivalent ……………………………………...,
ingrédient_de ……………………………………...,
);
CREATE TABLE LesPréparations OF…………
…………………………………………
…………………………………………
……………………………………………. ;
CREATE TABLE LesMenus OF …………
…………………………………………
…………………………………………
……………………………………………. ;
page 9
Lettres initiales du Prénom et du Nom:
page 10
CREATE TABLE LesRecettes OF…………
…………………………………………
…………………………………………
……………………………………………. ;
Question 4 (1 point)
Quel problème de redondances posent les associations Composant_de et Ingrédient_de par rapport à
l’entité Préparation ? Indiquez ci-dessous les modifications à apporter au schéma Entité/Association
(ajouter uniquement des attributs dans le schéma ci-dessous) pour résoudre ce problème.
Problèmes de redondance :
Modification du schéma Entité/Association :
Equivalent
Recette
Composant
Préparation
Ingrédient_de
Lettres initiales du Prénom et du Nom:
page 11
Reportez ces modifications sur les créations de type : rayez les types inutiles et créez les nouveaux types
nécessaires. Lorsqu’un type est inchangé par rapport à la question 3, il suffit d’indiquer « inchangé ».
CREATE TYPE .....................................................;
CREATE TYPE Vin AS OBJECT
(………………………………………………………..
………………………………………………………..
);
CREATE TYPE Menu AS OBJECT
(nom VARCHAR2(50),
date Date
);
CREATE TYPE LesVins AS ………………………. Vin;
CREATE TYPE Recette AS OBJECT
(
nom VARCHAR2(50),
type VARCHAR2(30),
fait_partie ……………………,
accompagne ………………….
);
CREATE TYPE EnsRecettes AS …………………………………….. Recette;
CREATE TYPE EnsPréparation AS …………………………………. Preparation;
CREATE TYPE Préparation AS OBJECT
(
nom ………………………………………………,
durée ……………………………………………..,
poids……………………………………………...,
composant_de ……………………………………...,
équivalent ……………………………………...,
ingrédient_de ……………………………………...,
);
Lettres initiales du Prénom et du Nom:
page 12
CREATE TABLE LesPréparations OF…………
…………………………………………
…………………………………………
……………………………………………. ;
CREATE TABLE LesMenus OF …………
…………………………………………
…………………………………………
……………………………………………. ;
CREATE TABLE LesRecettes OF…………
…………………………………………
…………………………………………
………………………………………;
Exercice 4 : PHP
5 pts
Soit le script PHP suivant
<HTML>
<HEAD><TITLE> Etudiants inscrits </TITLE></HEAD>
<BODY>
<TABLE border=1>
<TR><TD>Nom </TD><TD>Prénom </TD></TR>
< ?
$cnx=mysql_connect(”localhost ”, ”NomResp”, ”PassResp”) ;
Mysql_select_db(“Notes”,$cnx);
$req = mysql_query(”select * from BaseEtudiant”, $cnx) ;
while ($res=mysql_fetch_array($req)){
echo ”<TR><TD>”.$res[“NomE”]
. ”</TD><TD>”.$res[”PrenomE”].”</TD></TR>\n”;
}
?>
</TABLE>
</BODY>
</HTML>
Lettres initiales du Prénom et du Nom:
page 13
1- Expliquez ce que fait ce script ?
2- On suppose que la table BaseEtudiant contient les n-uplets suivants :
(Durand, Matthieu) ; (Dupont, Xavier) ; (Mary, Zoé)
Représentez sur un schéma le résultat de l’exécution de ce code dans un navigateur.
3- On veut ajouter à ce code deux champs de saisies permettant à un responsable de rentrer les notes de
partiels et d’examens. Chacun de ces deux champs apparaissent devant les noms et les prénoms des
étudiants. Indiquez les modifications à apporter au script précédent permettant l’affichage de ces
champs ainsi que le bouton d’envoi du formulaire. Une fois le bouton d’envoi est pressé, le script PHP
CalculNote.php calculera la moyenne générale des notes (voir la question suivante).
Indication : On pourra utiliser un champ idp et ide permettant le repérage des notes de partiels et
d’examens.
3- On s’intéresse maintenant au script CalculNote.php calculant la moyenne générale. Pour cela on
suppose que le coefficient du partiel vaut 0.4 et celui de l’examen est égal à 0.6. Donnez les
instructions permettant d’afficher la moyenne générale des notes.
Indication : La formule de ce calcul est
1
MoyenneG =
∑ 0.4 * x. partiel + 0.6 * x.examen où x.partiel (respectivement x.examen)
NbEtudiants x∈{Etudiants}
est la note du partiel (respectivement de l’examen) de l’étudiant x.
Lettres initiales du Prénom et du Nom:
page 14