<?xml version="1.0" encoding="UTF-8"?>
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
         xmlns="http://relaxng.org/ns/structure/1.0"
         xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">
<!-- ===================================================================

     Apache Cocoon Book RELAX NG grammar (Version 0.1)

PURPOSE:
  DRAFT RELAX NG grammar for the Cocoon book.xml configuration files.

NOTES:

AUTHORS:
  David Crossley <crossley@indexgeo.com.au>

FIXME:
- 

CHANGE HISTORY:
20021030 V0.1 Initial RELAX NG grammar generated from book-cocoon-v10.dtd
              using DTDinst (DC)
     
COPYRIGHT:
  Copyright (c) 1999-2002 The Apache Software Foundation.
  
  Permission to copy in any form is granted provided this notice is 
  included in all copies. Permission to redistribute is granted 
  provided this file is distributed untouched in all its parts and 
  included files.
  
==================================================================== -->
  <define name="book">
    <element name="book">
      <ref name="attlist.book"/>
      <oneOrMore>
        <ref name="menu"/>
      </oneOrMore>
    </element>
  </define>
  <define name="menu">
    <element name="menu">
      <ref name="attlist.menu"/>
      <zeroOrMore>
        <choice>
          <ref name="menu-item"/>
          <ref name="external"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="menu-item">
    <element name="menu-item">
      <ref name="attlist.menu-item"/>
      <empty/>
    </element>
  </define>
  <define name="external">
    <element name="external">
      <ref name="attlist.external"/>
      <empty/>
    </element>
  </define>
  <define name="attlist.book" combine="interleave">
    <attribute name="software"/>
    <attribute name="title"/>
    <attribute name="copyright"/>
    <empty/>
  </define>
  <define name="attlist.menu" combine="interleave">
    <attribute name="label"/>
  </define>
  <define name="attlist.menu-item" combine="interleave">
    <attribute name="label"/>
    <attribute name="href"/>
    <optional>
      <attribute name="type" a:defaultValue="visible">
        <choice>
          <value>visible</value>
          <value>hidden</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="attlist.external" combine="interleave">
    <attribute name="label"/>
    <attribute name="href"/>
    <optional>
      <attribute name="type" a:defaultValue="visible">
        <choice>
          <value>visible</value>
          <value>hidden</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <start>
    <choice>
      <ref name="book"/>
    </choice>
  </start>
</grammar>
