====== TP Génération de XML via SQL ====== Ce TP peut être réalisé dans les salles TP du Nautibus en démarrant la machine sous Linux Windows, ou sur toute machine personnelle sur laquelle on aura installé un serveur PostgreSQL ainsi qu'un client type pgAdminIII. Le fichier de données à utiliser dans ce cas est {{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-postgresql.sql|}} Il peut également être utilisé avec Oracle via le client SQLDeveloper. [[enseignement:aide:oracle|Connexion aux bases de données pédagogiques Oracle]]. Dans ce cas il faut charger les données en utilisant {{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-oracle.sql|}} ===== Modalités de rendu ===== **Le TP ne sera pas noté** * [[http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1807939|Page de dépôt sur Spiral]] pour rendre le TP. Ce TP est à réaliser seul ou en binôme (trinômes interdits). On téléchargera le fichier de réponses {{:enseignement:tp:bd:tp-xml-sql:reponses-tp-xml-sql.txt|reponses-tp-xml-sql.txt}}. On complétera le fichier et on le renommera en ''Groupe_Nom1_Prenom1_Nom2_Prenom2_reponses-tp-xml-sql.txt''. Groupe est le numéro groupe de TD de M1, Nom1_Prenom1 est le nom et le prénom du premier membre du binôme, Nom2_Prenom2 est le nom et le prénom du second membre du binôme((le cas échéant)). On déposera ce fichier [[http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1807939|sur Spiral]] le dimanche 14 octobre 2012 au plus tard. Le non-respect de ces consignes pourra être sanctionné dans la note de ce TP. ===== Introduction ===== L'objectif de ce TP est de pratiquer la création de (fragments de) documents XML directement à partir de données relationnelles en SQL. Le TP consiste dans un premier temps à lire et comprendre le TP "[[enseignement:tp:bd:tp-xml-sql|Générer du XML dans Oracle]]". Dans un deuxième temps, on créera un ensemble de relation dans une base PostgreSQL ({{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-postgresql.sql|}}) ou Oracle ({{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-oracle.sql|}}) et on utilisera les fonctions SQL/XML du dans le [[enseignement:tp:bd:tp-xml-sql|TP cité ci-dessus]] ((les fonctions de génération SQL d'Oracle du TP sont utilisables également dans PostgreSQL, à l'exception des fonctions pour manipuler XQuery)) pour générer du XML à partir des données relationnelles. ===== Mise en place ===== Bien lire le TP [[enseignement:tp:bd:tp-xml-sql|Générer du XML dans Oracle]]" afin de comprendre le fonctionnement des fonctions ''XMLElement'', ''XMLAttributes'', ''XMLForest'' et ''XMLAgg''. Utiliser pgAdminIII pour se connecter à la base postgres en utilisant les login/mot de passe ''etudiant''/''etudiant''. Exécuter le script {{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-postgresql.sql|}}/{{:enseignement:tp:bd:tp-xml-sql:tp-xml-sql-2012-data-oracle.sql|}} afin de créer les tables et d'ajouter des données. Écrire des requêtes SQL afin de générer du XML en réponse aux requêtes en français ci-dessous. Ce XML se situera toujours dans une colonne ''vxml'' dans le résultat de la requête. Il sera toujours conforme à la DTD indiquée dans la question. ---- **Exemple** "Donner le titre de chaque film, un film étant identifié par son ''id''."\\ DTD: ]>Réponse:SELECT XMLElement(name "titre", titre) as vxml, id FROM film ---- ==== Questions ==== - Donner, pour chaque acteur identifié par son ''id'', son nom. ]> - Reprendre la question précédente et ajouter un attribut ''id'' dans l'élément acteur. ]> - Pour chaque role (table ''joue_dans'') donner le titre du film et le nom de l'acteur associé, en plus, le cas échéant, du nom du personnage. ]> - Reprendre la question 2 et ajouter un élément ''nbRoles'' dont la valeur est le nombre de roles interprétés par l'acteur en question. ]> - Pour chaque film, donner son titre, son ''id'' comme attribut, son annee et les acteurs (plus précisement leur nom) qui y ont participé. ]> - Pour les acteurs (nom et id) et les films (titre) dans lesquels ils ont joué, en se limitant aux acteurs ayant joué dans au moins deux films. ]> - Reprendre la question 5 et y ajouter les réalisateurs et les producteurs ]>