Tag-Datenbanken | ab Version 3 |
Wie definiert man nun eigene Tags? Unter anderem mit einer Datenbank. Diese ist eine ganz normale baseportal-Datenbank und enthält die Namen und das Verhalten neuer Tags. Es können mehrere verschiedene Datenbanken mit gleichnamigen Tags angelegt werden - und somit für verschiedene Zwecke unterschiedliche Ausgaben erzeugen.
Um eine Tag-Datenbank in Ihrem Bereich anzulegen, erstellen Sie einfach eine neue Datenbank und klicken Sie dann auf "Tag-Datenbank (XML)" bei den Vorlagen.
Hier ein Beispiel einer Tag-Datenbank:
Name | Code |
---|---|
code | s/</</g; s/>/>/g; $title="Code" if $title eq ""; "<b>$title</b><div style=\"background:#f0f0f0;padding:8px\"><pre>$_</pre></div>" |
c | s/</</g; s/>/>/g; "<span color=green>$_</span>" |
tab | $sepcols||="|"; $seprows||="\n"; chomp; s#$seprows?(.*?)$seprows#$x=$1; $x=~ s!$sepcols!</th><th bgcolor=e0e0e0>!g; "<tr><th bgcolor=e0e0e0>$x</th></tr><tr><td>"#e; s#$sepcols#</td><td>#g; s#$seprows#</td></tr><tr><td>#gs; s#<tr><td>#<tr><td bgcolor=f0f0f0>#g; s#<td></td>#<td> </td>#g; "<ul><table border=1 cellspacing=0 cellpadding=4>$_</table></ul>"; |
_datum | datum |
Hier werden die Tags code, c, tab und datum definiert, die für eine Dokumentation nützlich sein könnten.
Die Bedeutung der einzelnen Felder:
Feld | Beschreibung |
---|---|
Name | Der Name des Tags, u.U. mit vorangestellten Spezialzeichen |
Code | Code der beim Auftreten eines Tags ausgeführt wird |
Normalerweise wird der Code erst beim schliessenden Tag ausgeführt, wie z.B. beim <loop>..</loop>. Möchte man alleinstehende Tags wie z.B. <do action=all> definieren, so muss man einen Unterstrich _ vor den Namen schreiben. Im obigen Beispiel kann man nun einfach
Es ist: <datum>
schreiben; ohne abschliessendes </datum Tag. Möglich ist auch zwei Einträge zu definieren, die dann beim Anfangs- und beim Ende-Tag ausgeführt werden.
"Reguläre Ausdrücke" (auf Englisch Regular Expressions, kurz Regex) dienen der Textanalyse und -bearbeitung und sind sehr mächtig, wenn auch auf den ersten Blick vielleicht etwas kompliziert. Mit einem regulären Ausdruck als Namen kann nach beliebigen Texten gesucht werden. Der gesamte gefundene Text steht in $_ zur Verfügung. Werden innerhalb des regulären Ausdrucks Klammern benutzt, so stehen die Werte wie in Perl üblich in $1, $2 etc. bereit.
Ein einfaches Beispiel - man möchte ein bestimmtes Wort (z.B. "Achtung") im Text hervorheben:
Name | Code |
---|---|
(Achtung) | '<span style="color:red">Achtung</span>' |
Wo immer "Achtung" auf der Seite auftaucht, würde es jetzt Rot markiert werden. Um mehrere Wörter zu bestimmen, schreibt man z.B.:
Name | Code |
---|---|
(get|put|mod|del) | '<span style="color:blue">'.$_.'</span>' |
Hier würden die baseportal-Befehle "get", "put", "mod" und "del" in einem Template automatisch blau markiert werden. Das macht z.B. in einer baseportal-Dokumentation Sinn. Die | trennen verschiedene Textalternativen.
Um genau zu sein würden auch Teile mitten in Wörtern entdeckt werden, z.B. "forGET". Um nun wirklich nur Wörter zu erkennen, müsste man schreiben:
Name | Code |
---|---|
\b(get|put|mod|del)\b | '<span style="color:blue">'.$1.'</span>' |
\b hat eine besondere Bedeutung: Es passt auf "Wortgrenzen".
Eine sinnvolle Erweiterungen dieses Beispiels ist übrigens die automatische Verlinkung zu einer Glossar-Datenbank, in der die Begriffe im Detail erklärt werden. Der Code müsste dann so aussehen:
Name | Code |
---|---|
\b(get|put|mod|del)\b | "<a href=\"baseportal.pl?htx=$htx&Name==$_\">$_</a>" |
Mit Hilfe der regulären Ausdrücke können auch die im XML-Standard definierten sog. Entities erzeugt werden. Sie kennen diese wahrscheinlich schon aus HTML, das sind die "Sonderzeichen", die von & und ; umschlossen sind, also z.B. < oder © oder die Umlaute ä, ü etc. Hier 2 Beispiele:
Name | Code |
---|---|
&myname; | "Max Meier" |
&jetzt; | datum "jetzt", "Stunde:Minute" |
Der Text...
Mein Name ist &myname; und es ist jetzt genau &jetzt; Uhr.
...führt damit zu folgender Ausgabe
Mein Name ist Max Meier und es ist jetzt genau 03:59 Uhr.
Beim Namen gibt es den speziellen Wert _:
Wert | Beschreibung |
---|---|
_ | Wird bei jedem Ende-Tag ausgeführt |
__ | Wird bei jedem Anfangs-Tag ausgeführt |
So lässt sich z.B. ein Strukturbaum der XML-Seite erstellen:
Name | Beginn | Ende |
---|---|---|
_ | $struktur.=" " x (@_parents*2).$_tag |
Wird ein Tag-Code ausgeführt stehen verschiedene Variablen zur Verfügung:
Name | Beschreibung |
---|---|
$_ | Enthält im "Ende"-Code den Inhalt des eingeschlossenen Bereichs |
%_ | Die Parameter des Tags aufgeschlüsselt nach Name=Wert |
$_tag | Name des Tags (Nur bei Name=* sinnvoll) |
@_parents | Die umschliessenden Tags |
$_query | Die Parameter des Tags als kompletter Text |
$_begintag | Wenn gesetzt, befindet sich der Code beim Anfangstag |
$_empty | Wenn gesetzt, wurde das Tag als markiert (<tag />) |