diff --git a/tetras_extraction/macao_12/result/macao_content.ttl b/tetras_extraction/macao_12/result/macao_content.ttl
index 173cf3dbb63815fcce5108369546dd9d3fa29ec1..c1313694b498e9caf30447e53fb58470a63b1858 100644
--- a/tetras_extraction/macao_12/result/macao_content.ttl
+++ b/tetras_extraction/macao_12/result/macao_content.ttl
@@ -16,15 +16,18 @@
     :titre "Présentation" ;
     rdfs:subClassOf :MacaoRoot .
 
-:pg10 a :Page,
+:pg10 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (10)" ;
     :__protege_display_name "09 | pg10 | Les symboles phonétiques (10)" ;
+    :id "pg10" ;
     :index 9 ;
     :titre "Les symboles phonétiques (10)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg1000 a :Page,
+:pg1000 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (9)" ;
     :__protege_display_name "18 | pg1000 | Choisir une transcription (9)" ;
@@ -76,19 +79,23 @@
         </table>
         </div>
 """ ;
+    :id "pg1000" ;
     :index 18 ;
     :titre "Choisir une transcription (9)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg101 a :Page,
+:pg101 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Repérer l'accent primaire et l'accent secondaire" ;
     :__protege_display_name "02 | pg101 | Repérer l'accent primaire et l'accent secondaire" ;
+    :id "pg101" ;
     :index 2 ;
     :titre "Repérer l'accent primaire et l'accent secondaire" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg108 a :Page,
+:pg108 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une prononciation (3)" ;
     :__protege_display_name "09 | pg108 | Choisir une prononciation (3)" ;
@@ -99,11 +106,13 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous trompez, la transcription
         correspond au premier mot entendu : <i>thing</i>.<br><br><br><br> </p></div>
 """ ;
+    :id "pg108" ;
     :index 9 ;
     :titre "Choisir une prononciation (3)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg112 a :Page,
+:pg112 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate  (2)" ;
     :__protege_display_name "08 | pg112 | Choisir l'accentuation adéquate  (2)" ;
@@ -126,11 +135,13 @@
         <p align=""><font color="#a60a69"><br></font> <br><br><br><br><br><br><br><br><br><font color="#a60a69"><span style="FONT-SIZE: 90%"><font color="#a60a69">Voici le corrigé :<br><br>The soldier decided<br>to <i><b>desert</b></i> before reaching the <i><b>desert</b></i>.<br></font></span><br>    <img align="center" border="0" src="../media/phon_desert_2.png" id="MosImg1655" style="visibility:hidden">      
                 <img align="center" border="0" src="../media/phon_desert_1.png" id="MosImg2193" style="visibility:hidden"></font></p></div>
 """ ;
+    :id "pg112" ;
     :index 8 ;
     :titre "Choisir l'accentuation adéquate  (2)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg149 a :Page,
+:pg149 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir entre deux mots (1)" ;
     :__protege_display_name "12 | pg149 | Choisir entre deux mots (1)" ;
@@ -182,11 +193,13 @@
         </table>
         </div>
 """ ;
+    :id "pg149" ;
     :index 12 ;
     :titre "Choisir entre deux mots (1)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg155 a :Page,
+:pg155 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Distinguer d'éventuelles variantes (4)" ;
     :__protege_display_name "07 | pg155 | Distinguer d'éventuelles variantes (4)" ;
@@ -212,51 +225,63 @@
         <p align=""><i>In </i>est prononcé dans les deux énoncés sans différence notable. Prenez le temps de réécouter
             chaque énoncé en cliquant sur le bouton.</p></div>
 """ ;
+    :id "pg155" ;
     :index 7 ;
     :titre "Distinguer d'éventuelles variantes (4)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg156 a :Page,
+:pg156 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'accentuation des syllabes (1)" ;
     :__protege_display_name "00 | pg156 | L'accentuation des syllabes (1)" ;
+    :id "pg156" ;
     :index 0 ;
     :titre "L'accentuation des syllabes (1)" ;
     rdfs:subClassOf :MosEtp777 .
 
-:pg162 a :Page,
+:pg162 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire BE (1)" ;
     :__protege_display_name "14 | pg162 | L'auxiliaire BE (1)" ;
+    :id "pg162" ;
     :index 14 ;
     :titre "L'auxiliaire BE (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg170 a :Page,
+:pg170 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (3)" ;
     :__protege_display_name "02 | pg170 | Les symboles phonétiques (3)" ;
+    :id "pg170" ;
     :index 2 ;
     :titre "Les symboles phonétiques (3)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg175 a :Page,
+:pg175 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : liste des phonèmes" ;
     :__protege_display_name "13 | pg175 | Mémento : liste des phonèmes" ;
+    :id "pg175" ;
     :index 13 ;
     :titre "Mémento : liste des phonèmes" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg182 a :Page,
+:pg182 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Désigner la syllabe la plus accentuée (2)" ;
     :__protege_display_name "01 | pg182 | Désigner la syllabe la plus accentuée (2)" ;
+    :id "pg182" ;
     :index 1 ;
     :titre "Désigner la syllabe la plus accentuée (2)" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg20 a :Page,
+:pg20 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Ecoutez et complétez (2)" ;
     :__protege_display_name "02 | pg20 | Ecoutez et complétez (2)" ;
@@ -271,11 +296,13 @@
             until they are ripe and rosy, and then we shall pick them and put them quite away <b>for the</b>
             winter-time'.</p></div>
 """ ;
+    :id "pg20" ;
     :index 2 ;
     :titre "Ecoutez et complétez (2)" ;
     rdfs:subClassOf :MosEtp558 .
 
-:pg205 a :Page,
+:pg205 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (7)" ;
     :__protege_display_name "06 | pg205 | Choisir une transcription (7)" ;
@@ -287,11 +314,13 @@
         </p>
         <p align=""><br><br><br><br> </p></div>
 """ ;
+    :id "pg205" ;
     :index 6 ;
     :titre "Choisir une transcription (7)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg2051 a :Page,
+:pg2051 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (11)" ;
     :__protege_display_name "20 | pg2051 | Choisir une transcription (11)" ;
@@ -347,11 +376,13 @@
         </table>
         </div>
 """ ;
+    :id "pg2051" ;
     :index 20 ;
     :titre "Choisir une transcription (11)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg217 a :Page,
+:pg217 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (1)" ;
     :__protege_display_name "00 | pg217 | Choisir une transcription (1)" ;
@@ -361,11 +392,13 @@
         <br><br><img src="../media/phon_thin.png" id="MosImg34" border="0" align="center" style="visibility:hidden">
     </div>
 """ ;
+    :id "pg217" ;
     :index 0 ;
     :titre "Choisir une transcription (1)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg220 a :Page,
+:pg220 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (3)" ;
     :__protege_display_name "16 | pg220 | Spécificité des voyelles (3)" ;
@@ -375,11 +408,13 @@
         sons mais ils ne sont pas prononcés de manière égale. Réécoutez le mot.
     </div>
 """ ;
+    :id "pg220" ;
     :index 16 ;
     :titre "Spécificité des voyelles (3)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg226 a :Page,
+:pg226 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (5)" ;
     :__protege_display_name "19 | pg226 | Spécificité des voyelles (5)" ;
@@ -389,11 +424,13 @@
         mots.
     </div>
 """ ;
+    :id "pg226" ;
     :index 19 ;
     :titre "Spécificité des voyelles (5)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg228 a :Page,
+:pg228 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate  (4)" ;
     :__protege_display_name "10 | pg228 | Choisir l'accentuation adéquate  (4)" ;
@@ -410,19 +447,23 @@
         """<div id="divSugg4" onclick="SPE_clicDansBulle(event,'divSugg4')"><font color="#a60a69"><span style="FONT-SIZE: 90%"><font color="#a60a69"><br><br><br><br><br><br><br><br><br><br><br>Voici le corrigé : <br><br>How can <br>I <i><b>intimate </b></i>this to my most <i><b>intimate</b></i> friend ?</font></span><br></font><br><font color="#a60a69"> <img align="center" border="0" src="../media/phon_intimate_1.png" id="MosImg84443" style="visibility:hidden">                </font><img align="center" border="0" src="../media/phon_intimate_2.png" id="MosImg649542" style="visibility:hidden"><br>
     </div>
 """ ;
+    :id "pg228" ;
     :index 10 ;
     :titre "Choisir l'accentuation adéquate  (4)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg239 a :Page,
+:pg239 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Syllabe orale" ;
     :__protege_display_name "03 | pg239 | Syllabe orale" ;
+    :id "pg239" ;
     :index 3 ;
     :titre "Syllabe orale" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg262 a :Page,
+:pg262 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compter les syllabes orales (1)" ;
     :__protege_display_name "04 | pg262 | Compter les syllabes orales (1)" ;
@@ -439,19 +480,23 @@
         <p align=""><br>average: 2 syllabes.</p>
         <p align=""><br>interested: 3 syllabes.</p></div>
     """ ;
+    :id "pg262" ;
     :index 4 ;
     :titre "Compter les syllabes orales (1)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg278 a :Page,
+:pg278 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (12)" ;
     :__protege_display_name "11 | pg278 | Les symboles phonétiques (12)" ;
+    :id "pg278" ;
     :index 11 ;
     :titre "Les symboles phonétiques (12)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg288 a :Page,
+:pg288 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : l'accentuation des syllabes  (2)" ;
     :__protege_display_name "12 | pg288 | Mémento : l'accentuation des syllabes  (2)" ;
@@ -477,11 +522,13 @@
             comportant une et une seule voyelle à laquelle peuvent s'adjoindre une ou plusieurs consonnes. </p>
         <p align=""> </p></div>
 """ ;
+    :id "pg288" ;
     :index 12 ;
     :titre "Mémento : l'accentuation des syllabes  (2)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg293 a :Page,
+:pg293 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate  (5)" ;
     :__protege_display_name "11 | pg293 | Choisir l'accentuation adéquate  (5)" ;
@@ -505,37 +552,45 @@
         <p align=""><font color="#a60a69"><br></font> <br><br><br><br><br><br><br><br></p><font color="#a60a69"><font color="#a60a69"><p align=""><font color="#a60a69"><span style="FONT-SIZE: 90%"><font color="#a60a69">Voici le corrigé :<br><br>The Beatles wanted the technicians to <i><b>record</b></i> their music on a colour <i><b>record</b></i></font><font color="#a60a69">? </font></span></font><font color="#a60a69"><br><br><img align="center" border="0" src="../media/phon_record_1.png" id="MosImg83103" style="visibility:hidden">   
                          <img align="center" border="0" src="../media/phon_record_2.png" id="MosImg31934" style="visibility:hidden"></font></p></font></font></div>
 """ ;
+    :id "pg293" ;
     :index 11 ;
     :titre "Choisir l'accentuation adéquate  (5)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg299 a :Page,
+:pg299 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : longueur de la voyelle" ;
     :__protege_display_name "21 | pg299 | Mémento : longueur de la voyelle" ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
 """ ;
+    :id "pg299" ;
     :index 21 ;
     :titre "Mémento : longueur de la voyelle" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg2991 a :Page,
+:pg2991 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Voyelle réduite" ;
     :__protege_display_name "02 | pg2991 | Voyelle réduite" ;
+    :id "pg2991" ;
     :index 2 ;
     :titre "Voyelle réduite" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg301 a :Page,
+:pg301 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Syllabe écrite" ;
     :__protege_display_name "04 | pg301 | Syllabe écrite" ;
+    :id "pg301" ;
     :index 4 ;
     :titre "Syllabe écrite" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg310 a :Page,
+:pg310 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Remarquer la syllabe la plus accentuée (1)" ;
     :__protege_display_name "09 | pg310 | Remarquer la syllabe la plus accentuée (1)" ;
@@ -544,11 +599,13 @@
         voyelle à laquelle peuvent s'adjoindre une ou plusieurs consonnes.</p>
         <p align=""> </p></div>
 """ ;
+    :id "pg310" ;
     :index 9 ;
     :titre "Remarquer la syllabe la plus accentuée (1)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg313 a :Page,
+:pg313 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Lire des transcriptions phonétiques (2)" ;
     :__protege_display_name "14 | pg313 | Lire des transcriptions phonétiques (2)" ;
@@ -574,11 +631,13 @@
 """ ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
     """ ;
+    :id "pg313" ;
     :index 14 ;
     :titre "Lire des transcriptions phonétiques (2)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg331 a :Page,
+:pg331 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Trouver l'accent secondaire (2)" ;
     :__protege_display_name "04 | pg331 | Trouver l'accent secondaire (2)" ;
@@ -683,11 +742,13 @@
         </table>
         </div>
 """ ;
+    :id "pg331" ;
     :index 4 ;
     :titre "Trouver l'accent secondaire (2)" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg334 a :Page,
+:pg334 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Comparer ''syllabes écrites'' et ''syllabes orales''" ;
     :__protege_display_name "08 | pg334 | Comparer ''syllabes écrites'' et ''syllabes orales''" ;
@@ -701,27 +762,33 @@
         de l'école primaire où l'on a pu avoir l'habitude d'apprendre à lire en découpant les mots.
     </div>
 """ ;
+    :id "pg334" ;
     :index 8 ;
     :titre "Comparer ''syllabes écrites'' et ''syllabes orales''" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg359 a :Page,
+:pg359 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire MUST (2)" ;
     :__protege_display_name "01 | pg359 | L'auxiliaire MUST (2)" ;
+    :id "pg359" ;
     :index 1 ;
     :titre "L'auxiliaire MUST (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg368 a :Page,
+:pg368 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Vérifier la place de l'accent primaire (1)" ;
     :__protege_display_name "00 | pg368 | Vérifier la place de l'accent primaire (1)" ;
+    :id "pg368" ;
     :index 0 ;
     :titre "Vérifier la place de l'accent primaire (1)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg376 a :Page,
+:pg376 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Ecouter les mots d'une syllabe" ;
     :__protege_display_name "03 | pg376 | Ecouter les mots d'une syllabe" ;
@@ -730,19 +797,23 @@
         laquelle peuvent s'adjoindre une ou plusieurs consonnes.
     </div>
 """ ;
+    :id "pg376" ;
     :index 3 ;
     :titre "Ecouter les mots d'une syllabe" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg379 a :Page,
+:pg379 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire WILL (3)" ;
     :__protege_display_name "04 | pg379 | L'auxiliaire WILL (3)" ;
+    :id "pg379" ;
     :index 4 ;
     :titre "L'auxiliaire WILL (3)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg381 a :Page,
+:pg381 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire MUST (1)" ;
     :__protege_display_name "00 | pg381 | L'auxiliaire MUST (1)" ;
@@ -758,11 +829,13 @@
             de la <b><a class="STY_lienDansZoneComt" href="javascript:parent.SCO_ouvrirDoc('voyelle','htm')">voyelle</a></b>.
             Vous pouvez réécouter chaque énoncé en cliquant sur le haut-parleur.</p></div>
 """ ;
+    :id "pg381" ;
     :index 0 ;
     :titre "L'auxiliaire MUST (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg386 a :Page,
+:pg386 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une prononciation (2)" ;
     :__protege_display_name "08 | pg386 | Choisir une prononciation (2)" ;
@@ -773,11 +846,13 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous trompez, la transcription
         correspond au second mot entendu : <i>ear</i>.<br><br><br><br> </p></div>
 """ ;
+    :id "pg386" ;
     :index 8 ;
     :titre "Choisir une prononciation (2)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg396 a :Page,
+:pg396 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compter les syllabes orales (2)" ;
     :__protege_display_name "05 | pg396 | Compter les syllabes orales (2)" ;
@@ -796,21 +871,25 @@
         <p align=""><br>precise : 2 syllabes.</p>
         <p align=""><br><br>differently : 3 syllabes.</p></div>
     """ ;
+    :id "pg396" ;
     :index 5 ;
     :titre "Compter les syllabes orales (2)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg397 a :Page,
+:pg397 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Longueur de la voyelle" ;
     :__protege_display_name "00 | pg397 | Longueur de la voyelle" ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
 """ ;
+    :id "pg397" ;
     :index 0 ;
     :titre "Longueur de la voyelle" ;
     rdfs:subClassOf :MosEtp690 .
 
-:pg400 a :Page,
+:pg400 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Lire des transcriptions phonétiques (1)" ;
     :__protege_display_name "13 | pg400 | Lire des transcriptions phonétiques (1)" ;
@@ -835,11 +914,13 @@
 """ ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
     """ ;
+    :id "pg400" ;
     :index 13 ;
     :titre "Lire des transcriptions phonétiques (1)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg401 a :Page,
+:pg401 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire BE (2)" ;
     :__protege_display_name "15 | pg401 | L'auxiliaire BE (2)" ;
@@ -855,19 +936,23 @@
             de la voyelle</a></b> de chacun des auxiliaires. On entend une voyelle plus réduite dans le premier énoncé
             que dans le second. Vous pouvez réécouter chaque énoncé en cliquant sur le haut-parleur.</p></div>
 """ ;
+    :id "pg401" ;
     :index 15 ;
     :titre "L'auxiliaire BE (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg409 a :Page,
+:pg409 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (13)" ;
     :__protege_display_name "12 | pg409 | Les symboles phonétiques (13)" ;
+    :id "pg409" ;
     :index 12 ;
     :titre "Les symboles phonétiques (13)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg41 a :Page,
+:pg41 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (4)" ;
     :__protege_display_name "17 | pg41 | Spécificité des voyelles (4)" ;
@@ -877,19 +962,23 @@
         sons mais ils ne sont pas prononcés de manière égale. Réécoutez le mot.
     </div>
 """ ;
+    :id "pg41" ;
     :index 17 ;
     :titre "Spécificité des voyelles (4)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg435 a :Page,
+:pg435 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Consonne" ;
     :__protege_display_name "01 | pg435 | Consonne" ;
+    :id "pg435" ;
     :index 1 ;
     :titre "Consonne" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg436 a :Page,
+:pg436 a :ExerciceGD,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Placer les accents primaire et secondaire (3)" ;
     :__protege_display_name "06 | pg436 | Placer les accents primaire et secondaire (3)" ;
@@ -904,29 +993,35 @@
         """<div id="divSugg3" onclick="SPE_clicDansBulle(event,'divSugg3')"><p align=""><font color="#000000"><br><br><br><br><br>Comparez vos réponses au corrigé. Vous pouvez réécouter chaque mot :<br><br><br><br><br></font><br><br><br><img align="center" border="0" src="../media/phon_computer_p57_juste.png" id="MosImg604" style="visibility:hidden"><br><br><br><br><img align="center" border="0" src="../media/phon_identify_p57_juste.png" id="MosImg474" style="visibility:hidden"><br><br><br><img align="center" border="0" src="../media/phon_narrativ_justep57.png" id="MosImg498" style="visibility:hidden"><br><br><font color="#a60a69">Vous pouvez remarquer que l'accent primaire ne porte jamais sur une syllabe ne comportant
         qu'une voyelle réduite (ici, /<img align="absMiddle" border="0" src="../media/about.png" width="12" height="12" id="MosImg845873" style="visibility:hidden">/ ).</font></p></div>
 """ ;
+    :id "pg436" ;
     :index 6 ;
     :titre "Placer les accents primaire et secondaire (3)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg437 a :Page,
+:pg437 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire CAN (1)" ;
     :__protege_display_name "10 | pg437 | L'auxiliaire CAN (1)" ;
+    :id "pg437" ;
     :index 10 ;
     :titre "L'auxiliaire CAN (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg44 a :Page,
+:pg44 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : voyelles lâches et voyelles tendues" ;
     :__protege_display_name "18 | pg44 | Mémento : voyelles lâches et voyelles tendues" ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
 """ ;
+    :id "pg44" ;
     :index 18 ;
     :titre "Mémento : voyelles lâches et voyelles tendues" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg444 a :Page,
+:pg444 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Reconnaître le mot commun (5)" ;
     :__protege_display_name "08 | pg444 | Reconnaître le mot commun (5)" ;
@@ -936,19 +1031,23 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Non. </p>
         <p align="">FOR est le seul mot commun aux deux énoncés. Vous pouvez réécouter les énoncés.</p></div>
 """ ;
+    :id "pg444" ;
     :index 8 ;
     :titre "Reconnaître le mot commun (5)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg448 a :Page,
+:pg448 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire CAN (4)" ;
     :__protege_display_name "13 | pg448 | L'auxiliaire CAN (4)" ;
+    :id "pg448" ;
     :index 13 ;
     :titre "L'auxiliaire CAN (4)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg449 a :Page,
+:pg449 a :ExerciceGD,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Placer les accents primaire et secondaire (2)" ;
     :__protege_display_name "05 | pg449 | Placer les accents primaire et secondaire (2)" ;
@@ -972,19 +1071,23 @@
         """<div id="divSugg6" onclick="SPE_clicDansBulle(event,'divSugg6')"><p align=""><font color="#000000"><br><br><br><br><br>Comparez vos réponses au corrigé. Vous pouvez réécouter chaque mot :<br><br><br><br><br><br></font><br><br><img align="center" border="0" src="../media/phon_theoretician_p54_just.png" id="MosImg549" style="visibility:hidden"><br><br><br><br><img align="center" border="0" src="../media/phon_university__p54_juste.png" id="MosImg7745" style="visibility:hidden"><br><br><br><img align="center" border="0" src="../media/phon_recognition_54_juste.png" id="MosImg1" style="visibility:hidden"><br><br><font color="#a60a69">Vous pouvez remarquer que l'accent primaire ne porte jamais sur une syllabe ne comportant
         qu'une voyelle réduite (ici, /<img align="absMiddle" border="0" src="../media/about.png" width="12" height="12" id="MosImg845873" style="visibility:hidden">/ ).</font></p></div>
 """ ;
+    :id "pg449" ;
     :index 5 ;
     :titre "Placer les accents primaire et secondaire (2)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg455 a :Page,
+:pg455 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Désigner la syllabe la plus accentuée (1)" ;
     :__protege_display_name "00 | pg455 | Désigner la syllabe la plus accentuée (1)" ;
+    :id "pg455" ;
     :index 0 ;
     :titre "Désigner la syllabe la plus accentuée (1)" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg491 a :Page,
+:pg491 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (4)" ;
     :__protege_display_name "03 | pg491 | Choisir une transcription (4)" ;
@@ -994,19 +1097,23 @@
         <br><br><img src="../media/phon_dark.png" id="MosImg78" border="0" align="center" style="visibility:hidden">
     </div>
 """ ;
+    :id "pg491" ;
     :index 3 ;
     :titre "Choisir une transcription (4)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg496 a :Page,
+:pg496 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "crédits et licence" ;
     :__protege_display_name "00 | pg496 | crédits et licence" ;
+    :id "pg496" ;
     :index 0 ;
     :titre "crédits et licence" ;
     rdfs:subClassOf :MosEtp342 .
 
-:pg503 a :Page,
+:pg503 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Ecoutez et complétez (3)" ;
     :__protege_display_name "03 | pg503 | Ecoutez et complétez (3)" ;
@@ -1019,43 +1126,53 @@
                 grass</b>, so, one day, my little sister looked <b>under the tree</b> and found <b>a nice big
                 windfall</b> on the grass and she took it in for my mother to wash.<br></p></div>
 """ ;
+    :id "pg503" ;
     :index 3 ;
     :titre "Ecoutez et complétez (3)" ;
     rdfs:subClassOf :MosEtp558 .
 
-:pg512 a :Page,
+:pg512 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "La prononciation des prépositions : mémento" ;
     :__protege_display_name "10 | pg512 | La prononciation des prépositions : mémento" ;
+    :id "pg512" ;
     :index 10 ;
     :titre "La prononciation des prépositions : mémento" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg5121 a :Page,
+:pg5121 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "La prononciation des déterminants : mémento" ;
     :__protege_display_name "04 | pg5121 | La prononciation des déterminants : mémento" ;
+    :id "pg5121" ;
     :index 4 ;
     :titre "La prononciation des déterminants : mémento" ;
     rdfs:subClassOf :MosEtp558 .
 
-:pg5122 a :Page,
+:pg5122 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'accentuation des auxiliaires : mémento (1)" ;
     :__protege_display_name "16 | pg5122 | L'accentuation des auxiliaires : mémento (1)" ;
+    :id "pg5122" ;
     :index 16 ;
     :titre "L'accentuation des auxiliaires : mémento (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg519 a :Page,
+:pg519 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'accentuation des syllabes (2)" ;
     :__protege_display_name "01 | pg519 | L'accentuation des syllabes (2)" ;
+    :id "pg519" ;
     :index 1 ;
     :titre "L'accentuation des syllabes (2)" ;
     rdfs:subClassOf :MosEtp777 .
 
-:pg52 a :Page,
+:pg52 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Reconnaître le mot commun (3)" ;
     :__protege_display_name "04 | pg52 | Reconnaître le mot commun (3)" ;
@@ -1065,19 +1182,23 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous êtes trompé.</p>
         <p align="">TO est le seul mot commun aux deux énoncés. Vous pouvez réécouter les énoncés.</p></div>
 """ ;
+    :id "pg52" ;
     :index 4 ;
     :titre "Reconnaître le mot commun (3)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg525 a :Page,
+:pg525 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (8)" ;
     :__protege_display_name "07 | pg525 | Les symboles phonétiques (8)" ;
+    :id "pg525" ;
     :index 7 ;
     :titre "Les symboles phonétiques (8)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg531 a :Page,
+:pg531 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire CAN (2)" ;
     :__protege_display_name "11 | pg531 | L'auxiliaire CAN (2)" ;
@@ -1092,27 +1213,33 @@
             ; ce n'est pas le cas du deuxième énoncé. Vous pouvez réécouter chaque énoncé en cliquant sur le
             haut-parleur.</p></div>
 """ ;
+    :id "pg531" ;
     :index 11 ;
     :titre "L'auxiliaire CAN (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg542 a :Page,
+:pg542 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'accentuation des auxiliaires : mémento (2)" ;
     :__protege_display_name "17 | pg542 | L'accentuation des auxiliaires : mémento (2)" ;
+    :id "pg542" ;
     :index 17 ;
     :titre "L'accentuation des auxiliaires : mémento (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg543 a :Page,
+:pg543 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire HAVE (4)" ;
     :__protege_display_name "09 | pg543 | L'auxiliaire HAVE (4)" ;
+    :id "pg543" ;
     :index 9 ;
     :titre "L'auxiliaire HAVE (4)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg545 a :Page,
+:pg545 a :ExerciceGD,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compléter une transcription (1) " ;
     :__protege_display_name "21 | pg545 | Compléter une transcription (1) " ;
@@ -1132,19 +1259,23 @@
         <p align="">Voici la transcription appropriée :  </p>
         <p align=""><img src="../media/phon_p37_agree_right.png" id="MosImg9" border="0" align="center" style="visibility:hidden">    et     <img src="../media/phon_p37_shaking_right1.png" id="MosImg87" border="0" align="center" style="visibility:hidden"></p></div>
 """ ;
+    :id "pg545" ;
     :index 21 ;
     :titre "Compléter une transcription (1) " ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg549 a :Page,
+:pg549 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Phonèmes liste" ;
     :__protege_display_name "00 | pg549 | Phonèmes liste" ;
+    :id "pg549" ;
     :index 0 ;
     :titre "Phonèmes liste" ;
     rdfs:subClassOf :MosEtp918 .
 
-:pg558 a :Page,
+:pg558 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Reconnaître le mot commun (2)" ;
     :__protege_display_name "02 | pg558 | Reconnaître le mot commun (2)" ;
@@ -1154,11 +1285,13 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous êtes trompé.</p>
         <p align="">AT est le seul mot commun aux deux énoncés. Vous pouvez réécouter les énoncés.</p></div>
 """ ;
+    :id "pg558" ;
     :index 2 ;
     :titre "Reconnaître le mot commun (2)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg561 a :Page,
+:pg561 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir entre deux mots (5)" ;
     :__protege_display_name "16 | pg561 | Choisir entre deux mots (5)" ;
@@ -1210,11 +1343,13 @@
         </table>
         </div>
 """ ;
+    :id "pg561" ;
     :index 16 ;
     :titre "Choisir entre deux mots (5)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg576 a :Page,
+:pg576 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une prononciation (1)" ;
     :__protege_display_name "07 | pg576 | Choisir une prononciation (1)" ;
@@ -1225,43 +1360,53 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous trompez, la transcription
         correspond au premier mot entendu : <i>test</i>.<br><br><br><br> </p></div>
 """ ;
+    :id "pg576" ;
     :index 7 ;
     :titre "Choisir une prononciation (1)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg578 a :Page,
+:pg578 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Utiliser les mémentos" ;
     :__protege_display_name "00 | pg578 | Utiliser les mémentos" ;
+    :id "pg578" ;
     :index 0 ;
     :titre "Utiliser les mémentos" ;
     rdfs:subClassOf :MosEtp435 .
 
-:pg584 a :Page,
+:pg584 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (6)" ;
     :__protege_display_name "05 | pg584 | Les symboles phonétiques (6)" ;
+    :id "pg584" ;
     :index 5 ;
     :titre "Les symboles phonétiques (6)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg594 a :Page,
+:pg594 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Phonème" ;
     :__protege_display_name "05 | pg594 | Phonème" ;
+    :id "pg594" ;
     :index 5 ;
     :titre "Phonème" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg5981 a :Page,
+:pg5981 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (7)" ;
     :__protege_display_name "06 | pg5981 | Les symboles phonétiques (7)" ;
+    :id "pg5981" ;
     :index 6 ;
     :titre "Les symboles phonétiques (7)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg60 a :Page,
+:pg60 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Repérer les syllabes écrites" ;
     :__protege_display_name "01 | pg60 | Repérer les syllabes écrites" ;
@@ -1279,11 +1424,13 @@
         <p align=""><br>interesting: 4 "syllabes écrites".</p>
         <p align=""><br>dangerous: 3 "syllabes écrites".</p></div>
     """ ;
+    :id "pg60" ;
     :index 1 ;
     :titre "Repérer les syllabes écrites" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg608 a :Page,
+:pg608 a :ExerciceGD,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compléter une transcription (2) " ;
     :__protege_display_name "22 | pg608 | Compléter une transcription (2) " ;
@@ -1304,11 +1451,13 @@
         <p align="">Voici la transcription appropriée :  </p>
         <p align="">  <img align="center" border="0" src="../media/phon_to_right.png" id="MosImg35" style="visibility:hidden">  et     <img align="center" border="0" src="../media/phon_about_right.png" id="MosImg88" style="visibility:hidden"></p></div>
 """ ;
+    :id "pg608" ;
     :index 22 ;
     :titre "Compléter une transcription (2) " ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg6121 a :Page,
+:pg6121 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Vérifier la place de l'accent primaire (4) " ;
     :__protege_display_name "03 | pg6121 | Vérifier la place de l'accent primaire (4) " ;
@@ -1336,11 +1485,13 @@
         <p align=""><a class="STY_lienDansZoneComt" href="javascript:parent.SCO_ouvrirDoc('pgd661','PAGE')">Mémento
             "l'accentuation des syllabes"</a></p></div>
 """ ;
+    :id "pg6121" ;
     :index 3 ;
     :titre "Vérifier la place de l'accent primaire (4) " ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg624 a :Page,
+:pg624 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Reconnaître le mot commun (1)" ;
     :__protege_display_name "00 | pg624 | Reconnaître le mot commun (1)" ;
@@ -1350,11 +1501,13 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous êtes trompé.</p>
         <p align="">OF est le seul mot commun aux deux énoncés. Vous pouvez réécouter les énoncés.</p></div>
 """ ;
+    :id "pg624" ;
     :index 0 ;
     :titre "Reconnaître le mot commun (1)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg6241 a :Page,
+:pg6241 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Ecoutez et complétez (1)" ;
     :__protege_display_name "01 | pg6241 | Ecoutez et complétez (1)" ;
@@ -1368,11 +1521,13 @@
         sometimes my naughty little sister used to pick  <b>some apples</b> and eat them. It  <b>was a</b> very easy
         thing to do because <b>the branches</b> were so low.<br></p></div>
 """ ;
+    :id "pg6241" ;
     :index 1 ;
     :titre "Ecoutez et complétez (1)" ;
     rdfs:subClassOf :MosEtp558 .
 
-:pg636 a :Page,
+:pg636 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Commentaire" ;
     :__protege_display_name "02 | pg636 | Commentaire" ;
@@ -1386,11 +1541,13 @@
         l'école primaire où l'on a pu avoir l'habitude d'apprendre à lire en découpant les mots.
     </div>
 """ ;
+    :id "pg636" ;
     :index 2 ;
     :titre "Commentaire" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg6361 a :Page,
+:pg6361 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir entre deux mots (3)" ;
     :__protege_display_name "14 | pg6361 | Choisir entre deux mots (3)" ;
@@ -1442,11 +1599,13 @@
         </table>
         </div>
 """ ;
+    :id "pg6361" ;
     :index 14 ;
     :titre "Choisir entre deux mots (3)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg639 a :Page,
+:pg639 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (2)" ;
     :__protege_display_name "15 | pg639 | Spécificité des voyelles (2)" ;
@@ -1456,27 +1615,33 @@
         2 sons. Réécoutez le mot.
     </div>
 """ ;
+    :id "pg639" ;
     :index 15 ;
     :titre "Spécificité des voyelles (2)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg643 a :Page,
+:pg643 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Ecoutez..." ;
     :__protege_display_name "00 | pg643 | Ecoutez..." ;
+    :id "pg643" ;
     :index 0 ;
     :titre "Ecoutez..." ;
     rdfs:subClassOf :MosEtp558 .
 
-:pg651 a :Page,
+:pg651 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (5)" ;
     :__protege_display_name "04 | pg651 | Les symboles phonétiques (5)" ;
+    :id "pg651" ;
     :index 4 ;
     :titre "Les symboles phonétiques (5)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg665 a :Page,
+:pg665 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate (1)" ;
     :__protege_display_name "07 | pg665 | Choisir l'accentuation adéquate (1)" ;
@@ -1503,27 +1668,33 @@
             :<br><br><font color="#a60a69">The farmer refused<br>to <b><i>produce </i></b>organic <i><b>produce</b></i>.<br></font><br> <img align="center" border="0" src="../media/phon_produce_12.png" id="MosImg307831" style="visibility:hidden">        <img align="center" border="0" src="../media/phon_produce_2.png" id="MosImg5601539" style="visibility:hidden"></font></p>
     </div>
 """ ;
+    :id "pg665" ;
     :index 7 ;
     :titre "Choisir l'accentuation adéquate (1)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg672 a :Page,
+:pg672 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : l'accentuation des syllabes" ;
     :__protege_display_name "05 | pg672 | Mémento : l'accentuation des syllabes" ;
+    :id "pg672" ;
     :index 5 ;
     :titre "Mémento : l'accentuation des syllabes" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg673 a :Page,
+:pg673 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (2)" ;
     :__protege_display_name "01 | pg673 | Les symboles phonétiques (2)" ;
+    :id "pg673" ;
     :index 1 ;
     :titre "Les symboles phonétiques (2)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg6811 a :Page,
+:pg6811 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Vérifier la place de l'accent primaire (2) " ;
     :__protege_display_name "01 | pg6811 | Vérifier la place de l'accent primaire (2) " ;
@@ -1549,19 +1720,23 @@
         <p align=""><a class="STY_lienDansZoneComt" href="javascript:parent.SCO_ouvrirDoc('pgd661','PAGE')">Mémento :
             l'accentuation des syllabes</a></p></div>
 """ ;
+    :id "pg6811" ;
     :index 1 ;
     :titre "Vérifier la place de l'accent primaire (2) " ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg686 a :Page,
+:pg686 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'accentuation des auxiliaires" ;
     :__protege_display_name "00 | pg686 | L'accentuation des auxiliaires" ;
+    :id "pg686" ;
     :index 0 ;
     :titre "L'accentuation des auxiliaires" ;
     rdfs:subClassOf :MosEtp252 .
 
-:pg699 a :Page,
+:pg699 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir entre deux mots (4)" ;
     :__protege_display_name "15 | pg699 | Choisir entre deux mots (4)" ;
@@ -1613,11 +1788,13 @@
         </table>
         </div>
 """ ;
+    :id "pg699" ;
     :index 15 ;
     :titre "Choisir entre deux mots (4)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg71 a :Page,
+:pg71 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate  (6)" ;
     :__protege_display_name "12 | pg71 | Choisir l'accentuation adéquate  (6)" ;
@@ -1639,11 +1816,13 @@
         <p align=""><font color="#a60a69"><br></font> <br><br><br><br><br><br><br><font color="#a60a69"><font color="#a60a69"><font color="#a60a69"><font color="#a60a69"><span style="FONT-SIZE: 90%"><font color="#a60a69"><br>Voici le corrigé :<br><br>The<br><i><b>content</b></i> of her letter gave me <i><b>content</b></i> and joy.</font></span><br></font><font color="#a60a69"><br><img align="center" border="0" src="../media/phon_content_1.png" id="MosImg5772" style="visibility:hidden">               <img align="center" border="0" src="../media/phon_content_2.png" id="MosImg52822" style="visibility:hidden"></font></font></font></font>
         </p></div>
 """ ;
+    :id "pg71" ;
     :index 12 ;
     :titre "Choisir l'accentuation adéquate  (6)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg713 a :Page,
+:pg713 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (6)" ;
     :__protege_display_name "20 | pg713 | Spécificité des voyelles (6)" ;
@@ -1653,11 +1832,13 @@
         mots.
     </div>
 """ ;
+    :id "pg713" ;
     :index 20 ;
     :titre "Spécificité des voyelles (6)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg717 a :Page,
+:pg717 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Remarquer la syllabe la plus accentuée (2)" ;
     :__protege_display_name "10 | pg717 | Remarquer la syllabe la plus accentuée (2)" ;
@@ -1666,19 +1847,23 @@
         laquelle peuvent s'adjoindre une ou plusieurs consonnes.
     </div>
 """ ;
+    :id "pg717" ;
     :index 10 ;
     :titre "Remarquer la syllabe la plus accentuée (2)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg729 a :Page,
+:pg729 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (11)" ;
     :__protege_display_name "10 | pg729 | Les symboles phonétiques (11)" ;
+    :id "pg729" ;
     :index 10 ;
     :titre "Les symboles phonétiques (11)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg740 a :Page,
+:pg740 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir l'accentuation adéquate  (3)" ;
     :__protege_display_name "09 | pg740 | Choisir l'accentuation adéquate  (3)" ;
@@ -1705,11 +1890,13 @@
             series of tests.<br><br>    <img align="center" border="0" src="../media/phon_subject_1.png" id="MosImg528" style="visibility:hidden">        <img align="center" border="0" src="../media/phon_subject_2.png" id="MosImg689" style="visibility:hidden"></font></font>
         </p></div>
 """ ;
+    :id "pg740" ;
     :index 9 ;
     :titre "Choisir l'accentuation adéquate  (3)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg758 a :Page,
+:pg758 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir entre deux mots (2)" ;
     :__protege_display_name "13 | pg758 | Choisir entre deux mots (2)" ;
@@ -1761,11 +1948,13 @@
         </table>
         </div>
 """ ;
+    :id "pg758" ;
     :index 13 ;
     :titre "Choisir entre deux mots (2)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg76 a :Page,
+:pg76 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une prononciation (4)" ;
     :__protege_display_name "10 | pg76 | Choisir une prononciation (4)" ;
@@ -1776,19 +1965,23 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous trompez, la transcription
         correspond au premier mot entendu : <i>cat</i>.<br><br><br><br> </p></div>
 """ ;
+    :id "pg76" ;
     :index 10 ;
     :titre "Choisir une prononciation (4)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg763 a :Page,
+:pg763 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire WILL (1)" ;
     :__protege_display_name "02 | pg763 | L'auxiliaire WILL (1)" ;
+    :id "pg763" ;
     :index 2 ;
     :titre "L'auxiliaire WILL (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg769 a :Page,
+:pg769 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Distinguer d'éventuelles variantes (3)" ;
     :__protege_display_name "05 | pg769 | Distinguer d'éventuelles variantes (3)" ;
@@ -1820,11 +2013,13 @@
                 réduite</b></a>, donc peu audible. Prenez le temps de réécouter chaque énoncé en cliquant sur le
             haut-parleur.</p></div>
 """ ;
+    :id "pg769" ;
     :index 5 ;
     :titre "Distinguer d'éventuelles variantes (3)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg7691 a :Page,
+:pg7691 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (3)" ;
     :__protege_display_name "02 | pg7691 | Choisir une transcription (3)" ;
@@ -1834,11 +2029,13 @@
         <br><br><img src="../media/phon_bring.png" id="MosImg51" border="0" align="center" style="visibility:hidden">
     </div>
 """ ;
+    :id "pg7691" ;
     :index 2 ;
     :titre "Choisir une transcription (3)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg785 a :Page,
+:pg785 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Mémento : l'accentuation des syllabes (1)" ;
     :__protege_display_name "11 | pg785 | Mémento : l'accentuation des syllabes (1)" ;
@@ -1851,19 +2048,23 @@
         </p>
         <p align=""> </p></div>
 """ ;
+    :id "pg785" ;
     :index 11 ;
     :titre "Mémento : l'accentuation des syllabes (1)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg7851 a :Page,
+:pg7851 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire WILL (4)" ;
     :__protege_display_name "05 | pg7851 | L'auxiliaire WILL (4)" ;
+    :id "pg7851" ;
     :index 5 ;
     :titre "L'auxiliaire WILL (4)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg81 a :Page,
+:pg81 a :ExerciceGD,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compléter une transcription (3) " ;
     :__protege_display_name "23 | pg81 | Compléter une transcription (3) " ;
@@ -1884,11 +2085,13 @@
         <p align="">Voici la transcription appropriée :  </p>
         <p align="">  <img src="../media/phon_pats_right.png" id="MosImg41" border="0" align="center" style="visibility:hidden">  et     <img align="center" border="0" src="../media/phon_shes_right.png" id="MosImg92" style="visibility:hidden"></p></div>
 """ ;
+    :id "pg81" ;
     :index 23 ;
     :titre "Compléter une transcription (3) " ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg813 a :Page,
+:pg813 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Distinguer d'éventuelles variantes (5)" ;
     :__protege_display_name "09 | pg813 | Distinguer d'éventuelles variantes (5)" ;
@@ -1919,11 +2122,13 @@
             est inaccentué et comporte une voyelle réduite : donc <i>for</i> est peu audible. Prenez le temps de
             réécouter chaque énoncé en cliquant sur le bouton.</p></div>
 """ ;
+    :id "pg813" ;
     :index 9 ;
     :titre "Distinguer d'éventuelles variantes (5)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg825 a :Page,
+:pg825 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Distinguer d'éventuelles variantes (1)" ;
     :__protege_display_name "01 | pg825 | Distinguer d'éventuelles variantes (1)" ;
@@ -1952,11 +2157,13 @@
             de <i>of</i> ne peut pas alors être réduite. C'est pourquoi on l'entend mieux. Prenez le temps de réécouter
             chaque énoncé en cliquant sur le haut-parleur.</p></div>
 """ ;
+    :id "pg825" ;
     :index 1 ;
     :titre "Distinguer d'éventuelles variantes (1)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg8251 a :Page,
+:pg8251 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire WILL (2)" ;
     :__protege_display_name "03 | pg8251 | L'auxiliaire WILL (2)" ;
@@ -1971,35 +2178,43 @@
             ; ce n'est pas le cas de la deuxième réponse. Vous pouvez réécouter chaque énoncé en cliquant sur le
             haut-parleur.</p></div>
 """ ;
+    :id "pg8251" ;
     :index 3 ;
     :titre "L'auxiliaire WILL (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg8252 a :Page,
+:pg8252 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Spécificité des voyelles (1)" ;
     :__protege_display_name "14 | pg8252 | Spécificité des voyelles (1)" ;
+    :id "pg8252" ;
     :index 14 ;
     :titre "Spécificité des voyelles (1)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg83 a :Page,
+:pg83 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (9)" ;
     :__protege_display_name "08 | pg83 | Les symboles phonétiques (9)" ;
+    :id "pg83" ;
     :index 8 ;
     :titre "Les symboles phonétiques (9)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg841 a :Page,
+:pg841 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Placer les accents primaire et secondaire (1)" ;
     :__protege_display_name "04 | pg841 | Placer les accents primaire et secondaire (1)" ;
+    :id "pg841" ;
     :index 4 ;
     :titre "Placer les accents primaire et secondaire (1)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg8412 a :Page,
+:pg8412 a :ExerciceQC_QCM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Vérifier la place de l'accent primaire (3) " ;
     :__protege_display_name "02 | pg8412 | Vérifier la place de l'accent primaire (3) " ;
@@ -2028,11 +2243,13 @@
         <p align=""><a class="STY_lienDansZoneComt" href="javascript:parent.SCO_ouvrirDoc('pgd661','PAGE')"> Mémento
             "l'accentuation des syllabes"</a></p></div>
 """ ;
+    :id "pg8412" ;
     :index 2 ;
     :titre "Vérifier la place de l'accent primaire (3) " ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg85 a :Page,
+:pg85 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compter les syllabes orales (3)" ;
     :__protege_display_name "06 | pg85 | Compter les syllabes orales (3)" ;
@@ -2057,19 +2274,23 @@
         <p align=""><br><br>oranges: 3 syllabes.</p>
         <p align=""><br>different: 2 syllabes.</p></div>
     """ ;
+    :id "pg85" ;
     :index 6 ;
     :titre "Compter les syllabes orales (3)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg855 a :Page,
+:pg855 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (1)" ;
     :__protege_display_name "00 | pg855 | Les symboles phonétiques (1)" ;
+    :id "pg855" ;
     :index 0 ;
     :titre "Les symboles phonétiques (1)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg860 a :Page,
+:pg860 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Trouver l'accent secondaire (1)" ;
     :__protege_display_name "03 | pg860 | Trouver l'accent secondaire (1)" ;
@@ -2235,11 +2456,13 @@
         </table>
         </div>
 """ ;
+    :id "pg860" ;
     :index 3 ;
     :titre "Trouver l'accent secondaire (1)" ;
     rdfs:subClassOf :MosEtp369 .
 
-:pg861 a :Page,
+:pg861 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Repérer les syllabes orales" ;
     :__protege_display_name "00 | pg861 | Repérer les syllabes orales" ;
@@ -2258,19 +2481,23 @@
         <p align=""><br>interesting: 3 syllabes</p>
         <p align=""><br>dangerous: 2 syllabes</p></div>
     """ ;
+    :id "pg861" ;
     :index 0 ;
     :titre "Repérer les syllabes orales" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg875 a :Page,
+:pg875 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire CAN (3)" ;
     :__protege_display_name "12 | pg875 | L'auxiliaire CAN (3)" ;
+    :id "pg875" ;
     :index 12 ;
     :titre "L'auxiliaire CAN (3)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg879 a :Page,
+:pg879 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire HAVE (2)" ;
     :__protege_display_name "07 | pg879 | L'auxiliaire HAVE (2)" ;
@@ -2285,11 +2512,13 @@
             ; ce n'est pas le cas de le deuxième énoncé. Vous pouvez réécouter chaque énoncé en cliquant sur le
             haut-parleur.</p></div>
 """ ;
+    :id "pg879" ;
     :index 7 ;
     :titre "L'auxiliaire HAVE (2)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg88 a :Page,
+:pg88 a :ExerciceQM,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Compter les syllabes orales (4)" ;
     :__protege_display_name "07 | pg88 | Compter les syllabes orales (4)" ;
@@ -2316,29 +2545,35 @@
         <p align=""><i>On remarque que les mots entendus ne présentent pas le même nombre de syllabes orales et de "</i><i><font color="#000000">syllabes écrites</font></i><i><font color="#000000">":</font> par exemple ,
             <b>chocolate</b>, qui s'écrit avec 4 syllabes, se prononce en 2 syllabes.</i></p></div>
     """ ;
+    :id "pg88" ;
     :index 7 ;
     :titre "Compter les syllabes orales (4)" ;
     rdfs:subClassOf :MosEtp129 .
 
-:pg881 a :Page,
+:pg881 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "La prononciation des déterminants" ;
     :__protege_display_name "00 | pg881 | La prononciation des déterminants" ;
+    :id "pg881" ;
     :index 0 ;
     :titre "La prononciation des déterminants" ;
     rdfs:subClassOf :MosEtp385 .
 
-:pg888 a :Page,
+:pg888 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Voyelles lâches et voyelles tendues" ;
     :__protege_display_name "00 | pg888 | Voyelles lâches et voyelles tendues" ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
 """ ;
+    :id "pg888" ;
     :index 0 ;
     :titre "Voyelles lâches et voyelles tendues" ;
     rdfs:subClassOf :MosEtp940 .
 
-:pg890 a :Page,
+:pg890 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Distinguer d'éventuelles variantes (2)" ;
     :__protege_display_name "03 | pg890 | Distinguer d'éventuelles variantes (2)" ;
@@ -2372,11 +2607,13 @@
             ne peut pas être réduite. Prenez le temps de réécouter chaque énoncé en cliquant sur le haut-parleur.</p>
     </div>
 """ ;
+    :id "pg890" ;
     :index 3 ;
     :titre "Distinguer d'éventuelles variantes (2)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg893 a :Page,
+:pg893 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (6)" ;
     :__protege_display_name "05 | pg893 | Choisir une transcription (6)" ;
@@ -2386,11 +2623,13 @@
         transcription est </p>
         <p align=""><img src="../media/phon_shine.png" id="MosImg73" border="0" align="center" style="visibility:hidden"><br><br><br><br></p></div>
 """ ;
+    :id "pg893" ;
     :index 5 ;
     :titre "Choisir une transcription (6)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg894 a :Page,
+:pg894 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (8)" ;
     :__protege_display_name "17 | pg894 | Choisir une transcription (8)" ;
@@ -2444,43 +2683,53 @@
         </table>
         </div>
 """ ;
+    :id "pg894" ;
     :index 17 ;
     :titre "Choisir une transcription (8)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg896 a :Page,
+:pg896 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Les symboles phonétiques (4)" ;
     :__protege_display_name "03 | pg896 | Les symboles phonétiques (4)" ;
+    :id "pg896" ;
     :index 3 ;
     :titre "Les symboles phonétiques (4)" ;
     rdfs:subClassOf :MosEtp171 .
 
-:pg900 a :Page,
+:pg900 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire HAVE (3)" ;
     :__protege_display_name "08 | pg900 | L'auxiliaire HAVE (3)" ;
+    :id "pg900" ;
     :index 8 ;
     :titre "L'auxiliaire HAVE (3)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg903 a :Page,
+:pg903 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "L'auxiliaire HAVE (1)" ;
     :__protege_display_name "06 | pg903 | L'auxiliaire HAVE (1)" ;
+    :id "pg903" ;
     :index 6 ;
     :titre "L'auxiliaire HAVE (1)" ;
     rdfs:subClassOf :MosEtp210 .
 
-:pg926 a :Page,
+:pg926 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "La prononciation des prépositions" ;
     :__protege_display_name "00 | pg926 | La prononciation des prépositions" ;
+    :id "pg926" ;
     :index 0 ;
     :titre "La prononciation des prépositions" ;
     rdfs:subClassOf :MosEtp534 .
 
-:pg93 a :Page,
+:pg93 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (10)" ;
     :__protege_display_name "19 | pg93 | Choisir une transcription (10)" ;
@@ -2537,11 +2786,13 @@
         </table>
         </div>
 """ ;
+    :id "pg93" ;
     :index 19 ;
     :titre "Choisir une transcription (10)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg933 a :Page,
+:pg933 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une prononciation (5)" ;
     :__protege_display_name "11 | pg933 | Choisir une prononciation (5)" ;
@@ -2552,27 +2803,33 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous trompez, la transcription
         correspond au second mot entendu : <i>green</i>.<br><br><br><br> </p></div>
 """ ;
+    :id "pg933" ;
     :index 11 ;
     :titre "Choisir une prononciation (5)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg938 a :Page,
+:pg938 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Voyelle" ;
     :__protege_display_name "00 | pg938 | Voyelle" ;
+    :id "pg938" ;
     :index 0 ;
     :titre "Voyelle" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg940 a :Page,
+:pg940 a :Cours,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Point d'articulation" ;
     :__protege_display_name "06 | pg940 | Point d'articulation" ;
+    :id "pg940" ;
     :index 6 ;
     :titre "Point d'articulation" ;
     rdfs:subClassOf :MosEtp555 .
 
-:pg948 a :Page,
+:pg948 a :ExerciceTAT,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Reconnaître le mot commun (4)" ;
     :__protege_display_name "06 | pg948 | Reconnaître le mot commun (4)" ;
@@ -2582,11 +2839,13 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')"><p align="">Vous vous êtes trompé.</p>
         <p align="">IN est le seul mot commun aux deux énoncés. Vous pouvez réécouter les énoncés.</p></div>
 """ ;
+    :id "pg948" ;
     :index 6 ;
     :titre "Reconnaître le mot commun (4)" ;
     rdfs:subClassOf :MosEtp335 .
 
-:pg965 a :Page,
+:pg965 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (2)" ;
     :__protege_display_name "01 | pg965 | Choisir une transcription (2)" ;
@@ -2596,11 +2855,13 @@
         transcription est</p>
         <p align=""> <img src="../media/phon_then.png" id="MosImg51" border="0" align="center" style="visibility:hidden"></p></div>
 """ ;
+    :id "pg965" ;
     :index 1 ;
     :titre "Choisir une transcription (2)" ;
     rdfs:subClassOf :MosEtp644 .
 
-:pg966 a :Page,
+:pg966 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Lire des transcriptions phonétiques (3)" ;
     :__protege_display_name "15 | pg966 | Lire des transcriptions phonétiques (3)" ;
@@ -2629,11 +2890,13 @@
 """ ;
     :commentaireSucces """<div id="divCmtSucces" onclick="SPE_clicDansBulle(event,'divCmtSucces')"></div>
     """ ;
+    :id "pg966" ;
     :index 15 ;
     :titre "Lire des transcriptions phonétiques (3)" ;
     rdfs:subClassOf :MosEtp746 .
 
-:pg98 a :Page,
+:pg98 a :ExerciceQC_QCU,
+        :Page,
         owl:NamedIndividual ;
     rdfs:label "Choisir une transcription (5)" ;
     :__protege_display_name "04 | pg98 | Choisir une transcription (5)" ;
@@ -2642,6 +2905,7 @@
     :commentaireSugg """<div id="divSugg1" onclick="SPE_clicDansBulle(event,'divSugg1')">Vous vous êtes trompé. La bonne transcription est
         <br><br><img src="../media/phon_measure.png" id="MosImg42" border="0" align="center" style="visibility:hidden"><br><br></div>
 """ ;
+    :id "pg98" ;
     :index 4 ;
     :titre "Choisir une transcription (5)" ;
     rdfs:subClassOf :MosEtp644 .
diff --git a/tetras_extraction/macao_12/script/common.py b/tetras_extraction/macao_12/script/common.py
index 55929d444f87b76ec47b6c5da364911ec253c1c5..2a20499da028b1f67efcaf4030747ac23a14d263 100644
--- a/tetras_extraction/macao_12/script/common.py
+++ b/tetras_extraction/macao_12/script/common.py
@@ -1,4 +1,5 @@
 from sys import stderr
+from typing import Any, Optional
 from rdflib import RDFS, Graph, Literal, URIRef
 from rdflib import Namespace
 from os import path, environ
@@ -39,6 +40,19 @@ def eprint(*args, **kwargs):
     print(*args, file=stderr, **kwargs)
 
 
+def insert_grow(l: list, index: int, value: Any, fill_value: Optional[Any] = None):
+    """Insert at a given position in a list, growing it if necessary
+
+    :param l: list
+    :param index: The position where the value is inserted
+    :param value: The value to insert
+    :param fill_value: The value used for elements created automatically when growing, defaults to None
+    """
+    for _ in range(len(l), index + 1):
+        l.append(fill_value)
+    l[index] = value
+
+
 def add_title(g: Graph, subject: URIRef, title: str):
     """Add triples to define the `subject`'s title and label"""
     g.add((subject, RDFS.label, Literal(title)))
diff --git a/tetras_extraction/macao_12/script/extract_page.py b/tetras_extraction/macao_12/script/extract_page.py
index 2b49415caa2a74afd9018fc2416d889d2add61db..eec6b199f7fc451d7d1340432f2b2a5df51de583 100644
--- a/tetras_extraction/macao_12/script/extract_page.py
+++ b/tetras_extraction/macao_12/script/extract_page.py
@@ -1,10 +1,12 @@
 import re
+import sys
 from pprint import pprint
-from typing import Any, List
+from typing import Any, List, Optional
 
-from lxml import html
+import esprima as es
+from lxml import etree, html
 from lxml.etree import _Element
-from rdflib import Graph, Literal
+from rdflib import RDF, Graph, Literal
 
 from common import *
 
@@ -36,6 +38,206 @@ class Page:
         return str(self.__dict__)
 
 
+class ParseError(Exception):
+    pass
+
+
+class XpathParser:
+    """A parser for the JS portion of an activity, that uses XPath to query
+    an XML representation of Esprima's abstract syntax tree (AST)"""
+
+    # XPath requests pre-compiled as functions
+    request_function = etree.XPath(
+        '//FunctionDeclaration[id/Identifier[@name="entrerDonnees"]]'
+    )
+    request_index_and_values = etree.XPath(
+        '*//VariableDeclarator[id//*[@name="nr"]]/init/Literal | *//AssignmentExpression[*//Identifier[@name="CODE_V"]]'
+    )
+    request_constructor_id = etree.XPath(
+        '*//NewExpression/callee/Identifier[@name="Cours" or starts-with(@name, "Exercice")]'
+    )
+
+    def __init__(self):
+        pass
+
+    def parse(self, js, output=sys.stdout):
+        jstree = es.parseScript(js, None)
+        # Convert Esprima object tree to XML etree
+        xml = self.to_xml(jstree.toDict(), "jstree")
+        try:
+            self.fun = self.request_function(xml)[0]
+            print(self._parse_activity_type(), file=output)
+            # self._parse_qcu_choices()
+        except Exception as e:
+            raise ParseError(e)
+
+    def _parse_activity_type(self) -> str:
+        constructor_id = self.request_constructor_id(self.fun)[0]
+        match constructor_id.get("name"):
+            case "ExerciceQC":
+                arg = constructor_id.xpath("../../arguments/Literal/@value")[0]
+                if arg not in ["QCU", "QCM"]:
+                    raise ParseError(f"ExerciceQC: invalid argument '{arg}'")
+                return f"ExerciceQC_{arg}"
+            case other:
+                return other
+
+    def _parse_qcu_choices(self):
+        indexes_and_values = self.request_index_and_values(self.fun)
+        correct_choices = []
+        for e in indexes_and_values:
+            value = e.xpath("@value")
+            if len(value) != 0:
+                # "index line"
+                index = value[0]
+            else:
+                # "true line"
+                insert_grow(correct_choices, index, True, fill_value=False)
+        print(correct_choices)
+
+    def to_xml(self, obj, tag_name: Optional[str] = None):
+        """Recursively convert an object structure to an XML `ElementTree`.
+        Structures are expected to be Python dictionaries.
+        Converting a dictionary produces a tag named after the "type" attribute (if present).
+        - A primitive attribute (i.e. not list nor dict) becomes a tag attribute.
+        - A list attribute becomes a tag with its contents as sub-tags.
+        - A dictionary attribute becomes a tag (named like the attribute's key)
+        containing a sub-tag for the dictionary itself
+        """
+        if isinstance(obj, dict):
+            # Dictionary (or object):
+            # - if it has a "type" key, the dict represents an object -> use its value as the tag name
+            # - if a tag_name is specified as well, it's probably important (like an attribute name),
+            # so we keep both, as 2 nested tags (tag_name for the outer tag, type for the inner tag)
+            inner_tag = None
+            outer_tag = None
+            has_inner = "type" in obj.keys()
+            if has_inner:
+                inner_tag = etree.Element(obj["type"], None, None)
+            else:
+                inner_tag = etree.Element("_dict", None, None)
+
+            if tag_name is not None:
+                outer_tag = etree.Element(tag_name)
+                if has_inner:
+                    outer_tag.append(inner_tag)
+                else:
+                    inner_tag = outer_tag
+            else:
+                outer_tag = inner_tag
+            # Recurse on dictionary items
+            for key, val in obj.items():
+                if key != "type":  # exception for 'type', handled as attribute
+                    if isinstance(val, (list, dict)):
+                        # Structured attributes become child tags
+                        inner_tag.append(self.to_xml(val, key))
+                    else:
+                        # Primitive attributes become tag attributes
+                        inner_tag.set(key, str(val))
+            return outer_tag
+
+        elif isinstance(obj, list):
+            tag_name = tag_name or "_list"
+            list_tag = etree.Element(tag_name)
+            for e in obj:
+                list_tag.append(self.to_xml(e))
+            return list_tag
+
+        else:
+            tag_name = tag_name or "_literal"
+            leaf_tag = etree.Element(tag_name)
+            leaf_tag.text = str(obj)
+            return leaf_tag
+
+    def __str__(self) -> str:
+        return "XpathParser"
+
+
+class MatchParser:
+    """A parser for the JS portion of an activity, that uses Python match statements
+    to navigate the abstract syntax tree (AST) produced by Esprima"""
+
+    def __init__(self, graph: Graph, act_id: str) -> None:
+        self.graph = graph
+        self.act_id = act_id
+
+    def parse(self, js, output=sys.stdout):
+        self.output = output
+        jstree = es.parseScript(js, None)
+        # Try to match our template with one of the top-level statements
+        for statement in jstree.body:
+            self.match_function(statement.toDict())
+
+    def match_constructor_call(self, new_expr: dict):
+        match new_expr:
+            case {
+                "type": "NewExpression",
+                "callee": {
+                    "type": "Identifier",
+                    "name": typ,
+                },
+                "arguments": [*args],
+            }:
+                match typ:
+                    case "Cours" | "ExerciceQM" | "ExerciceTAT" | "ExerciceGD":
+                        self.print(typ)
+                        self.graph.add((NS[self.act_id], RDF.type, NS[typ]))
+                    case "ExerciceQC":
+                        match args:
+                            case [{"type": "Literal", "value": "QCU"}, *_]:
+                                typ += "_QCU"
+                            case [{"type": "Literal", "value": "QCM"}, *_]:
+                                typ += "_QCM"
+                            case _:
+                                raise ParseError(
+                                    f"ExerciceQC: Invalid argument '{args}'"
+                                )
+                        self.print(typ)
+                        self.graph.add((NS[self.act_id], RDF.type, NS[typ]))
+                    case _:
+                        raise ParseError(f"Unknown activity type '{typ}'")
+            case _:
+                pass
+
+    def print(self, s: str):
+        print(s, file=self.output)
+
+    def match_function(self, func: dict):
+        """Checks if `func` matches a function declaration named `entrerDonnees`,
+        and search its body if successful
+        """
+
+        match func:
+            case {
+                "type": "FunctionDeclaration",
+                "id": {"name": "entrerDonnees"},
+                "body": {"type": "BlockStatement", "body": body},
+            }:
+                # Matched a function declaration and captured its `body` attr
+                for statement in body:
+                    # Find constructor calls (e.g. `new Thing()`) recursively
+                    recurse_prefix(statement, self.match_constructor_call)
+
+    def __str__(self) -> str:
+        return "MatchParser"
+
+
+def recurse_prefix(t, f):
+    """Depth-first prefixed recursion: calls a function on an object, then on
+    all its children (if it's a list or dictionary) recursively
+
+    :param t: The object
+    :param f: The function to call
+    """
+    f(t)
+    if isinstance(t, list):
+        for e in t:
+            recurse_prefix(e, f)
+    elif isinstance(t, dict):
+        for e in t.values():
+            recurse_prefix(e, f)
+
+
 # Regex to separate non-digits and digits
 regex_comment = re.compile(r"(\D*)(\d*)")
 
@@ -46,6 +248,26 @@ def parse_page(graph: Graph, filepath: str, id: str):
     tree = html.parse(filepath)
     root = tree.getroot()
 
+    # Collect all inline scripts (no external 'src') and join them in a
+    # block of JS code
+    # scripts = root.cssselect('script[type="text/javascript"]:not([src])')
+    scripts: List[_Element] = root.xpath(
+        '/html/head/script[@type="text/javascript" and not(@src)]'
+    )
+    js = "\n".join((s.text_content() for s in scripts))
+
+    # Try different parsers, each writing to a different file to compare their results
+    for parser in [
+        XpathParser(),
+        MatchParser(graph, id),
+    ]:
+        with open(f"/tmp/{str(parser)}.txt", "a") as f:
+            print(f"{id:8}", end="", file=f)
+            try:
+                parser.parse(js, output=f)
+            except ParseError as e:
+                print(f"{parser} -> {id}: Parsing error: {e}", file=sys.stderr)
+
     # Parse comments
     zi = root.get_element_by_id("zoneInvisible")
     for cmt_div in zi:
@@ -53,25 +275,22 @@ def parse_page(graph: Graph, filepath: str, id: str):
         comment.text = cmt_div.text_content()
         comment.html = html.tostring(cmt_div, encoding="unicode")
         comment.elem = cmt_div
-        comment.id = cmt_div.get("id")
+        comment.id = cmt_div.get("id") or ""
         # Split id in two parts (non-digits and digits), then match on these parts
         m = regex_comment.match(comment.id)
         if m is not None:
             match m.groups():
                 case ["divCmt", num]:
-                    print(f"Comment, num={num}")
                     comment.num = int(num)
                     page.comments_misc.append(comment)
                     graph.add((NS[id], NS["commentaireInfo"], Literal(comment.html)))
                 case ["divSugg", num]:
-                    print(f"Suggestion, num={num}")
                     comment.num = int(num)
                     page.comments_sugg.append(comment)
                     graph.add((NS[id], NS["commentaireSugg"], Literal(comment.html)))
                 case ["divCmtSucces", _]:
-                    print(f"Succès")
                     page.comment_success = comment
                     graph.add((NS[id], NS["commentaireSucces"], Literal(comment.html)))
                 case [other, _]:
-                    print(f"other: {other}")
+                    pass
     # pprint(page)
diff --git a/tetras_extraction/macao_12/script/requirements.txt b/tetras_extraction/macao_12/script/requirements.txt
index 120dd83484181e683316dafe4ba96853c8eb9380..4f6f3a2638bc502c75575819cb82d49f7fc61dde 100644
--- a/tetras_extraction/macao_12/script/requirements.txt
+++ b/tetras_extraction/macao_12/script/requirements.txt
@@ -1,5 +1,11 @@
+cssselect==1.2.0
+esprima==4.0.1
 isodate==0.6.1
 lxml==5.2.2
 pyparsing==3.1.2
 rdflib==7.0.0
 six==1.16.0
+types-beautifulsoup4==4.12.0.20240511
+types-html5lib==1.1.11.20240228
+types-lxml==2024.4.14
+typing_extensions==4.12.1