RelaxNG/publiset.rng
changeset 66 29c53c3d676e
parent 52 cb9addc3d98a
--- 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">