<?xml version = "1.0" encoding = "utf-8"?>
<?xml-stylesheet href="/pool/rng_ht.xslt" type="application/xml"?>
<!-- file KLEIDER/catalog/src/imgshow.rng -->
<!--
  Schema für eine Bilderpräsentation
  "http://herbaer.de/xmlns/20080705/imgshow"
  2014-04-14
  2008 - 2014 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

  2013-05-09 Werte @role aufgeführt: cat private, weitere Werte @restr
  2014-04-14 p/@role
  2014-04-15 att_kleid
  2015-08-20 is:f
-->
<grammar
  xmlns    = "http://relaxng.org/ns/structure/1.0"
  xmlns:d  = "http://herbaer.de/xmlns/20051201/doc"
  ns       = "http://herbaer.de/xmlns/20080705/imgshow"
  xml:lang = "de"
>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>imgshow.rng</title>
  <subtitle>Ein XML-Format für eine Bilderpräsentation</subtitle>
  <date>2011-11-28</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<start>
  <ref name = "el_document"/>
</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/20080705/imgshow"/>
        </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/20080705/imgshow"/>
        </except>
      </anyName>
      <ref name = "anything"/>
    </element>
  </zeroOrMore>
</define>

<define name = "el_document">
  <d:para>
    Das XML-Wurzelelement der Bilderpräsentation
  </d:para>
  <element name = "document">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_title"/>
      <zeroOrMore>
        <ref name = "el_meta"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_section"/>
      </zeroOrMore>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

<define name = "el_meta">
  <d:para>
    Meta-Daten zur Bildergeschichte.
    Das Attribut <d:tag class = "attribute">name</d:tag>
    zeigt die Bedeutung des Inhalts an.
  </d:para>
  <element name = "meta">
    <ref name = "att_name"/>
    <interleave>
      <text/>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

<define name = "att_name">
  <d:para>
    Das Attribut <d:tag class = "attribute">name</d:tag>
    bezeichnet die Bedeutung der Meta-Daten.
    Stylesheets nutzen bisher den Wert <d:literal>story</d:literal>
  </d:para>
  <attribute name = "name"/>
</define>

<define name = "el_title">
  <d:para>
    Der Titel des Dokuments (Fotopräsentation)
    oder Abschnitts
  </d:para>
  <element name = "title">
    <interleave>
      <text/>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

<define name = "el_section">
  <d:para>
    Ein Abschnitt der Bilderpräsentation.
  </d:para>
  <element name = "section">
    <interleave>
      <optional>
        <ref name = "att_role"/>
      </optional>
      <optional>
        <ref name = "att_kleid"/>
      </optional>
      <ref name = "foreign_att"/>
    </interleave>
    <interleave>
      <ref name = "el_title"/>
      <zeroOrMore>
        <ref name = "el_p"/>
      </zeroOrMore>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

<define name = "att_role">
  <d:para>
Klassifiziert ein <d:tag class = "element">section</d:tag>-
oder <d:tag class = "element">p</d:tag>-Element.
Der Wert <d:tag class = "attvalue">cat</d:tag> kennzeichnet
einen Abschnitt mit Bildern für den Katalog.
  </d:para>
  <d:variablelist>
    <d:varlistentry>
      <d:term>cat</d:term>
      <d:listitem>
        <d:para>
Kennzeichnet einen Abschnitt mit Bildern für den Katalog.
        </d:para>
      </d:listitem>
    </d:varlistentry>
    <d:varlistentry>
      <d:term>private</d:term>
      <d:listitem>
        <d:para>
Kennzeichnet einen Abschnitt, der nicht zur Veröffentlichung gedacht ist.
        </d:para>
      </d:listitem>
    </d:varlistentry>
  </d:variablelist>
  <attribute name = "role">
    <choice>
      <value>cat</value>
      <value>private</value>
    </choice>
  </attribute>
</define>

<define name = "att_kleid">
  <d:para>
Kennung des Kleids, auf das sich der Abschnitt
(<d:tag class = "element">section</d:tag>-
oder <d:tag class = "element">p</d:tag>-Element)
bezieht.
Der Wert entspricht dem Attribut 
<d:code><d:tag class = "element">kleid</d:tag>/@<d:tag
class = "attribute">ref</d:tag></d:code>
  </d:para>
  <attribute name = "kleid">
    <data type = "word"/>
  </attribute>
</define>

<define name = "el_p">
  <d:para>
    Ein Textabschnitt, der auf Bilder verweisen kann.
  </d:para>
  <element name = "p">
    <interleave>
      <optional>
        <ref name = "att_title"/>
      </optional>
      <optional>
        <ref name = "att_role"/>
      </optional>
      <optional>
        <ref name = "att_kleid"/>
      </optional>
      <ref name = "foreign_att"/>
    </interleave>
    <interleave>
      <text/>
      <zeroOrMore>
        <ref name = "el_jpg"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_puppe"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_peruecke"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_kleid"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_story"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_sect"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_f"/>
      </zeroOrMore>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

<define name = "att_title">
  <d:para>
    Titel eines Textabschnitts (Unterabschitts)
  </d:para>
  <attribute name = "title"/>
</define>

<define name = "el_jpg">
  <d:para>
    Verweis auf ein Bild
  </d:para>
  <element name = "jpg">
    <ref name = "att_alt"/>
    <ref name = "att_fmt"/>
    <ref name = "att_src"/>
    <optional>
      <ref name = "att_restr"/>
    </optional>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "att_alt">
  <d:para>
Ein kurzer Text, der das Bild beschreibt.
Dieser Text sollte in der normalen Darstellung nicht angezeigt werden,
kann aber als Hinweistext ("Tooltip") oder in der Statuszeile eines Web-Browsers
erscheinen.
  </d:para>
  <d:para>
Das Wort <d:literal>wttl</d:literal> kennzeichnet Bilder,
bei denen die Umgebung mehr hervorgehoben ist als die Puppe.
  </d:para>
  <attribute name = "alt"/>
</define>

<define name = "att_fmt">
  <d:para>
    Eine Kennung des Bildformats.
    <d:simplelist>
      <d:member>h: Hochformat (Kopf oben)</d:member>
      <d:member>q: Querformat (Kopf rechts)</d:member>
      <d:member>k: Kopf (umgedrehtes Hochformat, Kopf unten)</d:member>
      <d:member>p: umgedrehtes Querformat (Kopf links)</d:member>
    </d:simplelist>
  </d:para>
  <attribute name = "fmt">
    <choice>
      <value>h</value>
      <value>q</value>
      <value>k</value>
      <value>p</value>
    </choice>
  </attribute>
</define>

<define name = "att_src">
  <d:para>
Die Kennung eines Bildes.
  </d:para>
  <attribute name = "src"/>
</define>

<define name = "att_restr">
  <d:para>
    Ein Hinweis auf Einschränkungen bezüglich der Veröffentlichung des Bildes.
    <d:simplelist>
      <d:member>
        <d:literal>kfz</d:literal>: Ein Fahrzeugkennzeichen ist deutlich lesbar.
      </d:member>
      <d:member>
        <d:literal>person</d:literal>: Eine Person ist deutlich zu erkennen.
      </d:member>
      <d:member>
        <d:literal>location</d:literal>: Der Ort ist deutlich erkennbar.
      </d:member>
      <d:member>
        <d:literal>content</d:literal>: Der Inhalt des Bildes ist nicht geeignet.
      </d:member>
      <d:member>
        <d:literal>quality</d:literal>: Es mangelt an Qualität.
      </d:member>
      <d:member>
        <d:literal>multiple</d:literal>: Es gibt andere (geeignetere) fast gleiche Bilder.
      </d:member>
      <d:member>
        <d:literal>other</d:literal>: Andere Gründe
      </d:member>
    </d:simplelist>
  </d:para>
  <attribute name = "restr">
    <choice>
      <value>kfz</value>
      <value>person</value>
      <value>location</value>
      <value>content</value>
      <value>quality</value>
      <value>multiple</value>
      <value>other</value>
    </choice>
  </attribute>
</define>

<define name = "el_puppe">
  <d:para>
Verweis auf eine Puppe
  </d:para>
  <element name = "puppe">
    <ref name = "att_ref"/>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "el_peruecke">
  <d:para>
Verweis auf ein Perücken-Modell
  </d:para>
  <element name = "peruecke">
    <ref name = "att_ref"/>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "el_kleid">
  <d:para>
Verweis auf ein Kleidungsstück
  </d:para>
  <element name = "kleid">
    <ref name = "att_ref"/>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "el_story">
  <d:para>
Verweis auf eine Bildergeschichte
  </d:para>
  <element name = "story">
    <ref name = "att_ref"/>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "el_sect">
  <d:para>
Verweis auf einen Abschnitt der Bildergeschichte
  </d:para>
  <element name = "sect">
    <ref name = "att_ref"/>
    <ref name = "foreign_att"/>
    <text/>
  </element>
</define>

<define name = "att_ref">
  <d:para>
    Die Kennung eines Verweisziels:
    Kurzbezeichnung des Modells einer Puppe oder Perücke,
    Kennung einer Bildergeschichte oder eines Kleids,
    Nummer eines Abschnitts (mit 1 beginnend)
  </d:para>
  <attribute name = "ref"/>
</define>

<define name = "el_f">
  <d:para>
Kennzeichnet Text, der nicht zu übersetzen ist:
Labels, Hersteller, Personennamen, Ortsnamen
  </d:para>
  <element name = "f">
    <ref name = "foreign_att"/>
    <interleave>
      <text/>
      <ref name="foreign_el"/>
    </interleave>
  </element>
</define>

</grammar>
<!-- end of file KLEIDER/catalog/src/imgshow.rng -->
