Hallo Johannes,
- Wird XSL 2.0 von den gängigen Browsern unterstützt? Wo finde ich Infos zur Browserkompatibilität?
Alle Browser die ich kenne unterstützen nur XSLT 1.0 - das aber meines Wissens zumindest vollständig.
XSLT 2.0 kannst Du im Prinzip vergessen, wenn Du browserseitig transformieren willst.
Wenn Du serverseitig transformieren willst, dann gibt es eigentlich nur Saxon-B 9 als einizge Open-Source-Lösung, die XSLT 2.0 kann - das gibt's für Java und .NET.
- Wie kann ich aus einer XSLT-Datei mehrere HTML-Dateien generieren, die auf dieselbe XML-Datei zugreifen? Funktioniert das mit result-document?
Prinzipiell schon, allerdings nur in XSLT 2.0 - und das kannst Du wie gesagt im Browser vergessen.
Brauche ich zusätzlich PHP?
PHP verwendet die libxslt - und die kann nur XSLT 1.0 und Teile von EXSLT. In EXSLT gibt's exsl:document - siehe http://www.exslt.org/exsl/elements/document/ - vielleicht kann das das, was Du willst - ausprobiert habe ich's unter PHP aber noch nicht. XSLT 2.0 wird von PHP nicht unterstützt. Allerdings: Lies bitte unten weiter diesbezüglich.
- Wie genau zeige ich die HTML-Datei, die ich generieren möchte, an? Muss ich dazu die XSLT-Datei öffnen? Oder die XML-Datei? Bei letzterem gibt's mit Firefox 2 einen Parsingfehler. Öffne ich hingegen die XSL-Datei, fehlt dem Browser die Stylesheet-Verknüpfung.
Wenn Du aus einer XML-Datei eine einzige HTML-Datei mit XSLT 1.0 (!) erzeugen willst und das im Browser tun willst, öffnest Du die XML-Datei im Browser. Die XML-Datei sollte dann die Stylesheet-Angabe enthalten, dann transformieren heutige Browser automatisch (siehe die Beispiele aus SELFHTML).
Alternativ kannst Du mit einer serverseitigen Technik die XML-Datei mit dem XSLT transformieren und dann das Resultat an den Browser schicken. Der Browser sieht dann nur HTML. Hier steht Dir serverseitig alles zur Verfügung, was es für die jeweils verwendete Technik gibt.
Wenn Du aus einer XML-Datei mehrere HTML-Dateien erzeugen willst, dann hast Du browserseitig keine Möglichkeit, die können das alle nicht.
Serverseitig hast Du zwei Möglichkeiten für multiple Dokumente:
1) Du nimmst XSLT 2.0 oder EXSLT und generierst die Dokumente sobald die
XML-Datei geändert wird. Die resultierenden Dokumente legst Du als
statische HTML-Dokumente ab, die im Browser geöffnet werden können.
2) Beim Aufruf eines serverseitigen Programms (PHP-Script, Java-Servlet,
etc.) wird eine XSLT-Transformation angestoßen, die nur *eine* Ausgabe-
datei liefert. Welche geliefert werden soll wird dem XSLT als Parameter
übergeben.
Beispiel:
Du hast eine Datei buch.xml, die zwei Kapitel enthält. Jedes Kapitel soll eine eigene Seite sein, sowie das Inhaltsverzeichnis.
Bei Möglichkeit 1 würdest Du jedes Mal, wenn Du buch.xml änderst (*NICHT* jedoch beim Aufruf über's Web!) ein XSLT 2.0 oder ein XSLT 1.0 + EXSLT Stylesheet auf die Datei anwenden und dieses Stylesheet würde 3 Dateien erzeugen: "index.html", "kapitel1.html", "kapitel2.html". Diese könntest Du dann ganz normal als statische Dokumente über's Web ausliefern.
Bei Möglichkeit 2 würdest Du bei jedem Aufruf unterscheiden, welche Seite angefordert wurde, wenn Du das z.B. mit PHP machst könntest Du ein Scrpit xslt.php schreiben und dann per PATH_INFO arbeiten, also z.B. so:
http://example.org/xslt.php/index.html wird aufgerufen
-> In PHP ist $_SERVER['PATH_INFO'] auf '/index.html' gesetzt
http://example.org/xslt.php/kapitel1.html wird aufgerufen
-> In PHP ist $_SERVER['PATH_INFO'] auf '/kapitel1.html' gesetzt
Das Script xslt.php würde dann ein normales Stylesheet (das könnte dann ganz normales XSLT 1.0 sein ohne EXSLT und muss auch kein XSLT 2.0 sein) auf die Datei »buch.xml« anwenden und diesem Stylesheet einen Parameter mitgeben, bevor es die Transformation anstößt. Das Stylesheet würde dann per xsl:if oder xsl:choose unterscheiden können, welche Seite es nun generieren soll.
Viele Grüße,
Christian