Gibt es einen Unterschied zwischen 'gültiger XML' und 'wohlgeformter XML'?

79

Ich war mir eines Unterschieds nicht bewusst, aber ein Mitarbeiter sagt, dass es einen gibt, obwohl er ihn nicht sichern kann. Was ist der Unterschied, wenn überhaupt?

user18931
quelle

Antworten:

82

Es gibt einen Unterschied, ja.

XML, das dem XML-Standard entspricht, wird als gut geformt angesehen, während XML, das einer DTD entspricht, als gültig angesehen wird.

Kilhoffer
quelle
11
Oder ein XML-Schema oder RelaxNG oder Schematron.
Torsten Marek
24
Es ist wahrscheinlich erwähnenswert, dass Wohlgeformtheit eine Voraussetzung für die Gültigkeit ist.
Quentin
1
@Quentin: Das ist ein wichtiger Punkt, über den sich anerkannte XML-Experten einig sind ( lists.w3.org/Archives/Public/www-xml-linking-comments/… "Die Spezifikation sagt ausdrücklich ..."); Aus der XML-Spezifikation ist dies jedoch nicht ganz ersichtlich. Hast du ein Zitat dafür? Basieren Sie es auf w3.org/TR/REC-xml/#dt-valid ?
LarsH
@LarsH Wenn ein XML-Dokument nicht wohlgeformt ist, kann es per Definition nicht mit einer DTD oder einem Schema verglichen werden.
@LegoStormtroopr: Ich stimme Ihnen zu, aber meine Frage war, wo steht die Spezifikation dazu? Wo ist die Definition, auf die Sie sich beziehen? w3.org/TR/REC-xml/#dt-valid gibt an , was ausreicht, aber nicht, was erforderlich ist, damit ein Dokument "gültig" ist. Beispielsweise kann ein gegen ein XML-Schema geprüftes XML-Dokument ohne DTD gültig sein. Daher schließt diese Definition nicht aus, dass ein Dokument auf andere Weise gültig sein kann.
LarsH
29

Gut geformtes vs gültiges XML

Gut geformt bedeutet, dass ein Textobjekt die W3C-Anforderungen für XML erfüllt .

Gültig bedeutet, dass wohlgeformtes XML zusätzliche Anforderungen erfüllt, die von einem bestimmten Schema vorgegeben werden.


Offizielle Definitionen

Gemäß der W3C-Empfehlung für XML :

[Definition: Ein Datenobjekt ist ein XML-Dokument, wenn es gemäß dieser Spezifikation wohlgeformt ist. Darüber hinaus ist das XML-Dokument gültig, wenn es bestimmte weitere Einschränkungen erfüllt.]


Beobachtungen:

  • Ein nicht wohlgeformtes Dokument ist kein XML. ( Wohlgeformtes XML wird häufig verwendet, ist jedoch technisch redundant.)
  • Gültig zu sein bedeutet, wohlgeformt zu sein.
  • Gut geformt zu sein bedeutet nicht, gültig zu sein.
  • Obwohl die W3C-Empfehlung für XML definiert , dass die Gültigkeit für eine DTD gilt, kann bei der herkömmlichen Verwendung der Begriff für die Konformität mit XML-Schemas verwendet werden, die über XSD , RELAX NG , Schematron oder andere Methoden angegeben wurden.

Beispiele dafür, warum ein Dokument ...

Nicht gut geformt :

  • Einem Element fehlt ein schließendes Tag (und es schließt sich nicht selbst).
  • Elemente überlappen sich ohne ordnungsgemäße Verschachtelung: <a><b></a></b>
  • In einem Attributwert fehlt ein Schlusszitat, das mit dem Eröffnungszitat übereinstimmt.
  • <oder &werden eher in Inhalten als &ltoder verwendet &amp;.
  • Es gibt mehrere Stammelemente.
  • Es sind mehrere XML-Deklarationen vorhanden, oder eine XML-Deklaration wird anders als oben im Dokument angezeigt.

Ungültig :

  • Ein Element oder Attribut fehlt, wird jedoch vom XML-Schema benötigt.
  • Ein Element oder Attribut wird verwendet, aber vom XML-Schema nicht definiert.
  • Der Inhalt eines Elements stimmt nicht mit dem im XML-Schema angegebenen Inhalt überein.
  • Der Wert eines Attributs stimmt nicht mit dem im XML-Schema angegebenen Typ überein.

Namespace-wohlgeformt

Technisch gesehen sind Doppelpunktzeichen in Komponentennamen in XML zulässig. Doppelpunkte sollten jedoch nur in Namen für Namespace-Zwecke verwendet werden:

Hinweis:

Die Namespaces in der XML-Empfehlung [ XML-Namen ] weisen Namen mit Doppelpunktzeichen eine Bedeutung zu. Daher sollten Autoren den Doppelpunkt nur für Namespace-Zwecke in XML-Namen verwenden. XML-Prozessoren müssen den Doppelpunkt jedoch als Namenszeichen akzeptieren.

Daher wird in der Namespaces in XML 1.0 W3C-Empfehlung ein anderer Begriff, Namespace-wohlgeformt , definiert , der alle XML-Regeln für die Wohlgeformtheit sowie die Regeln für Namespaces und Namespace-Präfixe enthält.

Umgangssprachlich wird der Begriff wohlgeformt häufig verwendet, wenn der gut geformte Namespace genauer wäre. Dies ist jedoch eine geringfügige technische Methode mit weniger praktischen Konsequenzen als die in dieser Antwort beschriebene Unterscheidung zwischen wohlgeformtem und gültigem XML .

kjhughes
quelle
1
Dies ist bereits eine wunderbare Antwort, aber vielleicht würde es helfen, eine Notiz über Namespaces hinzuzufügen, dh über die Eigenschaft, Namespace-wohlgeformt zu sein ? Wie Sie wissen, sind Namespaces eine häufige Gefahr für Anfänger, und viele Leute würden ein Dokument mit Namespace-Problemen als "nicht wohlgeformt" beschreiben.
Mathias Müller
Danke, @ MathiasMüller. Ich habe eine Erklärung für Namespace-wohlgeformt hinzugefügt gemäß Ihrer Anfrage .
kjhughes
28

Gültiges XML ist XML, dessen Validierung anhand einer DTD erfolgreich ist.

Gut geformtes XML ist XML, bei dem alle Tags in der richtigen Reihenfolge geschlossen sind. Wenn eine Deklaration vorhanden ist, enthält sie als erstes die Datei mit den richtigen Attributen.

Mit anderen Worten, Gültigkeit bezieht sich auf Semantik, Wohlgeformtheit bezieht sich auf Syntax.

Sie können also ungültiges, wohlgeformtes XML haben.

Vinko Vrsalovic
quelle
9
Ich würde dem dritten Absatz nicht zustimmen. Keiner der Begriffe sagt etwas über Semantik aus (die Bedeutung von etwas). DTDs können nicht angeben, was ein bestimmtes Element oder Attribut bedeutet . Das wäre das Ziel von Bemühungen wie Web Ontology Language. Wohlgeformtheit bezieht sich vielmehr auf eine niedrige Syntaxstufe (möglicherweise besser als lexikalische Korrektheit bezeichnet), während sich Gültigkeit auf eine höhere Syntaxstufe bezieht (nennen Sie es "strukturell", wenn Sie möchten).
LarsH
16

Wie bereits erwähnt, entspricht wohlgeformtes XML der XML-Spezifikation und gültiges XML einem bestimmten Schema.

Eine andere Möglichkeit ist, dass wohlgeformtes XML lexikalisch korrekt ist (es kann analysiert werden), während gültiges XML grammatikalisch korrekt ist (es kann mit einem bekannten Vokabular und einer bekannten Grammatik abgeglichen werden).

Ein XML-Dokument kann erst gültig sein, wenn es wohlgeformt ist. Alle XML-Dokumente unterliegen dem gleichen Standard für die Formgebung (ein vom W3 herausgegebener RFC). Ein XML-Dokument kann für einige Schemas gültig und für andere ungültig sein. Es gibt eine Reihe von Schemasprachen, von denen viele selbst XML-basiert sind.

Harpo
quelle
6

Gut geformtes XML ist XML, das die syntaktischen Anforderungen der Sprache erfüllt. Keine fehlenden schließenden Tags verpassen, alle Ihre Singleton-Tags <whatever />anstelle von nur verwenden <whatever>und Ihre schließenden Tags in der richtigen Reihenfolge haben.

Gültiges XML ist XML, das eine DTD verwendet und alle Anforderungen erfüllt. Wenn Sie also ein Attribut falsch verwenden, verletzen Sie die DTD und sind ungültig.

Alle gültigen XML-Dateien sind wohlgeformt, aber nicht alle wohlgeformten XML-Dateien sind gültig.

ZachPruckowski
quelle
4

XML ist gut geformt, wenn es die Anforderungen für alle XML-Dokumente erfüllt, die in den Standards festgelegt sind - beispielsweise einen einzelnen Stammknoten, korrekt verschachtelte Knoten, alle Knoten mit einem schließenden Tag (oder die Verwendung der Leerknotenkürzel eines Schrägstrichs zuvor) die schließende Klammer), Attribute, die zitiert werden usw. Gut geformt zu sein bedeutet nur, dass es den Regeln von XML entspricht und daher richtig analysiert werden kann.

XML ist gültig, wenn es anhand einer DTD oder eines Schemas validiert wird. Dies ist offensichtlich von Fall zu Fall unterschiedlich - XML, das für ein Schema gültig ist, ist für ein anderes Schema nicht gültig, obwohl es noch gut geformt ist.

Wenn XML nicht gut geformt ist, kann es nicht richtig analysiert werden - Parser lösen einfach eine Ausnahme aus oder melden einen Fehler. Dies ist generisch und spielt keine Rolle, was Ihr XML enthält. Erst wenn es analysiert wurde, kann es auf Gültigkeit überprüft werden. Diese Domäne oder dieser Kontext ist abhängig und erfordert eine DTD oder ein Schema zur Validierung. Bei einfachen XML-Dokumenten verfügen Sie möglicherweise nicht über eine DTD oder ein Schema. In diesem Fall können Sie nicht wissen, ob das XML gültig ist. In diesem Fall gilt das Konzept oder die Gültigkeit einfach nicht. Dies bedeutet natürlich nicht, dass Sie es nicht verwenden können, sondern nur, dass Sie nicht sagen können, ob es gültig ist oder nicht.

Simon Forrest
quelle
3

W3C hat in der XML-Spezifikation bestimmte Regeln definiert, die beim Erstellen von XML-Dokumenten befolgt werden müssen. Die Beispiele für solche Regeln umfassen genau ein Stammelement, ein End-Tag für jedes Start-Tag, einfache / doppelte Anführungszeichen für Attributwerte usw. Wenn ein XML-Dokument all diesen Regeln folgt, wird es als wohlgeformtes Dokument bezeichnet, und XML-Parser können zum Parsen und Verarbeiten solcher Dokumente verwendet werden.

Dokumenttypdefinitionen (DTDs) oder XML-Schemas können verwendet werden, um die Struktur und den Inhalt einer bestimmten Klasse von XML-Dokumenten zu definieren. Dies umfasst die Eltern-Kind-Beziehungsdetails, Attributlisten, Datentypinformationen, Werteinschränkungen usw. Zusätzlich zu den Wohlgeformungsregeln wird gesagt, dass ein XML-Dokument, wenn es auch den in der zugehörigen DTD / dem Schema angegebenen Regeln folgt, dies befolgt ein gültiges XML-Dokument sein.

Alle gültigen XML-Dokumente sind wohlgeformt, aber das Gegenteil ist nicht immer der Fall. Wohlgeformte XML-Dokumente müssen nicht unbedingt gültig sein.

Harsha
quelle
1

Ich werde hinzufügen, dass gültiges XML auch impliziert, dass es wohlgeformt ist, aber wohlgeformtes XML ist nicht unbedingt gültig.

Joel Coehoorn
quelle
1

Zusätzlich zu den oben genannten DTDs gibt es zwei weitere Möglichkeiten zur Beschreibung und Validierung von XML-Dokumenten: XMLSchema und RelaxNG . Beide sind möglicherweise einfacher zu verwenden und unterstützen mehr Funktionen als DTDs.

Kyle Burton
quelle
1

Wenn XML DTD-Regeln bestätigt, handelt es sich um ein gültiges XML. Wenn ein XML-Dokument den XML-Regeln entspricht (alle gestarteten Tags sind geschlossen, es gibt ein Stammelement usw.), handelt es sich um ein wohlgeformtes XML.

Narasimhareddy
quelle
1

Entnommen aus XML (Extensible Markup Language) 1.0 (fünfte Ausgabe) - W3C-Empfehlung 26. November 2008 :

[Definition: Ein Datenobjekt ist ein XML-Dokument, wenn es gemäß dieser Spezifikation wohlgeformt ist. Darüber hinaus ist das XML-Dokument gültig, wenn es bestimmte weitere Einschränkungen erfüllt.]


Für diejenigen, die Pseudo-Code Absätzen über Absätzen des Textes vorziehen ... :)

IF is_well_formed(<XML_doc>) THEN
    # It is well-formed, and can be parsed
    IF is_valid(<XML_doc>) THEN
        # Well-formed and ALSO valid. Hurray! 
        # **A valid XML doc, is a well-formed doc!**
    ELSE
        # Only well-formed, NOT valid
    END IF
ELSE
    # Not well-formed, or valid!
END IF

FUNCTION is_well_formed
    IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION 

FUNCTION is_valid
    IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN
        # Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION

Basierend auf der Theorie: "Gut geformt" vs. Gültig

Kent Pawar
quelle
0

DTD ist die Abkürzung für Document Type Definition. Dies ist eine Beschreibung des Inhalts für eine Familie von XML-Dateien. Dies ist Teil der XML 1.0-Spezifikation und ermöglicht die Beschreibung und Überprüfung, ob eine bestimmte Dokumentinstanz den Regeln entspricht, die ihre Struktur und ihren Inhalt detailliert beschreiben.

Bei der Validierung wird ein Dokument anhand einer DTD überprüft (allgemeiner anhand einer Reihe von Konstruktionsregeln).

Der Validierungsprozess und das Erstellen von DTDs sind die beiden schwierigsten Teile des XML-Lebenszyklus. Kurz gesagt definiert eine DTD alle möglichen Elemente in Ihrem Dokument, die formale Form Ihres Dokumentbaums (indem Sie den zulässigen Inhalt eines Elements definieren; entweder Text, einen regulären Ausdruck für die zulässige Liste der untergeordneten Elemente oder gemischten Inhalt dh sowohl Text als auch Kinder). Die DTD definiert auch die gültigen Attribute für alle Elemente und die Typen dieser Attribute.

Rachna Garg
quelle
Hallo @Rachna. Dies erklärt den Validierungsteil recht gut, erklärt aber nicht, wann wir eine XML-Datei als "wohlgeformt" bezeichnen können ...
Kent Pawar
0

Nun, XML, das per Definition nicht gut geformt ist, ist kein XML. Menschen bezeichnen gültiges XML normalerweise als XML, das einem bestimmten Schema (XSD oder DTD) entspricht.

Charles Graham
quelle
0

Siehe XML-DTD für W3-Schulen :

Ein XML-Dokument mit korrekter Syntax heißt "Well Formed".

Ein gegen eine DTD validiertes XML-Dokument ist sowohl "gut geformt" als auch "gültig".

Attila
quelle