<?xml version = "1.0" encoding = "utf-8"?>
<?xml-stylesheet href="/pool/rng_ht.xslt" type="application/xml"?>
<!-- file KLEIDER/web/src/favourites/vis.rng -->
<!--
  Besuche der Website http://kleider.herbaer.de
  "http://herbaer.de/xmlns/20170613/vis/"
  2017 Herbert Schiemann <h.schiemann@herbaer.de>
  Borkener Str. 167, 46284 Dorsten, Deutschland
  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"
  xmlns:xl = "http://www.w3.org/1999/xlink"
  ns       = "http://herbaer.de/xmlns/20170613/vis/"
>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>vis.rng</title>
  <subtitle>Besuche der Website http://kleider.herbaer.de</subtitle>
  <date>2017-07-11</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:para>
Die Elemente und Attribute entsprechen weitgehend dem Namensraum
<d:uri type = "namespace" xl:href="visits.rng"
>http://herbaer.de/xmlns/20170613/vis/</d:uri>,
sind aber auf die Inhalte beschränkt, die auf der Website präsentiert werden.
Die Namen sind kurz.
</d:para>

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

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

<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/20170613/vis/"/>
        </except>
      </anyName>
    </attribute>
  </zeroOrMore>
</define>

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

<define name = "el_visits">
  <d:para>
Daten zu Besuchen der Website.
  </d:para>
  <element name = "b">
    <ref name = "foreign_att"/>
    <interleave>
      <optional>
        <ref name = "el_last_time"/>
      </optional>
      <zeroOrMore>
        <ref name = "el_favstories"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_favimages"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_favlangs"/>
      </zeroOrMore>
    </interleave>
  </element>
</define><!-- el_visits -->

<define name = "el_story">
  <d:para>
Die Kennung einer (besuchten) Geschichte
  </d:para>
  <element name = "s">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define><!-- el_story -->

<define name = "el_lang">
  <d:para>
Die Kennung der Sprache einer Lokalisierungsdatei
  </d:para>
  <element name = "l">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define>

<define name = "el_last_time">
  <d:para>
Datum und Zeit der letzten ausgewerteten Anfrage.
  </d:para>
  <element name = "t">
    <ref name = "foreign_att"/>
    <data type = "dateTime"/>
  </element>
</define><!-- el_last_time -->

<define name = "att_lang">
  <d:para>
Kennung einer Sprache.
Der Wert <d:literal>total</d:literal>
steht für alle Sprachen oder eine beliebige Sprache.
  </d:para>
  <attribute name = "lang">
    <data type = "word"/>
  </attribute>
</define><!-- att_lang -->

<define name = "el_favstories">
  <d:para>
Die Bildergeschichten sortiert nach ihrer Beliebtheit.
Wenn das Attribut 
<d:tag class = "attribute" linkend = "visits_att_lang">lang</d:tag>
existiert,
werden die Besuche in der angegebenen Sprache bevorzugt gewertet.
  </d:para>
  <element name = "s">
    <interleave>
      <ref name = "foreign_att"/>
      <optional>
        <ref name = "att_lang"/>
      </optional>
    </interleave>
    <interleave>
      <ref name = "foreign_el"/>
      <oneOrMore>
        <ref name = "el_favstory"/>
      </oneOrMore>
    </interleave>
  </element>
</define>

<define name = "el_favstory">
  <d:para>
Daten zur Beliebtheit einer Bildergeschichte (in einer bestimmten Sprache).
  </d:para>
  <element name = "s">
    <interleave>
      <ref name = "foreign_el"/>
      <ref name = "el_story"/>
      <ref name = "el_fs_visits"/>
      <ref name = "el_imgid"/>
    </interleave>
  </element>
</define>

<define name = "el_fs_visits">
  <d:para>
Die Zahl der Besuche (gesamt, einer Bildergeschichte oder eines Bildes)
in einer bestimmten Sprache.
  </d:para>
  <element name = "b">
    <ref name = "foreign_att"/>
    <data type = "integer"/>
  </element>
</define>

<define name = "el_favimages">
  <d:para>
Die Bilder sortiert nach ihrer Beliebtheit
in einer bestimmten Sprache, die das Attribut
<d:tag class = "attribute" linkend = "visits_att_lang">lang</d:tag> bezeichnet.
Wenn das Attribut <d:tag class = "attribute">lang</d:tag> fehlt,
sind die Bilder nach ihrer Beliebheit insgesamt sortiert,
wie <d:code>@lang = 'total'</d:code>.
  </d:para>
  <element name = "i">
    <interleave>
      <ref name = "foreign_att"/>
      <optional>
        <ref name = "att_lang"/>
      </optional>
    </interleave>
    <interleave>
      <ref name = "foreign_el"/>
      <oneOrMore>
        <ref name = "el_favimage"/>
      </oneOrMore>
    </interleave>
  </element>
</define>

<define name = "el_favimage">
  <d:para>
Daten zur Beliebtheit eines Bildes (in einer bestimmten Sprache).
  </d:para>
  <element name = "i">
    <interleave>
      <ref name = "foreign_el"/>
      <optional>
        <ref name = "el_segment"/>
      </optional>
      <ref name = "el_imgid"/>
      <ref name = "el_story"/>
      <ref name = "el_fs_visits"/>
    </interleave>
  </element>
</define>

<define name = "el_imgid">
  <d:para>
Die Kennung eines Bildes: Dateiname ohne Suffix.
  </d:para>
  <element name = "i">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define>

<define name = "el_segment">
  <d:para>
Ein Segment-Bezeichner zur Anzeige des Bildes im Rahmen der Bildergeschichte
  </d:para>
  <element name = "p">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define>

<define name = "el_favlangs">
  <d:para>
Die Sprachen sortiert nach ihrer Beliebtheit
  </d:para>
  <element name = "l">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "foreign_el"/>
      <oneOrMore>
        <ref name = "el_favlang"/>
      </oneOrMore>
    </interleave>
  </element>
</define>

<define name = "el_favlang">
  <d:para>
Daten zur Beliebtheit einer Sprache.
Die Angaben zu einer Bildergeschichte oder einem Bild
beziehen sich auf die beliebteste Bildergeschichte und das
beliebteste Bild bei Besuchen in der Sprache.
  </d:para>
  <element name = "l">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "foreign_el"/>
      <ref name = "el_lang"/>
      <ref name = "el_fs_visits"/>
      <optional>
        <ref name = "el_favstory"/>
      </optional>
      <optional>
        <ref name = "el_favimage"/>
      </optional>
    </interleave>
  </element>
</define>

</grammar>
<!-- end of file KLEIDER/web/src/favourites/vis.rng -->
