Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
enseignement:tp:bd:tp-xml-sql:2015 [2015/10/04 18:05]
ecoquery [Questions]
enseignement:tp:bd:tp-xml-sql:2015 [2015/10/08 06:38]
ecoquery [Questions]
Ligne 5: Ligne 5:
 ===== Modalités de rendu ===== ===== 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 FIXME. 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ôme((le cas échéant)).+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: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ôme((le cas échéant)).
  
 <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> <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 FIXME+On déposera ce fichier sur [[http://spiralconnect.univ-lyon1.fr/webapp/activities/activities.jsp?containerId=4975035|spiral]] **pour le 13/10/2015**
  
 Le non-respect de ces consignes pourra être sanctionné dans la note de ce TP. Le non-respect de ces consignes pourra être sanctionné dans la note de ce TP.
Ligne 17: Ligne 17:
 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 des vues à interroger. Enfin on répondra aux questions dans le fichier de réponses en s'inspirant du TP cité ci-dessus. 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 des vues à interroger. Enfin on répondra aux questions dans le fichier de réponses en s'inspirant du TP cité ci-dessus.
  
 +  * [[http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions002.htm#SQLRF51185|Doc Oracle sur les fonctions XML]]
 ===== Vues relationnelles ===== ===== Vues relationnelles =====
  
Ligne 37: Ligne 38:
 </code> </code>
  
 +<note tip>Il est également possible de réaliser ce tp sous postgresql. Il convient alors d'insérer les données dans la base via le script suivant: {{:enseignement:tp:bd:tp-xml-sql:forets-postgres.sql.gz|}}</note>
 ===== Génération de XML ===== ===== Génération de XML =====
  
Ligne 56: Ligne 57:
 <!ELEMENT arbre(hauteur)> <!ELEMENT arbre(hauteur)>
 <!ELEMENT hauteur (#PCDATA)> <!ELEMENT hauteur (#PCDATA)>
-]></code>+]></code>27 ou 8 réponses selon que l'on met des hauteurs vides ou non.
   - Reprendre la question précédente et ajouter un attribut ''id'' (valeur obtenue via ''A'') dans l'élément ''arbre''.<code xml><!DOCTYPE arbre [   - Reprendre la question précédente et ajouter un attribut ''id'' (valeur obtenue via ''A'') dans l'élément ''arbre''.<code xml><!DOCTYPE arbre [
 <!ELEMENT arbre(hauteur)> <!ELEMENT arbre(hauteur)>
 <!ATTLIST arbre id CDATA #REQUIRED> <!ATTLIST arbre id CDATA #REQUIRED>
 <!ELEMENT hauteur (#PCDATA)> <!ELEMENT hauteur (#PCDATA)>
-]></code> +]></code>27 ou 8 réponses selon que l'on met des hauteurs vides ou non. 
-  - Ajouter, lorsqu'elle est disponible, le nom de l'espèce (code: ''ESPAR'', nom obtenu via la vue ''documentation''), toujours pour la parcelle 613376. <code xml><!DOCTYPE arbre [+  - Ajouter, lorsqu'elle est disponible, le nom de l'espèce (code: ''ESPAR'', nom obtenu via la vue ''documentation''((Attention, les codes sont réemployés ''select * from documentation where code = '02';'' renvoie 9 résultats))), toujours pour la parcelle 613376. Remarque: il y a deux arbres dont le code espece n'est pas dans documentation. On doit avoir le même nombre de résultats qu'à la question précédente (utiliser e.g. un [[http://www.geekphilip.com/2012/04/01/visual-explanation-of-sql-joins/|XXX OUTER JOIN]]). <code xml><!DOCTYPE arbre [
 <!ELEMENT arbre(hauteur,espece?)> <!ELEMENT arbre(hauteur,espece?)>
 <!ATTLIST arbre id CDATA #REQUIRED> <!ATTLIST arbre id CDATA #REQUIRED>
Ligne 73: Ligne 74:
 <!ELEMENT nom (#PCDATA)> <!ELEMENT nom (#PCDATA)>
 <!ELEMENT quantite (#PCDATA)> <!ELEMENT quantite (#PCDATA)>
-]> </code> +]> </code>115 réponses((:!: SQLDeveloper n'affiche que les 50 première si on ne fait pas défiler les résultats)) 
-  - 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).<code xml><!DOCTYPE parcelle [+  - Pour chaque parcelle dont l'identifiant (''IDP'') est inférieur ou égal à 600200, donner l'identifiant de la parcelle et la liste //sans doublons// 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).<code xml><!DOCTYPE parcelle [ 
 +<!ELEMENT parcelle (espece*)> 
 +<!ATTLIST parcelle id CDATA #REQUIRED> 
 +<!ELEMENT espece (#PCDATA)> 
 +<!ATTLIST espece code CDATA #REQUIRED> 
 +]></code>13 réponses 
 +  - 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 //sans doublons// 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).<code xml><!DOCTYPE parcelle [
 <!ELEMENT parcelle (nb,espece*)> <!ELEMENT parcelle (nb,espece*)>
 <!ATTLIST parcelle id CDATA #REQUIRED> <!ATTLIST parcelle id CDATA #REQUIRED>
Ligne 80: Ligne 87:
 <!ELEMENT espece (#PCDATA)> <!ELEMENT espece (#PCDATA)>
 <!ATTLIST espece code CDATA #REQUIRED> <!ATTLIST espece code CDATA #REQUIRED>
-]></code> +]></code>13 réponses 
-  - 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.<code xml><!DOCTYPE espece [+  - Pour les espèces présentes dans entre 2 et 5 parcelles, donner leur code, leur nom et la liste //sans doublons// des parcelles (''IDP'') contenant des arbres de cette espèce.<code xml><!DOCTYPE espece [
 <!ELEMENT espece (nom,parcelle+)> <!ELEMENT espece (nom,parcelle+)>
 <!ATTLIST espece code CDATA #REQUIRED> <!ATTLIST espece code CDATA #REQUIRED>
Ligne 87: Ligne 94:
 <!ELEMENT parcelle EMPTY> <!ELEMENT parcelle EMPTY>
 <!ATTLIST parcelle id CDATA #REQUIRED> <!ATTLIST parcelle id CDATA #REQUIRED>
-]></code>+]></code>15 réponses
   - 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''.<code xml><!DOCTYPE espece [   - 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''.<code xml><!DOCTYPE espece [
 <!ELEMENT espece (nom,parcelle+)> <!ELEMENT espece (nom,parcelle+)>
Ligne 94: Ligne 101:
 <!ELEMENT parcelle (#PCDATA)> <!ELEMENT parcelle (#PCDATA)>
 <!ATTLIST parcelle id CDATA #REQUIRED> <!ATTLIST parcelle id CDATA #REQUIRED>
-]></code>+]></code>15 réponses 
 + 
 + 
 +<note tip>Pour les requêtes complexes, mettez d'abord au point une requête SQL //classique// dont vous modifierez ensuite la clause ''SELECT'' pour produire du XML </note>