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:
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>