Home Previous Zeitschrift 2001/01 Next Up Next Up Next Previous Up Next Up Next Archiv Index
 
  Inhalt:
 
 
 
Erläuterung der XSLT-Datei

Überblick

Autor

  

XML mit FileMaker Teil 3:

XSLT - Style Sheets für XML
 

Bisher haben wir mit dem "dso_xml" Format gearbeitet, bei der FileMaker die Feldnamen in die Tagnamen überträgt. Sonst wird keine Information über die Felder übermittelt. FileMaker kennt noch zwei weitere XML Formate, eines davon erhält man mit dem Aufruf
http://localhost/FMPro?-db=kino.fp5&-format=-fmp_xml&-findall

<?xml version="1.0" encoding="UTF-8" ?> 

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">

<ERRORCODE>0</ERRORCODE> 

<PRODUCT BUILD="8/3/2000" NAME="FileMaker Pro Web Companion" VERSION="5.0v6" /> 

<DATABASE DATEFORMAT="d.M.yyyy" LAYOUT="" NAME="kino.fp5" RECORDS="6" TIMEFORMAT="k:mm:ss" /> 

<METADATA>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Kino" TYPE="TEXT" /> 

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Uhrzeit" TYPE="TIME" /> 

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Film" TYPE="TEXT" /> 

</METADATA>

<RESULTSET FOUND="6">

<ROW MODID="1" RECORDID="1">

<COL>

<DATA>Palast</DATA> 

</COL>

<COL>

<DATA>20:15</DATA> 

</COL>

<COL>

<DATA>Rocky 9</DATA> 

</COL>

</ROW>

<ROW MODID="0" RECORDID="2">

<COL>

<DATA>Palast</DATA> 

</COL>

<COL>

<DATA>23:00</DATA> 

</COL>

<COL>

<DATA>Rocky 9</DATA> 

</COL>

</ROW>

usw... 

Nach dem Kopf der XML Datei (<FMPXMLRESULT ...>) folgen Statusmeldungen von FileMaker. Dort wird ein möglicher Fehlercode, die Version des Programms und der Name und andere Informationen der Datenbank übertragen. Im Teil namens "METADATA" werden die Felddefinitionen übertragen. Nicht nur Feldname und Feldtyp, sondern auch andere Statusinformationen. Im letzen Teil "RESULTSET" werden dann die eigentlichen Daten übertragen und zwar je Datensatz eine Zeile (ROW) und je Feld eine Spalte (COL). 

Dadurch, daß die Felddefinitionen von den Daten getrennt werden, hat man eine größere Flexibilität bei der Darstellung. Versuchen Sie folgende XSLT Datei mit dem "fmp_xml" Aufruf. 

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" 
xmlns:fm="http://www.filemaker.com/fmpxmlresult">

<xsl:template><xsl:apply-templates/></xsl:template>

<xsl:template match="text()"><xsl:value-of/></xsl:template>

<xsl:template match="/">

<HTML>

<BODY>

<xsl:apply-templates/>

</BODY>

</HTML>

</xsl:template>

<xsl:template match="fm:DATABASE">

<TABLE ALIGN="center" BORDER="1">

<TR>

<TH>Database</TH>

<TD><xsl:value-of select="@NAME"/></TD>

</TR>

<TR>

<TH>Layout</TH>

<TD><xsl:value-of select="@LAYOUT"/></TD>

</TR>

<TR>

<TH>Total Records</TH>

<TD><xsl:value-of select="@RECORDS"/></TD>

</TR>

</TABLE>

</xsl:template>

<xsl:template match="fm:RESULTSET">

<TABLE ALIGN="center" BORDER="1">

<TR >

<xsl:for-each select="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD">

<TH>

<xsl:value-of select="@NAME"/>

</TH>

</xsl:for-each>

</TR>

<xsl:apply-templates/>

</TABLE>

</xsl:template>

<xsl:template match="fm:RESULTSET/fm:ROW">

<TR>

<xsl:apply-templates/>

</TR>

</xsl:template>

<xsl:template match="fm:COL">

<TD>

<xsl:apply-templates/>

</TD>

</xsl:template>

<xsl:template match="fm:DATA">

<xsl:value-of select="."/>

</xsl:template>

</xsl:stylesheet>

Um die Daten mit dieser XSLT-Datei darzustellen, speichern Sie sie mit dem Namen "table_view.xsl" im Web Folder des FileMakers und geben in Ihren Browser folgenden Aufruf ein: 

http://localhost/FMPro?-db=kino.fp5&-format=-fmp_xml&-styletype=
text/xsl&-stylehref=table_view.xsl&-findall

Hier eine Erläuterung der XSLT-Datei: 

Die ersten beiden Zeilen bilden den Kopf und sagen dem Browser, was für eine Datei er gerade bekommt und wo die Beschreibungen für XSL, bzw. FMPXMLRESULT zu finden sind. Die nächsten beiden Zeilen weisen den Browser an bestimmte Funktionen standardmäßig anzuwenden. Sie sind nur für die Kompatibilität mit älteren Browsern nötig. 

Der Tag "<xsl:template match=...>" bedeutet, daß folgender Text auf alle Elemente der XML-Datei angewendet werden, die dem Kriterium nach dem "=" Symbol entsprechen. Das "/" Symbol bedeutet dabei, wie bei UNIX-Dateinamen die oberste Ebene, die alle anderen beinhaltet. In diesem Fall werd der HTML Kopf erstellt und der Aufruf "<xsl:apply-templates/>" sorgt dafür, daß weitere Ebenen der XML abgearbeitet werden. 

Der nächste Teil beschreibt, wie die Information in dem "DATABASE" Tag dargestellt werden soll. Die Informationen für die Datenbank stehen nicht zwischen den "DATABASE" Tags sondern innerhalb. Solche Daten nennt man Attribute und sie werden von XSLT durch ein "@" Symbol vor dem Namen aufgerufen. Der "DATABASE" Tag der XML Datei, wird durch den HTML Text für eine Tabelle ersetzt. Der Tag "<xsl:value-of select="@NAME"/>" wird durch die entsprechenden Daten ersetzt. 

Der nächste Teil bearbeitet die Daten innerhalb des "RESULTSET" Tags. Der HTML Text für eine kleine Tabelle wird aufgebaut und dann für jede Felddefinition aus den "METADATA" Tags ("<xsl:for-each select="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD">") eine Spalte im TH (Table Header) Stil erstellt. Der "for-each" Tag wird so oft wiederholt, wie Daten vorhanden sind. Bevor die Tabelle abgeschlossen wird, wird wieder "<xsl:apply-templates/>" aufgerufen, so daß mit der Bearbeitung an dieser Stelle fortgefahren wird. 

Für die einzelnen Datensätze ("ROW") wird jeweils eine eigene Tabellenzeile erstellt, für jedes Feld eine Zelle ("COL"), die dann mit den Daten ("DATA") gefüllt wird. "." symbolisiert genau wie in UNIX das aktuelle Object, so daß "<xsl:value-of select="."/>" einfach den augenblicklichen Text ohne Manipulation einfügt. 

Das Ergebnis, ist eine einfache HTML Datei, mit einer Tabelle mit den Datenbank- Informationen und einer Tabelle mit den Daten an sich. 

Diese XSLT-Datei ist erheblich komplizierter als die aus dem vorherigen Kursteil, doch was haben wir eigentlich gewonnen? Dieses Stylesheet ist, ebenso wie das FMPXMLRESULT Format, von der verwendeten Datenbank unabhängig. Da die Felddefinitionen mitgeliefert werden und das Stylesheet nicht auf eine feste Feldzahl oder gar Feldnamen eingerichtet wird, können Sie dieses StyleSheet ohne Anpassung auf jede FileMaker Datenbank anwenden. Probieren Sie's aus! öffnen Sie eine Ihrer Datenbanken und aktivieren Sie den Web Companion (Datei->Sharing->Web Companion). Ersetzen Sie in dem Aufruf oben "kino.fp5" durch den neuen Dateinamen. Wenn Sie ein "-lay" Tag in dem Aufruf einfügen, dann werden die übermittelten Felder auf die Felder, die in diesem Layout vorhanden sind eingeschränkt. Wenn Sie einen "-max=25" Tag einfügen, dann werden nur die ersten 25 Datensätze übertragen. Ein vollständiger Aufruf könnte so aussehen: 

http://localhost/FMPro?-db=MeineDB.fp5&-format=-fmp_xml&-
styletype=text/xsl&-stylehref=table_view.xsl
&-lay=XML&-max=10&-findall

Im nächsten Teil werden wir die Funktionalität dieses Sheets weiter ausbauen. 

 
Ü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:

Der Teil 4 folgt in der nächsten Ausgabe.
Die Redaktion

 

Zum Seitenanfang
 

Artikel



© ADOLPH Verlag GmbH - Letztes Update 03.05.2004