<?xml version="1.0" encoding="Windows-1250" ?>
<schema xmlns     = "http://schemas.rozsnyo.com/schema"
        namespace = "http://schemas.rozsnyo.com/schema"
        desc      = "A simple schema description language, actually this document formally describes itself."
>

 <!-- ROOT -->

 <element id="schema" type="elements" desc="This is the root element">
  <elem min="1">element</elem>
  <elem>valuelist</elem>
  <elem>elementlist</elem>
  <nsref id="namespace" desc="The described namespace" uniq="global" />
  <string id="desc"      desc="A short description of the namespace" />
 </element>

 <!-- VALUE LIST -->

 <element id="valuelist" type="elements" min="2" desc="A value list for enumerated or set type">
  <elem min="2">value</elem>
  <string id="id" uniq="this" desc="The name of the list" />
  <string id="desc" null="1" desc="A short description" />
 </element>

     <element id="value" type="text" desc="A value in the value list">
      <string id="desc" null="1" desc="A short description of the value" />
     </element>

 <!-- ELEMENT LIST -->

 <element id="elementlist" type="elements" min="2" desc="An element list for shortening usage on multiple places">
  <elem>child</elem>
  <string id="id" uniq="this" desc="The name of the list" />
  <string id="desc" null="1" desc="A short description" />
 </element>

     <element id="child" abstract="1" desc="Child element of another element">
      <integer id="min" null="1" default="0" desc="Minimal count" />
      <integer id="max" null="1"             desc="Maximal count" />
     </element>
     
     <element id="elem" extends="child" type="text" desc="A value in the element list" ref="element" />
 
     <element id="list" extends="child" type="text" desc="A reference to another element list" ref="elementlist" />

 <!-- ELEMENT -->

 <element id="element" type="elements" desc="An element description">
  <elem>child</elem>
  <elem>attribute</elem>
  <string    id="id"       uniq="this"             desc="The name of the described element"  />
  <enum      id="type"     list="Child type"       desc="Type of the element childs" />
  <string    id="desc"     null="1"                desc="A short description of the element" />
  <boolean   id="abstract" null="1"    default="0" desc="Is the element abstract?"           />
  <reference id="extends"  null="1"                desc="The abstract element" ref="element" />

  <!-- depend on type=elements -->
  <integer   id="min"      null="1"    default="0" desc="Minimal child count"                />
  <integer   id="max"      null="1"                desc="Maximal child count"                />

  <!-- depend on type=text -->
  <reference id="ref"      null="1"                desc="Value references to"  ref="element" />
 </element>

     <valuelist id="Child type">
      <value>none</value>
      <value>text</value>
      <value>elements</value>
      <value>mixed</value>
     </valuelist>

 <!-- ATTRIBUTE -->

 <element abstract="1" type="none" id="attribute" desc="An abstract attribute description" >
  <string  id="id"   uniq="this"                  desc="The name of the described attribute" />
  <string  id="desc" null="1"                     desc="A short description of the attribute" />
  <boolean id="null" null="1"    default="0"      desc="Can be undefined (NULL) ?" />
  <enum    id="uniq" null="1"    default="none"   desc="Uniqueness control" list="Uniqeness" />
 </element>

     <element id="string"    desc="String attribute"     extends="attribute">
      <string id="default"    desc="Default value" null="1" />
     </element>

     <element id="nsref" desc="Namespace reference" extends="attribute" />

     <element id="reference" desc="Reference to element" extends="attribute">
      <reference id="ref"     desc="Reference" ref="element" />
      <nsref     id="refns"   desc="Namespace of this reference" null="1" />
     </element>

     <element id="boolean"   desc="Boolean attribute"    extends="attribute">
      <enum id="default"      desc="Default value" null="1" list="Boolean constant" />
     </element>

     <element id="integer"   desc="Integer attribute"    extends="attribute">
      <integer id="default"   desc="Default value" null="1"/>
     </element>

     <element id="float"     desc="Floating point attribute"    extends="attribute">
      <float id="default"     desc="Default value" null="1"/>
     </element>

     <element id="enum"      desc="Enumerated attribute" extends="attribute">
      <reference id="list"    desc="Value list reference" ref="valuelist" />
      <string id="default"    desc="Default value" null="1" />
     </element>

     <valuelist id="Uniqeness">
      <value>none</value>
      <value>this</value>
      <value>global</value>
     </valuelist>

     <valuelist id="Boolean constant">
      <value desc="False">0</value>
      <value desc="True">1</value>
     </valuelist>

</schema>
