<?xml version = "1.0" encoding = "utf-8"?>
<?xml-stylesheet href="/pool/rng_ht.xslt" type="application/xml"?>
<!-- file KLEIDER/web/src/pinw/punktediagramm.rng -->
<!--
  Daten für ein Diagramm mit Punkten und Linien
  "http://herbaer.de/xmlns/20200803/punktediagramm/"
  2020 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"
  xmlns:xl = "http://www.w3.org/1999/xlink"
  ns       = "http://herbaer.de/xmlns/20200803/punktediagramm/"
>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>punktediagramm.rng</title>
  <subtitle>Daten für ein Diagramm mit Punkten und Linien</subtitle>
  <date>2020-08-03</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<start>
  <ref name = "el_punktediagramm"/>
</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><!-- 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/20200803/punktediagramm/"/>
        </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/20200803/punktediagramm/"/>
        </except>
      </anyName>
      <ref name = "anything"/>
    </element>
  </zeroOrMore>
</define><!-- foreign_el -->

<define name = "el_punktediagramm">
  <d:para>
Das XML-Wurzelelement des Dokuments
  </d:para>
  <d:para>
Die enthaltenen Daten dienen dazu, ein Diagramm zu erstellen.
Koordinatenwerte können &#x201e;Weltkoordinaten&#x201d;-Werte
oder Bildkoordinaten-Werte sein.
Bei einem Diagramm,
das die Relation der Körpergewichts und der Körpergröße von Menschen zeigt,
sind das Körpergewicht in kg und die Körpergröße in m
typische &#x201e;Weltkoordinaten&#x201d;-Werte.
Bildkoordinaten-Werte geben die Position eines Punktes im Diagramm an.
Die obere linke Ecke hat die Bildkoordinaten (0, 0),
die erste Komponente (x) wächst von links nach rechts,
die zweite Komponente (y) von oben nach unten.
  </d:para>
  <d:para>
Für die graphische Darstellung haben hauptsächlich
die Bildkoordinatenwerte eine Bedeutung.
Weltkoordinatenwerte können dazu dienen,
die Markierungen an den Achsen zu beschriften.
  </d:para>
  <element name = "punktediagramm">
    <ref name = "foreign_att"/>
    <interleave>
      <optional>
        <ref name = "el_size"/>
      </optional>
      <optional>
        <ref name = "el_title"/>
      </optional>
      <optional>
        <ref name = "el_realrange"/>
      </optional>
      <optional>
        <ref name = "el_outrange"/>
      </optional>
      <optional>
        <ref name = "el_scloutrange"/>
      </optional>
      <optional>
        <ref name = "el_sclxticks"/>
      </optional>
      <optional>
        <ref name = "el_xticks"/>
      </optional>
      <optional>
        <ref name = "el_xlabels"/>
      </optional>
      <optional>
        <ref name = "el_sclyticks"/>
      </optional>
      <optional>
        <ref name = "el_yticks"/>
      </optional>
      <optional>
        <ref name = "el_ylabels"/>
      </optional>
      <zeroOrMore>
        <ref name = "el_pointset"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name = "el_cbezier"/>
      </zeroOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_punktediagramm -->

<define name = "el_size">
  <d:para>
Größe der graphischen Darstellung
  </d:para>
  <d:para>
Das erste
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Element
enthält die Breite, das zweite
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Element
die Höhe der graphischen Darstellung in Pixeln.
  </d:para>
  <element name = "size">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_size -->

<define name = "el_title">
  <d:para>
Ein Titel
  </d:para>
  <element name = "title">
    <ref name = "foreign_att"/>
    <interleave>
      <text/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>    
</define><!-- el_title -->

<define name = "el_realrange">
  <d:para>
Der wirkliche &#x201e;Welt&#x201d;-Wertebereich
  </d:para>
  <d:para>
Die vier
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Elemente
enthalten der Reihe nach:
  </d:para>
  <d:simplelist>
    <d:member>
den kleinsten (in einem
<d:tag class = "element" xl:href = "#punktediagramm_el_pointset">pointset</d:tag>- oder
<d:tag class = "element" xl:href = "#punktediagramm_el_cbezier">cbezier</d:tag>-Element)
vorkommenden x-&#x201e;Welt&#x201d;-Koordinatenwert,
    </d:member>
    <d:member>
den größten vorkommenden x-&#x201e;Welt&#x201d;-Koordinatenwert,
    </d:member>
    <d:member>
den kleinsten vorkommenden y-&#x201e;Welt&#x201d;-Koordinatenwert,
    </d:member>
    <d:member>
den größten vorkommenden y-&#x201e;Welt&#x201d;-Koordinatenwert,
    </d:member>
  </d:simplelist>
  <element name = "realrange">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_realrange -->

<define name = "el_outrange">
  <d:para>
Der Ausgabe-Weltkoordinatenbereich
  </d:para>
  <d:para>
Dieses Element gibt den Wertebereich in Weltkoordinaten an,
der im Diagramm dargestellt werden soll.
Er kann größer oder kleiner sein als der Echt-Wertebereich
(<d:tag class = "element" xl:href = "#punktediagramm_el_realrange">realrange</d:tag>).
In der Regel umfasst der Ausgabe-Wertebereich den Echt-Wertebereich.
Die Wertegrenzen des Ausgabe-Wertebereichs sind oft gerundet.
  </d:para>
  <d:para>
Die vier <d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Elemente
enthalten der Reihe nach
  </d:para>
  <d:simplelist>
    <d:member>
den kleinsten darstellbaren x-Weltkoordinatenwert,
    </d:member>
    <d:member>
den größten darstellbaren x-Weltkoordinatenwert,
    </d:member>
    <d:member>
den kleinsten darstellbaren y-Weltkoordinatenwert,
    </d:member>
    <d:member>
den größten darstellbaren y-Weltkoordinatenwert.
    </d:member>
  </d:simplelist>
  <element name = "outrange">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_outrange -->

<define name = "el_scloutrange">
  <d:para>
Die Bildkoordinaten des Ausgabebereichs
(<d:tag class = "element" xl:href = "#punktediagramm_el_outrange">outrange</d:tag>)
  </d:para>
  <d:para>
Die vier
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Elemente enthalten:
  </d:para>
  <d:simplelist>
    <d:member>
die waagerechte Bildkoordinate des kleinsten darstellbaren x-Weltkoordinatenwertes,
    </d:member>
    <d:member>
die waagerechte Bildkoordinate des größten darstellbaren x-Weltkoordinatenwertes,
    </d:member>
    <d:member>
die senkrechte Bildkoordinate des kleinsten darstellbaren y-Weltkoordinatenwertes,
    </d:member>
    <d:member>
die senkrechte Bildkoordinate des größten darstellbaren y-Weltkoordinatenwertes.
    </d:member>
  </d:simplelist>
  <d:para>
Während die y-Weltkoordinatenwerte im Diagramm oft von unten nach oben ansteigen,
steigen die senkrechten Bildkoordinatenwerte von oben nach unten.
Deshalb ist der Wert des dritten
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Elements
oft größer als der Wert des vierten
<d:tag class = "element" xl:href = "#punktediagramm_el_co">co</d:tag>-Elements.
  </d:para>
  <element name = "scloutrange">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_scloutrange -->

<define name = "el_sclxticks">
  <d:para>
Die waagerechten Bildkoordinatenwerte der Markierungen an der x-Achse.
  </d:para>
  <element name = "sclxticks">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_tk"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_sclxticks -->

<define name = "el_xticks">
  <d:para>
Die x-Weltkoordinatenwerte zu den Markierungen an der x-Achse.
Die Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
entspricht der Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
im Element
<d:tag class = "element" xl:href = "#punktediagramm_el_sclxticks">sclxticks</d:tag>.
  </d:para>
  <element name = "xticks">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_tk"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_xticks -->

<define name = "el_xlabels">
  <d:para>
Beschriftungen zu den Markierungen an der x-Achse.
Die Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_lb">lb</d:tag>-Elemente
entspricht der Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
im Element
<d:tag class = "element" xl:href = "#punktediagramm_el_sclxticks">sclxticks</d:tag>.
  </d:para>
  <element name = "xlabels">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_lb"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_xlabels -->

<define name = "el_sclyticks">
  <d:para>
Die senkrechten Bildkoordinatenwerte der Markierungen an der y-Achse.
  </d:para>
  <element name = "sclyticks">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_tk"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_sclyticks -->

<define name = "el_yticks">
  <d:para>
Die y-Weltkoordinatenwerte zu den Markierungen an der y-Achse.
Die Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
entspricht der Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
im Element
<d:tag class = "element" xl:href = "#punktediagramm_el_sclyticks">sclyticks</d:tag>.
  </d:para>
  <element name = "yticks">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_tk"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_yticks -->

<define name = "el_ylabels">
  <d:para>
Beschriftungen zu den Markierungen an der y-Achse.
Die Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_lb">lb</d:tag>-Elemente
entspricht der Reihenfolge der
<d:tag class = "element" xl:href = "#punktediagramm_el_tk">tk</d:tag>-Elemente
im Element
<d:tag class = "element" xl:href = "#punktediagramm_el_sclyticks">sclyticks</d:tag>.
  </d:para>
  <element name = "ylabels">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_lb"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_ylabels -->

<define name = "el_tk">
  <d:para>
Koordinatenwert einer Achsenkarkierung (Weltkoordinatenwert oder Bildkoordinatenwert.
  </d:para>
  <element name = "tk">
    <ref name = "foreign_att"/>
    <data type = "number"/>
  </element>
</define><!-- el_tk -->

<define name = "el_lb">
  <d:para>
Beschriftung einer Achsenkarkierung
  </d:para>
  <element name = "lb">
    <ref name = "foreign_att"/>
    <interleave>
      <text/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_lb -->

<define name = "el_pointset">
  <d:para>
Eine Menge von Punkten
  </d:para>
  <element name = "pointset">
    <ref name = "foreign_att"/>
    <interleave>
      <optional>
        <ref name = "el_class"/>
      </optional>
      <optional>
        <ref name = "el_points"/>
      </optional>
      <optional>
        <ref name = "el_scaled"/>
      </optional>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_pointset -->

<define name = "el_cbezier">
  <d:para>
Eine Kurve, die stückweise aus kubischen Bezier-Kurven zusammengesetzt ist.
Die Anzahl der Punkte
(<d:tag class = "element" xl:href = "#punktediagramm_el_pt">pt</d:tag>-Elemente
im
<d:tag class = "element" xl:href = "#punktediagramm_el_scaled">scaled</d:tag>-Element)
modulo 3 ist 1.
  </d:para>
  <element name = "cbezier">
    <ref name = "foreign_att"/>
    <interleave>
      <optional>
        <ref name = "el_class"/>
      </optional>
      <optional>
        <ref name = "el_points"/>
      </optional>
      <optional>
        <ref name = "el_scaled"/>
      </optional>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_cbezier -->

<define name = "el_class">
  <d:para>
Ein Wert, der eine Punktmenge
(<d:tag class = "element" xl:href = "#punktediagramm_el_pointset">pointset</d:tag>)
oder eine C-Bezier-Kurve
(<d:tag class = "element" xl:href = "#punktediagramm_el_cbezier">cbezier</d:tag>)
bezeichnet.
  </d:para>
  <element name = "class">
    <ref name = "foreign_att"/>
    <data type = "word"/>
  </element>
</define><!-- el_class -->

<define name = "el_points">
  <d:para>
Punkte einer Punktmenge
(<d:tag class = "element" xl:href = "#punktediagramm_el_pointset">pointset</d:tag>)
oder Führungspunkte einer C-Bezier-Kurve
(<d:tag class = "element" xl:href = "#punktediagramm_el_cbezier">cbezier</d:tag>)
in Weltkoordinaten
  </d:para>
  <element name = "points">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_pt"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_points -->

<define name = "el_scaled">
  <d:para>
Punkte einer Punktmenge
(<d:tag class = "element" xl:href = "#punktediagramm_el_pointset">pointset</d:tag>)
oder Führungspunkte einer C-Bezier-Kurve
(<d:tag class = "element" xl:href = "#punktediagramm_el_cbezier">cbezier</d:tag>)
in Bildkoordinaten
  </d:para>
  <element name = "scaled">
    <ref name = "foreign_att"/>
    <interleave>
      <oneOrMore>
        <ref name = "el_pt"/>
      </oneOrMore>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_scaled -->

<define name = "el_pt">
  <d:para>
Ein Punkt in Weltkoordinaten oder Bildkoordinaten
  </d:para>
  <element name = "pt">
    <ref name = "foreign_att"/>
    <interleave>
      <ref name = "el_co"/>
      <ref name = "el_co"/>
      <ref name = "foreign_el"/>
    </interleave>
  </element>
</define><!-- el_pt -->

<define name = "el_co">
  <d:para>
Ein Koordinatenwert (Weltkoordinatenwert oder Bildkoordinatenwert)
  </d:para>
  <element name = "co">
    <ref name = "foreign_att"/>
    <data type = "number"/>
  </element>
</define><!-- el_co -->

</grammar>
<!-- end of file KLEIDER/web/src/pinw/punktediagramm.rng -->
