Gestion des index
authorPatrick PIERRE
ven., 10 janv. 2014 16:50:33 +0100
changeset 288 e89c967167bb
parent 287 dba493c150dd
child 289 3cc4f942de2c
Gestion des index
RelaxNG/Examples/Documents/torture_test.xml
RelaxNG/Examples/Sets/composition.xml
RelaxNG/publidoc.rnc
RelaxNG/publiquiz.rnc
RelaxNG/publiset.rnc
--- a/RelaxNG/Examples/Documents/torture_test.xml	mar. janv. 07 19:33:45 2014 +0100
+++ b/RelaxNG/Examples/Documents/torture_test.xml	ven. janv. 10 16:50:33 2014 +0100
@@ -143,6 +143,7 @@
       <topic>
         <head>
           <title>Les types de section</title>
+          <index><entry>section</entry></index>
         </head>
         <header>
           <media>
@@ -154,6 +155,7 @@
         <section>
           <head>
             <title>Section normale</title>
+            <index><entry>section</entry><entry>section normale</entry></index>
           </head>
           <section>
             <p>Il dirigea la pointe du bambou vers le tableau noir : « Eh bien,
@@ -165,9 +167,10 @@
             <p>Lorsque ma mère survint, elle me trouva au milieu des quatre
             instituteurs, qui avaient renvoyé leurs élèves dans la cour de
             récréation, et qui m'entendaient déchiffrer lentement l'histoire du
-            Petit Poucet… Mais au lieu d'admirer cet exploit, elle pâlit,
-            déposa ses paquets par terre, referma le livre, et m'emporta dans
-            ses bras, en disant : « Mon Dieu ! mon Dieu !… »</p>
+            <index><w>Petit Poucet</w></index>… Mais au lieu d'admirer cet
+            exploit, elle pâlit, déposa ses paquets par terre, referma le
+            livre, et m'emporta dans ses bras, en disant : « Mon Dieu ! mon
+            Dieu !… »</p>
             <p>Sur la porte de la classe, il y avait la concierge, qui était
             une vieille femme corse : elle faisait des signes de croix. J'ai su
             plus tard que c'était elle qui était allée chercher ma mère, en
@@ -194,6 +197,8 @@
         <section>
           <head>
             <title>Section profonde</title>
+            <index><entry>section</entry><entry>section profonde</entry></index>
+            <index><entry>Classification phylogénétique</entry></index>
           </head>
           <section>
             <head>
@@ -249,6 +254,8 @@
           <head>
             <title>Encadré</title>
             <subtitle>« Casser sa pipe »</subtitle>
+            <index><entry>section</entry><entry>type encadré</entry></index>
+            <index><entry>pipe</entry></index>
           </head>
           <p>
             Il semblerait que cette expression vienne du Premier empire durant
@@ -266,9 +273,10 @@
         <section type="ex">
           <head>
             <title>Exemple</title>
+            <index><entry>section</entry><entry>type exemple</entry></index>
           </head>
           <p>Quand on meurt on perd le goût de la vie. Quand on casse sa pipe,
-          on perd le goût du tabac.</p>
+          on perd le goût du <index><w>tabac</w></index>.</p>
         </section>
         <section type="sign">
           <p>Jeanson Henri (signature)</p>
@@ -382,13 +390,16 @@
             <head>
               <title>Les Misérables</title>
               <subtitle>Extrait</subtitle>
+              <index><entry>Les Misérables</entry></index>
               <abstract>
                 <p>Où l’on apprend la mort de Jean Valjean.</p>
               </abstract>
             </head>
-            <p>Cosette et Marius tombèrent à genoux, éperdus, étouffés de
-            larmes, chacun sur une des mains de Jean Valjean. Ces mains
-            augustes ne remuaient plus.</p>
+            <p><index><entry>Les Misérables</entry><w>Cosette</w></index> et
+            <index><entry>Les Misérables</entry><w>Marius</w></index> tombèrent
+            à genoux, éperdus, étouffés de larmes, chacun sur une des mains de
+            <index><entry>Les Misérables</entry><w>Jean Valjean</w></index>.
+            Ces mains augustes ne remuaient plus.</p>
             <p>Il était renversé en arrière, la lueur des deux chandeliers
             l'éclairait ; sa face blanche regardait le ciel, il laissait
             Cosette et Marius couvrir ses mains de baisers ; il était mort.</p>
@@ -580,7 +591,10 @@
             </table>
             
             <table type="template">
-              <head><title>Journal de navigation</title></head>
+              <head>
+                <title>Journal de navigation</title>
+                <index><entry>Journal de navigation</entry></index>
+              </head>
               <thead>
                 <tr>
                   <td colspan="5"><p>Avion :</p><p>Horamètre :</p></td>
@@ -876,7 +890,7 @@
             <item>
               <label>Ancres</label>
               <p>
-                Une <anchor xml:id="ancre"/>ancre est un objet embarqué, lourd,
+                Une ancre<anchor xml:id="ancre"/> est un objet embarqué, lourd,
                 souvent de métal et destiné à stabiliser des bateaux à un
                 endroit spécifique sur les fonds rocheux, vaseux ou sableux. Il
                 y a deux catégories d’ancrages (ou mouillage), les ancrages
--- a/RelaxNG/Examples/Sets/composition.xml	mar. janv. 07 19:33:45 2014 +0100
+++ b/RelaxNG/Examples/Sets/composition.xml	ven. janv. 10 16:50:33 2014 +0100
@@ -40,6 +40,7 @@
       <division path="../Topics" xslt="composition.xsl">
         <head>
           <title>Les événements</title>
+          <index><entry>événements</entry></index>
           <abstract>
             <p>Où l'on évoque pêle-mêle quelques sujets d'actualité.</p>
           </abstract>
@@ -53,14 +54,16 @@
         <head>
           <title>Les brèves</title>
           <subtitle>Europe</subtitle>
+          <index><entry>brèves</entry><entry>Europe</entry></index>
         </head>
         <file xslt="composition.xsl" path="../Topics">portugal_ue.xml</file>
       </division>
       
-      <!-- =========================== Photos ============================= -->
+      <!-- ======================== Photographies ========================= -->
       <division>
         <head>
-          <title>Les photos avec légende</title>
+          <title>Les photographies avec légende</title>
+          <index><entry>photographie</entry></index>
         </head>
         <division as="topic" path="../Topics">
           <file xpath="topic/section">prince_belge.xml</file>
--- a/RelaxNG/publidoc.rnc	mar. janv. 07 19:33:45 2014 +0100
+++ b/RelaxNG/publidoc.rnc	ven. janv. 10 16:50:33 2014 +0100
@@ -37,6 +37,7 @@
  & keywordset?
  & subjectset?
  & abstract?
+ & head.index*
  & cover?
  & annotation*
 
@@ -123,6 +124,7 @@
  & place?
  & keywordset?
  & subjectset?
+ & head.index*
  & abstract?
  & annotation*
 
@@ -178,6 +180,7 @@
    (title, shorttitle?, subtitle*)?
  & keywordset?
  & subjectset?
+ & head.index*
  & abstract?
  & audio*
  & annotation*
@@ -212,6 +215,7 @@
 
 block.head.content =
    (title, shorttitle?, subtitle*)?
+ & head.index*
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -397,13 +401,13 @@
 
 media.content =
    block.head?,
-   (image | audio | video)+,
+   (media.image | audio | video)+,
    media.caption?,
    link?
 
 # ~~~~~~ image
-image = element image { image.attributes, image.content }
-hotspot.image = element image { image.attributes }
+image = element image { image.attributes }
+media.image = element image { image.attributes, media.image.content }
 
 image.attributes =
    media.id.attribute
@@ -411,7 +415,7 @@
 media.id.attribute = attribute id { xsd:NMTOKEN }
 image.type = attribute type { "cover" | "thumbnail" | "icon" | "animation" }
 
-image.content =
+media.image.content =
    copyright?,
    hotspot*
 
@@ -448,7 +452,7 @@
 hotspot.type.attribute = attribute type { xsd:NCName }
    
 hotspot.content =
-   ((link | p+ | hotspot.image | audio | video), (spot, scenario?)?)
+   ((link | p+ | image | audio | video), (spot, scenario?)?)
  | (spot, scenario?)
  | empty 
    
@@ -565,13 +569,13 @@
 
 copyright = element copyright { copyright.content }
 
-copyright.content = inlines
+copyright.content = simple.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ collection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 collection = element collection { collection.content }
 
-collection.content = inlines
+collection.content = simple.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -597,15 +601,15 @@
 lastname = element lastname { lastname.content }
 label = element label { label.content }
 
-firstname.content = inlines
-secondname.content = inlines
-lastname.content = inlines
-label.content = inlines
+firstname.content = simple.inlines
+secondname.content = simple.inlines
+lastname.content = simple.inlines
+label.content = simple.inlines
 
 # ~~~~~~ address
 address = element address { address.content }
 
-address.content = inlines
+address.content = simple.inlines
 
 # ~~~~~~ role
 role = element role { role.content }
@@ -616,7 +620,7 @@
 
 place = element place { place.content }
 
-place.content = inlines
+place.content = simple.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -641,7 +645,7 @@
 # ~~~~~~ keyword
 keyword = element keyword { keyword.content }
 
-keyword.content = mixed { sup*, sub* }
+keyword.content = simple.inlines
 
 # ~~~~~~ subjectset
 subjectset = element subjectset { subjectset.content }
@@ -651,7 +655,25 @@
 # ~~~~~~ subject
 subject = element subject { subject.content }
 
-subject.content = mixed { sup*, sub* }
+subject.content = simple.inlines
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ index ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ index
+index = element index { index.content }
+head.index = element index { head.index.content }
+
+index.content =
+   (index.w, index.entry?)
+ | (index.entry, (index.w | index.entry)?)
+head.index.content =
+   index.entry, index.entry?
+
+# ~~~~~~ index.w
+index.w = element w { simple.inlines }
+
+# ~~~~~~ index.entry
+index.entry = element entry { simple.inlines }
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -670,8 +692,7 @@
 cover.image = element image { cover.image.attributes }
 
 cover.image.attributes =
-   cover.image.id.attribute
-cover.image.id.attribute = attribute id { xsd:NMTOKEN }
+   media.id.attribute
    
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ annotation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -686,7 +707,7 @@
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-inlines = mixed {
+simple.inlines = mixed {
    sup*
  & sub*
  & var*
@@ -694,24 +715,28 @@
  & math*
  & date*
  & name*
- & foreign*
  & acronym*
  & term*
+ & warning*
+}
+
+inlines =
+   simple.inlines
  & literal*
- & stage*
+ & foreign*
  & highlight*
  & emphasis*
  & mentioned*
+ & stage*
  & initial*
- & note*
  & quote*
- & link*
- & anchor*
  & image*
  & audio*
  & smil*
- & warning*
-}
+ & note*
+ & link*
+ & anchor*
+ & index*
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup, var ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -783,15 +808,6 @@
 
 name.content = mixed { sup* & number* & acronym* & warning* }
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foreign ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-foreign = element foreign { foreign.attributes, foreign.content }
-
-foreign.attributes =
-   lang.attribute?
-
-foreign.content = inlines
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ acronym ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 acronym = element acronym { acronym.content }
@@ -810,11 +826,14 @@
 
 literal.content = inlines
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ stage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foreign ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-stage = element stage { stage.content }
+foreign = element foreign { foreign.attributes, foreign.content }
 
-stage.content = inlines
+foreign.attributes =
+   lang.attribute?
+
+foreign.content = inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ highlight ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -834,27 +853,22 @@
 
 mentioned.content = inlines
 
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ stage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+stage = element stage { stage.content }
+
+stage.content = inlines
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ initial ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 initial = element initial { initial.content }
 
 initial.content =
-   c,
-   w?
+   initial.c,
+   initial.w?
 
-c = element c { text }
-w = element w { inlines }
-
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-note = element note { note.attributes, note.content }
-
-note.attributes =
-   note.label.attribute?
-note.label.attribute = attribute label { text }
-
-note.content =
-   (w?, block+) | inlines
+initial.c = element c { text }
+initial.w = element w { inlines }
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -867,29 +881,6 @@
 
 phrase.content = inlines
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-link = element link { link.attributes, link.content }
-
-link.attributes =
-   (uri.attribute | idref.attribute)
-uri.attribute = attribute uri { xsd:anyURI }
-idref.attribute = attribute idref { xsd:IDREF }
-
-link.content = mixed {
-   sup* & sub* & var* & number* & math* & date* & name* & foreign* & acronym*
- & term* & literal* & stage* & highlight* & emphasis* & mentioned* & warning* }
-
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-anchor = element anchor { anchor.attributes, anchor.content }
-
-anchor.attributes =
-   anchor.id.attribute
-anchor.id.attribute = attribute xml:id { xsd:ID }
-
-anchor.content = inlines
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ smil ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 smil = element smil { smil.attributes, smil.content }
@@ -904,6 +895,41 @@
 
 smil.content = inlines
 
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+note = element note { note.attributes, note.content }
+
+note.attributes =
+   note.label.attribute?
+note.label.attribute = attribute label { text }
+
+note.content =
+   (note.w?, block+)
+ | inlines
+
+note.w = element w { inlines }
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+link = element link { link.attributes, link.content }
+
+link.attributes =
+   (uri.attribute | idref.attribute)
+uri.attribute = attribute uri { xsd:anyURI }
+idref.attribute = attribute idref { xsd:IDREF }
+
+link.content = simple.inlines
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+anchor = element anchor { anchor.attributes, anchor.content }
+
+anchor.attributes =
+   anchor.id.attribute
+anchor.id.attribute = attribute xml:id { xsd:ID }
+
+anchor.content = simple.inlines
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ warning ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 warning = element warning { warning.attributes, warning.content }
--- a/RelaxNG/publiquiz.rnc	mar. janv. 07 19:33:45 2014 +0100
+++ b/RelaxNG/publiquiz.rnc	ven. janv. 10 16:50:33 2014 +0100
@@ -465,52 +465,15 @@
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-blanks.inlines = mixed {
-   sup*
- & sub*
- & var*
- & number*
- & math*
- & date*
- & name*
- & note*
- & foreign*
- & highlight*
- & emphasis*
- & mentioned*
- & quote*
- & acronym*
- & term*
- & link*
- & anchor*
- & image*
- & audio*
+blanks.inlines =
+   inlines
  & blank*
-}
-point.inlines = mixed {
-   sup*
- & sub*
- & var*
- & number*
- & math*
- & date*
- & name*
- & note*
- & foreign*
- & highlight*
- & emphasis*
- & mentioned*
- & quote*
- & acronym*
- & term*
- & link*
- & anchor*
- & image*
- & audio*
+
+point.inlines =
+   inlines
  & blank*
  & point.right*
  & point.wrong*
-}
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blank ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
--- a/RelaxNG/publiset.rnc	mar. janv. 07 19:33:45 2014 +0100
+++ b/RelaxNG/publiset.rnc	ven. janv. 10 16:50:33 2014 +0100
@@ -61,6 +61,7 @@
  & (source, source?)?
  & keywordset?
  & subjectset?
+ & head.index*
  & abstract?
  & cover?
 
@@ -121,6 +122,7 @@
 
 division.head.content =
    (title, shorttitle?, subtitle*)?
+ & head.index*
 
 
 # =============================================================================
@@ -191,13 +193,13 @@
 
 copyright = element copyright { copyright.content }
 
-copyright.content = inlines
+copyright.content = simple.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ collection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 collection = element collection { collection.content }
 
-collection.content = inlines
+collection.content = simple.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -223,15 +225,15 @@
 lastname = element lastname { lastname.content }
 label = element label { label.content }
 
-firstname.content = inlines
-secondname.content = inlines
-lastname.content = inlines
-label.content = inlines
+firstname.content = simple.inlines
+secondname.content = simple.inlines
+lastname.content = simple.inlines
+label.content = simple.inlines
 
 # ~~~~~~ address
 address = element address { address.content }
 
-address.content = inlines
+address.content = simple.inlines
 
 # ~~~~~~ role
 role = element role { role.content }
@@ -277,7 +279,7 @@
 # ~~~~~~ keyword
 keyword = element keyword { keyword.content }
 
-keyword.content = mixed { sup*, sub* }
+keyword.content = simple.inlines
 
 # ~~~~~~ subjectset
 subjectset = element subjectset { subjectset.content }
@@ -287,7 +289,18 @@
 # ~~~~~~ subject
 subject = element subject { subject.content }
 
-subject.content = mixed { sup*, sub* }
+subject.content = simple.inlines
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ index ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ index
+head.index = element index { head.index.content }
+
+head.index.content =
+   index.entry, index.entry?
+
+# ~~~~~~ index.entry
+index.entry = element entry { simple.inlines }
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -306,8 +319,8 @@
 cover.image = element image { cover.image.attributes }
 
 cover.image.attributes =
-   cover.image.id.attribute
-cover.image.id.attribute = attribute id { xsd:NMTOKEN }
+   media.id.attribute
+media.id.attribute = attribute id { xsd:NMTOKEN }
 
 
 # =============================================================================
@@ -316,18 +329,22 @@
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-inlines = mixed {
+simple.inlines = mixed {
    sup*
  & sub*
  & date*
  & name*
+}
+
+inlines =
+   simple.inlines
  & highlight*
+ & emphasis*
  & link*
-}
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-sup = element sup { inlines }
+sup = element sup { simple.inlines }
 
 sub = element sub { inlines }
 
@@ -359,6 +376,12 @@
 
 highlight.content = inlines
 
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ emphasis ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+emphasis = element emphasis { emphasis.content }
+
+emphasis.content = inlines
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 link = element link { link.attributes, link.content }
@@ -367,7 +390,7 @@
    uri.attribute
 uri.attribute = attribute uri { xsd:anyURI }
 
-link.content = mixed { sup* & sub* & date* & name* & highlight* }
+link.content = simple.inlines
 
 
 # =============================================================================