Ajout des ancres et des mathématiques
authorPatrick PIERRE <patrick.pierre@prismallia.fr>
mar., 27 sept. 2011 17:12:04 +0200
changeset 42 32381a87f807
parent 41 adde3c1288f2
child 43 5be33d03941a
Ajout des ancres et des mathématiques
RelaxNG/publidoc.rnc
RelaxNG/publidoc.rng
Xml/Documents/torture_test.xml
--- a/RelaxNG/publidoc.rnc	mar. sept. 13 10:24:30 2011 +0200
+++ b/RelaxNG/publidoc.rnc	mar. sept. 27 17:12:04 2011 +0200
@@ -306,7 +306,7 @@
 
 block = (p | speech | \list | table | media)
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 p = element p { p.content }
 
@@ -458,7 +458,9 @@
 inlines = mixed {
    sup*
  & sub*
+ & var*
  & number*
+ & math*
  & date*
  & name*
  & note*
@@ -469,13 +471,30 @@
  & acronym*
  & term*
  & link*
+ & anchor*
 }
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup, var ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-sup = element sup { inlines }
+sup = element sup { text }
 
-sub = element sub { inlines }
+sub = element sub { text }
+
+var = element var { text }
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ math ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+math = element math {
+   ( attribute notation {"tex"}, math.attributes, math.tex.content )
+ | ( math.attributes, math.content)
+}
+
+math.attributes =
+   wide.attribute?
+wide.attribute = attribute wide { xsd:boolean }
+
+math.content = mixed { sup* & sub* & var* }
+math.tex.content = text
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ number ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -570,9 +589,23 @@
 link = element link { link.attributes, link.content }
 
 link.attributes =
-   uri.attribute
- | idref.attribute
+   (uri.attribute | idref.attribute)
+ & anchor.attribute?
 uri.attribute = attribute uri { xsd:anyURI }
 idref.attribute = attribute idref { xsd:IDREF }
+anchor.attribute = attribute anchor { xsd:NCName }
 
 link.content = inlines
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+anchor = element anchor {
+   ( anchor.attributes, anchor.content )
+ | ( attribute startref { xsd:IDREF } )
+}
+
+anchor.attributes =
+   anchor.id.attribute
+anchor.id.attribute = attribute xml:id { xsd:ID }
+
+anchor.content = inlines
--- a/RelaxNG/publidoc.rng	mar. sept. 13 10:24:30 2011 +0200
+++ b/RelaxNG/publidoc.rng	mar. sept. 27 17:12:04 2011 +0200
@@ -635,7 +635,7 @@
       <ref name="media"/>
     </choice>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="p">
     <element name="p">
       <ref name="p.content"/>
@@ -980,9 +980,15 @@
           <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>
@@ -1012,20 +1018,74 @@
         <zeroOrMore>
           <ref name="link"/>
         </zeroOrMore>
+        <zeroOrMore>
+          <ref name="anchor"/>
+        </zeroOrMore>
       </interleave>
     </mixed>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup, var ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="sup">
     <element name="sup">
-      <ref name="inlines"/>
+      <text/>
     </element>
   </define>
   <define name="sub">
     <element name="sub">
-      <ref name="inlines"/>
+      <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">
@@ -1225,10 +1285,15 @@
     </element>
   </define>
   <define name="link.attributes">
-    <choice>
-      <ref name="uri.attribute"/>
-      <ref name="idref.attribute"/>
-    </choice>
+    <interleave>
+      <choice>
+        <ref name="uri.attribute"/>
+        <ref name="idref.attribute"/>
+      </choice>
+      <optional>
+        <ref name="anchor.attribute"/>
+      </optional>
+    </interleave>
   </define>
   <define name="uri.attribute">
     <attribute name="uri">
@@ -1240,7 +1305,37 @@
       <data type="IDREF"/>
     </attribute>
   </define>
+  <define name="anchor.attribute">
+    <attribute name="anchor">
+      <data type="NCName"/>
+    </attribute>
+  </define>
   <define name="link.content">
     <ref name="inlines"/>
   </define>
+  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+  <define name="anchor">
+    <element name="anchor">
+      <choice>
+        <group>
+          <ref name="anchor.attributes"/>
+          <ref name="anchor.content"/>
+        </group>
+        <attribute name="startref">
+          <data type="IDREF"/>
+        </attribute>
+      </choice>
+    </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>
+  <define name="anchor.content">
+    <ref name="inlines"/>
+  </define>
 </grammar>
--- a/Xml/Documents/torture_test.xml	mar. sept. 13 10:24:30 2011 +0200
+++ b/Xml/Documents/torture_test.xml	mar. sept. 27 17:12:04 2011 +0200
@@ -282,11 +282,41 @@
         <section>
           <list type="glossary">
             <item>
+              <label>Ancres</label>
+              <p>
+                Une <anchor xml:id="a001">ancre</anchor> 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. <anchor xml:id="a002"/>Il y a deux catégories
+                d’ancrages (ou mouillage), les ancrages provisoires et les
+                ancrages permanents.
+              </p>
+              <p>
+                Un ancrage fonctionne en s’opposant à la force exercée par le
+                navire qui y est relié.<anchor startref="a002"/>
+              </p>
+            </item>
+            <item>
               <label>Indices et exposants</label>
               <p>Un exposant 10<sup>-3</sup> suivi d'un indice
               H<sub>2</sub>O.</p>
             </item>
             <item>
+              <label>Mathématiques</label>
+              <p>Le dernier théorème de Fermat :</p>
+              <p>
+                Il n'existe pas de nombres entiers non nuls <var>x</var>,
+                <var>y</var> et <var>z</var> tels que :
+                <math wide="true">
+                  <var>x</var><sup>n</sup> + <var>y</var><sup>n</sup> = <var>z</var><sup>n</sup>
+                </math>
+                dès que <var>n</var> est un entier strictement supérieur à 2.
+              </p>
+              <p>
+                Une fraction en LaTeX : <math notation="tex">\frac{1}{2}</math>
+              </p>
+            </item>
+            <item>
               <label>Nombres</label>
               <p>En horlogerie, <number>4</number> est écrit <number
               type="roman">iiii</number> au lieu de <number
@@ -375,8 +405,15 @@
             </item>
             <item>
               <label>Liens</label>
-              <p>N'hésitez pas à visiter le site de <link
-              uri="http://www.prismallia.fr">Prismallia</link>.</p>
+              <p>
+                N'hésitez pas à visiter le site de <link
+                uri="http://www.prismallia.fr">Prismallia</link>.
+              </p>
+              <p>
+                Lisez également l'article sur les <link
+                idref="a01">ancres</link> ou un <link
+                idref="a02">extrait</link>.
+              </p>
             </item>
           </list>
         </section>