Inhalt:
|
XML
mit FileMaker Teil 3:
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"
<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=
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&-
Im nächsten Teil werden wir die Funktionalität dieses Sheets weiter ausbauen. Teil 1: Was ist XML?
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.
|