Mit Hardware-Beschleunigung und schnellem Netz hilft Desktop-Virtualisierung, Administrationsaufwand und Kosten sparen, ADMIN 04/2013 verrät, wie die ... (mehr)

Regelwerk

Ein Blog-Beitrag besitzt immer auch mindestens eine Überschrift, eine Einleitung und optional einen Haupttext. Um solche Bedingungen auszudrücken, gibt es in XHP das Schlüsselwort »children« . Listing 10 zeigt ein Beispiel für seine Verwendung. Dort muss ein »admin:beitrag« mindestens eine »admin:ueberschrift« und eine »admin:einleitung« haben. Die Notation orientiert sich hier an regulären Ausdrücken.

Listing 10

Festlegen erlaubter Kindelemente

 

Tabelle 1 führt alle Operatoren auf, die XHP versteht. Bei der Verarbeitung prüft XHP diese Bedingungen und bricht ab, wenn sie nicht zutreffen. Gemäß Listing 10 würde

Tabelle 1

Operatoren für <C>children<C>

Symbol

Bedeutung

?

Kein oder ein Element

*

Kein oder mehrere Elemente

+

Eine oder mehrere Elemente

|

Oder (eine der links und rechts von »|« aufgeführten Bedingungen müssen zutreffen)

,

Die mit Komma aufgelisteten Elemente müssen in genau dieser Reihenfolge auftauchen

any

Beliebige Kindelemente sind erlaubt

empty

Keine Kindelemente sind erlaubt

<admin:beitrag> <admin:ueberschrift /> <admin:einleitung /> </admin:beitrag>

durchgehen, die vergessene Einleitung

<admin:beitrag> <admin:ueberschrift /> </admin:beitrag>

jedoch nicht. Die XHP-Entwickler weisen explizit darauf hin, dass der zugrunde liegende Algorithmus "greedy" vorgeht. Die Bedingung »children (:elem*, :elem);« führt daher zu einem Fehler: Das »*« erschlägt bereits alle »:elem« , ein weiteres »:elem« danach kann es folglich nicht mehr geben.

Muss man sehr viele Elemente aufzählen, kann man sich die Arbeit mit Elementkategorien vereinfachen. In Listing 11 gehören »admin:retweet« und »admin:tweet« der Kategorie »admin:twitterkategorie« an. »admin:twitter« wiederum darf beliebig viele Kindelemente besitzen, die aber aus der Kategorie »admin:twitterkategorie« stammen müssen.

Listing 11

Einsatz von Elementkategorien

 

Die Klassen »x:element« und »x:primitive« definiert die Datei »code.php« . Die in ihnen abgelegten Kommentare bieten auch die einzig existierende Referenzdokumentation. In der Datei »html.php« finden sich hingegen Klassen für alle HTML-Elemente, »:ul« kümmert sich etwa um die gleichnamige Liste. Die Datei »html.php« definiert übrigens auch die Klasse »x:doctype« , die wiederum die bereits erwähnte HTML5-Dokumenttypdefinition »<!DOCTYPE html>« repräsentiert. Klassen für andere Doctypes, wie etwa für XHTML, muss man derzeit noch selbst erstellen.

Die Dokumentation von XHP lässt noch zu wünschen übrig. Eine Einführung liefert die Datei README.textile aus dem Quellcode-Archiv, die man auch auf Github zu Gesicht bekommt [1]. Darüber hinaus gibt es noch ein karges Wiki [3] und die Blog-Beiträge des Facebook-Entwicklers Stefan Parker [4]. Er verrät dort unter anderem, wie man CSS-Code mit XHP recht elegant parametrisiert [5].

Fazit

XHP vereinfacht nicht nur die Programmierung, sondern auch gleichzeitig das Filtern von Eingaben. So achtet XHP auf eine korrekte Verschachtelung, unbekannte Elemente besitzen keine Ausgaben und Ausdrücke in geschweiften Klammern »{ ... }« laufen direkt durch »htmlspecialchars()« . Darüber hinaus ist XHP recht penibel und prangert beispielsweise vergessene oder falsche End-Tags an. Schließlich lassen sich über eigene Elemente und Tags schnell Bausteine für ein Template-System erstellen.

Andererseits kostet die Umwandlung der Tags in Objekte Rechenzeit, je nach Code und Auslastung sogar massiv. Laut eines Kommentars im Quellcode von XHP rechnen die Entwickler sogar damit, dass das Cache-System APC als Beschleuniger zum Einsatz kommt [6], [7]. Administratoren müssen zudem die Erweiterung selbst kompilieren, anbieten und warten – was nicht alle Webhoster erlauben. Schlussendlich hängt die verbesserte Lesbarkeit stark vom (HTML-)Code ab. So sind die Unterschiede zwischen Listing 1 und Listing 2 nicht sehr groß.

Der Autor

Tim Schürmann ist selbstständiger Diplom-Informatiker und derzeit hauptsächlich als freier Autor unterwegs. Zu seinen Büchern gesellen sich zahlreiche Artikel, die in Zeitschriften und auf Internetseiten in mehreren Ländern veröffentlicht wurden.

comments powered by Disqus
Mehr zum Thema

Mit PAM-Mount beim Anmelden verschlüsselte Partitionen einhängen

Verschlüsseln sichert Daten auf mobilen Datenträgern. Mit PAM-Mount binden Sie solche Laufwerke komfortabel ein, denn das Programm entsperrt beim Anmelden am System gleichzeitig den externen Datenspeicher.

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019