Hallo,
Deine Frage aus:
----------------------
Ein XSL-Dokument kann also nur validiert werden, wenn eine (nicht-normative) DTD für alle Tags der verwendeten Namensräume angegeben ist?
----------------------
Theoretisch wäre das möglich, dass man eine DTD entwickelt, was so eine validierung ermöglicht.
Das Problem ist, man hat zwei unabhängige DTDs und man kann sie nicht "mischen", was aber notwendig wäre um ein Dokument zu validieren.
-------------------
Gibt es eine derartige DTD für die Anwendung eines XSL-Stylesheets für XHTML-Ausgabe?
--------------------
Nein, ich glaube nicht.
Überleg mal wie aufwändig die DTD sein würde und dass sie dabei nicht wirklich gebraucht wird.
Das würde bedeuten, dass XSL-Dokumente generell nicht validiert werden könnten.
Natürlich können Sie das, ein Parser muss ja überpüfen, ob ein xslt-element dort steht wo es stehen darf.
Oder gibt es eine Möglichkeit mit Hilfe von XML-Schemas (XSD)?
Es gibt eine nicht normaive DTD für XSLT http://www.w3.org/TR/xslt#dtd.Das wirft die Frage auf, ob ein Parser das XSL-Dokument anhand der nicht normativen DTD für XSLT überprüft. Wäre dies der Fall, müsste jedoch diese nicht normative DTD als DOCTYPE des XSL-Dokuments angegeben werden, damit das XSL-Stylesheet ein valides XML-Dokument darstellte.
Warum so eine DTD für einen XSL-Sheet eigentlich nicht erstellt werden kann, liegt u.a. auch bei der Möglichkeit der verinfachten Stylesheets:
http://www.w3.org/TR/xslt#result-element-stylesheet
Außerdem es machte nicht wirklich einen Sinn, wenn für jede XML-DTD dieser Welt auch eine zusätzliche mit XSL gemischte Version erstellt werden müsste _und dabei_ unterstützten XML-DTD' Namensräume nicht wirklich.
Ich komme zu dem Schluss, dass unterschieden werden muss zwischen "Das Dokument ist valide" und "Das Dokument kann anhand einer DTD validiert werden".
Das wurde auch bisher unterschieden. ;-)
»»Die Frage bleibt jedoch: Wie kann mit Hilfe geeigneter Werkzeugen schnell festgestellt werden, ob ein XSLT-Dokument valide ist?
Das Tool `xmlllint' aus dem libxml2-Paket sagt dazu nur: "Validation failed: no DTD found !"
Lese mal den Anfang der DTD Teil für XSLT (haben oben ja schon verlinkt). Du kannst ja so eine DTD für deine XSL-Datei schreiben, aber ...
Warum willst du dein XSL-Datei auf diese Weise validieren?
Wenn es nur um die XSL-Syntax geht, das macht dir jeder XSLT-Prozessor und es gibt dafür auch Tools (aber diese werden dir z.B. auch nicht sagen können ob z.B. der Wert eines XPath-Ausdruckes richtig ist, das wird eben nur ein Parser machen können, wenn er die Transformation durchführt.
Grüße
Thomas