Ce projet a pour but de proposer un format XML de QCM appelé QCMXML et des scripts de transformation pour transformer un fichier au format QCMXML en Latex, HTML et en format XML pour Moodle.
À partir d'un fichier XML au format QCMXMLexempleQCM.qcm.xml, les scripts générent:
exempleQCM.tex (latex)exempleQCM.html, exempleQCM-reponses.html, exempleQCM-reponses.txt (formulaires HTML)exempleQCM.moodle.xml (Moodle XML)/etc/apt/sources.list :
deb http://www-public.it-sudparis.eu/~silber/repositories/apt-repo/ binary/ deb-src http://www-public.it-sudparis.eu/~silber/repositories/apt-repo/ sources/Après installation du package,
man qcmxmlpour obtenir la documentation sur l'utilisation de la commande
qcmxml.
qcm en format qcm.xml :
qcm2xml.py.
questionnaire.
La balise questionnaire contient les balises :
idfqcm : obligatoire, cette
balise correspond au nom de la catégorie dans Moodle qui contiendra
les questions du questionnaire courant.question. Les balises suivantes contenues dans la balise
questionnaire sont utilisées pour générer le fichier HTML
(mais ne sont utilisées ni pour Latex, ni pour Moodle XML):
titre : optionneldate : optionnelinstructions : optionnelauteurs : optionnelmodule : optionnelenseignant : optionnel, non utilisé)seuilcorrige : optionnel, non utilisé)
Une balise question a pour attribut optionnel la
difficulte pouvant prendre les valeurs
FACILE, INTERMEDIAIRE,
DIFFICLE. Cet attribut est utilisé dans les
transformations HTML, Latex, Moodle pour ajouter '*' pour un niveau
intermédiaire et '**' pour un niveau difficile.
question contient :
intitule donnant l'intitule de la question.reponse. Une balise
reponse peut prendre comme attribut :
valeur : peu testé,statut pouvant prendre les valeurs VRAI
ou FAUX pour préciser si la réponse donnée est correcte ou incorrecte. Ceci sert aussi à calculer la note dans le format MoodleXML.contenu donnant une proposition de
réponse,justification optionnelle permettant de
donner une explication liée à la réponse. Cette balise est utilisée
pour la transformation en HTML et en Moodle XML.instructions, intitule,
contenu et justification peuvent contenir:
<img src="nomimage.extension"/> (voir la FAQ).qcm.dtd. Exemple de QCM au format QCMXML (extrait du
fichier tube.qcm.xml) :
===================================================== <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE questionnaire SYSTEM "qcm.dtd" > <questionnaire> <idfqcm>tube</idfqcm> <titre> Redirections et tube </titre> <date> Mars 2003 </date> <instructions> <b>Pour chacune des questions, plusieurs réponses peuvent être correctes, vous pouvez donc cocher plusieurs cases !</b> <br/> Les questions sont de trois niveaux de difficultés. Les niveaux 'intermediaire' et 'difficile' sont précédés des signes '*' et '**', respectivement. <br/> Ces QCM sont autant l'occasion de contrôler des connaissances que d'apprendre quelque chose. En effet, les questions difficiles demandent un travail supplémentaire. Par conséquent, ne vous auto-évaluez pas sur ces questions. </instructions> <auteurs> Denis Conan </auteurs> <module> Initiation à Unix </module> <question difficulte="FACILE"> <intitule>La commande 'ls -1 /bin | wc -l' affiche :</intitule> <reponse statut="FAUX"> <contenu>Le nombre de lignes de '/bin'</contenu> <justification>L'expression "nombre de lignes" n'a pas de signication pour un répertoire.</justification> </reponse> <reponse statut="VRAI"> <contenu>Le nombre d'entrées sous '/bin'</contenu> </reponse> <reponse statut="FAUX"> <contenu>'1'</contenu> </reponse> </question> <question difficulte="INTERMEDIAIRE"> <intitule>Vous exécutez la commande 'write paul < toto' et le shell répond 'bash: cannot open toto'. Quelle peut être la cause provoquant ce message d'erreur :</intitule> <reponse statut="VRAI"> <contenu>Le fichier 'toto' n'existe pas</contenu> </reponse> <reponse statut="VRAI"> <contenu>Vous n'avez pas les droits sur le fichier 'toto'</contenu> </reponse> <reponse statut="FAUX"> <contenu>L'utilisateur 'paul' n'a pas les droits sur le fichier 'toto'</contenu> </reponse> </question> <question difficulte="FACILE"> <intitule> Pourquoi l'image suivante est-elle drôle? <br/><img src="geekscottes.png" width="50%"/> <br/>Bonne question!</intitule> <reponse statut="FAUX"> <contenu>Ce n'est pas drôle, on aurait pû dire et "home la maison" aussi</contenu> </reponse> <reponse statut="VRAI"> <contenu>C'est drôle parce que lorsque le PATH est mal positionné alors aucune commande ne fonctionne et donc PAF! y'a rien qui marche</contenu> </reponse> </question> </questionnaire> =====================================================
qcmxml2tex.py génère la version LaTeX du
QCM : à partir du fichier monfichier.qcm.xml,
génération de monfichier.tex. Dans le cas d'un QCM
contenant des images, les images doivent se trouver au même endroit
que le QCM (voir la FAQ).
make génère les fichiers
exempleQCM.htmlexempleQCM-reponses.htmlexempleQCM-reponses.txtCGIURL. Si le
QCM contient des images, il faut configurer l'URL des images dans le
Makefile en positionnant la variable IMGURL (voir la FAQ).
Le script qcmxml2html.xsl génère le fichier
monfichier.html pour le QCM à remplir par l'étudiant. Le
nom du fichier HTML généré est précisé par le paramètre
nombase dans le Makefile, par défaut est égal au nom de
base du fichier monfichier.qcml.xml.
qcmxml2reponseshtml.xsl génère le fichier
monfichier-reponses.html pour le fichier HTML avec les
réponses à afficher si l'étudiant coche la case « afficher
les réponses ». Le
script qcmxml2reponsestxt.xsl génère le
fichier monfichier-reponses.txt pour le fichier des
réponses qui est utilisé par le CGI traite-qcm-new.cgi.
CGIURL du Makefile):
traite-qcm-new.cgi*-reponses.html (un fichier généré par QCM)*-reponses.txt (un fichier généré par QCM)IMGURL). Pour éviter d'avoir à modifier
cette URL chaque année, il est préférable de stocker ces images sur un
serveur Web externe (par exemple stromboli) plutôt que dans l'espace
Moodle du cours.
qcmxml2moodlexml.xsl génère le fichier
monfichier.moodle.xml au format XML du module Quiz de
Moodle.
Il semble impossible dans Moodle d'importer ou exporter directement un
questionnaire. Il faut importer les questions puis créer, via
l'interface Moodle, le « test ». C'est pourquoi
les balises relatives au questionnaire (titre, date, auteurs,
instructions...) ne sont pas utilisées pour l'importation dans Moodle.
Le questionnaire contenu dans monfichier.qcm.xml est
transformé en un quiz contenant l'ensemble des questions
inclues dans le questionnaire. Ces questions seront ajoutées à la base
de questions dans la catégorie spécifiée par la balise
idfqcm du fichier d'entrée.
Chaque question est transformée en question de type
multichoice.
Dans Moodle, l'exécution d'un questionnaire résulte en une note. Par défaut, chaque question possède le même poids (ceci se configure dans l'interface Moodle au moment d'ajouter une question).
Pour calculer la note correspondant à une question, nous devons attribuer un poids à chaque proposition de réponse. Prenons l'exemple d'une question contenant 5 propositions dont 3 propositions vraies.
Le script de transformation calcule la note de la façon suivante.+ 1/3;- 1/3.Test et la configurer (dans UX on ne met ni le mode adaptatif ni la prise en compte des pénalités par exemple);Banque de questions puis Importer pour importer les questions dans la base de questions :
Catégorie, sélectionner Depuis le fichier;
Format de fichier, choisir Format XML Moodle;Faire correspondre les notes, choisir impérativement Erreur si la note n'est pas listée.moodle.xml.choisir une catégorie la catégorie correspondant aux questionsModifier le test :
Visualiser dans le cadre à droite intitulé contenu de la banque de questionsslideint l'appel à qcm.php. En effet, le
même cours en ligne est utilisé à la fois sur Internet et dans
Moodle. Selon le cas, en cliquant sur le QCM, il faut aller soit vers
l'URL du QCM sur Internet soit vers l'URL du QCM dans Moodle. qcm.php dirige vers le QCM html ou le QCM Moodle.
Par exemple, pour le QCM identifié par processus,
qcm.php permet de rediriger le clic vers l'une des deux
URL suivantes:
http://cours.it-sudparis.eu/moodle/Suivi/qcm.php?id=processusou
http://www-inf.it-sudparis.eu/cours/UNIX/Web/moodle/Suivi/qcm.php?id=processusConfigurer le fichier
qcm.php et copier le fichier
qcm.php dans /moodle/Suivi sur tous les
serveurs Web sur lesquels les QCM sont utilisés.
Il est possible d'insérer une image. Pour cela, il faut utiliser la balise HTML img en précisant le nom du fichier contenant l'image.
Il faut utiliser l'attribut src pour préciser le nom du
fichier contenant l'image. Attention le chemin absolu du serveur Web
sera ajouté après transformation. Voir l'exemple ci-dessus.
Pour donner le chemin où se trouve l'image, il faut configurer la
variable IMGURL dans le Makefile en donnant un chemin
vers l'image accessible depuis Internet. Cette URL sera utilisée à
la fois pour un QCM HTML et un QCM Moodle.
Pour la transformation Latex, l'image doit se trouver au même endroit que le fichier de QCM.
Les attributs HTML width et height sont
recopiés dans les traductions HTML et Moodle. Pour la traduction
Latex, ces balises sont traduites en pourcentage de
\textwidth ou \textheight.
qcm.php?debian ?
nxml d'emacs affiche la balise questionnaire invalide. Pourquoi ?
xmlns) dans la balise questionnaire. Les scripts XSL ne prennent pas en compte cet espace de noms donc je suggère de ne pas l'ajouter.
nxml d'emacs?
nxml par défaut dans emacs:
;; /usr/share/emacs/site-lisp/tcc-nxml-emacs: Add these lines
;; to your .emacs to use nxml-mode. For documentation of
;; this mode, see http://www.nmt.edu/tcc/help/pubs/nxml/
;;--
;; Add the nxml files to emacs's search path for loading:
;;--
(setq load-path
(append load-path
'("/usr/share/emacs/site-lisp/nxml-mode/")))
;;--
;; Make sure nxml-mode can autoload
;;--
(load "/usr/share/emacs/site-lisp/nxml-mode/rng-auto.el")
;;--
;; Load nxml-mode for files ending in .xml, .xsl, .rng, .xhtml
;;--
(setq auto-mode-alist
(cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode)
auto-mode-alist))
qcm.rnc n'existe pas, le générer:
trang$ trang qcm.dtd qcm.rnc
XML, Set schema, File et choisir qcm.rncxmllint:
$ xmllint --dtdvalid qcm.dtd droit_acces.qcm.xml > /dev/null
warning: failed to load external entity parser warning : PEReference: %block; not found ...
An XML processor attempting to retrieve the entity's content may use any combination of the public and system identifiers as well as additional information outside the scope of this specification to try to generate an alternative URI reference. If the processor is unable to do so, it MUST use the URI reference specified in the system literal.
xsltproc utilise des catalogues XML (voir la
documentation Catalog
support et les spécifications
OASIS). Ce que je crois comprendre de tout ça:
xsltproc va chercher d'abord sur le système local dans
les catalogues XML puis sur le réseau grâce à l'URL donnée (voir
aussi l'option --nonet de xsltproc).
En pratique, en installant le catalogue XML contenant la DTD xhtml (package Debian w3c-dtd-xhtml) en local, cela a résolu le problème.
nbsp traduite en espace (inclus dans alltt)name dans question tronqué à 100 caractères (erreur: write error in database). Pourrait être augmenté à 256 probablement.pre et code s'affichent en gros caractères avec des interlignes très grands. C'est aussi le cas dans une sasie directe de la question.qcmxml2tex.py dans le
traitement de la taille des images pour lesquelles uniquement la
largeur ou la hauteur était explicitée.QCMDIR, CGIURL et IMGURLqcmxml.tex générés à partir des fichiers
.qcm.xmlw3c-dtd-xhtml (voir le fichier control)contenu.tex