### Vorlagen

Eine Vorlage ist ein BSCW-Dokument vom MIME-Typ ‚Document Template‘ (`text/x-bscw-template`). Vorlagen sollte mit einem normalen Texteditor (z.B. Windows Notepad) oder einem HTML-Editor erzeugt werden. Nicht geeignet sind Textverarbeitungssysteme wie Microsoft Word. Beim Hochladen einer Vorlage in einen DokSet muss der MIME-Typ ‚Document Template‘ gewählt werden. Andernfalls wird das Dokument vom Evaluierungsprozess nicht als Vorlage erkannt.

Es wird empfohlen, ein Suffix wie .dtm für Dokumente vom Typ Vorlage zu benutzen, so dass sie in einer Ordnerübersicht anhand ihres Namens leicht erkannt werden können. Eine Vorlage wird durch das Symbol dargestellt.

Es gibt zwei Klassen von Vorlagen: Aus Vorlagen der ersten Klasse werden während des Evaluierungsprozesses direkt Dokumente erzeugt. Eine Vorlage gehört zu dieser Klasse, wenn der Evaluierungsparameter document gesetzt ist, d.h. wenn der Vorlage als Parameter das zu erzeugende Dokument angegeben wurde.

Vorlagen der zweiten Klasse sind indirekt an der Erzeugung von Dokumenten beteiligt, da sie in andere Vorlagen eingebettet werden. Eine Vorlage gehört zu dieser Klasse, wenn der Evaluierungsparameter document fehlt, also kein zu erstellendes Dokument angegeben wurde.

Neben dem Evaluierungsparameter document gibt es noch den Evaluierungsparameter template, der eine Vorlage bezeichnet, in die die Werte der Instanzen der vorliegenden Vorlage eingefügt werden. Beide Parameter benennen Dateinamen innerhalb eines DokSets.

Die Evaluierungsparameter kann man als eine Art von Instanzen ansehen, die zu Vorlagen gehören. Sie können durch die Aktion Parameter im Aktionsmenü einer Vorlage gesetzt (und auch wieder zurückgesetzt) werden.

Für den Evaluierungsprozess gelten die folgenden Regeln:

###### a) Der Parameter document ist für eine Vorlage X definiert

Der Evaluierungsprozess wertet die Vorlage X aus und erzeugt das Dokument, das im Parameter document angegeben ist. In diesem Fall besteht die Vorlage X im Wesentlichen aus Text, der Referenzen auf Instanzen enthält, die durch den Evaluierungsprozess ausgewertet werden.

###### b) Die Parameter document und template sind für eine Vorlage X definiert

Der Evaluierungsprozess wertet die mit dem Parameter template bezeichnete Vorlage aus und erzeugt ein Dokument mit dem in Parameter document angegebenen Namen. Während der Auswertung werden die Instanzen der Vorlage X eingesetzt, die in der mit dem Parameter template bezeichneten Vorlage referenziert werden. In diesem Fall besteht die Vorlage X aus Definitionen von Instanzen, die in die mit dem Parameter template bezeichnete Vorlage eingesetzt werden, bevor das neu erzeugte Dokument in den DokSet eingefügt wird.

###### c) Es sind keine Evaluierungsparameter für die Vorlage X definiert

Der Evaluierungsprozess wertet die Vorlage X nur aus, wenn sie ihrerseits in einer anderen Vorlage im Parameter template angegeben wurde (siehe Fall b oben) oder in eine andere Vorlage eingebettet wird (siehe unten). Dabei besteht die Vorlage X im Wesentlichen aus Text, der Referenzen auf Instanzen enthält, die durch den Evaluierungsprozess ausgewertet werden.

###### d) Der Parameter template ist für eine Vorlage X definiert

Der Evaluierungsprozess wertet die Vorlage X nur aus, wenn sie in einer anderen Vorlage im Parameter template angegeben wurde (siehe Fall b oben) oder wenn sie in eine andere Vorlage eingebettet ist (siehe unten). Dabei besteht die Vorlage X aus Definitionen von Instanzen, die in die im Parameter template angegebene Vorlage eingesetzt werden.

##### Eingebettete Vorlagen

In eine Vorlage können andere Vorlagen eingebettet werden. Dadurch kann eine Vorlage von mehreren anderen Vorlagen verwendet werden. Eine Vorlage wird mit der folgenden Notation eingebettet:

`#(Name-der-Vorlage)#`

Während des Evaluierungsprozesses wird zunächst die eingebettete Vorlage ausgewertet und der daraus resultierende Text eingesetzt. Solch eine Referenz auf eine eingebettete Vorlage kann auch Pfadinformationen enthalten, die die Vorlage innerhalb eines DokSets lokalisieren. Die Pfadnamen werden als relativ zum Ort derjenigen Vorlage angesehen, die die Referenz auf die eingebettete Vorlage enthält. Vorlagen, die Definitionen von Instanzen enthalten, können ebenso eingebettet werden. In diesem Fall wird während der Auswertung ebenfalls das Resultat der Auswertung der eingebetteten Vorlage für die Referenz eingesetzt.

Mit der Notation

`#(Name-der-Vorlage, Name-einer-verbundenen-Vorlage)#`

kann man eine eingebettete Vorlage mit einer Vorlage verbinden, die Definitionen von Instanzen enthält. Zum Zeitpunkt der Auswertung der eingebetteten Vorlage werden zunächst die Instanzen der verbundenen Vorlage ausgewertet und in die eingebettete Vorlage eingesetzt; erst danach wird die eingebettete Vorlage ausgewertet und eingesetzt. Auf diese Weise kann man Vorlagen, die Definitionen von Instanzen enthalten, abhängig vom jeweiligen Kontext mit verschiedenen Vorlagen verbinden.

Namen von eingebetteten Vorlagen können die Jokerzeichen ‚*‘ (beliebige Zeichenkette) und ‚?‘ (beliebiges Zeichen) enthalten. In diesem Fall werden nacheinander alle Vorlagen eingebettet, die dem Muster entsprechen. Durch

`#(&(content_dir);/faq/questions*.dtm, &(template_dir);/faq.dtm)#`

werden alle Vorlagen im Ordner &(content_dir);/faq, deren Name dem Muster question*.dtm entspricht, mit der Vorlage &(template_dir);/faq.dtm verbunden, ausgewertet und anschließend eingesetzt.