<?xml version = "1.0" encoding = "utf-8"?>
<?xml-stylesheet href="/pool/rng_ht.xslt" type="application/xml"?>
<!-- file KLEIDER/web/src/pinw/ph.rng -->
<!--
  Elemente und Attribute zur Ersetzung von Platzhaltern
  "http://herbaer.de/xmlns/20200620/ph/"
  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"
  ns      = "http://herbaer.de/xmlns/20200620/ph"
>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>ph.rng</title>
  <subtitle>Platzhalter für Daten</subtitle>
  <date>2020-09-08</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:para>
Ein Beispiel-Dokument für diesen Namensraum ist
<d:filename>ph.example.xhtml</d:filename>,
das Beispiel-Dokument <d:filename>d.example.xhtml</d:filename>
enthält dazu passende Daten.
</d:para>

<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/20200620/ph"/>
        </except>
      </anyName>
    </attribute>
  </zeroOrMore>
</define><!-- foreign_att -->

<define name = "el_i">
  <d:para>
Der Inhalt des Elements ist der Wert eines Schlüssels
(<d:tag class = "attribute">k</d:tag>-Attributs).
Das Element ist ein Platzhalter für den Inhalt des
<d:tag class = "element">d:i</d:tag>-Elementes
mit dem passenden <d:tag class = "attribute">k</d:tag>-Attribut
im Kontext.
  </d:para>
  <element name = "i">
    <ref name = "foreign_att"/>
    <data type = "string"/>
  </element>
</define>

<define name = "att_s">
  <d:para>
Der Wert des Attributs ist ein relativer Pfad,
unter dem das XML-Dokument
(XML-Namensraum <uri type = "xmlnamespace">http://herbaer.de/xmlns/20200528/d</uri>)
liegt, das die Werte für die Platzhalter bestimmt.
Das Wurzelelement des Platzhalter-Dokuments ist der neue Kontext.
  </d:para>
  <attribute name = "s">
    <data type = "string"/>
  </attribute>
</define>

<define name = "att_g">
  <d:para>
Der Inhalt des Attributs ist der Wert eines Schlüssels
(<d:tag class = "attribute">k</d:tag>-Attributs).
Im aktuellen Kontext gibt es ein
<d:tag class = "element">d:g</d:tag>-Elementes
mit dem passenden <d:tag class = "attribute">k</d:tag>-Attribut,
das ein oder mehrere
<d:tag class = "element">d:d</d:tag>-Elemente enthält.
Das Element, das dieses <d:tag class = "attribute">g</d:tag>-Attribut enthält,
wird für jedes
<d:tag class = "element">d:d</d:tag>-Element als Ersetzungskontext wiederholt.
  </d:para>
  <attribute name = "s">
    <data type = "string"/>
  </attribute>
</define>

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