Un article de DocuWiki.
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<!-- default namespace = "http://revendeurs.immateriel.fr/metadata" -->
<start>
<a:documentation/>
<!-- Metadata for resellers of digital offers from publishers -->
<a:documentation/>
<ref name="response"/>
</start>
<define name="response">
<element name="response">
<oneOrMore>
<ref name="result"/>
</oneOrMore>
</element>
</define>
<define name="result">
<element name="result">
<ref name="result_type"/>
<oneOrMore>
<ref name="result_content"/>
</oneOrMore>
</element>
</define>
<define name="result_type">
<attribute name="type">
<ref name="result_type.datatype"/>
</attribute>
</define>
<define name="result_content">
<element name="book">
<ref name="product_id"/>
<ref name="book_content"/>
</element>
</define>
<define name="product_id">
<attribute name="isbn">
<ref name="ean.datatype"/>
</attribute>
</define>
<define name="book_content">
<interleave>
<ref name="title"/>
<ref name="edition"/>
<ref name="publisher"/>
<ref name="avail"/>
<ref name="pubdate"/>
<optional>
<ref name="lang"/>
</optional>
<optional>
<ref name="collection"/>
</optional>
<optional>
<ref name="summary"/>
</optional>
<optional>
<ref name="description"/>
</optional>
<optional>
<ref name="categories"/>
</optional>
<optional>
<ref name="previews"/>
</optional>
<ref name="contributors"/>
<ref name="offres"/>
</interleave>
</define>
<define name="avail">
<choice>
<element name="available">
<ref name="boolean.datatype"/>
</element>
<attribute name="available">
<ref name="boolean.datatype"/>
</attribute>
</choice>
</define>
<define name="title">
<element name="title">
<text/>
</element>
</define>
<define name="edition">
<element name="edition">
<optional>
<data type="positiveInteger"/>
</optional>
</element>
</define>
<define name="publisher">
<element name="publisher">
<ref name="publisher_id"/>
<text/>
</element>
</define>
<define name="publisher_id">
<attribute name="id">
<ref name="publisher_id.datatype"/>
</attribute>
</define>
<define name="pubdate">
<element name="published_at">
<data type="date"/>
</element>
</define>
<define name="lang">
<element name="language">
<ref name="lang.datatype"/>
</element>
</define>
<define name="collection">
<element name="collection">
<text/>
</element>
</define>
<define name="summary">
<element name="summary">
<text/>
</element>
</define>
<define name="description">
<element name="description">
<text/>
</element>
</define>
<define name="categories">
<interleave>
<optional>
<ref name="keywords"/>
</optional>
<optional>
<ref name="subjects"/>
</optional>
</interleave>
</define>
<define name="keywords">
<element name="keywords">
<oneOrMore>
<ref name="keyword"/>
</oneOrMore>
</element>
</define>
<define name="keyword">
<element name="keyword">
<text/>
</element>
</define>
<define name="subjects">
<ref name="bisac_code"/>
</define>
<define name="bisac_code">
<element name="bisac_subject">
<ref name="bisac_code.datatype"/>
</element>
</define>
<define name="previews">
<element name="previews">
<oneOrMore>
<ref name="preview"/>
</oneOrMore>
</element>
</define>
<define name="preview">
<element name="preview">
<interleave>
<ref name="start"/>
<ref name="end"/>
</interleave>
<ref name="link"/>
</element>
</define>
<define name="start">
<attribute name="start_page">
<data type="positiveInteger"/>
</attribute>
</define>
<define name="end">
<attribute name="end_page">
<data type="positiveInteger"/>
</attribute>
</define>
<define name="link">
<data type="anyURI"/>
</define>
<define name="contributors">
<interleave>
<ref name="authors"/>
<oneOrMore>
<ref name="author_obsolete"/>
</oneOrMore>
</interleave>
</define>
<define name="authors">
<element name="authors">
<oneOrMore>
<ref name="author"/>
</oneOrMore>
</element>
</define>
<define name="author">
<element name="author">
<ref name="author_id"/>
<interleave>
<ref name="author_name"/>
<optional>
<ref name="author_bio"/>
</optional>
</interleave>
</element>
</define>
<define name="author_id">
<attribute name="id">
<ref name="author_id.datatype"/>
</attribute>
</define>
<define name="author_name">
<element name="name">
<text/>
</element>
</define>
<define name="author_bio">
<element name="biography">
<text/>
</element>
</define>
<!-- simple variant provided for early adopters -->
<define name="author_obsolete">
<element name="author">
<text/>
</element>
</define>
<define name="offres">
<interleave>
<ref name="products"/>
<ref name="obsolete_product"/>
</interleave>
</define>
<define name="products">
<element name="products">
<oneOrMore>
<ref name="product"/>
</oneOrMore>
</element>
</define>
<define name="product">
<element name="product">
<interleave>
<ref name="price"/>
<ref name="avail"/>
<ref name="product_id"/>
<ref name="label"/>
</interleave>
<ref name="resources"/>
</element>
</define>
<!-- monoproduct variant provided for early adopters -->
<define name="obsolete_product">
<interleave>
<ref name="label"/>
<ref name="price"/>
<ref name="resources"/>
</interleave>
</define>
<define name="label">
<choice>
<element name="label">
<text/>
</element>
<attribute name="label"/>
</choice>
</define>
<define name="price">
<choice>
<element name="price">
<ref name="price.datatype"/>
</element>
<attribute name="price">
<ref name="price.datatype"/>
</attribute>
</choice>
</define>
<define name="resources">
<element name="resources">
<oneOrMore>
<ref name="resource"/>
</oneOrMore>
</element>
</define>
<define name="resource">
<element name="resource">
<interleave>
<ref name="mime"/>
<ref name="support"/>
<optional>
<ref name="protection"/>
</optional>
<ref name="name"/>
<ref name="format"/>
<optional>
<ref name="dim"/>
</optional>
<empty/>
</interleave>
</element>
</define>
<define name="mime">
<attribute name="mimetype">
<ref name="mime.datatype"/>
</attribute>
</define>
<define name="support">
<attribute name="support">
<ref name="support.datatype"/>
</attribute>
</define>
<define name="protection">
<attribute name="protection">
<ref name="protection.datatype"/>
</attribute>
</define>
<define name="name">
<attribute name="name"/>
</define>
<define name="format">
<attribute name="format_key">
<ref name="format.datatype"/>
</attribute>
</define>
<define name="dim">
<interleave>
<optional>
<ref name="height"/>
</optional>
<optional>
<ref name="width"/>
</optional>
</interleave>
</define>
<define name="height">
<attribute name="height">
<ref name="dim.datatype"/>
</attribute>
</define>
<define name="width">
<attribute name="width">
<ref name="dim.datatype"/>
</attribute>
</define>
<!-- Data types -->
<define name="boolean.datatype">
<a:documentation/>
<choice>
<value>true</value>
<value>false</value>
</choice>
</define>
<define name="ean.datatype">
<choice>
<data type="token">
<param name="length">17</param>
<param name="pattern">978-[\-0-9]{13}</param>
</data>
<data type="token">
<param name="length">13</param>
<param name="pattern">978[0-9]{10}</param>
</data>
</choice>
</define>
<define name="lang.datatype">
<data type="token">
<param name="length">2</param>
<param name="pattern">[a-zA-Z]{2}</param>
</data>
</define>
<define name="price.datatype">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="fractionDigits">2</param>
</data>
</define>
<define name="bisac_code.datatype">
<data type="token">
<param name="length">9</param>
<param name="pattern">[a-zA-Z]{3}[0-9]{6}</param>
</data>
</define>
<define name="mime.datatype">
<choice>
<value>audio/mpeg3</value>
<value>application/pdf</value>
<value>text/html</value>
<value>application/x-mobipocket</value>
<value>application/epub+zip</value>
<value>application/x-rar-compressed</value>
<value>application/zip</value>
</choice>
</define>
<define name="support.datatype">
<choice>
<value>immateriel</value>
<value>physical</value>
</choice>
</define>
<define name="result_type.datatype">
<value>Books</value>
</define>
<define name="format.datatype">
<choice>
<value>mp3</value>
<value>pdf</value>
<value>imr</value>
<value>prc</value>
<value>epub</value>
<value>html</value>
<value>zip</value>
<value>rar</value>
</choice>
</define>
<!-- format.datatype = text -->
<define name="protection.datatype">
<choice>
<value>none</value>
<value>watermark</value>
<value>streaming</value>
<value>drm</value>
</choice>
</define>
<define name="publisher_id.datatype">
<text/>
</define>
<define name="author_id.datatype">
<text/>
</define>
<define name="dim.datatype">
<data type="positiveInteger"/>
</define>
</grammar>