Ceci est une ancienne révision du document !


TP Génération de XML via SQL

Ce TP sera réalisé sous Oracle SQLDevelopper (disponible en salle TP Windows). Chaque étudiant se verra attribuer un compte oracle via tomuss (cf aide Oracle).

Modalités de rendu

Ce TP est à réaliser seul ou en binôme (trinômes interdits). On téléchargera le fichier de réponses forets-sql-xml.sql. On complétera le fichier et on le renommera en Groupe_Nom1_Prenom1_Nom2_Prenom2_reponses-tp-xml.sql. Groupe est le numéro groupe de TP 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ôme1).

<note warning>Ne pas modifier les commentaires déjà présents dans le fichier réponse à l'exception de l'entête contenant les noms/prénoms/numéro d'étudiant qu'il conviendra de compléter.</note>

On déposera ce fichier sur spiral.

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 “Générer du XML dans Oracle”. Dans un deuxième temps, on créera des vues à interroger. Enfin on répondra aux questions dans le fichier de réponses en s'inspirant du TP cité ci-dessus.

Vues relationnelles

Les données relationnelles seront accessibles en créant dans votre compte les vues suivantes:

vues_forets.sql
CREATE VIEW arbres AS 
SELECT * FROM ECOQUERY.arbres_foret_2011;
 
CREATE VIEW documentation AS 
SELECT * FROM ECOQUERY.documentation_2011;

Le document de description arbres décrit les attributs de la vue arbres.

La vue documentation décrit, pour un certain nombre d'attributs (DONNEE) de la table arbre, une correspondance entre la valeur (CODE) dans la table et une description textuelle (LIBELLE). Par exemple la liste des couples valeur/description pour l'attribut ESPAR de la vue arbres peut être obtenue par la requête suivante:

SELECT code, libelle
FROM documentation
WHERE donnee = 'ESPAR';

Génération de XML

Il s'agit d'é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:

<!DOCTYPE titre [
<!ELEMENT titre (#PCDATA)>
]>

Réponse:

SELECT XMLElement(name "titre", titre) AS vxml, id FROM film

Questions

  1. Donner, pour chaque arbre de la parcelle 613376 (IDP), sa hauteur totale (HTOT).
    <!DOCTYPE arbre [
    <!ELEMENT arbre(hauteur)>
    <!ELEMENT hauteur (#PCDATA)>
    ]>
  2. Reprendre la question précédente et ajouter un attribut id (valeur obtenue via A) dans l'élément arbre.
    <!DOCTYPE arbre [
    <!ELEMENT arbre(hauteur)>
    <!ATTLIST arbre id CDATA #REQUIRED>
    <!ELEMENT hauteur (#PCDATA)>
    ]>
  3. Ajouter, lorsqu'elle est disponible, le nom de l'espèce (code: ESPAR, nom obtenu via la vue documentation), toujours pour la parcelle 613376. Remarque: il y a deux arbres dont le code espece n'est pas dans documentation.
    <!DOCTYPE arbre [
    <!ELEMENT arbre(hauteur,espece?)>
    <!ATTLIST arbre id CDATA #REQUIRED>
    <!ELEMENT hauteur (#PCDATA)>
    <!ELEMENT espece (#PCDATA)>
    ]>
  4. Donner pour chaque espèce (valeur distincte ESPAR) son nom (si disponible) et le nombre d'arbres de cette espece.
    <!DOCTYPE espece [
    <!ELEMENT espece (nom?,quantite)>
    <!ATTLIST espece code CDATA #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT quantite (#PCDATA)>
    ]> 
  5. Pour chaque parcelle dont l'identifiant (IDP) est inférieur ou égal à 600200, donner l'identifiant de la parcelle, le nombre d'arbres de cette parcelle et la liste des espèces présentes dans cette parcelle (son code ESPAR sous forme d'attribut XML et pour celles dont on le connait, leur nom sous forme de texte).
    <!DOCTYPE parcelle [
    <!ELEMENT parcelle (nb,espece*)>
    <!ATTLIST parcelle id CDATA #REQUIRED>
    <!ELEMENT nb (#PCDATA)>
    <!ELEMENT espece (#PCDATA)>
    <!ATTLIST espece code CDATA #REQUIRED>
    ]>
  6. Pour les espèces présentes dans entre 2 et 5 parcelles, donner leur code, leur nom et la liste des parcelles (IDP) contenant des arbres de cette espèce.
    <!DOCTYPE espece [
    <!ELEMENT espece (nom,parcelle+)>
    <!ATTLIST espece code CDATA #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT parcelle EMPTY>
    <!ATTLIST parcelle id CDATA #REQUIRED>
    ]>
  7. Reprendre la question précédente en ajoutant le nombre d'arbres de l'espèce concernée dans la parcelle concernée sous forme de texte dans l'élément parcelle.
    <!DOCTYPE espece [
    <!ELEMENT espece (nom,parcelle+)>
    <!ATTLIST espece code CDATA #REQUIRED>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT parcelle (#PCDATA)>
    <!ATTLIST parcelle id CDATA #REQUIRED>
    ]>
1)
le cas échéant