Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Muster  Dokument im Navigationsbaum lokalisieren

Bei der Deserialisierung von bedingten Transformationen wird als Kriterium für die Auswertung herangezogen, ob der Template-Inhalt ein so genanntes Muster (engl. Pattern) ist. Ein Muster enthält ein oder mehrere Konstrukte, die als "Marker" dienen. Die häufigste Form eines Markers ist ein literales XML-Element: Besteht der Inhalt der Bedingung aus genau einem XML-Element, so hat die Bedingung genau dann ein positives Ergebnis, wenn ein XML-Element mit diesem Namen an der aktuellen Stelle im XML-Eingabestrom folgt.

Marker-Konstrukte sind:

·        Literales XML-Element mit oder ohne Inhalt

·        Nicht-literales Attribut mit Inhalt

·        Nicht-leerer literaler Text

·        Ein explizit leerer Template-Inhalt

Jedes dieser Konstrukte kann in offensichtlicher Weise mit dem Eingabestrom abgeglichen werden.

Im allgemeinen kann ein Muster mehrere Marker enthalten. Beispielsweise. ist auch die Sequenz

<tt:cond>
  <X> … </X>
</tt:cond>
<Y> … </Y>

ein Muster; es enthält die Marker <X>und <Y>. Eine Bedingung mit diesem Muster wird sowohl durch ein Element X als auch durch ein Element Y im Eingabestrom positiv entschieden (im zweiten Fall wird die Bedingung mit X negativ entschieden).

Im folgenden wird die Menge der in einem Template-Inhalt c enthaltenen Marker-Konstrukte M(c) rekursiv definiert. Der Template-Inhalt c ist dann ein Muster, wenn M(c) nicht leer ist. Kurz gesagt besteht M(c) aus den Markern, die zur positiven Erkennung des Musters c dienen können, wobei Bedingungen in einem Anfangsstück von c auch negativ entschieden werden können.

Einige Konstrukte propagieren Marker nach außen:

Bedingte Transformationen propagieren Marker ebenfalls; bei Fallunterscheidungen und Gruppierungen wird die Vereinigung über alle Fälle gebildet:

Für alle anderen Instruktionen c ist M(c) leer.

Abschließend gilt für Sequenzen ci c2 … von Template-Inhalt die Regel:

Ein Template-Inhalt ist ein Vor-Muster, falls seine Deserialisierung ohne den Verbrauch von Inhalt aus dem Eingabestrom möglich ist. Im Detail:

 

Beispiel

Der Inhalt des folgenden tt:cond ist ein Muster mit den Marker-Elementen {f1, f2, f3} (aber nicht fx).

 

<tt:cond s-check="not-initial(F3) and initial(F6)">
  <tt:clear ref="F3"/>
  <tt:cond check="not-initial(F1) or not-initial(F2)">
    <tt:cond check="not-initial(F1)">
      <tt:clear ref="F1"/>
      <tt:serialize>
        <f1 a="v" tt:value-ref="F1"/>
      </tt:serialize>
      <tt:deserialize>
        <f1 tt:value-ref="F1"/>
      </tt:deserialize>
    </tt:cond>
    <f2 tt:value-ref="F2"/>
  </tt:cond>
  <f3 tt:value-ref="F3"/>
  <fx> ...
</fx>
</tt:cond>

 

 

 

Ende des Inhaltsbereichs