Mettez en pratique vos connaissances et validez votre maîtrise du cours
Testez votre compréhension avec ces mises en situation réelles. Choisissez la meilleure réponse pour chaque scénario.
Quelle technologie de validation choisir ?
Quelle déclaration DTD est correcte ?
Quelle déclaration ATTLIST est correcte ?
Quelle expression XPath est correcte ?
Quelle expression XPath est correcte ?
Quelle facette XSD utiliser ?
Quelle expression XQuery est correcte ?
Quelle requête MongoDB est correcte ?
Quel ordre de pipeline est optimal ?
Quelle technologie choisir ?
Quelle déclaration DTD est correcte ?
Quels attributs utiliser ?
Quel axe XPath utiliser ?
Quelle syntaxe XQuery est correcte ?
Quelle requête MongoDB est correcte ?
Quelle déclaration DTD permet cette relation ?
Ce dataset représente une université avec des étudiants, des cours et des professeurs. Utilisez-le pour pratiquer vos requêtes XPath et XQuery.
<?xml version="1.0" encoding="UTF-8"?>
<universite nom="HELHa" ville="Mons">
<!-- PROFESSEURS -->
<professeurs>
<professeur id="P001" titre="Dr">
<nom>Dupont</nom>
<prenom>Marie</prenom>
<email>marie.dupont@helha.be</email>
<departement>Informatique</departement>
</professeur>
<professeur id="P002" titre="Pr">
<nom>Martin</nom>
<prenom>Jean</prenom>
<email>jean.martin@helha.be</email>
<departement>Informatique</departement>
</professeur>
<professeur id="P003" titre="Dr">
<nom>Bernard</nom>
<prenom>Sophie</prenom>
<email>sophie.bernard@helha.be</email>
<departement>Gestion</departement>
</professeur>
</professeurs>
<!-- COURS -->
<cours>
<cours id="SGBD" credits="5" obligatoire="true" prof_id="P001">
<intitule>Systèmes de Gestion de Bases de Données</intitule>
<heures>60</heures>
<annee>3</annee>
</cours>
<cours id="JAVA" credits="6" obligatoire="true" prof_id="P002">
<intitule>Programmation Java Avancée</intitule>
<heures>75</heures>
<annee>2</annee>
</cours>
<cours id="WEB" credits="4" obligatoire="true" prof_id="P001">
<intitule>Développement Web</intitule>
<heures>45</heures>
<annee>2</annee>
</cours>
<cours id="STAT" credits="3" obligatoire="false" prof_id="P003">
<intitule>Statistiques Appliquées</intitule>
<heures>30</heures>
<annee>1</annee>
</cours>
<cours id="GEST" credits="4" obligatoire="false" prof_id="P003">
<intitule>Gestion de Projet</intitule>
<heures>40</heures>
<annee>3</annee>
</cours>
</cours>
<!-- ETUDIANTS -->
<etudiants>
<etudiant id="E001" sexe="F" annee="3">
<nom>Lefebvre</nom>
<prenom>Alice</prenom>
<email>alice.lefebvre@student.helha.be</email>
<dateNaissance>2002-05-15</dateNaissance>
<inscriptions>
<inscription cours_id="SGBD" note="16.5"/>
<inscription cours_id="JAVA" note="14.0"/>
<inscription cours_id="GEST" note="18.0"/>
</inscriptions>
</etudiant>
<etudiant id="E002" sexe="M" annee="3">
<nom>Dubois</nom>
<prenom>Thomas</prenom>
<email>thomas.dubois@student.helha.be</email>
<dateNaissance>2001-11-22</dateNaissance>
<inscriptions>
<inscription cours_id="SGBD" note="12.0"/>
<inscription cours_id="WEB" note="15.5"/>
</inscriptions>
</etudiant>
<etudiant id="E003" sexe="F" annee="2">
<nom>Moreau</nom>
<prenom>Emma</prenom>
<email>emma.moreau@student.helha.be</email>
<dateNaissance>2003-03-08</dateNaissance>
<inscriptions>
<inscription cours_id="JAVA" note="17.5"/>
<inscription cours_id="WEB" note="16.0"/>
<inscription cours_id="STAT" note="13.5"/>
</inscriptions>
</etudiant>
<etudiant id="E004" sexe="M" annee="1">
<nom>Petit</nom>
<prenom>Lucas</prenom>
<email>lucas.petit@student.helha.be</email>
<dateNaissance>2004-08-30</dateNaissance>
<inscriptions>
<inscription cours_id="STAT" note="11.0"/>
</inscriptions>
</etudiant>
<etudiant id="E005" sexe="F" annee="3">
<nom>Robert</nom>
<prenom>Chloé</prenom>
<email>chloe.robert@student.helha.be</email>
<dateNaissance>2002-01-14</dateNaissance>
<inscriptions>
<inscription cours_id="SGBD" note="19.0"/>
<inscription cours_id="JAVA" note="18.5"/>
<inscription cours_id="WEB" note="17.0"/>
<inscription cours_id="GEST" note="16.5"/>
</inscriptions>
</etudiant>
<etudiant id="E006" sexe="M" annee="2">
<nom>Richard</nom>
<prenom>Hugo</prenom>
<email>hugo.richard@student.helha.be</email>
<dateNaissance>2003-06-21</dateNaissance>
<inscriptions>
<inscription cours_id="JAVA" note="9.5"/>
<inscription cours_id="STAT" note="14.0"/>
</inscriptions>
</etudiant>
</etudiants>
</universite>
Écrivez les expressions XPath pour :
<!-- 1. Tous les étudiants -->
//etudiant
<!-- 2. Le nom de l'université -->
/universite/@nom
<!-- 3. Cours obligatoires -->
//cours[@obligatoire='true']
<!-- 4. Étudiants en 3e année -->
//etudiant[@annee='3']
Écrivez les expressions XPath pour :
<!-- 1. Étudiants avec plus de 2 inscriptions -->
//etudiant[count(inscriptions/inscription) > 2]
<!-- 2. Cours avec plus de 50 heures -->
//cours[heures > 50]
<!-- 3. Total des crédits -->
sum(//cours/@credits)
<!-- 4. Étudiantes nées après 2002 -->
//etudiant[@sexe='F' and dateNaissance > '2002-12-31']
Écrivez les expressions XPath pour :
<!-- 1. Professeur du cours SGBD -->
<!-- On récupère d'abord le prof_id du cours SGBD, puis on cherche le professeur -->
//professeur[@id = //cours[@id='SGBD']/@prof_id]/nom
<!-- 2. Intitulés des cours d'Alice -->
//cours[@id = //etudiant[prenom='Alice']/inscriptions/inscription/@cours_id]/intitule
<!-- 3. Emails des étudiants avec note ≥ 15 -->
//etudiant[inscriptions/inscription[@note >= 15]]/email
Écrivez les requêtes XQuery pour :
<!-- 1. Prénoms des étudiants -->
for $e in //etudiant
return $e/prenom
<!-- 2. Cours triés par heures -->
for $c in //cours
order by $c/heures descending
return $c/intitule
<!-- 3. Nom et email des professeurs -->
for $p in //professeur
return
<prof>
<nom>{data($p/nom)}</nom>
<email>{data($p/email)}</email>
</prof>
Écrivez les requêtes XQuery pour :
<!-- 1. Étudiants avec note ≥ 18 -->
for $e in //etudiant
where $e/inscriptions/inscription[@note >= 18]
return
<excellent>
{$e/nom}
{$e/prenom}
</excellent>
<!-- 2. Cours obligatoires avec détails -->
for $c in //cours[@obligatoire='true']
let $prof := //professeur[@id = $c/@prof_id]
return
<cours-oblig credits="{$c/@credits}">
<intitule>{data($c/intitule)}</intitule>
<professeur>{concat($prof/prenom, ' ', $prof/nom)}</professeur>
</cours-oblig>
<!-- 3. Moyenne par étudiant -->
for $e in //etudiant
let $notes := $e/inscriptions/inscription/@note
return
<etudiant nom="{$e/nom}">
<moyenne>{avg($notes)}</moyenne>
</etudiant>
Écrivez les requêtes XQuery pour :
<!-- 1. Étudiants par année -->
for $e in //etudiant
let $annee := $e/@annee
group by $annee
return
<annee niveau="{$annee}" count="{count($e)}"/>
<!-- 2. Moyenne par cours -->
for $c in //cours
let $cours_id := $c/@id
let $notes := //inscription[@cours_id = $cours_id]/@note
return
<cours id="{$cours_id}">
<moyenne>{round(avg($notes) * 100) div 100}</moyenne>
</cours>
<!-- 3. Cours par professeur -->
for $p in //professeur
let $nbCours := count(//cours[@prof_id = $p/@id])
return
<professeur nom="{concat($p/titre, ' ', $p/nom)}">
<nombre-cours>{$nbCours}</nombre-cours>
</professeur>
let pour stocker des valeurs intermédiairesdata() pour extraire le texte d'un élément//element[@id = $variable/@ref_id]Q1. Quel nom d'élément XML est invalide ?
Q2. Quelle entité XML représente le caractère & ?
Q3. Combien d'éléments racine un document XML peut-il avoir ?
Q4. Quelle est la différence entre un document "bien-formé" et "valide" ?
Q5. Quelle déclaration DTD indique un élément optionnel (0 ou 1) ?
Q6. Quelle déclaration DTD signifie "1 ou plusieurs" ?
Q7. En DTD, quel type d'attribut référence un ID existant ?
Q8. Pour le contenu mixte en DTD, où doit se placer #PCDATA ?
Q9. Quel mot-clé DTD indique un attribut obligatoire ?
Q10. En XSD, quelle facette permet de définir une expression régulière ?
Q11. Comment traduire DTD "element+" en XSD ?
Q12. Quel type XSD utiliser pour valider un format ISBN (XXX-X-XXX) ?
Q13. Quelle facette limite les valeurs numériques entre 0 et 20 ?
Q14. Quel type XSD utiliser pour une date (ex: 2025-01-15) ?
Q15. Quel axe XPath sélectionne les éléments frères suivants ?
Q16. Quelle est la différence entre //livre[1] et (//livre)[1] ?
Q17. Comment sélectionner les livres disponibles en XPath ?
Q18. Quelle fonction XPath compte le nombre d'éléments ?
Q19. Comment combiner deux conditions XPath sur les attributs ?
Q20. En XQuery, quelle syntaxe permet d'évaluer une expression dans un attribut ?
Q21. Quel est l'ordre correct des clauses FLWOR ?
Q22. Comment trier en ordre décroissant en XQuery ?
Q23. Quel opérateur MongoDB incrémente une valeur ?
Q24. Dans un pipeline MongoDB, quelle étape doit être placée en premier pour optimiser les performances ?
Q25. Comment faire un OR logique entre deux conditions en MongoDB ?
| Module | Concepts Cles | A Retenir |
|---|---|---|
| XML | Bien-forme vs Valide, Elements/Attributs | Racine unique, balises fermees |
| DTD | ELEMENT, ATTLIST, Cardinalite | #PCDATA en premier pour mixte |
| XSD | simpleType, complexType, Facettes | pattern, enumeration, min/maxOccurs |
| XPath | Axes, Predicats, Fonctions | //livre[1] vs (//livre)[1] |
| XQuery | FLWOR, Construction XML | {...} pour evaluation dynamique |
| MongoDB | CRUD, Pipeline Agregation | $match en premier, $group avec $ |