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