Ajout de publiquiz
authorPatrick PIERRE <patrick.pierre@prismallia.fr>
sam., 21 janv. 2012 18:03:09 +0100
changeset 73 0a3a8006996b
parent 72 c85252fac80c
child 74 ebe0ab8699fc
Ajout de publiquiz
RelaxNG/publidoc.rnc
RelaxNG/publidoc.rng
RelaxNG/publiquiz.rnc
RelaxNG/publiset.rng
Xml/Documents/les_miserables.xml
Xml/Documents/torture_test.xml
Xml/Quiz/blanks_fill.xml
Xml/Quiz/blanks_fill_strict.xml
Xml/Quiz/blanks_select.xml
Xml/Quiz/choices_check.xml
Xml/Quiz/choices_radio.xml
Xml/Quiz/composite.xml
Xml/Quiz/matching.xml
Xml/Quiz/point.xml
Xml/Quiz/point_radio.xml
Xml/Quiz/sort.xml
--- a/RelaxNG/publidoc.rnc	sam. janv. 14 12:44:31 2012 +0100
+++ b/RelaxNG/publidoc.rnc	sam. janv. 21 18:03:09 2012 +0100
@@ -335,8 +335,8 @@
 item = element item { item.content }
 
 item.content =
-   block+
- | inlines
+   inlines
+ | block+
 
 # ~~~~~~ glossary.item
 glossary.item = element item { glossary.item.content }
@@ -363,6 +363,7 @@
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+# ~~~~~~ table
 table = element table { table.content }
 
 table.content =
--- a/RelaxNG/publidoc.rng	sam. janv. 14 12:44:31 2012 +0100
+++ /dev/null	jeu. janv. 01 00:00:00 1970 +0000
@@ -1,1384 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-  <!-- $Id$ -->
-  <start>
-    <ref name="publidoc"/>
-  </start>
-  <define name="publidoc">
-    <element name="publidoc">
-      <ref name="publidoc.attributes"/>
-      <ref name="publidoc.content"/>
-    </element>
-  </define>
-  <define name="publidoc.attributes">
-    <ref name="version.attribute"/>
-  </define>
-  <define name="version.attribute">
-    <attribute name="version">
-      <value>1.0</value>
-    </attribute>
-  </define>
-  <define name="publidoc.content">
-    <choice>
-      <ref name="document"/>
-      <ref name="top.topic"/>
-    </choice>
-  </define>
-  <!--
-    =============================================================================
-                                     TOP LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ document ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="document">
-    <element name="document">
-      <ref name="document.attributes"/>
-      <ref name="document.content"/>
-    </element>
-  </define>
-  <define name="document.attributes">
-    <interleave>
-      <ref name="document.id.attribute"/>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="document.id.attribute">
-    <attribute name="xml:id">
-      <data type="ID"/>
-    </attribute>
-  </define>
-  <define name="lang.attribute">
-    <attribute name="xml:lang">
-      <data type="language"/>
-    </attribute>
-  </define>
-  <define name="document.content">
-    <optional>
-      <ref name="top.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="division"/>
-        <ref name="topic"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="top.topic">
-    <element name="topic">
-      <ref name="top.topic.attributes"/>
-      <ref name="top.topic.content"/>
-    </element>
-  </define>
-  <define name="top.topic.attributes">
-    <interleave>
-      <ref name="topic.id.attribute"/>
-      <optional>
-        <ref name="topic.type.attribute"/>
-      </optional>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="topic.id.attribute">
-    <attribute name="xml:id">
-      <data type="ID"/>
-    </attribute>
-  </define>
-  <define name="topic.type.attribute">
-    <attribute name="type">
-      <data type="NCName"/>
-    </attribute>
-  </define>
-  <define name="top.topic.content">
-    <optional>
-      <ref name="top.head"/>
-    </optional>
-    <oneOrMore>
-      <ref name="section"/>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                    HEAD LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="top.head">
-    <element name="head">
-      <ref name="top.head.content"/>
-    </element>
-  </define>
-  <define name="division.head">
-    <element name="head">
-      <ref name="division.head.content"/>
-    </element>
-  </define>
-  <define name="component.head">
-    <element name="head">
-      <ref name="component.head.content"/>
-    </element>
-  </define>
-  <define name="section.head">
-    <element name="head">
-      <ref name="section.head.content"/>
-    </element>
-  </define>
-  <define name="block.head">
-    <element name="head">
-      <ref name="block.head.content"/>
-    </element>
-  </define>
-  <define name="top.head.content">
-    <interleave>
-      <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
-      </optional>
-      <zeroOrMore>
-        <ref name="identifier"/>
-      </zeroOrMore>
-      <optional>
-        <ref name="copyright"/>
-      </optional>
-      <optional>
-        <ref name="contributors"/>
-      </optional>
-      <optional>
-        <ref name="date"/>
-      </optional>
-      <optional>
-        <ref name="place"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="source"/>
-      </zeroOrMore>
-      <optional>
-        <ref name="keywordset"/>
-      </optional>
-      <optional>
-        <ref name="subjectset"/>
-      </optional>
-      <optional>
-        <ref name="abstract"/>
-      </optional>
-      <optional>
-        <ref name="cover"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="annotation"/>
-      </zeroOrMore>
-    </interleave>
-  </define>
-  <define name="division.head.content">
-    <interleave>
-      <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
-      </optional>
-      <optional>
-        <ref name="abstract"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="annotation"/>
-      </zeroOrMore>
-    </interleave>
-  </define>
-  <define name="component.head.content">
-    <interleave>
-      <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
-      </optional>
-      <optional>
-        <ref name="contributors"/>
-      </optional>
-      <optional>
-        <ref name="abstract"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="annotation"/>
-      </zeroOrMore>
-    </interleave>
-  </define>
-  <define name="section.head.content">
-    <interleave>
-      <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
-      </optional>
-      <optional>
-        <ref name="abstract"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="annotation"/>
-      </zeroOrMore>
-    </interleave>
-  </define>
-  <define name="block.head.content">
-    <optional>
-      <ref name="title"/>
-      <optional>
-        <ref name="subtitle"/>
-      </optional>
-    </optional>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="title">
-    <element name="title">
-      <ref name="title.content"/>
-    </element>
-  </define>
-  <define name="subtitle">
-    <element name="subtitle">
-      <ref name="title.content"/>
-    </element>
-  </define>
-  <define name="title.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="identifier.uri">
-    <element name="identifier">
-      <attribute name="type">
-        <value>uri</value>
-      </attribute>
-      <data type="anyURI"/>
-    </element>
-  </define>
-  <define name="identifier.ean">
-    <element name="identifier">
-      <attribute name="type">
-        <value>ean</value>
-      </attribute>
-      <data type="token">
-        <param name="pattern">\d{13}</param>
-      </data>
-    </element>
-  </define>
-  <define name="identifier">
-    <choice>
-      <ref name="identifier.uri"/>
-      <ref name="identifier.ean"/>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="copyright">
-    <element name="copyright">
-      <ref name="copyright.content"/>
-    </element>
-  </define>
-  <define name="copyright.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ contributors -->
-  <define name="contributors">
-    <element name="contributors">
-      <ref name="contributors.content"/>
-    </element>
-  </define>
-  <define name="contributors.content">
-    <oneOrMore>
-      <ref name="contributor"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ contributor -->
-  <define name="contributor">
-    <element name="contributor">
-      <ref name="contributor.content"/>
-    </element>
-  </define>
-  <define name="contributor.content">
-    <choice>
-      <group>
-        <optional>
-          <ref name="firstname"/>
-          <optional>
-            <ref name="secondname"/>
-          </optional>
-        </optional>
-        <ref name="lastname"/>
-      </group>
-      <ref name="label"/>
-    </choice>
-    <optional>
-      <ref name="address"/>
-    </optional>
-    <optional>
-      <ref name="link"/>
-    </optional>
-    <zeroOrMore>
-      <ref name="role"/>
-    </zeroOrMore>
-  </define>
-  <!-- ~~~~~~ firstname, secondname, lastname, label -->
-  <define name="firstname">
-    <element name="firstname">
-      <ref name="firstname.content"/>
-    </element>
-  </define>
-  <define name="secondname">
-    <element name="secondname">
-      <ref name="secondname.content"/>
-    </element>
-  </define>
-  <define name="lastname">
-    <element name="lastname">
-      <ref name="lastname.content"/>
-    </element>
-  </define>
-  <define name="label">
-    <element name="label">
-      <ref name="label.content"/>
-    </element>
-  </define>
-  <define name="firstname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="secondname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="lastname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="label.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~ address -->
-  <define name="address">
-    <element name="address">
-      <ref name="address.content"/>
-    </element>
-  </define>
-  <define name="address.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~ role -->
-  <define name="role">
-    <element name="role">
-      <ref name="role.content"/>
-    </element>
-  </define>
-  <define name="role.content">
-    <choice>
-      <value>author</value>
-      <value>illustrator</value>
-      <value>publisher</value>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="place">
-    <element name="place">
-      <ref name="place.content"/>
-    </element>
-  </define>
-  <define name="place.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ source -->
-  <define name="source">
-    <element name="source">
-      <choice>
-        <group>
-          <attribute name="type">
-            <value>book</value>
-          </attribute>
-          <ref name="source.content.book"/>
-        </group>
-        <group>
-          <attribute name="type">
-            <value>file</value>
-          </attribute>
-          <ref name="source.content.file"/>
-        </group>
-      </choice>
-      <ref name="source.content"/>
-    </element>
-  </define>
-  <define name="source.content.book">
-    <ref name="identifier.ean"/>
-    <optional>
-      <ref name="title"/>
-    </optional>
-    <zeroOrMore>
-      <ref name="pagenumber"/>
-    </zeroOrMore>
-  </define>
-  <define name="source.content.file">
-    <ref name="identifier.uri"/>
-  </define>
-  <define name="source.content">
-    <zeroOrMore>
-      <ref name="annotation"/>
-    </zeroOrMore>
-  </define>
-  <!-- ~~~~~~ pagenumber -->
-  <define name="pagenumber">
-    <element name="pagenumber">
-      <ref name="pagenumber.attributes"/>
-    </element>
-  </define>
-  <define name="pagenumber.attributes">
-    <ref name="pagenumber.value.attribute"/>
-  </define>
-  <define name="pagenumber.value.attribute">
-    <attribute name="value">
-      <data type="positiveInteger"/>
-    </attribute>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ keyword & subject ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ keywordset -->
-  <define name="keywordset">
-    <element name="keywordset">
-      <ref name="keywordset.content"/>
-    </element>
-  </define>
-  <define name="keywordset.content">
-    <oneOrMore>
-      <ref name="keyword"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ keyword -->
-  <define name="keyword">
-    <element name="keyword">
-      <ref name="keyword.content"/>
-    </element>
-  </define>
-  <define name="keyword.content">
-    <mixed>
-      <zeroOrMore>
-        <ref name="sup"/>
-      </zeroOrMore>
-      <zeroOrMore>
-        <ref name="sub"/>
-      </zeroOrMore>
-    </mixed>
-  </define>
-  <!-- ~~~~~~ subjectset -->
-  <define name="subjectset">
-    <element name="subjectset">
-      <ref name="subjectset.content"/>
-    </element>
-  </define>
-  <define name="subjectset.content">
-    <oneOrMore>
-      <ref name="subject"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ subject -->
-  <define name="subject">
-    <element name="subject">
-      <ref name="subject.attributes"/>
-    </element>
-  </define>
-  <define name="subject.attributes">
-    <ref name="subject.id.attribute"/>
-  </define>
-  <define name="subject.id.attribute">
-    <attribute name="id">
-      <data type="NMTOKEN"/>
-    </attribute>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="abstract">
-    <element name="abstract">
-      <ref name="abstract.content"/>
-    </element>
-  </define>
-  <define name="abstract.content">
-    <oneOrMore>
-      <ref name="p"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cover ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="cover">
-    <element name="cover">
-      <ref name="cover.content"/>
-    </element>
-  </define>
-  <define name="cover.content">
-    <ref name="cover.image"/>
-  </define>
-  <define name="cover.image">
-    <element name="image">
-      <ref name="cover.image.attributes"/>
-    </element>
-  </define>
-  <define name="cover.image.attributes">
-    <ref name="cover.image.id.attribute"/>
-  </define>
-  <define name="cover.image.id.attribute">
-    <attribute name="id">
-      <data type="NMTOKEN"/>
-    </attribute>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ annotation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="annotation">
-    <element name="annotation">
-      <ref name="annotation.content"/>
-    </element>
-  </define>
-  <define name="annotation.content">
-    <ref name="inlines"/>
-  </define>
-  <!--
-    =============================================================================
-                                    DIVISION LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ division ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="division">
-    <element name="division">
-      <ref name="division.content"/>
-    </element>
-  </define>
-  <define name="division.content">
-    <optional>
-      <ref name="division.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="division"/>
-        <ref name="topic"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                  COMPONENT LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="topic">
-    <element name="topic">
-      <ref name="topic.attributes"/>
-      <ref name="topic.content"/>
-    </element>
-  </define>
-  <define name="topic.attributes">
-    <interleave>
-      <optional>
-        <ref name="topic.id.attribute"/>
-      </optional>
-      <optional>
-        <ref name="topic.type.attribute"/>
-      </optional>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="topic.content">
-    <optional>
-      <ref name="component.head"/>
-    </optional>
-    <oneOrMore>
-      <ref name="section"/>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                    SECTION LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="section">
-    <element name="section">
-      <ref name="section.attributes"/>
-      <ref name="section.content"/>
-    </element>
-  </define>
-  <define name="section.attributes">
-    <interleave>
-      <optional>
-        <ref name="section.type.attribute"/>
-      </optional>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="section.type.attribute">
-    <attribute name="type">
-      <data type="NCName"/>
-    </attribute>
-  </define>
-  <define name="section.content">
-    <optional>
-      <ref name="section.head"/>
-    </optional>
-    <choice>
-      <oneOrMore>
-        <ref name="section"/>
-      </oneOrMore>
-      <oneOrMore>
-        <ref name="block"/>
-      </oneOrMore>
-    </choice>
-  </define>
-  <!--
-    =============================================================================
-                                    BLOCK LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ block ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="block">
-    <choice>
-      <ref name="p"/>
-      <ref name="speech"/>
-      <ref name="list"/>
-      <ref name="blockquote"/>
-      <ref name="table"/>
-      <ref name="media"/>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="p">
-    <element name="p">
-      <ref name="p.content"/>
-    </element>
-  </define>
-  <define name="p.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ speech ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ speech -->
-  <define name="speech">
-    <element name="speech">
-      <ref name="speech.content"/>
-    </element>
-  </define>
-  <define name="speech.content">
-    <optional>
-      <ref name="speaker"/>
-    </optional>
-    <optional>
-      <ref name="stage"/>
-    </optional>
-    <oneOrMore>
-      <ref name="p"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ speaker -->
-  <define name="speaker">
-    <element name="speaker">
-      <ref name="speaker.content"/>
-    </element>
-  </define>
-  <define name="speaker.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~ stage -->
-  <define name="stage">
-    <element name="stage">
-      <ref name="stage.content"/>
-    </element>
-  </define>
-  <define name="stage.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ list -->
-  <define name="list">
-    <element name="list">
-      <ref name="list.content"/>
-    </element>
-  </define>
-  <define name="list.content">
-    <optional>
-      <ref name="block.head"/>
-    </optional>
-    <choice>
-      <group>
-        <optional>
-          <attribute name="type">
-            <value>ordered</value>
-          </attribute>
-        </optional>
-        <ref name="item"/>
-        <oneOrMore>
-          <ref name="item"/>
-        </oneOrMore>
-      </group>
-      <group>
-        <attribute name="type">
-          <value>glossary</value>
-        </attribute>
-        <oneOrMore>
-          <ref name="glossary.item"/>
-        </oneOrMore>
-      </group>
-    </choice>
-  </define>
-  <!-- ~~~~~~ item -->
-  <define name="item">
-    <element name="item">
-      <ref name="item.content"/>
-    </element>
-  </define>
-  <define name="item.content">
-    <choice>
-      <oneOrMore>
-        <ref name="block"/>
-      </oneOrMore>
-      <ref name="inlines"/>
-    </choice>
-  </define>
-  <!-- ~~~~~~ glossary.item -->
-  <define name="glossary.item">
-    <element name="item">
-      <ref name="glossary.item.content"/>
-    </element>
-  </define>
-  <define name="glossary.item.content">
-    <ref name="label"/>
-    <oneOrMore>
-      <ref name="block"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blockquote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ blockquote -->
-  <define name="blockquote">
-    <element name="blockquote">
-      <ref name="blockquote.content"/>
-    </element>
-  </define>
-  <define name="blockquote.content">
-    <optional>
-      <ref name="block.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="p"/>
-        <ref name="speech"/>
-        <ref name="list"/>
-      </choice>
-    </oneOrMore>
-    <optional>
-      <ref name="attribution"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ attribution -->
-  <define name="attribution">
-    <element name="attribution">
-      <ref name="attribution.content"/>
-    </element>
-  </define>
-  <define name="attribution.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="table">
-    <element name="table">
-      <ref name="table.content"/>
-    </element>
-  </define>
-  <define name="table.content">
-    <optional>
-      <ref name="block.head"/>
-    </optional>
-    <oneOrMore>
-      <ref name="tgroup"/>
-    </oneOrMore>
-    <optional>
-      <ref name="caption"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ tgroup -->
-  <define name="tgroup">
-    <element name="tgroup">
-      <ref name="tgroup.attributes"/>
-      <ref name="tgroup.content"/>
-    </element>
-  </define>
-  <define name="tgroup.content">
-    <optional>
-      <ref name="thead"/>
-    </optional>
-    <optional>
-      <ref name="tfoot"/>
-    </optional>
-    <ref name="tbody"/>
-  </define>
-  <define name="tgroup.attributes">
-    <interleave>
-      <ref name="cols.attribute"/>
-      <optional>
-        <ref name="align.attribute"/>
-      </optional>
-      <optional>
-        <ref name="colsep.attribute"/>
-      </optional>
-      <optional>
-        <ref name="rowsep.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="cols.attribute">
-    <attribute name="cols">
-      <data type="positiveInteger"/>
-    </attribute>
-  </define>
-  <define name="align.attribute">
-    <attribute name="align">
-      <choice>
-        <value>left</value>
-        <value>right</value>
-        <value>center</value>
-        <value>justify</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="colsep.attribute">
-    <attribute name="colsep">
-      <choice>
-        <value>0</value>
-        <value>1</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="rowsep.attribute">
-    <attribute name="rowsep">
-      <choice>
-        <value>0</value>
-        <value>1</value>
-      </choice>
-    </attribute>
-  </define>
-  <!-- ~~~~~~ thead, tfoot, tbody -->
-  <define name="thead">
-    <element name="thead">
-      <ref name="thead.attributes"/>
-      <ref name="thead.content"/>
-    </element>
-  </define>
-  <define name="tfoot">
-    <element name="tfoot">
-      <ref name="tfoot.attributes"/>
-      <ref name="tfoot.content"/>
-    </element>
-  </define>
-  <define name="tbody">
-    <element name="tbody">
-      <ref name="tbody.attributes"/>
-      <ref name="tbody.content"/>
-    </element>
-  </define>
-  <define name="thead.attributes">
-    <optional>
-      <ref name="valign.attribute"/>
-    </optional>
-  </define>
-  <define name="tfoot.attributes">
-    <optional>
-      <ref name="valign.attribute"/>
-    </optional>
-  </define>
-  <define name="tbody.attributes">
-    <optional>
-      <ref name="valign.attribute"/>
-    </optional>
-  </define>
-  <define name="valign.attribute">
-    <attribute name="valign">
-      <choice>
-        <value>top</value>
-        <value>middle</value>
-        <value>bottom</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="thead.content">
-    <oneOrMore>
-      <ref name="row"/>
-    </oneOrMore>
-  </define>
-  <define name="tfoot.content">
-    <oneOrMore>
-      <ref name="row"/>
-    </oneOrMore>
-  </define>
-  <define name="tbody.content">
-    <oneOrMore>
-      <ref name="row"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ row -->
-  <define name="row">
-    <element name="row">
-      <ref name="row.attribute"/>
-      <ref name="row.content"/>
-    </element>
-  </define>
-  <define name="row.attribute">
-    <optional>
-      <ref name="valign.attribute"/>
-    </optional>
-  </define>
-  <define name="row.content">
-    <oneOrMore>
-      <ref name="entry"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ entry -->
-  <define name="entry">
-    <element name="entry">
-      <ref name="entry.content"/>
-    </element>
-  </define>
-  <define name="entry.content">
-    <choice>
-      <ref name="inlines"/>
-      <oneOrMore>
-        <choice>
-          <ref name="p"/>
-          <ref name="media"/>
-        </choice>
-      </oneOrMore>
-    </choice>
-  </define>
-  <!-- ~~~~~~ caption -->
-  <define name="caption">
-    <element name="caption">
-      <ref name="caption.content"/>
-    </element>
-  </define>
-  <define name="caption.content">
-    <choice>
-      <ref name="inlines"/>
-      <oneOrMore>
-        <ref name="p"/>
-      </oneOrMore>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ media ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ media -->
-  <define name="media">
-    <element name="media">
-      <ref name="media.content"/>
-    </element>
-  </define>
-  <define name="media.content">
-    <optional>
-      <ref name="block.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="image"/>
-        <ref name="audio"/>
-      </choice>
-    </oneOrMore>
-    <optional>
-      <ref name="caption"/>
-    </optional>
-    <optional>
-      <ref name="link"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ image -->
-  <define name="image">
-    <element name="image">
-      <ref name="image.attributes"/>
-      <ref name="image.content"/>
-    </element>
-  </define>
-  <define name="image.attributes">
-    <ref name="media.id.attribute"/>
-    <optional>
-      <ref name="image.type"/>
-    </optional>
-  </define>
-  <define name="media.id.attribute">
-    <attribute name="id">
-      <data type="NMTOKEN"/>
-    </attribute>
-  </define>
-  <define name="image.type">
-    <attribute name="type">
-      <choice>
-        <value>cover</value>
-        <value>thumbnail</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="image.content">
-    <optional>
-      <ref name="copyright"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ audio -->
-  <define name="audio">
-    <element name="audio">
-      <ref name="audio.attributes"/>
-    </element>
-  </define>
-  <define name="audio.attributes">
-    <ref name="media.id.attribute"/>
-  </define>
-  <!--
-    =============================================================================
-                                    INLINE LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="inlines">
-    <mixed>
-      <interleave>
-        <zeroOrMore>
-          <ref name="sup"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="sub"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="var"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="number"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="math"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="date"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="name"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="note"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="foreign"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="highlight"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="mentioned"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="quote"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="acronym"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="term"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="link"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="anchor"/>
-        </zeroOrMore>
-      </interleave>
-    </mixed>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup, var ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="sup">
-    <element name="sup">
-      <text/>
-    </element>
-  </define>
-  <define name="sub">
-    <element name="sub">
-      <text/>
-    </element>
-  </define>
-  <define name="var">
-    <element name="var">
-      <text/>
-    </element>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ math ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="math">
-    <element name="math">
-      <choice>
-        <group>
-          <attribute name="notation">
-            <value>tex</value>
-          </attribute>
-          <ref name="math.attributes"/>
-          <ref name="math.tex.content"/>
-        </group>
-        <group>
-          <ref name="math.attributes"/>
-          <ref name="math.content"/>
-        </group>
-      </choice>
-    </element>
-  </define>
-  <define name="math.attributes">
-    <optional>
-      <ref name="wide.attribute"/>
-    </optional>
-  </define>
-  <define name="wide.attribute">
-    <attribute name="wide">
-      <data type="boolean"/>
-    </attribute>
-  </define>
-  <define name="math.content">
-    <mixed>
-      <interleave>
-        <zeroOrMore>
-          <ref name="sup"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="sub"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="var"/>
-        </zeroOrMore>
-      </interleave>
-    </mixed>
-  </define>
-  <define name="math.tex.content">
-    <text/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ number ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="number">
-    <element name="number">
-      <choice>
-        <group>
-          <attribute name="type">
-            <value>roman</value>
-          </attribute>
-          <ref name="number.attributes"/>
-          <ref name="number.roman.content"/>
-        </group>
-        <group>
-          <ref name="number.attributes"/>
-          <ref name="number.content"/>
-        </group>
-      </choice>
-    </element>
-  </define>
-  <define name="number.attributes">
-    <optional>
-      <ref name="number.value.attribute"/>
-    </optional>
-  </define>
-  <define name="number.value.attribute">
-    <attribute name="value">
-      <choice>
-        <data type="integer"/>
-        <data type="decimal"/>
-      </choice>
-    </attribute>
-  </define>
-  <define name="number.content">
-    <mixed>
-      <zeroOrMore>
-        <ref name="sup"/>
-      </zeroOrMore>
-    </mixed>
-  </define>
-  <define name="number.roman.content">
-    <data type="token">
-      <param name="pattern">[dlxvi]+</param>
-    </data>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ date ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="date">
-    <element name="date">
-      <ref name="date.attributes"/>
-      <ref name="date.content"/>
-    </element>
-  </define>
-  <define name="date.attributes">
-    <interleave>
-      <ref name="date.value.attribute"/>
-      <optional>
-        <ref name="date.of.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="date.value.attribute">
-    <attribute name="value">
-      <choice>
-        <data type="date"/>
-        <data type="gYearMonth"/>
-        <data type="gYear"/>
-      </choice>
-    </attribute>
-  </define>
-  <define name="date.of.attribute">
-    <attribute name="of">
-      <choice>
-        <value>birth</value>
-        <value>death</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="date.content">
-    <mixed>
-      <zeroOrMore>
-        <ref name="sup"/>
-      </zeroOrMore>
-    </mixed>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="name">
-    <element name="name">
-      <ref name="name.attributes"/>
-      <ref name="name.content"/>
-    </element>
-  </define>
-  <define name="name.attributes">
-    <optional>
-      <ref name="name.of.attribute"/>
-    </optional>
-  </define>
-  <define name="name.of.attribute">
-    <attribute name="of">
-      <choice>
-        <value>person</value>
-        <value>company</value>
-        <value>book</value>
-        <value>newspaper</value>
-        <value>party</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="name.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="note">
-    <element name="note">
-      <ref name="note.attributes"/>
-      <ref name="note.content"/>
-    </element>
-  </define>
-  <define name="note.attributes">
-    <optional>
-      <ref name="note.label.attribute"/>
-    </optional>
-  </define>
-  <define name="note.label.attribute">
-    <attribute name="label"/>
-  </define>
-  <define name="note.content">
-    <choice>
-      <ref name="inlines"/>
-      <oneOrMore>
-        <ref name="p"/>
-      </oneOrMore>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foreign ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="foreign">
-    <element name="foreign">
-      <ref name="foreign.attributes"/>
-      <ref name="foreign.content"/>
-    </element>
-  </define>
-  <define name="foreign.attributes">
-    <optional>
-      <ref name="lang.attribute"/>
-    </optional>
-  </define>
-  <define name="foreign.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ highlight ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="highlight">
-    <element name="highlight">
-      <ref name="highlight.content"/>
-    </element>
-  </define>
-  <define name="highlight.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mentioned ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="mentioned">
-    <element name="mentioned">
-      <ref name="mentioned.content"/>
-    </element>
-  </define>
-  <define name="mentioned.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="quote">
-    <element name="quote">
-      <ref name="quote.content"/>
-    </element>
-  </define>
-  <define name="quote.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ acronym ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="acronym">
-    <element name="acronym">
-      <ref name="acronym.content"/>
-    </element>
-  </define>
-  <define name="acronym.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ term ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="term">
-    <element name="term">
-      <ref name="term.content"/>
-    </element>
-  </define>
-  <define name="term.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="link">
-    <element name="link">
-      <ref name="link.attributes"/>
-      <ref name="link.content"/>
-    </element>
-  </define>
-  <define name="link.attributes">
-    <choice>
-      <ref name="uri.attribute"/>
-      <ref name="idref.attribute"/>
-    </choice>
-  </define>
-  <define name="uri.attribute">
-    <attribute name="uri">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="idref.attribute">
-    <attribute name="idref">
-      <data type="IDREF"/>
-    </attribute>
-  </define>
-  <define name="link.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="anchor">
-    <element name="anchor">
-      <ref name="anchor.attributes"/>
-    </element>
-  </define>
-  <define name="anchor.attributes">
-    <ref name="anchor.id.attribute"/>
-  </define>
-  <define name="anchor.id.attribute">
-    <attribute name="xml:id">
-      <data type="ID"/>
-    </attribute>
-  </define>
-</grammar>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/RelaxNG/publiquiz.rnc	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,361 @@
+# $Id$
+
+
+include "publidoc.rnc" {
+   start = publiquiz
+
+   document.content =
+      top.head?,
+      (division | topic | quiz)+
+}
+
+publiquiz = element publiquiz {
+   publiquiz.attributes,
+   publiquiz.content
+}
+
+publiquiz.attributes =
+   version.attribute
+
+publiquiz.content =
+   document
+ | top.quiz
+
+
+# =============================================================================
+#                                  TOP LEVEL
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quiz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+top.quiz = element quiz { top.quiz.attributes, quiz.content }
+
+top.quiz.attributes =
+   quiz.id.attribute
+ & lang.attribute?
+
+
+# =============================================================================
+#                               COMPONENT LEVEL
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quiz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+quiz = element quiz { quiz.attributes, quiz.content }
+
+quiz.attributes =
+   quiz.id.attribute?
+ & lang.attribute?
+quiz.id.attribute = attribute xml:id { xsd:ID }
+
+quiz.content =
+   component.head?,
+   instructions,
+   (engine | composite)?,
+   help?,
+   commentary?
+
+
+# =============================================================================
+#                                 SECTION LEVEL
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+blanks.section = element section { section.attributes, blanks.section.content }
+point.section = element section { section.attributes, point.section.content }
+
+blanks.section.content =
+   section.head?,
+   (blanks.section+ | blanks.block+)
+point.section.content =
+   section.head?,
+   (point.section+ | point.block+)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ instructions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+instructions = element instructions { section.content }
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ engine ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+engine =
+   choices.radio
+ | choices.check
+ | blanks.fill
+ | blanks.select
+ | point
+ | matching
+ | sort
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ choices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+choices.radio = element choices {
+   attribute type { "radio" }, choices.attributes, choices.radio.content }
+choices.check = element choices {
+   attribute type { "check" }, choices.attributes, choices.check.content }
+
+choices.attributes =
+   shuffle.attribute?
+shuffle.attribute = attribute shuffle { xsd:boolean }
+
+choices.radio.content =
+   choices.right
+ & choices.wrong+
+choices.check.content =
+   (choices.right | choices.wrong)+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blanks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+blanks.fill = element blanks { blanks.fill.attributes, blanks.fill.content }
+blanks.select = element blanks {
+   blanks.select.attributes, blanks.select.content }
+
+blanks.fill.attributes =
+   attribute type { "fill" }
+ & strict.attribute?
+blanks.select.attributes =
+   attribute type { "select" },
+   multiple.attribute?
+strict.attribute = attribute strict { xsd:boolean }
+multiple.attribute = attribute multiple { xsd:boolean }
+
+blanks.fill.content =
+   (blanks.block+ | blanks.section+)
+blanks.select.content =
+   blanks.wrongs?,
+   (blanks.block+ | blanks.section+)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ point ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+point = element point { point.attributes, point.content }
+   
+point.attributes =
+   point.type.attribute?
+point.type.attribute = attribute type {
+   "radio" | "radio_button" | "check" | "check_button" }
+
+point.content =
+   (point.section+ | point.block+)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ matching ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+matching = element matching { matching.content }
+   
+matching.content =
+   match,
+   match+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sort ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+sort = element sort { sort.attributes, sort.content }
+
+sort.attributes =
+   shuffle.attribute?
+   
+sort.content =
+   comparison?,
+   sort.item,
+   sort.item+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ composite ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+composite = element composite { composite.content }
+   
+composite.content =
+   (instructions?, engine),
+   (instructions?, engine)+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ help ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+help = element help { help.content }
+
+help.content =
+   (section+ | block+)?,
+   link*
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ commentary ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+commentary = element commentary { commentary.content }
+
+commentary.content =
+   (section+ | block+)
+
+
+# =============================================================================
+#                                 BLOCK LEVEL
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ block ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+blanks.block =
+   (blanks.p | speech | blanks.list | blockquote | blanks.table | media)
+point.block =
+   (point.p | speech | point.list | blockquote | point.table | media)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+blanks.p = element p { blanks.p.content }
+point.p = element p { point.p.content }
+
+blanks.p.content =
+   inlines
+ & blank*
+point.p.content =
+   inlines
+ & point.right*
+ & point.wrong*
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ list
+blanks.list = element list { blanks.list.content }
+point.list = element list { point.list.content }
+
+blanks.list.content =
+   block.head?,
+   (  (attribute type {"ordered"}?, blanks.item, blanks.item+)
+    | (attribute type {"glossary"}, glossary.item+) )
+point.list.content =
+   block.head?,
+   (  (attribute type {"ordered"}?, point.item, point.item+)
+    | (attribute type {"glossary"}, glossary.item+) )
+
+# ~~~~~~ item
+blanks.item = element item { blanks.item.content }
+point.item = element item { point.item.content }
+
+blanks.item.content =
+   (inlines & blank*)
+ | blanks.block+
+point.item.content =
+   (inlines & point.right* & point.wrong*)
+ | point.block+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+blanks.table = element table { blanks.table.content }
+point.table = element table { point.table.content }
+
+blanks.table.content =
+   block.head?,
+   blanks.tgroup+,
+   caption?
+point.table.content =
+   block.head?,
+   point.tgroup+,
+   caption?
+
+# ~~~~~~ tgroup
+blanks.tgroup = element tgroup { tgroup.attributes, blanks.tgroup.content }
+point.tgroup = element tgroup { tgroup.attributes, point.tgroup.content }
+
+blanks.tgroup.content =
+   thead?,
+   blanks.tbody
+point.tgroup.content =
+   thead?,
+   point.tbody
+
+# ~~~~~~ tbody
+blanks.tbody = element tbody { tbody.attributes, blanks.tbody.content }
+point.tbody = element tbody { tbody.attributes, point.tbody.content }
+
+blanks.tbody.content =
+   blanks.row+
+point.tbody.content =
+   point.row+
+
+# ~~~~~~ row
+blanks.row = element row { row.attribute, blanks.row.content }
+point.row = element row { row.attribute, point.row.content }
+
+blanks.row.content =
+  blanks.entry+
+point.row.content =
+  point.entry+
+
+# ~~~~~~ entry
+blanks.entry = element entry { blanks.entry.content }
+point.entry = element entry { point.entry.content }
+
+blanks.entry.content =
+   (inlines & blank*)
+ | (p | media)+
+
+point.entry.content =
+   (inlines & point.right* & point.wrong*)
+ | (p | media)+
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~ choices.right, choices.wrong ~~~~~~~~~~~~~~~~~~~~~~~
+
+choices.right = element right { choices.right.content }
+choices.wrong = element wrong { choices.right.content }
+
+choices.right.content =
+   inlines
+ | p+
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blanks.wrongs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ blanks.wrongs
+blanks.wrongs = element wrongs { blanks.wrongs.content }
+
+blanks.wrongs.content =
+   blanks.wrong+
+
+# ~~~~~~ blanks.wrong
+blanks.wrong = element wrong { blanks.wrong.content }
+
+blanks.wrong.content = text
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ match ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+match = element match { match.content }
+
+match.content =
+   (p | section),
+   (p | section)
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~ (sort) comparaison, item ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ comparison
+comparison = element comparison { comparison.content }
+
+comparison.content = inlines
+
+# ~~~~~~ sort.item
+sort.item = element item { sort.item.attributes, sort.item.content }
+
+sort.item.attributes =
+   item.shuffle.attribute?
+item.shuffle.attribute = attribute shuffle { xsd:integer }
+
+sort.item.content = inlines
+
+
+# =============================================================================
+#                                 INLINE LEVEL
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blank ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ blank
+blank = element blank { blank.content }
+
+blank.content =
+   text
+ | (s+, help?, commentary?)
+
+# ~~~~~~ s
+s = element s { s.content }
+
+s.content = text
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~ point.right, point.wrong ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+point.right = element right { point.right.content }
+point.wrong = element wrong { point.right.content }
+
+point.right.content = inlines
--- a/RelaxNG/publiset.rng	sam. janv. 14 12:44:31 2012 +0100
+++ /dev/null	jeu. janv. 01 00:00:00 1970 +0000
@@ -1,558 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-  <!-- $Id$ -->
-  <start>
-    <ref name="publiset"/>
-  </start>
-  <define name="publiset">
-    <element name="publiset">
-      <ref name="publiset.attributes"/>
-      <ref name="publiset.content"/>
-    </element>
-  </define>
-  <define name="publiset.attributes">
-    <ref name="version.attribute"/>
-  </define>
-  <define name="version.attribute">
-    <attribute name="version">
-      <value>1.0</value>
-    </attribute>
-  </define>
-  <define name="publiset.content">
-    <oneOrMore>
-      <choice>
-        <ref name="composition"/>
-        <ref name="selection"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                     TOP LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ composition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="composition">
-    <element name="composition">
-      <ref name="composition.attributes"/>
-      <ref name="composition.content"/>
-    </element>
-  </define>
-  <define name="composition.attributes">
-    <interleave>
-      <ref name="composition.id.attribute"/>
-      <optional>
-        <ref name="path.attribute"/>
-      </optional>
-      <optional>
-        <ref name="xpath.attribute"/>
-      </optional>
-      <optional>
-        <ref name="xslt.attribute"/>
-      </optional>
-      <ref name="remap.attributes"/>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="composition.id.attribute">
-    <attribute name="xml:id">
-      <data type="ID"/>
-    </attribute>
-  </define>
-  <define name="path.attribute">
-    <attribute name="path">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="xslt.attribute">
-    <attribute name="xslt">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="xpath.attribute">
-    <attribute name="xpath"/>
-  </define>
-  <define name="lang.attribute">
-    <attribute name="xml:lang">
-      <data type="language"/>
-    </attribute>
-  </define>
-  <define name="composition.content">
-    <optional>
-      <ref name="composition.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="composition.division"/>
-        <ref name="composition.file"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ selection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="selection">
-    <element name="selection">
-      <ref name="selection.attributes"/>
-      <ref name="selection.content"/>
-    </element>
-  </define>
-  <define name="selection.attributes">
-    <interleave>
-      <ref name="selection.id.attribute"/>
-      <optional>
-        <ref name="path.attribute"/>
-      </optional>
-      <optional>
-        <ref name="lang.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="selection.id.attribute">
-    <attribute name="xml:id">
-      <data type="ID"/>
-    </attribute>
-  </define>
-  <define name="selection.content">
-    <optional>
-      <ref name="selection.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="selection.division"/>
-        <ref name="selection.file"/>
-        <ref name="link"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                     HEAD LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="composition.head">
-    <element name="head">
-      <ref name="head.attributes"/>
-      <ref name="top.head.content"/>
-    </element>
-  </define>
-  <define name="selection.head">
-    <element name="head">
-      <ref name="top.head.content"/>
-    </element>
-  </define>
-  <define name="division.head">
-    <element name="head">
-      <ref name="division.head.content"/>
-    </element>
-  </define>
-  <define name="head.attributes">
-    <ref name="remap.attributes"/>
-  </define>
-  <define name="top.head.content">
-    <interleave>
-      <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
-      </optional>
-      <zeroOrMore>
-        <ref name="identifier"/>
-      </zeroOrMore>
-      <optional>
-        <ref name="copyright"/>
-      </optional>
-      <optional>
-        <ref name="contributors"/>
-      </optional>
-      <optional>
-        <ref name="abstract"/>
-      </optional>
-      <optional>
-        <ref name="cover"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="division.head.content">
-    <optional>
-      <ref name="title"/>
-      <optional>
-        <ref name="subtitle"/>
-      </optional>
-    </optional>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="title">
-    <element name="title">
-      <ref name="title.content"/>
-    </element>
-  </define>
-  <define name="subtitle">
-    <element name="subtitle">
-      <ref name="title.content"/>
-    </element>
-  </define>
-  <define name="title.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="identifier.uri">
-    <element name="identifier">
-      <attribute name="type">
-        <value>uri</value>
-      </attribute>
-      <data type="anyURI"/>
-    </element>
-  </define>
-  <define name="identifier.ean">
-    <element name="identifier">
-      <attribute name="type">
-        <value>ean</value>
-      </attribute>
-      <data type="token">
-        <param name="pattern">\d{13}</param>
-      </data>
-    </element>
-  </define>
-  <define name="identifier">
-    <choice>
-      <ref name="identifier.uri"/>
-      <ref name="identifier.ean"/>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="copyright">
-    <element name="copyright">
-      <ref name="copyright.content"/>
-    </element>
-  </define>
-  <define name="copyright.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ contributors -->
-  <define name="contributors">
-    <element name="contributors">
-      <ref name="contributors.content"/>
-    </element>
-  </define>
-  <define name="contributors.content">
-    <oneOrMore>
-      <ref name="contributor"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~ contributor -->
-  <define name="contributor">
-    <element name="contributor">
-      <ref name="contributor.content"/>
-    </element>
-  </define>
-  <define name="contributor.content">
-    <choice>
-      <group>
-        <optional>
-          <ref name="firstname"/>
-          <optional>
-            <ref name="secondname"/>
-          </optional>
-        </optional>
-        <ref name="lastname"/>
-      </group>
-      <ref name="label"/>
-    </choice>
-    <optional>
-      <ref name="address"/>
-    </optional>
-    <optional>
-      <ref name="link"/>
-    </optional>
-    <zeroOrMore>
-      <ref name="role"/>
-    </zeroOrMore>
-  </define>
-  <!-- ~~~~~~ firstname, secondname, lastname, label -->
-  <define name="firstname">
-    <element name="firstname">
-      <ref name="firstname.content"/>
-    </element>
-  </define>
-  <define name="secondname">
-    <element name="secondname">
-      <ref name="secondname.content"/>
-    </element>
-  </define>
-  <define name="lastname">
-    <element name="lastname">
-      <ref name="lastname.content"/>
-    </element>
-  </define>
-  <define name="label">
-    <element name="label">
-      <ref name="label.content"/>
-    </element>
-  </define>
-  <define name="firstname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="secondname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="lastname.content">
-    <ref name="inlines"/>
-  </define>
-  <define name="label.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~ address -->
-  <define name="address">
-    <element name="address">
-      <ref name="address.content"/>
-    </element>
-  </define>
-  <define name="address.content">
-    <ref name="inlines"/>
-  </define>
-  <!-- ~~~~~~ role -->
-  <define name="role">
-    <element name="role">
-      <ref name="role.content"/>
-    </element>
-  </define>
-  <define name="role.content">
-    <choice>
-      <value>author</value>
-      <value>illustrator</value>
-      <value>publisher</value>
-    </choice>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="abstract">
-    <element name="abstract">
-      <ref name="abstract.content"/>
-    </element>
-  </define>
-  <define name="abstract.content">
-    <oneOrMore>
-      <ref name="p"/>
-    </oneOrMore>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cover ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="cover">
-    <element name="cover">
-      <ref name="cover.content"/>
-    </element>
-  </define>
-  <define name="cover.content">
-    <ref name="cover.image"/>
-  </define>
-  <define name="cover.image">
-    <element name="image">
-      <ref name="cover.image.attributes"/>
-    </element>
-  </define>
-  <define name="cover.image.attributes">
-    <ref name="cover.image.id.attribute"/>
-  </define>
-  <define name="cover.image.id.attribute">
-    <attribute name="id">
-      <data type="NMTOKEN"/>
-    </attribute>
-  </define>
-  <!--
-    =============================================================================
-                                   DIVISION LEVEL
-    =============================================================================
-  -->
-  <define name="composition.division">
-    <element name="division">
-      <ref name="composition.division.attributes"/>
-      <ref name="composition.division.content"/>
-    </element>
-  </define>
-  <define name="selection.division">
-    <element name="division">
-      <ref name="selection.division.attributes"/>
-      <ref name="selection.division.content"/>
-    </element>
-  </define>
-  <define name="composition.division.attributes">
-    <interleave>
-      <optional>
-        <ref name="path.attribute"/>
-      </optional>
-      <optional>
-        <ref name="xpath.attribute"/>
-      </optional>
-      <optional>
-        <ref name="xslt.attribute"/>
-      </optional>
-      <ref name="remap.attributes"/>
-    </interleave>
-  </define>
-  <define name="selection.division.attributes">
-    <optional>
-      <ref name="path.attribute"/>
-    </optional>
-  </define>
-  <define name="composition.division.content">
-    <optional>
-      <ref name="composition.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="composition.division"/>
-        <ref name="composition.file"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <define name="selection.division.content">
-    <optional>
-      <ref name="selection.head"/>
-    </optional>
-    <oneOrMore>
-      <choice>
-        <ref name="selection.division"/>
-        <ref name="selection.file"/>
-        <ref name="link"/>
-      </choice>
-    </oneOrMore>
-  </define>
-  <!--
-    =============================================================================
-                                     FILE LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="composition.file">
-    <element name="file">
-      <ref name="composition.file.attributes"/>
-    </element>
-  </define>
-  <define name="selection.file">
-    <element name="file">
-      <ref name="selection.file.attributes"/>
-      <ref name="file.content"/>
-    </element>
-  </define>
-  <define name="composition.file.attributes">
-    <interleave>
-      <ref name="name.attribute"/>
-      <optional>
-        <ref name="xpath.attribute"/>
-      </optional>
-      <optional>
-        <ref name="xslt.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="selection.file.attributes">
-    <interleave>
-      <ref name="name.attribute"/>
-      <optional>
-        <ref name="uri.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="name.attribute">
-    <attribute name="name">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="file.content">
-    <ref name="inlines"/>
-  </define>
-  <!--
-    =============================================================================
-                                    BLOCK LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="p">
-    <element name="p">
-      <ref name="p.content"/>
-    </element>
-  </define>
-  <define name="p.content">
-    <ref name="inlines"/>
-  </define>
-  <!--
-    =============================================================================
-                                    INLINE LEVEL
-    =============================================================================
-  -->
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="inlines">
-    <mixed>
-      <interleave>
-        <zeroOrMore>
-          <ref name="sup"/>
-        </zeroOrMore>
-        <zeroOrMore>
-          <ref name="sub"/>
-        </zeroOrMore>
-      </interleave>
-    </mixed>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="sup">
-    <element name="sup">
-      <ref name="inlines"/>
-    </element>
-  </define>
-  <define name="sub">
-    <element name="sub">
-      <ref name="inlines"/>
-    </element>
-  </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="link">
-    <element name="link">
-      <ref name="link.attributes"/>
-      <ref name="link.content"/>
-    </element>
-  </define>
-  <define name="link.attributes">
-    <ref name="uri.attribute"/>
-  </define>
-  <define name="uri.attribute">
-    <attribute name="uri">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="link.content">
-    <ref name="inlines"/>
-  </define>
-  <!--
-    =============================================================================
-                                  REMAP ATTRIBUTES
-    =============================================================================
-  -->
-  <define name="remap.attributes">
-    <interleave>
-      <optional>
-        <ref name="as.attribute"/>
-      </optional>
-      <optional>
-        <ref name="attributes.attribute"/>
-      </optional>
-    </interleave>
-  </define>
-  <define name="as.attribute">
-    <attribute name="as">
-      <data type="QName"/>
-    </attribute>
-  </define>
-  <define name="attributes.attribute">
-    <attribute name="attributes">
-      <list>
-        <oneOrMore>
-          <data type="token">
-            <param name="pattern">\c+=\S+</param>
-          </data>
-        </oneOrMore>
-      </list>
-    </attribute>
-  </define>
-</grammar>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Documents/les_miserables.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id$ -->
+<publidoc  version="1.0">
+  <document xml:id="les_miserables" xml:lang="fr">
+    <head>
+      <title>Les Misérables (extraits)</title>
+      <contributors>
+        <contributor>
+          <firstname>Victor</firstname><lastname>HUGO</lastname>
+        </contributor>
+      </contributors>
+      <date value="1862"/>
+    </head>
+    
+    <!-- ================================================================== -->
+    <!-- =                                                                = -->
+    <!-- =                             Partie 1                           = -->
+    <!-- =                                                                = -->
+    <!-- ================================================================== -->
+    <division>
+      <head>
+        <title>Partie 1. Fantine</title>
+      </head>
+      <!-- ================================================================ -->
+      <!-- =                            Livre 1                           = -->
+      <!-- ================================================================ -->
+      <division>
+        <head>
+          <title>Livre 1. Un juste</title>
+        </head>
+        <!-- ============================================================== -->
+        <topic>
+          <head>
+            <title>1. M. Myriel</title>
+          </head>
+          <section>
+            <p>En 1815, M. Charles-François-Bienvenu Myriel était évêque de
+            Digne. C'était un vieillard d'environ soixante-quinze ans ; il
+            occupait le siège de Digne depuis 1806.</p>
+            <p>Quoique ce détail ne touche en aucune manière au fond même de ce
+            que nous avons à raconter, il n'est peut-être pas inutile, ne
+            fût-ce que pour être exact en tout, d'indiquer ici les bruits et
+            les propos qui avaient couru sur son compte au moment où il était
+            arrivé dans le diocèse. Vrai ou faux, ce qu'on dit des hommes tient
+            souvent autant de place dans leur vie et surtout dans leur destinée
+            que ce qu'ils font. M. Myriel était fils d'un conseiller au
+            parlement d'Aix ; noblesse de robe. On contait de lui que son père,
+            le réservant pour hériter de sa charge, l'avait marié de fort bonne
+            heure, à dix-huit ou vingt ans, suivant un usage assez répandu dans
+            les familles parlementaires. Charles Myriel, nonobstant ce mariage,
+            avait, disait-on, beaucoup fait parler de lui. Il était bien fait
+            de sa personne, quoique d'assez petite taille, élégant, gracieux,
+            spirituel ; toute la première partie de sa vie avait été donnée au
+            monde et aux galanteries. La révolution survint, les événements se
+            précipitèrent, les familles parlementaires décimées, chassées,
+            traquées, se dispersèrent. M. Charles Myriel, dès les premiers
+            jours de la révolution, émigra en Italie. Sa femme y mourut d'une
+            maladie de poitrine dont elle était atteinte depuis longtemps. Ils
+            n'avaient point d'enfants. Que se passa-t-il ensuite dans la
+            destinée de M. Myriel ? L'écroulement de l'ancienne société
+            française, la chute de sa propre famille, les tragiques spectacles
+            de 93, plus effrayants encore peut-être pour les émigrés qui les
+            voyaient de loin avec le grossissement de l'épouvante, firent-ils
+            germer en lui des idées de renoncement et de solitude ? Fut-il, au
+            milieu d'une de ces distractions et de ces affections qui
+            occupaient sa vie, subitement atteint d'un de ces coups mystérieux
+            et terribles qui viennent quelquefois renverser, en le frappant au
+            coeur, l'homme que les catastrophes publiques n'ébranleraient pas
+            en le frappant dans son existence et dans sa fortune ? Nul n'aurait
+            pu le dire ; tout ce qu'on savait, c'est que, lorsqu'il revint
+            d'Italie, il était prêtre.</p>
+            <p>En 1804, M. Myriel était curé de Brignolles. Il était déjà
+            vieux, et vivait dans une retraite profonde.</p>
+            <p>Vers l'époque du couronnement, une petite affaire de sa cure, on
+            ne sait plus trop quoi, l'amena à Paris.  Entre autres personnes
+            puissantes, il alla solliciter pour ses paroissiens M. le cardinal
+            Fesch. Un jour que l'empereur était venu faire visite à son oncle,
+            le digne curé, qui attendait dans l'antichambre, se trouva sur le
+            passage de sa majesté. Napoléon, se voyant regardé avec une
+            certaine curiosité par ce vieillard, se retourna, et dit
+            brusquement :</p>
+            <p>– Quel est ce bonhomme qui me regarde ?</p>
+            <p>– Sire, dit M. Myriel, vous regardez un bonhomme, et moi je
+            regarde un grand homme. Chacun de nous peut profiter.</p>
+            <p>L'empereur, le soir même, demanda au cardinal le nom de ce curé,
+            et quelque temps après M. Myriel fut tout surpris d'apprendre qu'il
+            était nommé évêque de Digne.</p>
+            <p>Qu'y avait-il de vrai, du reste, dans les récits qu'on faisait
+            sur la première partie de la vie de M.  Myriel ? Personne ne le
+            savait. Peu de familles avaient connu la famille Myriel avant la
+            révolution.</p>
+            <p>M. Myriel devait subir le sort de tout nouveau venu dans une
+            petite ville où il y a beaucoup de bouches qui parlent et fort peu
+            de têtes qui pensent. Il devait le subir, quoiqu'il fût évêque et
+            parce qu'il était évêque. Mais, après tout, les propos auxquels on
+            mêlait son nom n'étaient peut-être que des propos ; du bruit, des
+            mots, des paroles ; moins que des paroles, des palabres, comme dit
+            l'énergique langue du midi.</p>
+            <p>Quoi qu'il en fût, après neuf ans d'épiscopat et de résidence à
+            Digne, tous ces racontages, sujets de conversation qui occupent
+            dans le premier moment les petites villes et les petites gens,
+            étaient tombés dans un oubli profond. Personne n'eût osé en parler,
+            personne n'eût même osé s'en souvenir.</p>
+            <p>M. Myriel était arrivé à Digne accompagné d'une vieille fille,
+            mademoiselle Baptistine, qui était sa soeur et qui avait dix ans de
+            moins que lui.</p>
+            <p>Ils avaient pour tout domestique une servante du même âge que
+            mademoiselle Baptistine, et appelée madame Magloire, laquelle,
+            après avoir été <mentioned>la servante de M. le Curé</mentioned>,
+            prenait maintenant le double titre de femme de chambre de
+            mademoiselle et femme de charge de monseigneur.</p>
+            <p>Mademoiselle Baptistine était une personne longue, pâle, mince,
+            douce ; elle réalisait l'idéal de ce qu'exprime le mot
+            « respectable » ; car il semble qu'il soit nécessaire qu'une femme
+            soit mère pour être vénérable.  Elle n'avait jamais été jolie ;
+            toute sa vie, qui n'avait été qu'une suite de saintes oeuvres,
+            avait fini par mettre sur elle une sorte de blancheur et de
+            clarté ; et, en vieillissant, elle avait gagné ce qu'on pourrait
+            appeler la beauté de la bonté. Ce qui avait été de la maigreur dans
+            sa jeunesse était devenu, dans sa maturité, de la transparence ; et
+            cette diaphanéité laissait voir l'ange. C'était une âme plus encore
+            que ce n'était une vierge.  Sa personne semblait faite d'ombre ; à
+            peine assez de corps pour qu'il y eût là un sexe ; un peu de
+            matière contenant une lueur ; de grands yeux toujours baissés ; un
+            prétexte pour qu'une âme reste sur la terre.</p>
+            <p>Madame Magloire était une petite vieille, blanche, grasse,
+            replète, affairée, toujours haletante, à cause de son activité
+            d'abord, ensuite à cause d'un asthme.</p>
+            <p>A son arrivée, on installa M. Myriel en son palais épiscopal
+            avec les honneurs voulus par les décrets impériaux qui classent
+            l'évêque immédiatement après le maréchal de camp. Le maire et le
+            président lui firent la première visite, et lui de son côté fit la
+            première visite au général et au préfet.</p>
+            <p>L'installation terminée, la ville attendit son évêque à
+            l'oeuvre.</p>
+          </section>
+        </topic>
+        <!-- ============================================================== -->
+        <topic>
+          <head>
+            <title>2. M. Myriel devient monseigneur Bienvenu</title>
+          </head>
+          <section>
+            <p>Le palais épiscopal de Digne était attenant à l'hôpital.</p>
+            <p>Le palais épiscopal était un vaste et bel hôtel bâti en pierre
+            au commencement du siècle dernier par monseigneur Henri Puget,
+            docteur en théologie de la faculté de Paris, abbé de Simore, lequel
+            était évêque de Digne en 1712. Ce palais était un vrai logis
+            seigneurial. Tout y avait grand air, les appartements de l'évêque,
+            les salons, les chambres, la cour d'honneur, fort large, avec
+            promenoirs à arcades, selon l'ancienne mode florentine, les jardins
+            plantés de magnifiques arbres. Dans la salle à manger, longue et
+            superbe galerie qui était au rez-de-chaussée et s'ouvrait sur les
+            jardins, monseigneur Henri Puget avait donné à manger en cérémonie
+            le 29 juillet 1714 à messeigneurs Charles Brûlart de Genlis,
+            archevêque-prince d'Embrun, Antoine de Mesgrigny, capucin, évêque
+            de Grasse, Philippe de Vendôme, grand prieur de France, abbé de
+            Saint-Honoré de Lérins, François de Berton de Grillon, évêque-baron
+            de Vence, César de Sabran de Forcalquier, évêque-seigneur de
+            Glandève, et Jean Soanen, prêtre de l'oratoire, prédicateur
+            ordinaire du roi, évêque-seigneur de Senez. Les portraits de ces
+            sept révérends personnages décoraient cette salle, et cette date
+            mémorable, 29 juillet 1714, y était gravée en lettres d'or sur une
+            table de marbre blanc.</p>
+            <p>L'hôpital était une maison étroite et basse à un seul étage avec
+            un petit jardin.</p>
+            <p>Trois jours après son arrivée, l'évêque visita l'hôpital. La
+            visite terminée, il fit prier le directeur de vouloir bien venir
+            jusque chez lui.</p>
+            <p>– Monsieur le directeur de l'hôpital, lui dit-il, combien en ce
+            moment avez-vous de malades ?</p>
+            <p>– Vingt-six, monseigneur.</p>
+            <p>– C'est ce que j'avais compté, dit l'évêque.</p>
+            <p>– Les lits, reprit le directeur, sont bien serrés les uns contre
+            les autres.</p>
+            <p>– C'est ce que j'avais remarqué.</p>
+            <p>– Les salles ne sont que des chambres, et l'air s'y renouvelle
+            difficilement.</p>
+            <p>– C'est ce qui me semble.</p>
+            <p>– Et puis, quand il y a un rayon de soleil, le jardin est bien
+            petit pour les convalescents.</p>
+            <p>– C'est ce que je me disais.</p>
+            <p>– Dans les épidémies, nous avons eu cette année le typhus, nous
+            avons eu une suette militaire il y a deux ans, cent malades
+            quelquefois ; nous ne savons que faire.</p>
+            <p>– C'est la pensée qui m'était venue.</p>
+            <p>– Que voulez-vous, monseigneur ? dit le directeur, il faut se
+            résigner.</p>
+            <p>Cette conversation avait lieu dans la salle à manger-galerie du
+            rez-de-chaussée.</p>
+            <p>L'évêque garda un moment le silence, puis il se tourna
+            brusquement vers le directeur de l'hôpital :</p>
+            <p>– Monsieur, dit-il, combien pensez-vous qu'il tiendrait de lits
+            rien que dans cette salle ?</p>
+            <p>– La salle à manger de monseigneur ! s'écria le directeur
+            stupéfait.</p>
+            <p>L'évêque parcourait la salle du regard et semblait y faire avec
+            les yeux des mesures et des calculs.</p>
+            <p>– Il y tiendrait bien vingt lits ! dit-il, comme se parlant à
+            lui-même.</p>
+            <p>Puis élevant la voix : – Tenez, monsieur le directeur de
+            l'hôpital, je vais vous dire. Il y a évidemment une erreur. Vous
+            êtes vingt-six personnes dans cinq ou six petites chambres. Nous
+            sommes trois ici, et nous avons place pour soixante. Il y a erreur,
+            je vous dis. Vous avez mon logis, et j'ai le vôtre. Rendez-moi ma
+            maison. C'est ici chez vous.</p>
+            <p>Le lendemain, les vingt-six pauvres étaient installés dans le
+            palais de l'évêque et l'évêque était à l'hôpital.</p>
+            <p>M. Myriel n'avait point de bien, sa famille ayant été ruinée par
+            la révolution. Sa soeur touchait une rente viagère de cinq cents
+            francs qui, au presbytère, suffisait à sa dépense
+            personnelle. M. Myriel recevait de l'état comme évêque un
+            traitement de quinze mille francs. Le jour même où il vint se loger
+            dans la maison de l'hôpital, M.  Myriel détermina l'emploi de cette
+            somme une fois pour toutes de la manière suivante. Nous
+            transcrivons ici une note écrite de sa main.</p>
+            <p>Note pour régler les dépenses de ma maison.</p>
+            <p>Pour le petit séminaire : quinze cents livres.</p>
+            <p>Congrégation de la mission : cent livres.</p>
+            <p>Pour les lazaristes de Montdidier : cent livres.</p>
+            <p>Séminaire des missions étrangères à Paris : deux cents livres.</p>
+            <p>Congrégation du Saint-Esprit : cent cinquante livres.</p>
+            <p>Etablissements religieux de la Terre-Sainte : cent livres.</p>
+            <p>Sociétés de charité maternelle : trois cents livres.</p>
+            <p>En sus, pour celle d'Arles : cinquante livres.</p>
+            <p>Oeuvre pour l'amélioration des prisons : quatre cents livres.</p>
+            <p>Oeuvre pour le soulagement et la délivrance des prisonniers : cinq
+            cents livres.</p>
+            <p>Pour libérer des pères de famille prisonniers pour dettes : mille
+            livres.</p>
+            <p>Supplément au traitement des pauvres maîtres d'école du diocèse :
+            deux mille livres.</p>
+            <p>Grenier d'abondance des Hautes-Alpes : cent livres.</p>
+            <p>Congrégation des dames de Digne, de Manosque et de Sisteron, pour
+            l'enseignement gratuit des filles indigentes : quinze mille
+            livres.</p>
+            <p>Pour les pauvres : six mille livres.</p>
+            <p>Ma dépense personnelle : mille livres.</p>
+            <p>Total : quinze mille livres.</p>
+            <p>Pendant tout le temps qu'il occupa le siège de Digne, M. Myriel
+            ne changea presque rien à cet arrangement. Il appelait cela, comme
+            on voit, <mentioned>avoir réglé les dépenses de sa
+            maison</mentioned>.</p>
+            <p>Cet arrangement fut accepté avec une soumission absolue par
+            mademoiselle Baptistine. Pour cette sainte fille, M. de Digne était
+            tout à la fois son frère et son évêque, son ami selon la nature et
+            son supérieur selon l'église.  Elle l'aimait et elle le vénérait
+            tout simplement. Quand il parlait, elle s'inclinait ; quand il
+            agissait, elle adhérait. La servante seule, madame Magloire,
+            murmura un peu. M. l'évêque, on l'a pu remarquer, ne s'était
+            réservé que mille livres, ce qui, joint à la pension de
+            mademoiselle Baptistine, faisait quinze cents francs par an. Avec
+            ces quinze cents francs, ces deux vieilles femmes et ce vieillard
+            vivaient.</p>
+            <p>Et quand un curé de village venait à Digne, M. l'évêque trouvait
+            encore moyen de le traiter, grâce à la sévère économie de madame
+            Magloire et à l'intelligente administration de mademoiselle
+            Baptistine.</p>
+            <p>Un jour, – il était à Digne depuis environ trois mois, – l'évêque
+            dit :</p>
+            <p>– Avec tout cela je suis bien gêné !</p>
+            <p>– Je le crois bien ! s'écria madame Magloire, Monseigneur n'a
+            seulement pas réclamé la rente que le département lui doit pour ses
+            frais de carrosse en ville et de tournées dans le diocèse. Pour les
+            évêques d'autrefois c'était l'usage.</p>
+            <p>– Tiens ! dit l'évêque, vous avez raison, madame Magloire.</p>
+            <p>Il fit sa réclamation.</p>
+            <p>Quelque temps après, le conseil général, prenant cette demande en
+            considération, lui vota une somme annuelle de trois mille francs,
+            sous cette rubrique : <mentioned>Allocation à M. l'évêque pour frais
+            de carrosse, frais de poste et frais de tournées
+            pastorales</mentioned>.</p>
+            <p>Cela fit beaucoup crier la bourgeoisie locale, et, à cette
+            occasion, un sénateur de l'empire, ancien membre du conseil des
+            cinq-cents favorable au dix-huit brumaire et pourvu près de la
+            ville de Digne d'une sénatorerie magnifique, écrivit au ministre
+            des cultes, M. Bigot de Préameneu, un petit billet irrité et
+            confidentiel dont nous extrayons ces lignes authentiques :</p>
+            <p>"– Des frais de carrosse ? pourquoi faire dans une ville de moins
+            de quatre mille habitants ? Des frais de poste et de tournées ? à
+            quoi bon ces tournées d'abord ? ensuite comment courir la poste dans
+            un pays de montagnes ? Il n'y a pas de routes. On ne va qu'à
+            cheval. Le pont même de la Durance à Château-Arnoux peut à peine
+            porter des charrettes à boeufs. Ces prêtres sont tous ainsi. Avides
+            et avares. Celui-ci a fait le bon apôtre en arrivant. Maintenant il
+            fait comme les autres. Il lui faut carrosse et chaise de poste. Il
+            lui faut du luxe comme aux anciens évêques. Oh ! toute cette
+            prêtraille ! Monsieur le comte, les choses n'iront bien que lorsque
+            l'empereur nous aura délivrés des calotins. A bas le pape ! (les
+            affaires se brouillaient avec Rome). Quant à moi, je suis pour César
+            tout seul. Etc., etc."</p>
+            <p>La chose, en revanche, réjouit fort madame Magloire. – Bon,
+            dit-elle à mademoiselle Baptistine, Monseigneur a commencé par les
+            autres, mais il a bien fallu qu'il finit par lui-même. Il a réglé
+            toutes ses charités.</p>
+            <p>Voilà trois mille livres pour nous. Enfin !</p>
+            <p>Le soir même, l'évêque écrivit et remit à sa soeur une note ainsi
+            conçue :</p>
+            <p>Frais de carrosse et de tournées.</p>
+            <p>Pour donner du bouillon de viande aux malades de l'hôpital :
+            quinze cents livres.</p>
+            <p>Pour la société de charité maternelle d'Aix : deux cent cinquante
+            livres.</p>
+            <p>Pour la société de charité maternelle de Draguignan : deux cent
+            cinquante livres.</p>
+            <p>Pour les enfants trouvés : cinq cent livres.</p>
+            <p>Pour les orphelins : cinq cent livres.</p>
+            <p>Total : trois mille livres.</p>
+            <p>Tel était le budget de M. Myriel.</p>
+            <p>Quant au casuel épiscopal, rachats de bans, dispenses,
+            ondoiements, prédications, bénédictions d'églises ou de chapelles,
+            mariages, etc., l'évêque le percevait sur les riches avec d'autant
+            plus d'âpreté qu'il le donnait aux pauvres.</p>
+            <p>Au bout de peu de temps, les offrandes d'argent affluèrent. Ceux
+            qui ont et ceux qui manquent frappaient à la porte de M. Myriel,
+            les uns venant chercher l'aumône que les autres venaient y
+            déposer. L'évêque, en moins d'un an, devint le trésorier de tous
+            les bienfaits et le caissier de toutes les détresses. Des sommes
+            considérables passaient par ses mains ; mais rien ne put faire
+            qu'il changeât quelque chose à son genre de vie et qu'il ajoutât le
+            moindre superflu à son nécessaire.</p>
+            <p>Loin de là. Comme il y a toujours encore plus de misère en bas
+            que de fraternité en haut, tout était donné, pour ainsi dire, avant
+            d'être reçu ; c'était comme de l'eau sur une terre sèche ; il avait
+            beau recevoir de l'argent, il n'en avait jamais. Alors il se
+            dépouillait.</p>
+            <p>L'usage étant que les évêques énoncent leurs noms de baptême en
+            tête de leurs mandements et de leurs lettres pastorales, les pauvres
+            gens du pays avaient choisi, avec une sorte d'instinct affectueux,
+            dans les noms et prénoms de l'évêque, celui qui leur présentait un
+            sens, et ils ne l'appelaient que monseigneur Bienvenu. Nous ferons
+            comme eux, et nous le nommerons ainsi dans l'occasion. Du reste,
+            cette appellation lui plaisait. – J'aime ce nom-là,
+            disait-il. Bienvenu corrige monseigneur.</p>
+            <p>Nous ne prétendons pas que le portrait que nous faisons ici soit
+            vraisemblable ; nous nous bornons à dire qu'il est ressemblant.</p>
+          </section>
+        </topic>
+        <!-- ============================================================== -->
+        <topic>
+          <head>
+            <title>3. A bon évêque dur évêché</title>
+          </head>
+          <section>
+            <p>…</p>
+          </section>
+        </topic>
+      </division>
+
+      <!-- ================================================================ -->
+      <!-- =                              Livre 2                         = -->
+      <!-- ================================================================ -->
+      <division>
+        <head>
+          <title>Livre 2. La chute</title>
+        </head>
+        <!-- ============================================================== -->
+        <topic>
+          <head>
+            <title>1. Le soir d'un jour de marche</title>
+          </head>
+          <section>
+            <p>…</p>
+          </section>
+        </topic>
+      </division>
+    </division>
+
+    <!-- ================================================================== -->
+    <!-- =                                                                = -->
+    <!-- =                              Partie 2                          = -->
+    <!-- =                                                                = -->
+    <!-- ================================================================== -->
+    <division>
+      <head>
+        <title>Partie 2. Cosette</title>
+      </head>
+      <!-- ================================================================ -->
+      <!-- =                             Livre 1                          = -->
+      <!-- ================================================================ -->
+      <division>
+        <head>
+          <title>Livre 1. Waterloo</title>
+        </head>
+        <!-- ============================================================== -->
+        <topic>
+          <head>
+            <title>1. Ce qu'on rencontre en venant de Nivelles</title>
+          </head>
+          <section>
+            <p>L'an dernier (1861), par une belle matinée de mai, un passant,
+            celui qui raconte cette histoire, arrivait de Nivelles et se
+            dirigeait vers La Hulpe. Il allait à pied. Il suivait, entre deux
+            rangées d'arbres, une large chaussée pavée ondulant sur des
+            collines qui viennent l'une après l'autre, soulèvent la route et la
+            laissent retomber, et font là comme des vagues énormes. Il avait
+            dépassé Lillois et Bois-Seigneur-Isaac. Il apercevait, à l'ouest,
+            le clocher d'ardoise de Braine-l'Alleud qui a la forme d'un vase
+            renversé. Il venait de laisser derrière lui un bois sur une
+            hauteur, et, à l'angle d'un chemin de traverse, à côté d'une espèce
+            de potence vermoulue portant l'inscription : <mentioned>Ancienne
+            barrière no 4</mentioned>, un cabaret ayant sur sa façade cet
+            écriteau : <mentioned>Au quatre vents. Echabeau, café de
+            particulier</mentioned>.</p>
+            <p>Un demi-quart de lieue plus loin que ce cabaret, il arriva au
+            fond d'un petit vallon où il y a de l'eau qui passe sous une arche
+            pratiquée dans le remblai de la route. Le bouquet d'arbres,
+            clairsemé mais très vert, qui emplit le vallon d'un côté de la
+            chaussée, s'éparpille de l'autre dans les prairies et s'en va avec
+            grâce et comme en désordre vers Braine-l'Alleud.</p>
+            <p>Il y avait là, à droite, au bord de la route, une auberge, une
+            charrette à quatre roues devant la porte, un grand faisceau de
+            perches à houblon, une charrue, un tas de broussailles sèches près
+            d'une haie vive, de la chaux qui fumait dans un trou carré, une
+            échelle le long d'un vieux hangar à cloisons de paille. Une jeune
+            fille sarclait dans un champ où une grande affiche jaune,
+            probablement du spectacle forain de quelque kermesse, volait au
+            vent. A l'angle de l'auberge, à côté d'une mare où naviguait une
+            flottille de canards, un sentier mal pavé s'enfonçait dans les
+            broussailles. Ce passant y entra.</p>
+            <p>Au bout d'une centaine de pas, après avoir longé un mur du
+            quinzième siècle surmonté d'un pignon aigu à briques contrariées,
+            il se trouva en présence d'une grande porte de pierre cintrée, avec
+            imposte rectiligne, dans le grave style de Louis XIV, accostée de
+            deux médaillons planes. Une façade sévère dominait cette porte ; un
+            mur perpendiculaire à la façade venait presque toucher la porte et
+            la flanquait d'un brusque angle droit. Sur le pré devant la porte
+            gisaient trois herses à travers lesquelles poussaient pêle-mêle
+            toutes les fleurs de mai. La porte était fermée. Elle avait pour
+            clôture deux battants décrépits ornés d'un vieux marteau
+            rouillé.</p>
+            <p>Le soleil était charmant ; les branches avaient ce doux
+            frémissement de mai qui semble venir des nids plus encore que du
+            vent. Un brave petit oiseau, probablement amoureux, vocalisait
+            éperdument dans un grand arbre.</p>
+            <p>Le passant se courba et considéra dans la pierre à gauche, au
+            bas du pied-droit de la porte, une assez large excavation
+            circulaire ressemblant à l'alvéole d'une sphère. En ce moment les
+            battants s'écartèrent et une paysanne sortit.</p>
+            <p>Elle vit le passant et aperçut ce qu'il regardait.</p>
+            <p>– C'est un boulet français qui a fait ça, lui dit-elle. Et elle
+            ajouta :</p>
+            <p>– Ce que vous voyez là, plus haut, dans la porte, près d'un clou,
+            c'est le trou d'un gros biscayen. Le biscayen n'a pas traversé le
+            bois.</p>
+            <p>– Comment s'appelle cet endroit-ci ? demanda le passant.</p>
+            <p>– Hougomont, dit la paysanne.</p>
+            <p>Le passant se redressa. Il fit quelques pas et s'en alla regarder
+            au-dessus des haies. Il aperçut à l'horizon à travers les arbres une
+            espèce de monticule et sur ce monticule quelque chose qui, de loin,
+            ressemblait à un lion.</p>
+            <p>Il était dans le champ de bataille de Waterloo.</p>
+          </section>
+        </topic>
+      </division>
+    </division>
+  </document>
+</publidoc>
--- a/Xml/Documents/torture_test.xml	sam. janv. 14 12:44:31 2012 +0100
+++ b/Xml/Documents/torture_test.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -23,11 +23,11 @@
           <role>publisher</role>
         </contributor>
       </contributors>
-      <date value="2011-06"/>
+      <date value="2012-01"/>
       <place>Paris</place>
       <source type="book">
         <identifier type="ean">9782843550362</identifier>
-        <title>Les Misérables</title>
+        <title>L'art de mettre à l'épreuve</title>
         <pagenumber value="312"/>
       </source>
       <source type="file">
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/blanks_fill.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="blanks_fill">
+    <head>
+      <title>Exercice à trous</title>
+    </head>
+    
+    <instructions>
+      <p>Écrivez correctement les adjectifs de couleur.</p>
+    </instructions>
+
+    <blanks type="fill">
+      <p>
+        Ses lèvres sont <blank><s>bleues</s><s>grises</s></blank>
+        (<mentioned>bleu ou gris</mentioned>) de froid.
+      </p>
+      <p>
+        Les serviettes <blank><s>orange</s>
+        <help><p>Nom ?</p></help>
+        <commentary><p>Orange est un nom.</p></commentary></blank>
+        (<mentioned>orange</mentioned>) sont propres.
+      </p>
+      <p>
+        Il y a des taches <blank>blanchâtres</blank>
+        (<mentioned>blanchâtre</mentioned>) sur votre veste.
+      </p>
+    </blanks>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/blanks_fill_strict.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="blanks_fill_strict">
+    <head>
+      <title>Exercice à trous</title>
+    </head>
+    
+    <instructions>
+      <p>Écrivez correctement les adjectifs de couleur.</p>
+    </instructions>
+
+    <blanks type="fill" strict="true">
+      <section>
+        <p>La Mésopotamie est une région du <blank>Moyen
+         Orient</blank> située entre le <blank>Tigre</blank> 
+         et l'<blank>Euphrate</blank>. Elle correspond à
+         l'<blank>Irak</blank> actuel. Il s'agit d'une zone
+         où l'irrigation n'est pas nécessaire pour l'agriculture.</p>
+      </section>
+      <section>
+        <p>Au <number type="roman" value="3">iii</number><sup>e</sup>
+        millénaire av. J.-C., on distingue le Nord, appelé
+        l'<blank>Assyrie</blank> de la région du Sud, la
+        <blank>Babylonie</blank>.</p>
+      </section>
+    </blanks>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/blanks_select.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="blanks_select">
+    <head>
+      <title>Exercice à trous avec suggestions</title>
+    </head>
+
+    <instructions>
+      <p>Complètez le texte.</p>
+    </instructions>
+
+    <blanks type="select">
+      <wrongs>
+        <wrong>bergère</wrong>
+        <wrong>« Au feu ! »</wrong>
+      </wrongs>
+      <p>
+        Un berger aime faire croire que le loup attaque <blank>son
+        troupeau</blank>. À chaque fois qu'il crie « Au loup ! », tous les gens
+        du village viennent en courant. Cela amuse beaucoup <blank>le
+        berger</blank>.
+      </p>
+      <p>
+        <blank>Un jour</blank>, le loup attaque son troupeau. Le berger crie
+        <blank>« Au loup ! »</blank> mais personne ne vient et le loup emporte
+        sa plus belle brebis.
+        </p>
+    </blanks>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/choices_check.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="choices_check">
+    <head>
+      <title>Exercice QCM cases à cocher</title>
+    </head>
+
+    <instructions>
+      <p>Mon chiffre des unités est le double de celui des dizaines, mon
+      chiffre des dixièmes est inférieur à celui des unités. Mon chiffre des
+      centièmes est supérieur à 7. Qui suis-je ? (deux solutions)</p>
+    </instructions>
+
+    <choices type="check">
+      <wrong>724,36</wrong>
+      <right>324,18</right>
+      <right>812,19</right>
+      <wrong>963,49</wrong>
+    </choices>
+
+    <commentary>
+      <p>Il faut procéder par élimination.</p>
+      <list>
+        <item>
+          Les quatre nombres vérifient la première condition (« mon chiffre des
+          unités est le double de celui des dizaines ») :
+          7<highlight>24</highlight>,36 ; 3<highlight>24</highlight>,18 ;
+          8<highlight>12</highlight>,19 et 9<highlight>63</highlight>,49.
+        </item>
+        <item>
+          Mais la deuxième condition (« mon chiffre des dixièmes est inférieur
+          à celui des unités ») t'amène à écarter le nombre
+          96<highlight>3</highlight>,<highlight>4</highlight>9 et la dernière
+          condition (« mon chiffre des centièmes est supérieur à 7 »), le
+          nombre 724,3<highlight>6</highlight>.
+        </item>
+      </list>
+    </commentary>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/choices_radio.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="choices_radio">
+    <head>
+      <title>Exercice QCM radio</title>
+    </head>
+
+    <instructions>
+      <p>Quand on commande une « surprise » à Otorino le pizzaïolo, il choisit
+      au hasard trois des ingrédients :</p>
+      <list>
+        <item>olives ou anchois ;</item>
+        <item>poivrons ou artichaut ou champignons ;</item>
+        <item>jambon ou coppa.</item>
+      </list>
+      <p>Quelle est la probabilité d'obtenir une pizza contenant des anchois
+      et des poivrons ?</p>
+    </instructions>
+
+    <choices type="radio">
+      <wrong>½</wrong>
+      <right>⅙</right>
+      <wrong>⅓</wrong>
+    </choices>
+
+    <help>
+      <p>Pour trouver le nombre de cas possibles, le plus simple est de faire
+      un arbre.</p>
+    </help>
+
+    <commentary>
+      <p>Pour trouver le nombre de cas possibles, le plus simple est de faire
+      un arbre.</p>
+      <p>Le nombre de cas favorables est 2.</p>
+      <p>On en déduit la probabilité cherchée : 2/12 = 1/6</p>
+    </commentary>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/composite.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="composite">
+    <head>
+      <title>Assemblage d'exercices</title>
+    </head>
+
+    <instructions>
+      <p>À quelle catégorie appartiennent les animaux suivants ?</p>
+    </instructions>
+
+    <composite>
+      <instructions>
+        <p>abeille</p>
+      </instructions>
+      <choices type="radio">
+        <wrong>gastéropode</wrong>
+        <right>insecte</right>
+        <wrong>mollusque</wrong>
+      </choices>
+
+      <instructions>
+        <p>aigle</p>
+      </instructions>
+      <choices type="check">
+        <right>oiseau</right>
+        <wrong>passereau</wrong>
+        <wrong>charognard</wrong>
+        <right>rapace</right>
+      </choices>
+
+      <instructions>
+        <p>albatros</p>
+      </instructions>
+      <point type="radio">
+        <p>
+          <right>oiseau</right>_/
+          <wrong>rongeur</wrong> /
+          <wrong>reptile</wrong>
+        </p>
+      </point>
+    </composite>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/matching.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="matching">
+    <head>
+      <title>Exercice d'appariement</title>
+    </head>
+
+    <instructions>
+      <p>Associez les phrases suivantes avec leur contraire.</p>
+    </instructions>
+
+    <matching>
+      <match>
+        <p>On s'entend très bien.</p>
+        <p>On s'entend comme chien et chat.</p>
+      </match>
+      <match>
+        <p>On a perdu le contact.</p>
+        <p>On a gardé contact.</p>
+      </match>
+      <match>
+        <p>On se chipote souvent.</p>
+        <p>On ne se dispute jamais.</p>
+      </match>
+      <match>
+        <p>On s’amuse comme des fous.</p>
+        <p>On est plutôt sérieux ensemble.</p>
+      </match>
+    </matching>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/point.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="point">
+    <head>
+      <title>Exercice de pointage</title>
+    </head>
+
+    <instructions>
+      <p>Sélectionne le nom ou le pronom qui détermine l'accord de
+      chaque verbe mis en valeur.</p>
+    </instructions>
+
+    <point>
+      <section>
+        <p>Le centième <right>anniversaire</right> de la <wrong>mort</wrong> de
+        <wrong>Jules Verne</wrong> <highlight>a été célébré</highlight> en
+        2005. Cet <right>écrivain</right> du <number type="roman"
+        value="19">xix</number><sup>e</sup> siècle <highlight>a</highlight>
+        encore aujourd'hui de nombreux <wrong>lecteurs</wrong>.
+        <right>Certains</right> le <highlight>considèrent</highlight> comme
+        l'<wrong>inventeur</wrong> du roman de science-fiction.</p>
+      </section>
+      <section>
+        <p>La <right>découverte</right> de la <wrong>Terre</wrong>
+        <highlight>est</highlight> le <wrong >thème</wrong> principal de ses
+        <wrong>romans</wrong>. Passionné de <wrong >géographie</wrong> et de
+        <wrong>sciences</wrong>, <right>Jules Verne</right> <highlight>a
+        imaginé</highlight> des <right>machines</right> extraordinaires qui
+        <highlight>permettent</highlight> d'explorer des
+        <wrong>contrées</wrong> lointaines ou inconnues. Ses
+        <right>héros</right> hors du commun <highlight>parcourent</highlight>
+        ainsi aussi bien les <wrong>profondeurs</wrong> sous-marines que
+        l'<wrong>espace</wrong> interstellaire.</p>
+      </section>
+    </point>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/point_radio.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="point_radio">
+    <head>
+      <title>Exercice de pointage radio</title>
+    </head>
+
+    <instructions>
+      <section>
+        <p>Désignez Le mot qui représente le substantif du verbe.</p>
+      </section>
+    </instructions>
+
+    <point type="radio">
+      <p>
+        Changer :
+        <wrong>changage</wrong> / <right>changement</right> / <wrong>changation</wrong>
+      </p>
+    </point>
+  </quiz>
+</publiquiz>
--- /dev/null	jeu. janv. 01 00:00:00 1970 +0000
+++ b/Xml/Quiz/sort.xml	sam. janv. 21 18:03:09 2012 +0100
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Id$ -->
+<publiquiz version="1.0">
+  <quiz xml:id="sort">
+    <head>
+      <title>Exercice de tri</title>
+    </head>
+
+    <instructions>
+      <p>Rangez les nombres du plus petit au plus grand.</p>
+    </instructions>
+
+    <sort>
+      <comparison>&lt;</comparison>
+      <item shuffle="6">59</item>
+      <item shuffle="5">66</item>
+      <item shuffle="1">73</item>
+      <item shuffle="4">87</item>
+      <item shuffle="2">91</item>
+      <item shuffle="3">94</item>
+    </sort>
+  </quiz>
+</publiquiz>