XML

Hier darf über alles diskutiert werden, so lange die Netiquette gewahrt wird.
Antworten
Benutzeravatar
shadowcat
Administrator
Beiträge: 3978
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

XML

Beitrag von shadowcat » Mo 14. Mai 2018, 12:45

Ich habe mich neulich mal mehr so aus Interesse mit XML befaßt, genauer gesagt, ich wollte mal schauen, inwieweit man mit Hilfe von XML und XSL Seiteninhalte generieren könnte. Ein möglicher "Benefit" wäre, daß Module dadurch möglicherweise dynamischer und anpaßbarer werden.

Allerdings bin ich zu dem Schluß gekommen, daß die Hürde für das Erlernen von XSL ziemlich hoch wäre. Man kann sich XSL wie eigene eigene Programmiersprache vorstellen, mit Schleifen und Bedingungen, das alles in mehrere Dateien verpackt, denn: Neben dem Markup - quasi dem Template - braucht man ja z.B. auch noch Sprachdateien...

Beispiel für einen einfachen Seitenheader:

pagetitle.xslt

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="../input/input.xslt" />
  <xsl:output 
    method="xml"
	indent="yes"
	omit-xml-declaration="yes"
	doctype-public = "-//W3C//DTD XHTML 1.0 Strict//EN"
	doctype-system = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
  />
  <xsl:template match="/element/view">
    <title><xsl:value-of select="$title"/></title>
  </xsl:template>
  <xsl:template match="/element/edit">
	<xsl:call-template name="input">
    </xsl:call-template>
  </xsl:template>
</xsl:stylesheet>
Eingebunden wird hier noch eine input.xslt, die das Eingabefeld im Backend generiert. Da ein einzeiliges Eingabefeld an vielen Stellen vorkommen kann, wäre es unsinnig, es in jedem Fall "hartcodiert" reinzuschreiben.

input.xslt (unvollständig)

Code: Alles auswählen

<xsl:template name="input">

  <xsl:param name="id"/>
  <xsl:param name="class"/>
  <xsl:param name="value"/>

  <label>
	  <xsl:attribute name="for">
	    <xsl:choose>
          <xsl:when test="string-length($id)">$id</xsl:when>
          <xsl:otherwise>pageTitle</xsl:otherwise>
        </xsl:choose>
	  </xsl:attribute>
	  <!-- set the row class to 'odd' or 'even' to determine the colour -->
      <xsl:attribute name="class">
        <xsl:choose>
          <xsl:when test="position()mod 2">odd</xsl:when>
          <xsl:otherwise>even</xsl:otherwise>
        </xsl:choose>
      </xsl:attribute>
	  <xsl:value-of select="$lang.pageTitle.label"/>:</label>
    <input>
	  <xsl:attribute name="id">
	    <xsl:choose>
          <xsl:when test="string-length($id)">$id</xsl:when>
          <xsl:otherwise>pageTitle</xsl:otherwise>
        </xsl:choose>
	  </xsl:attribute>
	  <xsl:attribute name="class">
	    <xsl:choose>
          <xsl:when test="string-length($class)">$class</xsl:when>
          <xsl:otherwise>pageTitle</xsl:otherwise>
        </xsl:choose>
	  </xsl:attribute>
	  <xsl:attribute name="value">
	    <xsl:choose>
          <xsl:when test="string-length($value)">$value</xsl:when>
          <xsl:otherwise></xsl:otherwise>
        </xsl:choose>
	  </xsl:attribute>
	</input>
</xsl:template>
Sowas in der Art braucht man für jede Art von Eingabefeld, also z.B. Textarea, Select etc.

Sprachdatei (Beispiel):

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="pageTitle.xslt"/>
  <xsl:variable name="lang.pageTitle.label" select="'Seitentitel'"/>
</xsl:stylesheet>
Aus diesen ganzen Informationen kann man nun wahlweise ein simples <title> Tag oder das entsprechende Eingabefeld in HTML generieren...

Denkbarer Benefit

Würde jede Art von Inhalt - also auch ein Kalender, ein Bild, WYSIWYG etc. - auf diese Art beschrieben, wäre es möglich, sich spezialisierte Module oder Blocktypen aus diesen Inhaltstypen beliebig zusammenzustellen. Beispiel Ferienwohnung: Beschreibung in WYSIWYG, Buchungskalender in Kalender, dazu ein paar Bilder. Beispiel Blog-Artikel: Überschrift, WYSIWYG (Teasertext), WYSIWYG (Volltext).

Das ist allerdings ein komplett anderer Ansatz als bisher...
My software never has bugs, it just develops random features.
BC1: PHP 5.5.11 (cli), mySQL 5.6.16 with 'strict' enabled, Apache 2.4.9
BC2: PHP 7.2.7, mariaDB 10.2.13, no Apache

Antworten