contributors & attribut lang
authorPatrick PIERRE <patrick.pierre@prismallia.fr>
jeu., 05 janv. 2012 20:10:05 +0100
changeset 66 29c53c3d676e
parent 65 2aad27159a33
child 67 e38ad0e8e9d4
contributors & attribut lang
RelaxNG/publidoc.rnc
RelaxNG/publidoc.rng
RelaxNG/publiset.rnc
RelaxNG/publiset.rng
Xml/Documents/torture_test.xml
Xml/Sets/composition.xml
Xml/Sets/selection.xml
Xml/Topics/centre_pompidou.xml
Xml/Topics/chasseurs.xml
Xml/Topics/portugal_ue.xml
Xml/Topics/prince_belge.xml
--- a/RelaxNG/publidoc.rnc	ven. déc. 30 09:44:50 2011 +0100
+++ b/RelaxNG/publidoc.rnc	jeu. janv. 05 20:10:05 2012 +0100
@@ -27,7 +27,9 @@
 
 document.attributes =
    document.id.attribute
+ & lang.attribute?
 document.id.attribute = attribute xml:id { xsd:ID }
+lang.attribute = attribute xml:lang { xsd:language }
 
 document.content =
    top.head?,
@@ -40,6 +42,7 @@
 top.topic.attributes =
    topic.id.attribute
  & topic.type.attribute?
+ & lang.attribute?
 topic.id.attribute = attribute xml:id { xsd:ID }
 topic.type.attribute = attribute type { xsd:NCName }
 
@@ -63,10 +66,8 @@
 top.head.content =
    (title, subtitle?)?
  & identifier*
- & language?
  & copyright?
- & author*
- & publisher?
+ & contributors?
  & date?
  & place?
  & source*
@@ -81,8 +82,7 @@
  & annotation*
 component.head.content =
    (title, subtitle?)?
- & language?
- & author*
+ & contributors?
  & abstract?
  & annotation*
 section.head.content =
@@ -111,58 +111,49 @@
 
 identifier = identifier.uri | identifier.ean
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-language = element language { language.attributes }
-
-language.attributes =
-   lang.attribute
-lang.attribute = attribute xml:lang { xsd:language }
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 copyright = element copyright { copyright.content }
 
 copyright.content = inlines
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-# ~~~~~~ author
-author = element author { author.content }
+# ~~~~~~ contributors
+contributors = element contributors { contributors.content }
 
-author.content =
-   firstname?,
-   lastname,
+contributors.content =
+   contributor+
+
+# ~~~~~~ contributor
+contributor = element contributor { contributor.content }
+
+contributor.content =
+   (((firstname, secondname?)?, lastname) | label),
+   address?,
+   link?,
    role*
 
-# ~~~~~~ publisher
-publisher = element publisher { publisher.content }
-
-publisher.content =
-   label,
-   link?
-
-# ~~~~~~ firstname
+# ~~~~~~ firstname, secondname, lastname, label
 firstname = element firstname { firstname.content }
+secondname = element secondname { secondname.content }
+lastname = element lastname { lastname.content }
+label = element label { label.content }
 
 firstname.content = inlines
+secondname.content = inlines
+lastname.content = inlines
+label.content = inlines
 
-# ~~~~~~ lastname
-lastname = element lastname { lastname.content }
+# ~~~~~~ address
+address = element address { address.content }
 
-lastname.content = inlines
+address.content = inlines
 
 # ~~~~~~ role
-role = element role { role.attributes }
+role = element role { role.content }
 
-role.attributes =
-   role.of.attribute
-role.of.attribute = attribute of { "author" | "illustrator" }
-
-# ~~~~~~ label
-label = element label { label.content }
-
-label.content = inlines
+role.content = "author" | "illustrator" | "publisher"
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
--- a/RelaxNG/publidoc.rng	ven. déc. 30 09:44:50 2011 +0100
+++ b/RelaxNG/publidoc.rng	jeu. janv. 05 20:10:05 2012 +0100
@@ -37,13 +37,23 @@
     </element>
   </define>
   <define name="document.attributes">
-    <ref name="document.id.attribute"/>
+    <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"/>
@@ -68,6 +78,9 @@
       <optional>
         <ref name="topic.type.attribute"/>
       </optional>
+      <optional>
+        <ref name="lang.attribute"/>
+      </optional>
     </interleave>
   </define>
   <define name="topic.id.attribute">
@@ -131,16 +144,10 @@
         <ref name="identifier"/>
       </zeroOrMore>
       <optional>
-        <ref name="language"/>
+        <ref name="copyright"/>
       </optional>
       <optional>
-        <ref name="copyright"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="author"/>
-      </zeroOrMore>
-      <optional>
-        <ref name="publisher"/>
+        <ref name="contributors"/>
       </optional>
       <optional>
         <ref name="date"/>
@@ -193,11 +200,8 @@
         </optional>
       </optional>
       <optional>
-        <ref name="language"/>
+        <ref name="contributors"/>
       </optional>
-      <zeroOrMore>
-        <ref name="author"/>
-      </zeroOrMore>
       <optional>
         <ref name="abstract"/>
       </optional>
@@ -269,20 +273,6 @@
       <ref name="identifier.ean"/>
     </choice>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="language">
-    <element name="language">
-      <ref name="language.attributes"/>
-    </element>
-  </define>
-  <define name="language.attributes">
-    <ref name="lang.attribute"/>
-  </define>
-  <define name="lang.attribute">
-    <attribute name="xml:lang">
-      <data type="language"/>
-    </attribute>
-  </define>
   <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="copyright">
     <element name="copyright">
@@ -292,77 +282,101 @@
   <define name="copyright.content">
     <ref name="inlines"/>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ author -->
-  <define name="author">
-    <element name="author">
-      <ref name="author.content"/>
+  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+  <!-- ~~~~~~ contributors -->
+  <define name="contributors">
+    <element name="contributors">
+      <ref name="contributors.content"/>
     </element>
   </define>
-  <define name="author.content">
+  <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="firstname"/>
+      <ref name="address"/>
     </optional>
-    <ref name="lastname"/>
+    <optional>
+      <ref name="link"/>
+    </optional>
     <zeroOrMore>
       <ref name="role"/>
     </zeroOrMore>
   </define>
-  <!-- ~~~~~~ publisher -->
-  <define name="publisher">
-    <element name="publisher">
-      <ref name="publisher.content"/>
-    </element>
-  </define>
-  <define name="publisher.content">
-    <ref name="label"/>
-    <optional>
-      <ref name="link"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ firstname -->
+  <!-- ~~~~~~ firstname, secondname, lastname, label -->
   <define name="firstname">
     <element name="firstname">
       <ref name="firstname.content"/>
     </element>
   </define>
-  <define name="firstname.content">
-    <ref name="inlines"/>
+  <define name="secondname">
+    <element name="secondname">
+      <ref name="secondname.content"/>
+    </element>
   </define>
-  <!-- ~~~~~~ lastname -->
   <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.attributes"/>
+      <ref name="role.content"/>
     </element>
   </define>
-  <define name="role.attributes">
-    <ref name="role.of.attribute"/>
-  </define>
-  <define name="role.of.attribute">
-    <attribute name="of">
-      <choice>
-        <value>author</value>
-        <value>illustrator</value>
-      </choice>
-    </attribute>
-  </define>
-  <!-- ~~~~~~ label -->
-  <define name="label">
-    <element name="label">
-      <ref name="label.content"/>
-    </element>
-  </define>
-  <define name="label.content">
-    <ref name="inlines"/>
+  <define name="role.content">
+    <choice>
+      <value>author</value>
+      <value>illustrator</value>
+      <value>publisher</value>
+    </choice>
   </define>
   <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="place">
@@ -714,10 +728,10 @@
   </define>
   <define name="item.content">
     <choice>
-      <ref name="inlines"/>
       <oneOrMore>
         <ref name="block"/>
       </oneOrMore>
+      <ref name="inlines"/>
     </choice>
   </define>
   <!-- ~~~~~~ glossary.item -->
--- a/RelaxNG/publiset.rnc	ven. déc. 30 09:44:50 2011 +0100
+++ b/RelaxNG/publiset.rnc	jeu. janv. 05 20:10:05 2012 +0100
@@ -33,10 +33,12 @@
  & xpath.attribute?
  & xslt.attribute?
  & remap.attributes
+ & lang.attribute?
 composition.id.attribute = attribute xml:id { xsd:ID }
 path.attribute = attribute path { xsd:anyURI }
 xslt.attribute = attribute xslt { xsd:anyURI }
 xpath.attribute = attribute xpath { text }
+lang.attribute = attribute xml:lang { xsd:language }
 
 composition.content =
    composition.head?,
@@ -52,6 +54,7 @@
 selection.attributes =
    selection.id.attribute
  & path.attribute?
+ & lang.attribute?
 selection.id.attribute = attribute xml:id { xsd:ID }
 
 selection.content =
@@ -75,15 +78,12 @@
 top.head.content =
    (title, subtitle?)?
  & identifier*
- & language?
  & copyright?
- & author*
- & publisher?
+ & contributors?
  & abstract?
  & cover?
 division.head.content =
    (title, subtitle?)?
- & language?
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -104,61 +104,49 @@
 
 identifier = identifier.uri | identifier.ean
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-language = element language { language.attributes }
-
-language.attributes = lang.attribute
-lang.attribute = attribute xml:lang { xsd:language }
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 copyright = element copyright { copyright.content }
 
 copyright.content = inlines
 
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-# ~~~~~~ author
-author = element author { author.content }
+# ~~~~~~ contributors
+contributors = element contributors { contributors.content }
 
-author.attributes =
-   role.attribute?
-role.attribute = attribute role { "author" | "illustrator" }
+contributors.content =
+   contributor+
 
-author.content =
-   firstname?,
-   lastname,
+# ~~~~~~ contributor
+contributor = element contributor { contributor.content }
+
+contributor.content =
+   (((firstname, secondname?)?, lastname) | label),
+   address?,
+   link?,
    role*
 
-# ~~~~~~ publisher
-publisher = element publisher { publisher.content }
-
-publisher.content =
-   label,
-   link?
-
-# ~~~~~~ firstname
+# ~~~~~~ firstname, secondname, lastname, label
 firstname = element firstname { firstname.content }
+secondname = element secondname { secondname.content }
+lastname = element lastname { lastname.content }
+label = element label { label.content }
 
 firstname.content = inlines
+secondname.content = inlines
+lastname.content = inlines
+label.content = inlines
 
-# ~~~~~~ lastname
-lastname = element lastname { lastname.content }
+# ~~~~~~ address
+address = element address { address.content }
 
-lastname.content = inlines
+address.content = inlines
 
 # ~~~~~~ role
-role = element role { role.attributes }
+role = element role { role.content }
 
-role.attributes =
-   role.of.attribute
-role.of.attribute = attribute of { "author" | "illustrator" }
-
-# ~~~~~~ label
-label = element label { label.content }
-
-label.content = inlines
+role.content = "author" | "illustrator" | "publisher"
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
--- a/RelaxNG/publiset.rng	ven. déc. 30 09:44:50 2011 +0100
+++ b/RelaxNG/publiset.rng	jeu. janv. 05 20:10:05 2012 +0100
@@ -51,6 +51,9 @@
         <ref name="xslt.attribute"/>
       </optional>
       <ref name="remap.attributes"/>
+      <optional>
+        <ref name="lang.attribute"/>
+      </optional>
     </interleave>
   </define>
   <define name="composition.id.attribute">
@@ -71,6 +74,11 @@
   <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"/>
@@ -95,6 +103,9 @@
       <optional>
         <ref name="path.attribute"/>
       </optional>
+      <optional>
+        <ref name="lang.attribute"/>
+      </optional>
     </interleave>
   </define>
   <define name="selection.id.attribute">
@@ -151,16 +162,10 @@
         <ref name="identifier"/>
       </zeroOrMore>
       <optional>
-        <ref name="language"/>
+        <ref name="copyright"/>
       </optional>
       <optional>
-        <ref name="copyright"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="author"/>
-      </zeroOrMore>
-      <optional>
-        <ref name="publisher"/>
+        <ref name="contributors"/>
       </optional>
       <optional>
         <ref name="abstract"/>
@@ -171,17 +176,12 @@
     </interleave>
   </define>
   <define name="division.head.content">
-    <interleave>
+    <optional>
+      <ref name="title"/>
       <optional>
-        <ref name="title"/>
-        <optional>
-          <ref name="subtitle"/>
-        </optional>
+        <ref name="subtitle"/>
       </optional>
-      <optional>
-        <ref name="language"/>
-      </optional>
-    </interleave>
+    </optional>
   </define>
   <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="title">
@@ -222,20 +222,6 @@
       <ref name="identifier.ean"/>
     </choice>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <define name="language">
-    <element name="language">
-      <ref name="language.attributes"/>
-    </element>
-  </define>
-  <define name="language.attributes">
-    <ref name="lang.attribute"/>
-  </define>
-  <define name="lang.attribute">
-    <attribute name="xml:lang">
-      <data type="language"/>
-    </attribute>
-  </define>
   <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="copyright">
     <element name="copyright">
@@ -245,90 +231,101 @@
   <define name="copyright.content">
     <ref name="inlines"/>
   </define>
-  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-  <!-- ~~~~~~ author -->
-  <define name="author">
-    <element name="author">
-      <ref name="author.content"/>
+  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ contributors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+  <!-- ~~~~~~ contributors -->
+  <define name="contributors">
+    <element name="contributors">
+      <ref name="contributors.content"/>
     </element>
   </define>
-  <define name="author.attributes">
+  <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="role.attribute"/>
+      <ref name="address"/>
     </optional>
-  </define>
-  <define name="role.attribute">
-    <attribute name="role">
-      <choice>
-        <value>author</value>
-        <value>illustrator</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="author.content">
     <optional>
-      <ref name="firstname"/>
+      <ref name="link"/>
     </optional>
-    <ref name="lastname"/>
     <zeroOrMore>
       <ref name="role"/>
     </zeroOrMore>
   </define>
-  <!-- ~~~~~~ publisher -->
-  <define name="publisher">
-    <element name="publisher">
-      <ref name="publisher.content"/>
-    </element>
-  </define>
-  <define name="publisher.content">
-    <ref name="label"/>
-    <optional>
-      <ref name="link"/>
-    </optional>
-  </define>
-  <!-- ~~~~~~ firstname -->
+  <!-- ~~~~~~ firstname, secondname, lastname, label -->
   <define name="firstname">
     <element name="firstname">
       <ref name="firstname.content"/>
     </element>
   </define>
-  <define name="firstname.content">
-    <ref name="inlines"/>
+  <define name="secondname">
+    <element name="secondname">
+      <ref name="secondname.content"/>
+    </element>
   </define>
-  <!-- ~~~~~~ lastname -->
   <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.attributes"/>
+      <ref name="role.content"/>
     </element>
   </define>
-  <define name="role.attributes">
-    <ref name="role.of.attribute"/>
-  </define>
-  <define name="role.of.attribute">
-    <attribute name="of">
-      <choice>
-        <value>author</value>
-        <value>illustrator</value>
-      </choice>
-    </attribute>
-  </define>
-  <!-- ~~~~~~ label -->
-  <define name="label">
-    <element name="label">
-      <ref name="label.content"/>
-    </element>
-  </define>
-  <define name="label.content">
-    <ref name="inlines"/>
+  <define name="role.content">
+    <choice>
+      <value>author</value>
+      <value>illustrator</value>
+      <value>publisher</value>
+    </choice>
   </define>
   <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
   <define name="abstract">
--- a/Xml/Documents/torture_test.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Documents/torture_test.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -1,25 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Id$ -->
 <publidoc version="1.0">
-  <document xml:id="torture_test" >
+  <document xml:id="torture_test" xml:lang="fr">
     <head>
       <title>Torture test</title>
       <subtitle>Test des capacités de <name>publidoc</name></subtitle>
       <identifier type="ean">9782351840114</identifier>
       <identifier type="uri">http://www.prismallia.fr/Xml/torture_test</identifier>
-      <language xml:lang="fr"/>
       <copyright>Prismallia, Paris, 2011</copyright>
-      <author>
-        <firstname>Patrick</firstname><lastname>PIERRE</lastname>
-      </author>
-      <author>
-        <firstname>Tien Haï</firstname><lastname>NGUYEN</lastname>
-        <role of="illustrator"/>
-      </author>
-      <publisher>
-        <label>Prismallia</label>
-        <link uri="http://www.prismallia.fr"/>
-      </publisher>
+      <contributors>
+        <contributor>
+          <firstname>Patrick</firstname><lastname>PIERRE</lastname>
+        </contributor>
+        <contributor>
+          <firstname>Tien Haï</firstname><lastname>NGUYEN</lastname>
+          <role>illustrator</role>
+        </contributor>
+        <contributor>
+          <label>Prismallia</label>
+          <address>12 rue de la Montagne – 75005 Paris</address>
+          <link uri="http://www.prismallia.fr"/>
+          <role>publisher</role>
+        </contributor>
+      </contributors>
       <date value="2011-06"/>
       <place>Paris</place>
       <source type="book">
--- a/Xml/Sets/composition.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Sets/composition.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -6,15 +6,18 @@
       <head>
         <title>Exemple d'assemblage de sujets</title>
         <identifier type="ean">9782351840114</identifier>
-        <language xml:lang="fr"/>
         <copyright>Prismallia, Paris, 2011</copyright>
-        <author>
-          <firstname>Patrick</firstname><lastname>PIERRE</lastname>
-        </author>
-        <publisher>
-          <label>Prismallia</label>
-          <link uri="http://www.prismallia.fr">Prismallia</link>
-        </publisher>
+        <contributors>
+          <contributor>
+            <firstname>Patrick</firstname><lastname>PIERRE</lastname>
+            <role>author</role>
+          </contributor>
+          <contributor>
+            <label>Prismallia</label>
+            <address>12 rue de la Montagne – 75005 Paris</address>
+            <link uri="http://www.prismallia.fr">Prismallia</link>
+          </contributor>
+        </contributors>
         <abstract>
           <p>Ce document est un assemblage de plusieurs fichiers.</p>
         </abstract>
--- a/Xml/Sets/selection.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Sets/selection.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -2,10 +2,9 @@
 <!-- $Id$ -->
 <publiset version="1.0">
   <!-- ============================ SÉLECTION 1 =========================== -->
-  <selection xml:id="selection1">
+  <selection xml:id="selection1" xml:lang="fr">
     <head>
       <title>Première sélection</title>
-      <language xml:lang="fr"/>
     </head>
     <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~ Événements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
     <division path="../Topics">
@@ -26,10 +25,9 @@
   </selection>
   
   <!-- ============================ SÉLECTION 2 =========================== -->
-  <selection xml:id="selection2">
+  <selection xml:id="selection2" xml:lang="fr">
     <head>
       <title>Deuxième sélection</title>
-      <language xml:lang="fr"/>
     </head>
     <file name="../Topics/prince_belge.xml"
           uri="../PrinceBelge/prince_belge.html">Prince Philippe</file>
--- a/Xml/Topics/centre_pompidou.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Topics/centre_pompidou.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Id$ -->
 <publidoc version="1.0">
-  <topic type="event" xml:id="centre_pompidou">
+  <topic type="event" xml:id="centre_pompidou" xml:lang="fr-FR">
     <head>
       <title>Un nouveau Centre Pompidou après vingt-sept mois de travaux</title>
       <subtitle>Paris, samedi 1<sup>er</sup></subtitle>
-      <language xml:lang="fr-FR"/>
       <date value="2000-01-01"/>
       <place>Paris</place>
       <source type="book">
--- a/Xml/Topics/chasseurs.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Topics/chasseurs.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Id$ -->
 <publidoc version="1.0">
-  <topic xml:id="chasseurs" type="event">
+  <topic xml:id="chasseurs" type="event" xml:lang="fr-FR">
     <head>
       <title>Les chasseurs d'oiseaux contestent la loi</title>
       <subtitle>Baie de Somme, mardi 1<sup>er</sup></subtitle>
-      <language xml:lang="fr-FR"/>
       <date value="2000-02-01"/>
       <place>Baie de Somme</place>
       <source type="book">
--- a/Xml/Topics/portugal_ue.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Topics/portugal_ue.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Id$ -->
 <publidoc version="1.0">
-  <topic xml:id="portugal_ue" type="flash">
+  <topic xml:id="portugal_ue" type="flash" xml:lang="fr">
     <head>
       <title>Janvier 2000</title>
       <subtitle>Lisbonne, samedi 1<sup>er</sup></subtitle>
-      <language xml:lang="fr-FR"/>
       <date value="2000-01-01"/>
       <place>Lisbonne</place>
       <source type="book">
--- a/Xml/Topics/prince_belge.xml	ven. déc. 30 09:44:50 2011 +0100
+++ b/Xml/Topics/prince_belge.xml	jeu. janv. 05 20:10:05 2012 +0100
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Id$ -->
 <publidoc version="1.0">
-  <topic xml:id="prince_belge" type="photo">
+  <topic xml:id="prince_belge" type="photo" xml:lang="fr">
     <head>
       <title>Janvier 2000</title>
-      <language xml:lang="fr-FR"/>
       <date value="2000-01"/>
       <source type="book">
         <identifier type="ean">9782843550362</identifier>