Produktionsvorlagendirektive
Die *Production template-Direktive gibt gültige Kombinationen von Elementen an, die innerhalb eines bestimmten Konstrukts angezeigt werden können. Diese Direktive kann nur in Vorlagen mit *Type: CONSTRUCT angezeigt werden.
Wenn diese Direktive vorhanden ist, wird die Produktion anhand jedes instance eines Konstrukts ausgewertet, das an die Hostvorlage der Produktion gebunden ist. Die Hostvorlage ist die Vorlage, die die Produktionsdirektive enthält. Wenn die Produktionsdirektive als FALSE ausgewertet wird, wird eine Warnmeldung ausgegeben, aber die Verarbeitung ist ansonsten nicht betroffen. Wenn die Hostvorlage keine Produktionsanweisungen enthält, wird keine Überprüfung durchgeführt.
Die *Production-Direktive wird auf der Stammebene des Hostvorlagenkonstrukts angezeigt. Wenn auf der Stammebene mehr als eine *Produktionsdirektive angezeigt wird, wird nur die zuletzt definierte Direktive ausgewertet. Das Ergebnis der Auswertung einer Produktionsdirektive ist ein boolescher Wert.
Die *Production-Direktive ist selbst ein Konstrukt. Die untergeordneten Elemente der *Production-Direktive sind entweder andere *Produktionskonstrukte oder *Memberkonstrukte oder eine Kombination aus beiden (auch als untergeordnete Produktionen bezeichnet). Namespacedirektiven innerhalb der *Production-Direktive können nicht verwendet werden.
Jede untergeordnete Produktion, die in der *Production-Direktive enthalten ist, wird ebenfalls als TRUE oder FALSE ausgewertet. Die Produktionsdirektive wird ausgewertet, indem zuerst jede ihrer untergeordneten Produktionen ausgewertet wird. Das Ergebnis für die einschließende übergeordnete Produktionsdirektive wird durch Ausführen eines einfachen logischen Vorgangs für die Ergebnisse der einzelnen untergeordneten Produktionen abgerufen. Der Typ des anzuwendenden logischen Vorgangs wird durch vValue der *Production-Direktive angegeben.
Der Wert der *Production-Direktive kann eines der folgenden Symbole sein: EXACTLY_ONE, SATISFY_ALL oder AT_LEAST_ONE.
Das folgende Beispiel zeigt eine Produktionsdirektive.
*Production: EXACTLY_ONE
{ ... child Productions ... }
Der folgende Algorithmus definiert die Werte der Produktionsdirektive:
Wenn die Produktion EXACTLY_ONE angibt, wird diese Produktion als TRUE ausgewertet, wenn genau eine untergeordnete Produktion als TRUE ausgewertet wird, wobei der Rest FALSE ist. Andernfalls wird die Produktion als FALSE ausgewertet.
Wenn die Produktion SATISFY_ALL angibt, wird diese Produktion nur dann als TRUE ausgewertet, wenn alle untergeordneten Produktionen als TRUE ausgewertet werden. Andernfalls wird die Produktion als FALSE ausgewertet.
Wenn die Produktion AT_LEAST_ONE angibt, wird diese Produktion als TRUE ausgewertet, wenn mindestens eine untergeordnete Produktion als TRUE ausgewertet wird. Andernfalls wird die Produktion als FALSE ausgewertet.
*Produktionsdirektiven können in beliebige Tiefe geschachtelt werden.