Einen Webclient zur Eingabe von Testdaten erzeugen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie möchten einen Prozess für sich allein genommen testen, indem Sie bestimmte Angaben in ein Formular eintragen, die dann in eine Nachricht umgewandelt und an einen Prozess gesendet werden.

Lösung

Dieses Beispiel generiert die Clientseite eines Werkzeugs zur Eingabe von Testdaten. Es hat die Gestalt eines HTML-Formulars, mit dem die Felder einer Nachricht eingegeben werden können. Dabei werden die Formulardaten von einem CGI-Programm verarbeitet, das im Rezept Web-CGI für Testeingaben generieren generiert wird:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" />
  <xsl:param name="message"/>
  <!-- Ein Schlüssel, um Datentypen über den Namen zu finden. -->
  <xsl:key name="dataTypes" match="Structure" use="Name" />
  <xsl:key name="dataTypes" match="Primitive" use="Name" />
  <xsl:key name="dataTypes" match="Array" use="Name" />
  <xsl:key name="dataTypes" match="Enumeration" use="Name" />
  <xsl:template match="/">
    <html>
      <head>
        <title><xsl:value-of select="$message"/> Entry</title>
      </head>
      <body bgcolor="#FFFFFF" text="#000000">
        <h1><xsl:value-of select="$message"/> Entry</h1>
        <form name="{concat($message,'Form')}" method="post" action="{concat('/cgi-bin/',$message,'Process.pl')}">
          <xsl:apply-templates select="*/Messages/Message[Name=$message]"/>
          <br/><center><input type="submit" name="Submit" value="Submit"/></center>
        </form>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="Message">
    <xsl:apply-templates select="key('dataTypes',DataTypeName)">
      <xsl:with-param name="field" select="Name"/>
    </xsl:apply-templates>
  </xsl:template>
  <xsl:template match="Structure">
    <xsl:param name="field"/>
    <table width="100%" border="0" cellspacing="1" cellpadding="1">
      <tbody>
        <xsl:for-each select="Members/Member">
          <tr>
            <td valign="top">
              <xsl:value-of select="Name"/>
            </td>
            <td>
              <xsl:apply-templates select="key('dataTypes',DataTypeName)">
                <xsl:with-param name="field" select="concat($field,'_',Name)"/>
              </xsl:apply-templates>
            </td>
          </tr>
        </xsl:for-each>
      </tbody>
    </table>
  </xsl:template>
  <xsl:template match="*">
    <xsl:param name="field"/>
    <input type="text" name="{$field}" size="30"/>
  </xsl:template>
</xsl:stylesheet>

Diskussion

Die Generierung der HTML-Benutzerschnittstelle ist eine der einfachsten Methoden, um ein Frontend für Testdaten automatisch zu generieren, aber sie ist nicht die einzige. Vielleicht möchten Sie auch ein textbasiertes Frontend erstellen, das eine Eingabe von stdin abfragt und einliest. Und wenn Sie noch höcher hinaus wollen, könnten Sie auch ein GUI-Frontend generieren. Wenn Sie kein HTML verwenden, haben Sie den Vorteil, dass Sie die Funktionalität aus diesem Beispiel mit der aus dem nächsten Rezept in einer einzigen Anwendung kombinieren können. Aber seien Sie nicht überrascht, wenn ein solcher Generator komplexer ist als die in diesen Beispielen produzierten Generatoren. Der Ansatz über HTML-CGI baut auf einer umfangreichen Infrastruktur auf, die im Browser und Webserver vorhandenen ist.

Eine wichtige Erweiterung zu diesem Rezept würde einen Validierungscode in JavaScript oder VBScript generieren. Auch hier gilt, dass die Qualität dieses Validierungscodes davon abhängt, welche Art von Metadaten sich im Repository befindet. Eventuell möchten Sie das Repository so erweitern, dass es Minimal- und Maximalwerte und/oder reguläre Ausdrücke speichert, die bei der Datenvalidierung verwendet werden.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de