<?xml version = "1.0" encoding = "utf-8"?>
<?xml-stylesheet href="/pool/rng_ht.xslt" type="application/xml"?>
<!-- file KLEIDER/web/src/sitestyle/components.rng -->
<!--
  Eingebettet anzuzeigende Komponenten der Website
  "http://herbaer.de/xmlns/20121016/components"
  2012 Herbert Schiemann <h.schiemann@herbaer.de>
  Borkener Str. 167, 46284 Dorsten, Germany
  GPL Version 2 oder neuer
  Jede Gewährleistung ist ausgeschlossen.

  Das Schema folgt den folgenden Richtlinien:
  - Jedes Attribut und jedes Element wird in einem
    <define>-Element spezifiziert
  - Jedes <define>-Element spezifiziert höchstens ein Attribut oder Element
  - Die Namen der Muster ("Pattern"), die ein Attribut spezifizieren,
    beginnen mit "att_".
  - Die Namen der Muster, die ein Element spezifizieren,
    beginnen mit "el_".
  - Die Dokumentation ist in den define-Elementen enthalten und benutzt
    DocBook-XML-artige Markierungen des Namensraums
    http://herbaer.de/xmlns/20051201/doc
-->
<grammar
  xmlns   = "http://relaxng.org/ns/structure/1.0"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  ns      = "http://herbaer.de/xmlns/20121016/components"
>

<start>
  <ref name = "el_components"/>
</start>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>components.rng</title>
  <subtitle>Eingebettet anzuzeigende Komponenten der Website</subtitle>
  <date>2012-10-16</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<define name = "anything">
  <d:para>
    Beliebiger Inhalt
  </d:para>
  <zeroOrMore>
    <choice>
      <element>
        <anyName/>
        <ref name="anything"/>
      </element>
      <attribute>
        <anyName/>
      </attribute>
      <text/>
    </choice>
  </zeroOrMore>
</define><!-- anything -->

<define name = "foreign_att">
  <d:para>
    Attribute anderer XML-Namensräume
  </d:para>
  <zeroOrMore>
    <attribute>
      <anyName>
        <except>
          <nsName ns = ""/>
          <nsName ns = "http://herbaer.de/xmlns/20121016/components"/>
        </except>
      </anyName>
    </attribute>
  </zeroOrMore>
</define><!-- foreign_att -->

<define name = "foreign_el">
  <d:para>
    Elemente anderer XML-Namensräume
  </d:para>
  <zeroOrMore>
    <element>
      <anyName>
        <except>
          <nsName ns = "http://herbaer.de/xmlns/20121016/components"/>
        </except>
      </anyName>
      <ref name = "anything"/>
    </element>
  </zeroOrMore>
</define><!-- foreign_el -->

<define name = "el_components">
  <d:para>
Pfade der Komponenten (XHTML- oder XML-Dateien),
die eingebettet anzuzeigen sind.
  </d:para>
  <element name = "components">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "foreign_el"/>
      <zeroOrMore>
        <ref name = "el_dir"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_file"/>
      </zeroOrMore>
    </interleave>
  </element>
</define><!-- el_components -->

<define name = "el_dir">
  <d:para>
Eine Gruppe von Dokumenten (<d:tag class = "element">file</d:tag>-Elementen)
und verschachtelten Gruppen,
die unter einem übergeordneten Baumknoten anzuzeigen sind.
Das erste enthaltene Dokument,
dessen Pfad mit <d:literal>/index.xhtml</d:literal> endet,
wird (von <d:filename>index_comp.xslt</d:filename>)
zu dem übergeordneten Baumknoten angezeigt.
Die Dokumente und die verschachtelten Gruppen sind (typischerweise)
in einem Dateien und Unterverzeichnisse eines Verzeichnisses.
  </d:para>
  <element name = "dir">
    <ref name = "foreign_att"/>
    <ref name = "att_name"/>
    <optional>
      <ref name = "att_sort"/>
    </optional>
    <interleave>
      <zeroOrMore>
        <ref name = "el_file"/>
      </zeroOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_dir -->

<define name = "att_name">
  <d:para>
Ein eindeutiger Name der Gruppe, typischerweise der Pfad des Verzeichnisses.
  </d:para>
  <attribute name = "name">
    <data type = "string"/>
  </attribute>
</define><!-- att_name -->

<define name = "att_sort">
  <d:para>
Der Wert dieses Attributs bestimmt die Reihenfolge,
in der die Kindelemente eingefügt werden,
vorrangig vor dem Attribut <d:code>ic:include/@sort</d:code>
in der einbindenden Datei.
Der Wert <d:literal>revers</d:literal> bedeutet die umgekehrte Reihenfolge.
der Wert <d:literal>normal</d:literal> bedeutet die normale Reihenfolge.
  </d:para>
  <attribute name = "sort">
    <choice>
      <value>revers</value>
      <value>normal</value>
    </choice>
  </attribute>
</define><!-- att_sort -->

<define name = "el_file">
  <d:para>
Der Dateipfad eines Dokuments, das eingebettet angezeigt werden soll.
  </d:para>
  <element name = "file">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define><!-- el_file -->

</grammar>
<!-- end of file KLEIDER/web/src/sitestyle/components.rng -->
