--- /dev/null jeu. janv. 01 00:00:00 1970 +0000
+++ b/RelaxNG/publiset.rng sam. juin 04 09:01:30 2011 +0200
@@ -0,0 +1,362 @@
+<?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>
+ <!-- ~~~~~~ attributes -->
+ <define name="publiset.attributes">
+ <ref name="version.attribute"/>
+ </define>
+ <define name="version.attribute">
+ <attribute name="version">
+ <value>1.0</value>
+ </attribute>
+ </define>
+ <!-- ~~~~~~ content -->
+ <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>
+ <!-- ~~~~~~ attributes -->
+ <define name="composition.attributes">
+ <interleave>
+ <ref name="composition.id.attribute"/>
+ <optional>
+ <ref name="base.attribute"/>
+ </optional>
+ <ref name="remap.attributes"/>
+ </interleave>
+ </define>
+ <define name="composition.id.attribute">
+ <attribute name="xml:id">
+ <data type="ID"/>
+ </attribute>
+ </define>
+ <define name="base.attribute">
+ <attribute name="xml:base">
+ <data type="anyURI"/>
+ </attribute>
+ </define>
+ <!-- ~~~~~~ content -->
+ <define name="composition.content">
+ <optional>
+ <ref name="composition.metadata"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="composition.file"/>
+ <ref name="composition.division"/>
+ </choice>
+ </oneOrMore>
+ </define>
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ selection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <define name="selection">
+ <element name="selection">
+ <ref name="selection.attributes"/>
+ <ref name="selection.content"/>
+ </element>
+ </define>
+ <!-- ~~~~~~ attributes -->
+ <define name="selection.attributes">
+ <optional>
+ <ref name="base.attribute"/>
+ </optional>
+ </define>
+ <define name="selection.id.attribute">
+ <attribute name="xml:id">
+ <data type="ID"/>
+ </attribute>
+ </define>
+ <!-- ~~~~~~ content -->
+ <define name="selection.content">
+ <optional>
+ <ref name="selection.metadata"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="selection.file"/>
+ <ref name="selection.division"/>
+ </choice>
+ </oneOrMore>
+ </define>
+ <!--
+ =============================================================================
+ Metadata level
+ =============================================================================
+ -->
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <define name="composition.metadata">
+ <element name="metadata">
+ <ref name="metadata.attributes"/>
+ <ref name="metadata.content"/>
+ </element>
+ </define>
+ <define name="selection.metadata">
+ <element name="metadata">
+ <ref name="metadata.content"/>
+ </element>
+ </define>
+ <!-- ~~~~~~ attributes -->
+ <define name="metadata.attributes">
+ <ref name="remap.attributes"/>
+ </define>
+ <!-- ~~~~~~ content -->
+ <define name="metadata.content">
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <optional>
+ <ref name="subtitle"/>
+ </optional>
+ <optional>
+ <ref name="source"/>
+ </optional>
+ </define>
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <define name="title">
+ <element name="title">
+ <ref name="title.content"/>
+ </element>
+ </define>
+ <define name="title.content">
+ <ref name="inlines"/>
+ </define>
+ <define name="subtitle">
+ <element name="subtitle">
+ <ref name="title.content"/>
+ </element>
+ </define>
+ <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <define name="source">
+ <element name="source">
+ <ref name="source.attributes"/>
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>book</value>
+ </attribute>
+ <ref name="source.content.book"/>
+ </group>
+ <attribute name="type">
+ <value>file</value>
+ </attribute>
+ </choice>
+ </element>
+ </define>
+ <!-- ~~~~~~ Attributes -->
+ <define name="source.attributes">
+ <interleave>
+ <optional>
+ <ref name="source.id.attribute"/>
+ </optional>
+ <ref name="remap.attributes"/>
+ </interleave>
+ </define>
+ <define name="source.id.attribute">
+ <attribute name="id">
+ <data type="NMTOKEN"/>
+ </attribute>
+ </define>
+ <!-- ~~~~~~ Content -->
+ <define name="source.content.book">
+ <optional>
+ <ref name="title"/>
+ </optional>
+ <optional>
+ <ref name="pagenumber"/>
+ </optional>
+ </define>
+ <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">
+ <ref name="pagenumber.value.enumeration"/>
+ </attribute>
+ </define>
+ <define name="pagenumber.value.enumeration">
+ <data type="positiveInteger"/>
+ </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>
+ <!-- ~~~~~~ attributes -->
+ <define name="composition.division.attributes">
+ <interleave>
+ <optional>
+ <ref name="base.attribute"/>
+ </optional>
+ <ref name="remap.attributes"/>
+ </interleave>
+ </define>
+ <define name="selection.division.attributes">
+ <optional>
+ <ref name="base.attribute"/>
+ </optional>
+ </define>
+ <!-- ~~~~~~ content -->
+ <define name="composition.division.content">
+ <optional>
+ <ref name="composition.metadata"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="composition.file"/>
+ <ref name="composition.division"/>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="selection.division.content">
+ <optional>
+ <ref name="selection.metadata"/>
+ </optional>
+ <oneOrMore>
+ <choice>
+ <ref name="selection.file"/>
+ <ref name="selection.division"/>
+ </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"/>
+ </element>
+ </define>
+ <!-- ~~~~~~ attributes -->
+ <define name="composition.file.attributes">
+ <interleave>
+ <ref name="name.attribute"/>
+ <optional>
+ <ref name="xpath.attribute"/>
+ </optional>
+ <ref name="remap.attributes"/>
+ </interleave>
+ </define>
+ <define name="selection.file.attributes">
+ <interleave>
+ <ref name="name.attribute"/>
+ <optional>
+ <ref name="xpath.attribute"/>
+ </optional>
+ </interleave>
+ </define>
+ <define name="name.attribute">
+ <attribute name="name"/>
+ </define>
+ <define name="xpath.attribute">
+ <attribute name="xpath"/>
+ </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>
+ <!--
+ =============================================================================
+ 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>