<?xml version="1.0" encoding="utf-8" ?>
<!-- ============================================================================= -->
<!-- Projet   : PMWS                                                               -->
<!-- Fichier  : users.rng                                                          -->
<!-- Création : 15.10.2010                                                         -->
<!-- Révision : 08.01.2011                                                         -->
<!-- Objet    : schéma Relax NG des fichiers de définition des utilisateurs du CMS -->
<!-- ============================================================================= -->
<!-- Documentation :                                                               -->
<!--                                                                               -->
<!-- RELAX NG Tutorial                                                             -->
<!-- http://www.relaxng.org/tutorial-20011203.html                                 -->
<!--                                                                               -->
<!-- XML Schema schema for XML Schemas: Part 2: Datatypes                          -->
<!-- http://www.w3.org/2001/XMLSchema-datatypes                                    -->
<!-- ============================================================================= -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0">

   <include href="../rng/types.rng" />

   <define name="dt_0_1">
      <choice>
         <value>0</value>
         <value>1</value>
      </choice>
   </define>

   <start>
      <element name="users" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
         <optional>
            <attribute name="version">
               <choice>
                  <value>1</value>
               </choice>
            </attribute>
         </optional>
         <oneOrMore>
            <element name="user">
               <attribute name="users_id">
                  <ref name="dt_users_id" />
               </attribute>
               <element name="account">
                  <element name="pass">
                     <ref name="dt_md5hash" />
                  </element>
                  <element name="beg">
                     <ref name="dt_timestamp" />
                  </element>
                  <element name="end">
                     <ref name="dt_timestamp" />
                  </element>
               </element>
               <element name="identity">
                  <optional>
                     <element name="name">
                        <text />
                     </element>
                  </optional>
                  <optional>
                     <element name="fname">
                        <text />
                     </element>
                  </optional>
                  <optional>
                     <element name="mail">
                        <ref name="dt_mail" />
                     </element>
                  </optional>
                  <optional>
                     <element name="gender">
                        <choice>
                           <value>F</value>
                           <value>M</value>
                        </choice>
                     </element>
                  </optional>
               </element>
               <element name="settings">
                  <optional>
                     <element name="lang">
                        <choice>
                           <value>de</value>
                           <value>en</value>
                           <value>fr</value>
                        </choice>
                     </element>
                  </optional>
                  <element name="timeout">
                     <ref name="dt_timeout" />
                  </element>
                  <element name="grids">
                     <zeroOrMore>
                        <element name="grid">
                           <attribute name="grid_id">
                              <choice>
                                 <value>files</value>
                                 <value>images</value>
                                 <value>users</value>
                                 <value>webusers</value>
                              </choice>
                           </attribute>
                           <text /><!-- TODO: vérification formelle -->
                        </element>
                     </zeroOrMore>
                  </element>
                </element>
               <element name="rights">
                  <optional>
                     <element name="trees">
                        <oneOrMore>
                           <element name="tree">
                              <attribute name="tree_id">
                                 <ref name="dt_tree_id" />
                              </attribute>
                              <optional>
                                 <element name="upd">
                                    <ref name="dt_0_1" />
                                 </element>
                              </optional>
                              <optional>
                                 <element name="mov">
                                    <ref name="dt_0_1" />
                                 </element>
                              </optional>
                              <optional>
                                 <element name="del">
                                    <ref name="dt_0_1" />
                                 </element>
                              </optional>
                              <optional>
                                 <element name="ins">
                                    <ref name="dt_0_1" />
                                 </element>
                              </optional>
                           </element>
                        </oneOrMore>
                     </element>
                  </optional>
                  <optional>
                     <element name="pages">
                        <oneOrMore>
                           <element name="page">
                              <ref name="dt_page_id" />
                           </element>
                        </oneOrMore>
                     </element>
                  </optional>
                  <element name="archives">
                     <zeroOrMore>
                        <element name="archive">
                           <attribute name="type">
                              <choice>
                                 <value>document</value>
                                 <value>image</value>
                              </choice>
                           </attribute>
                           <oneOrMore>
                              <element name="dir">
                                 <text /><!-- TODO: vérification formelle -->
                              </element>
                           </oneOrMore>
                        </element>
                     </zeroOrMore>
                  </element>
               </element>
               <optional>
                  <element name="created">
                     <ref name="dt_timestamp" />
                  </element>
               </optional>
               <optional>
                  <element name="lastmod">
                     <ref name="dt_timestamp" />
                  </element>
               </optional>
            </element>
         </oneOrMore>
         <optional>
            <element name="created">
               <ref name="dt_timestamp" />
            </element>
         </optional>
         <optional>
            <element name="lastmod">
               <ref name="dt_timestamp" />
            </element>
         </optional>
         <element name="armor">
            <ref name="dt_md5hash" />
         </element>
      </element>
   </start>
</grammar>
