Home Previous Zeitschrift 2001/02 Next Previous Up Next Previous Up Previous Up Archiv Index
 
  Inhalt:
 
 
 
 
Weitere Information 
 
Überblick 
 
Autor
 

 

XML mit FileMaker Teil 4:

XSLT -  Eine "komplette" XML/XSLT Lösung

 
Natürlich werden im Rahmen dieses Kurses keine vollständigen Lösungen angeboten. Dennoch werden wir schon recht weit kommen. Mit der XSL-Datei aus dem letzten Kurs kann man alle FileMaker Datenbanken einsehen, denn die Stärke von XML ist, dass es dieStruktur der Datenbank zusammen mit den Daten liefert. Die XSL Befehle analysieren die Struktur und stellen die Daten entsprechend dar. Es ist keine vorherige Kenntnis der Struktur notwendig.
 
Nun wollen wir noch ein wenig Funktionalität hinzufügen, aber weiterhin die Möglichkeit behalten, das für jede Datenbank zu verwenden. Zuerst ein paar Vorbereitungen:
 
Falls Sie es noch nicht gemacht, geben Sie dem Layout in der FileMaker Datenbank einen anderen Namen. Wechseln Sie in den Layout Modus und wählen Sie "Layouteinstellungen" aus dem Menü "Layouts." Dort geben Sie einen kurzen Namen ein, z.B."web." Dann geben Sie folgenden Aufruf in den Browser ein:
 
http://localhost/FMPro?-db=kino.fp5&-lay=web&-format=-fmp_xml
&-styletype=text/xsl&-stylehref=table_view.xsl&-findall
 
Beachten Sie, dass im Vergleich zum letzten Kurs, hier noch ein Parameter "-lay=web" hinzugefügt wurde. Nun beziehen sich alle XML-Kommandos auf dieses Layout im FileMaker. Entfernen Sie im FileMaker ein Feld aus dem Layout. Beim nächsten Aufruf dieser Seite fehlt das Feld auch in der XML Datei, die von FileMaker generiert wird und dann natürlich auch im Browser.
 
Um Datensätze hinzufügen zu können, brauchen wir ein HTML Formular, welches ungefähr so aussehen könnte:
 
<FORM method="get"action="FMPro">
     <Palign="center">Kino: <input type="text"name="Kino"/></P>
     <Palign="center">Uhrzeit: <input
type="text"name="Uhrzeit"/></P>
     <Palign="center">Film: <input type="text"name="Film"/></P>
     <inputtype="hidden" name="-db" value="kino.fp5"/>
     <inputtype="hidden" name="-lay" value="web"/>
     <inputtype="hidden" name="-format"value="-fmp_xml"/>
     <inputtype="hidden" name="-styletype"value="text/xsl"/>
     <inputtype="hidden"
name="-stylehref"value="table_view.xsl"/>
     <inputtype="submit" name="-new"value="Neu"/></P>
     <Palign="center"><input type="submit"name="-new"
value="Neu"/></P>
</FORM>
 
Die ersten drei Zeilen innerhalb des "FORM"Tags bilden die Eingabefelder. Die "hidden" Felder werden vom Browser nicht dargestellt, aber an den FileMaker WebServer übermittelt. Die letzte Zeile stellt den Submit-Button dar. Man könnte nun einfach dieses HTML an eine geeignete Stelle in die Tabellen-XSL Datei einbauen, aber dieses HTML gilt ja dann nur für unsere einfache Kino Datenbank. Um diese Lösung allgemein zu halten, müssen wir dieses HTML aus der XML Information erstellen.
 
Zuerst wollen wir über unserer Tabelle nur einen Button haben, der eine neue Seite aufruft, in der man neue Daten eingeben kann. Ersetzen Sie in der Datei "table_view.xsl" den Teil zwischen"<xsl:template match="fm:DATABASE">" und dem nächsten "</xsl:template>", also den Teil, der die<DATABASE> Informationen der XML Datei bearbeitet.
 
<xsl:template match="fm:DATABASE">
     <FORMmethod="get" action="FMPro">
     <TABLEALIGN="center" BORDER="1">
          <TR>
               <TH>Database</TH>
               <TD><xsl:value-ofselect="@NAME"/></TD>
          </TR>
          <TR>
               <TH>Layout</TH>
               <TD><xsl:value-ofselect="@LAYOUT"/></TD>
          </TR>
          <TR>
               <TH>TotalRecords</TH>
               <TD><xsl:value-ofselect="@RECORDS"/></TD>
          </TR>
     </TABLE>
     <Palign="center">
          <xsl:elementname="INPUT">
               <xsl:attributename="type">hidden</xsl:attribute>
               <xsl:attributename="name">-db</xsl:attribute>
              
<xsl:attributename="value"><xsl:value-ofselect="@NAME"/></xsl:attribute>
          </xsl:element>
          <xsl:elementname="INPUT">
               <xsl:attributename="type">hidden</xsl:attribute>
               <xsl:attributename="name">-lay</xsl:attribute>
              
<xsl:attributename="value"><xsl:value-ofselect="@LAYOUT"/>
</xsl:attribute>
          </xsl:element>
     <inputtype="hidden" name="-format"value="-fmp_xml"/>
     <inputtype="hidden" name="-styletype"value="text/xsl"/>
     <inputtype="hidden" name="-stylehref"value="new.xsl"/>
     <inputtype="submit" name="-view"value="Neu"/></P>
     </FORM>
</xsl:template>
 
Wir wollen hier zu einer anderen Ansicht, also einem anderen Format wechseln. Dabei soll er natürlich bei der aktuellen Datenbank und dem aktuellen Layout bleiben. Um das HTML Element (=Tag) mit den richtigen Parametern zu erstellen dient die Syntax:
 
<xsl:element name="INPUT">
     <xsl:attributename="type">hidden</xsl:attribute>
     <xsl:attributename="name">-db</xsl:attribute>
     <xsl:attributename="value"><xsl:value-of
select="@NAME"/></xsl:attribute>
</xsl:element>
 
Die zuerst das "input" Tag generiert und dann die Attribute hinzufügt. In das letzte Attribut wird Inhalt aus der XMLDatei (hier der Datenbank-Name) eingefügt. Die folgenden Parameter sind für jeden Fall gleich, und werden also als statischer HTML-Text angegeben.
 
Nun müssen wir noch die Datei "new.xsl"schreiben, die ein Formular mit leeren Feldern darstellen soll. Wir werden die Daten aus einer Letzten FileMaker XML-Grammatik holen, den FMPXMLLAYOUT. Dieses Format dient nicht dazu Daten aus der Datenbank zu erhalten, sondern nur dieInformationen zu einem Layout. Das Ergebnis dieses XML Aufrufs sieht für unsere Kino Datenbank wie folgt aus:
 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="new.xsl"?>
<FMPXMLLAYOUTxmlns="http://www.filemaker.com/fmpxmllayout">
     <ERRORCODE>0</ERRORCODE>
     <PRODUCTBUILD="8/3/2000" NAME="FileMaker Pro Web
Companion"VERSION="5.0v6"/>
     <LAYOUTDATABASE="kino.fp5" NAME="web">
          <FIELDNAME="Kino"><STYLE
TYPE="EDITTEXT"VALUELIST=""/></FIELD>
          <FIELDNAME="Film"><STYLE
TYPE="EDITTEXT"VALUELIST=""/></FIELD>
          <FIELDNAME="Uhrzeit"><STYLE
TYPE="EDITTEXT"VALUELIST=""/></FIELD>
     </LAYOUT>
     <VALUELISTS></VALUELISTS>
</FMPXMLLAYOUT>
 
Hier werden uns alle Felder dieses Layouts mit Formatierungsoptionen und eventuell dazugehörigen Wertelisten übermittelt. Daraus bauen wir nun unser HTML Formular. Die folgendeXSL-Datei nennen Sie "new.xsl" und speichern Sie zusammen mit der"table_view.xsl"
 
<?xml version="1.0"?>
<xsl:stylesheetxmlns:xsl="http://www.w3.org/TR/WD-xsl"xmlns:fm
="http://www.filemaker.com/fmpxmllayout">
 
     <xsl:template><xsl:apply-templates/></xsl:template>
     
     <xsl:templatematch="text()"><xsl:value-of/></xsl:template>
     
     <xsl:templatematch="/">
          <HTML>
               <BODY>
                     <FORMmethod="get" action="FMPro">
                          <xsl:apply-templates/>
                          <Palign="center">
                          <inputtype="hidden"
name="-format"value="-fmp_xml"/>
                          <inputtype="hidden"
name="-styletype"value="text/xsl"/>
                          <inputtype="hidden"
name="-stylehref"value="table_view.xsl"/>
                          <inputtype="submit"
name="-new"value="Neu"/></P>
                     </FORM>
               </BODY>
          </HTML>
     </xsl:template>
     
     <xsl:templatematch="fm:ERRORCODE"></xsl:template>
     
     <xsl:templatematch="fm:LAYOUT">
          <TABLEALIGN="center" BORDER="1">
               <TR>
                     <TH>Database</TH>
                     <TD>
                          <xsl:value-ofselect="@DATABASE"/>
                          <xsl:elementname="INPUT">
                              
<xsl:attributename="type">hidden</xsl:attribute>
                              
<xsl:attributename="name">-db</xsl:attribute>
                              
<xsl:attributename="value"><xsl:value-ofselect="@DATABASE"/>
</xsl:attribute>
                          </xsl:element>
                     </TD>
               </TR>
               <TR>
                     <TH>Layout</TH>
                     <TD>
                          <xsl:value-ofselect="@NAME"/>
                          <xsl:elementname="INPUT">
                              
<xsl:attributename="type">hidden</xsl:attribute>
                              
<xsl:attributename="name">-lay</xsl:attribute>
                              
<xsl:attributename="value"><xsl:value-ofselect="@NAME"/></xsl:attribute>
                          </xsl:element>
                     </TD>
               </TR>
          </TABLE>
          <TABLEALIGN="center" BORDER="1">
              
<xsl:for-eachselect="/fm:FMPXMLLAYOUT/fm:LAYOUT/fm:FIELD">
                     <TR>
                          <TD>
                               <xsl:value-ofselect="@NAME"/>
                          </TD>
                          <TD>
                               <xsl:elementname="INPUT">
                                   
<xsl:attributename="type">text</xsl:attribute>
                                   
<xsl:attributename="name"><xsl:value-ofselect="@NAME"/></xsl:attribute>
                               </xsl:element>
                          </TD>
                     </TR>
               </xsl:for-each>
          </TABLE>
     </xsl:template>
 
</xsl:stylesheet>
 
Jetzt können Sie das Ganze ausprobieren. Rufen Sie im Browser wieder die Tabelle auf:
 
http://localhost/FMPro?-db=kino.fp5&-lay=web&-format=
-fmp_xml&-styletype=text/xsl&-stylehref=table_view.xsl&-findall
 
Dort sollte nun ein Button mit der Aufschrift "Neu" erscheinen, wenn Sie diesen klicken, erhalten Sie ein Formular. Geben Sie ein paar Werte ein und prüfen Sie, ob FileMaker den Datensatz erstellt hat. Entfernen Sie im FileMaker ein Feld aus dem Layout und versuchen Sie es nochmal. Geben Sie eine andere Datenbank an.
 
Natürlich benötigt diese Lösung noch viel Feinarbeit bevor Sie wirklich als "komplett" bezeichnet werden kann.Der Vorteil  von XML mit XSLT wird hier aber klar:
 
Wenn man einige Regeln beachtet, kann diese Lösung ohne Aufwand auf eine andere FileMaker Datenbank übertragen werden.
 
Weitere Information erhalten Sie:
 
FileMaker: http://www.filemaker.com/
XML/XSL:  http://www.w3.org/
 
Viel Spass!
 
 
Überblick:

Teil 1: Was ist XML?
Teil 2: CSS - Style Sheets für XML
Teil 3: XSLT - Style Sheets für Fortgeschrittene
Teil 4: Eine komplette XML Lösung
 
 
 

Armin Briegel
seit 1997 Claris und später
FileMaker Promoter und Entwickler

E-Mail: armin@briegel.de



Anmerkung:  Resultat des Kurses als Download erhältlich.
 

 

Zum Seitenanfang
 

© ADOLPH Verlag GmbH - Letztes Update 03.05.2004