Beispiel für eine kleine Library mit zwei Templates, gespeichert in der Ausgabeseite lib.html:
<sd:library xmlns:sd="http://www.server-daten.de/"
xmlns="http://www.w3.org/1999/xhtml">
<sd:template sd:name="myName">
Max Mustermann
</sd:template>
<sd:template sd:name="searchLabel">
<sd:choose-lang>
<sd:span sd:lang="de">Suchen</sd:span>
<sd:span sd:lang="fr">chercher</sd:span>
<sd:span>Search</sd:span>
</sd:choose-lang>
</sd:template>
</sd:library>
Diese kann in einer Ausgabeseite mit dem folgenden Code verwendet werden:
<sd:call-template sd:name="call-myName"
sd:library-name="lib.html" sd:template-name="myName" />
Die sprachabhängige Beschriftung für den Suchbutton, die über viele Ausgabeseiten hinweg einheitlich sein soll, erfolgt so:
<sd:button sd:name="myButton">
<sd:label-standard>
<sd:call-template sd:name="call-searchLabel"
sd:library-name="lib.html" sd:template-name="searchLabel" />
</sd:label-standard>
</sd:button>
Damit kann an verschiedenen Stellen unterschiedlicher Ausgabeseiten immer der Inhalt des Templates ausgegeben werden, so
daß sich dieser Inhalt zentral verwalten läßt.
Beim sd:libary-Element gibt es eine Inkonsistenz der Dokumentation, die nicht vermeidbar ist: Es genügt,
das Element als Wurzelelement so zu belassen, wie es beim Erstellen einer neuen Library-Ausgabeseite vorgegeben wird.
Es muß kein sd:name-Element mit dem Dateinamen eingefügt werden, dies erledigt der Code im Hintergrund. Da aber
die XmlSchema-Datei das sd:name-Attribut überprüft und die Erzeugung der Schema-Datei mit der Erzeugung der Dokumentation
synchronisiert sind, taucht das sd:name-Attribut auf dieser Dokumentationsseite als Pflichtattribut auf, obwohl es
nicht manuell eingefügt oder beim Ändern des Dateinamens manuell geändert werden muß.
Unterschiedliche Validierung von gewöhnlichen Ausgabeseiten und Libraries
Die Validierung von Ausgabeseiten und Libraries unterscheidet sich an einer Stelle: Bei Ausgabeseiten wird für Attributwerte,
die auf andere sd-Elemente verweisen und nur einen gewissen Typ korrekt verarbeiten, geprüft, ob es ein Element mit
diesem Namen gibt. Ansonsten wird die Ausgabeseite als invalide zurückgewiesen. Bei Libraries entfällt diese Prüfung
absichtlich.
Beispiel
Eine Ausgabeseite mit dem folgenden Code ist ungültig:
<body>
<sd:param sd:name='parameter-name-1' sd:std-value='Max Mustermann'/>
<sd:value sd:param-name='parameter-name-2'/>
</body>
Denn das Attribut
sd:param-name
erwartet einen Namen, der Wert des
sd:name
-Attributes eines
sd:param
-Elements ist. Wird der Ausdruck 'paramter-name-2'
durch 'parameter-name-1' ersetzt, so ist die Ausgabeseite valide und zeigt den Parameterwert 'Max Mustermann' an.
Diese scharfe Validierung ist sinnvoll, um mögliche Fehlerquellen zu reduzieren.
Ein
sd:template
-Element kann dagegen wie folgt aufgebaut sein:
<sd:template sd:name="myName">
<div style="background-color:yellow;">
Name: <sd:value sd:param-name="myParam" />
</div>
</sd:template>
Hier wird das
sd:value
-Element mit einem
sd:param-name
-Wert verwendet, der in
der Library unbekannt ist. Enthält die Ausgabeseite, welche dieses
sd:template
-Element aufruft, ein
sd:param
-Element mit dem Namen 'myParam', so wird dieser Wert beim Ausführen ausgegeben.
An diesem Beispiel wird deutlich: Ein
sd:template
-Element holt sich gewisse aktuelle Werte aus der aufrufenden
Umgebung, ohne daß diese Werte explizit übergeben werden müßten. Damit kann dasselbe
sd:template
-Element
verschiedene Ausgaben erzeugen, falls es von verschiedenen Ausgabeseiten her aufgerufen wird. Aufgrund dieser Flexibilität
kann allerdings nicht mehr so genau validiert werden, wie dies für gewöhnliche Ausgabeseiten möglich ist.
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!