Validierung ohne DOCTYPE
Weihnachtsbert
- xsl
0 MudGuard
Wie kann ein XSL-Dokument mit 'xmllint' erfolgreich validiert werden?
$ xmllint --noout --valid style.xsl
style.xsl:2: validity error: Validation failed: no DTD found !
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
^
Hi,
Wie kann ein XSL-Dokument mit 'xmllint' erfolgreich validiert werden?
$ xmllint --noout --valid style.xsl
style.xsl:2: validity error: Validation failed: no DTD found !
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Ohne doctype ist keine Validierung im engeren Sinne möglich, nur eine Prüfung auf Wohlgeformtheit (well-formed or not well-formed).
xmllint kenn ich nicht - guck mal in dessen Optionen, ob der auf Wohlgeformtheit prüfen kann.
cu,
Andreas
Ohne doctype ist keine Validierung im engeren Sinne möglich, nur eine Prüfung auf Wohlgeformtheit (well-formed or not well-formed).
Auf Wohlgeformtheit kann problemlos überprüft werden (Aufruf ohne --valid).
Können XSL-Dokumente generell nicht (im engeren Sinne) validiert werden?
Existiert eine XSL-DTD oder ein XML-Schema für XSL mit dessen Hilfe eine Validierung funktionieren würde?
Hi,
Ohne doctype ist keine Validierung im engeren Sinne möglich, nur eine Prüfung auf Wohlgeformtheit (well-formed or not well-formed).
Auf Wohlgeformtheit kann problemlos überprüft werden (Aufruf ohne --valid).
Können XSL-Dokumente generell nicht (im engeren Sinne) validiert werden?
Existiert eine XSL-DTD oder ein XML-Schema für XSL mit dessen Hilfe eine Validierung funktionieren würde?
Natürlich können XSL-Dokumente validiert werden.
Dann mußt Du halt den XSLT-Doctype angeben mit Url zur DTD.
So auf die Schnelle find ich die DTD aber auch nicht...
cu,
Andreas
Hi,
Natürlich können XSL-Dokumente validiert werden.
Dann mußt Du halt den XSLT-Doctype angeben mit Url zur DTD.
So auf die Schnelle find ich die DTD aber auch nicht...
Bei genauerem Nachdenken:
XSLT-Dokumente enthalten ja üblicherweise neben den xslt-Elementen auch Elemente der Zielsprache - das könnte natürlich ein Problem werden...
cu,
Andreas
Bei genauerem Nachdenken:
XSLT-Dokumente enthalten ja üblicherweise neben den xslt-Elementen auch Elemente der Zielsprache - das könnte natürlich ein Problem werden...
Um ein XSL-Dokument validieren zu können bräuchte man also zwei DTDs bzw. XML-Schemas - eine(s) für den XSL-Namensraum und eine(s) für den Namensraum der verwendeten Tags für die Ausgabe.
Geht dieser Ansatz in die richtige Richtung oder gibt es eine andere Möglichkeit, XSL-Dokumente zu validieren?
Hi,
Bei genauerem Nachdenken:
XSLT-Dokumente enthalten ja üblicherweise neben den xslt-Elementen auch Elemente der Zielsprache - das könnte natürlich ein Problem werden...
Um ein XSL-Dokument validieren zu können bräuchte man also zwei DTDs bzw. XML-Schemas - eine(s) für den XSL-Namensraum und eine(s) für den Namensraum der verwendeten Tags für die Ausgabe.
Unterstützen DTDs überhaupt Namensräume?
Geht dieser Ansatz in die richtige Richtung oder gibt es eine andere Möglichkeit, XSL-Dokumente zu validieren?
Je nach Ausgabe könnten es auch noch mehr werden - denn das erzeugte XML könnte ja auch wieder mehrere Namensräume enthalten.
cu,
Andreas
Unterstützen DTDs überhaupt Namensräume?
Afaik unterstützen DTDs keine Namensräume.
Das würde bedeuten, dass XSL-Dokumente generell nicht validiert werden könnten.
Oder gibt es eine Möglichkeit mit Hilfe von XML-Schemas (XSD)?
Hallo,
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.
Grüße
Thomas
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.
Ich komme zu dem Schluss, dass unterschieden werden muss zwischen "Das Dokument ist valide" und "Das Dokument kann anhand einer DTD validiert werden". 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 !"
Gruß,
Bert
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
»»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 !"
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.
Die Feststellung der Eigenschaft "valide" eines XML-Dokuments
- mit vorhandener DTD (z.B. bei XHTML) kann mit Standard-XML-Werkzeugen (z.B. dem Tool `xmllint') erfolgen.
- ohne vorhandene DTD (z.B. bei XSL aufgrund unterschiedlicher Namensräume) kann nur mit Hilfe eines Parsers, der die Zielsprache kennt (z.B. eines XSLT-Prozessors), erfolgen.
Ist diese Schlussfolgerung korrekt?
Kann ein XSL-Dokument mit fehlerhaften XPath-Ausdrücken nicht trotzdem "valid" auf XML-Ebene sein?
Hallo,
Die Feststellung der Eigenschaft "valide" eines XML-Dokuments
- mit vorhandener DTD (z.B. bei XHTML) kann mit Standard-XML-Werkzeugen (z.B. dem Tool `xmllint') erfolgen.
- ohne vorhandene DTD (z.B. bei XSL aufgrund unterschiedlicher Namensräume) kann nur mit Hilfe eines Parsers, der die Zielsprache kennt (z.B. eines XSLT-Prozessors), erfolgen.Ist diese Schlussfolgerung korrekt?
Ja, aber: ohne DTD wird das Dokument nach anderen Kritierien überprüft. Nicht desto trotz, wird ein XSL-Stylesheet auf Wohlgeformtheit überprüft.
Kann ein XSL-Dokument mit fehlerhaften XPath-Ausdrücken nicht trotzdem "valid" auf XML-Ebene sein?
Ja, natürlich kann es.
Wie gesagt, man kann auch eine DTD dazu schreiben, aber bedenke den Aufwand: es müssen die DTD für XSL und die DTD für XHTML gemischt werden: z.B. du müsstest demnach festlegen, welche XSL-Elemente in einer <td> und welche in einem <div> stehen dürfen usw. Trotzdem könntest du bestimmte Fehler nicht ganz vermeiden:
<td align="center">
<xsl:attribute name="align">
<xsl:value-of select="pafd/zum/wert" />
</xsl:attribute>
</td>
Das wäre auch der sicht der DTD valide, aber nicht aus Sicht des XSL-Prozessors.
Grüße
Thomas
Ja, aber: ohne DTD wird das Dokument nach anderen Kritierien überprüft. Nicht desto trotz, wird ein XSL-Stylesheet auf Wohlgeformtheit überprüft.
Kann ein XSL-Dokument mit fehlerhaften XPath-Ausdrücken nicht trotzdem "valid" auf XML-Ebene sein?
Ja, natürlich kann es.
Das wäre auch der sicht der DTD valide, aber nicht aus Sicht des XSL-Prozessors.
Im Gegensatz zur Wohlgeformtheit scheint "valides XML" vielschichtiger zu sein. Ich erkenne folgende Stufen:
1. Ist das Dokument wohlgeformt? - Kann immer geprüft werden (Syntax-Regeln).
2. Ist das Dokument auf XML-Ebene valide? - Kann anhand einer DTD geprüft werden (Regelwerk für die Struktur der Entitäten).
3. Ist das Dokument für die verwendete(n) Zielsprache(n) gültig bzw. valide? - Kann nur der Parser der jeweiligen Zielsprache(n) feststellen (Regeln der Interpretation).
Bei XHTML beispielsweise können alle drei Prüfungen erfolgen.
Bei XSL fällt die zweite Prüfung weg, da gemischte DTDs eingesetzt werden müssten und diese nur indirekt Namensräume unterstützen.
Die Anforderung besteht darin, ohne den Parser der Zielsprache ein Dokument (hier: XSL) auf XML-Ebene validieren zu können.
Besteht mit XML-Schemas (XSD) ein Lösungsansatz?
Hallo,
Unterstützen DTDs überhaupt Namensräume?
Indirekt:
http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Grüße
Thomas
Indirekt:
http://aktuell.de.selfhtml.org/artikel/xml/namensraeume/index.htm
Ein XSL-Dokument kann also nur validiert werden, wenn eine (nicht-normative) DTD für alle Tags der verwendeten Namensräume angegeben ist?
Gibt es eine derartige DTD für die Anwendung eines XSL-Stylesheets für XHTML-Ausgabe?
Gruß,
Bert