webentwicklung-frage-antwort-db.com.de

Gibt es einen Unterschied zwischen "gültigem xml" und "wohlgeformtem xml"?

Mir war kein Unterschied bewusst, aber ein Kollege sagt, dass es einen gibt, obwohl er es nicht unterstützen kann. Was ist der Unterschied, wenn überhaupt?

73
user18931

Es gibt einen Unterschied, ja.

XML, das dem XML-Standard entspricht, wird als wohlgeformt angesehen, während XML, das einem DTD entspricht, als gültig betrachtet wird.

76
Kilhoffer

Gültiges XML ist XML, das die Validierung gegen eine DTD erfolgreich durchführt.

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

Gültigkeit bezieht sich also auf Semantik, Wohlgeformt auf Syntax.

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

27
Vinko Vrsalovic

Wohlgeformtes gegen gültiges XML

wohlgeformt ​​ bedeutet, dass ein Textobjekt die W3C-Anforderungen für erfüllt ist XML .

Valid bedeutet, dass wohlgeformtes XML die zusätzlichen Anforderungen eines bestimmten Schemas erfüllt.


Offizielle Definitionen

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

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


Beobachtungen:

  • Bei einem nicht wohlgeformten Dokument handelt es sich nicht um XML. (Wohlgeformtes XML wird häufig verwendet, ist aber technisch redundant.)
  • Gültig zu sein bedeutet wohlgeformt zu sein.
  • Wohlgeformt zu sein, bedeutet nicht, gültig zu sein.
  • Obwohl die W3C-Empfehlung für XML die Gültigkeit für eine DTD definiert , ermöglicht die herkömmliche Verwendung, dass der Begriff für die Konformität mit XML verwendet wird Schemata angegeben über [~ # ~] xsd [~ # ~] , RELAX NG , Schematron oder andere Methoden.

Beispiele dafür, warum ein Dokument ...

nicht gut geformt:

  • Einem Element fehlt ein schließendes Tag (und es schließt sich nicht von selbst).
  • Elemente überlappen sich ohne ordnungsgemäße Verschachtelung: <a><b></a></b>
  • Einem Attributwert fehlt ein Schlusszitat, das dem Eröffnungszitat entspricht.
  • < Oder & Werden im Inhalt anstelle von &lt Oder &amp; Verwendet.
  • Es sind mehrere Stammelemente vorhanden.
  • Es sind mehrere XML-Deklarationen vorhanden, oder es wird eine andere XML-Deklaration als oben im Dokument angezeigt.

ngültig:

  • Ein Element oder Attribut fehlt, wird aber 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-Well-Formed

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

Hinweis:

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

Daher wird ein anderer Begriff Namespace-wohlgeformt ​​ definiert in den Namespaces in XML 1.0 W3C Recommendation , die alle XML-Regeln für Wohlgeformtheit impliziert plus diejenigen, die Namespaces und Namespace-Präfixe regeln.

Umgangssprachlich wird der Begriff wohlgeformt ​​häufig verwendet, wenn Namespace-wohlgeformt ​​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 .

25
kjhughes

Wie andere bereits gesagt haben, entspricht wohlgeformtes XML der XML-Spezifikation und gültiges XML einem vorgegebenen Schema.

Ein anderer Weg, um es auszudrücken, ist, dass wohlgeformtes XML lexikalisch korrekt ist (es kann analysiert werden), während gültiges XML grammatisch korrekt ist (es kann einem bekannten Vokabular und einer bekannten Grammatik zugeordnet werden).

Ein XML-Dokument kann erst dann gültig sein, wenn es wohlgeformt ist. Alle XML-Dokumente werden hinsichtlich der Formung (ein vom W3 ausgegebener RFC) auf demselben Standard gehalten. Ein XML-Dokument kann gegen einige Schemata gültig und gegen andere ungültig sein. Es gibt eine Reihe von Schemasprachen, von denen viele selbst XML-basiert sind.

16
harpo

Gut geformtes XML ist XML, das die syntaktischen Anforderungen der Sprache erfüllt. Es dürfen keine schließenden Tags fehlen, alle Ihre Einzel-Tags verwenden <whatever /> und nicht nur <whatever>, und Ihre schließenden Tags befinden sich in der richtigen Reihenfolge.

Gültiges XML ist XML, das eine DTD verwendet und alle Anforderungen erfüllt. Wenn Sie also ein Attribut falsch verwenden, verstoßen Sie gegen die DTD und sind nicht gültig.

Alles gültige XML ist wohlgeformt, aber nicht alles wohlgeformte XML ist gültig.

6
ZachPruckowski

XML ist wohlgeformt, wenn es die Anforderungen für alle XML-Dokumente erfüllt, die in den Standards festgelegt sind. Dazu gehören beispielsweise ein einzelner Wurzelknoten, korrekt geschachtelte Knoten, alle Knoten mit einem schließenden Tag (oder die leere Kurzbezeichnung eines vorangestellten Schrägstrichs) die schließende eckige Klammer), Attribute, die zitiert werden usw. Wenn Sie wohlgeformt sind, bedeutet das, dass sie sich an die XML-Regeln halten und daher ordnungsgemäß analysiert werden können.

XML ist gültig, wenn es gegen eine DTD oder ein Schema geprüft wird. Dies unterscheidet sich offensichtlich von Fall zu Fall. XML, das für ein Schema gültig ist, gilt nicht für ein anderes Schema, auch wenn es noch gut geformt ist.

Wenn XML nicht ordnungsgemäß formatiert ist, kann es nicht ordnungsgemäß analysiert werden. Parser lösen einfach eine Ausnahme aus oder melden einen Fehler. Dies ist generisch und es spielt keine Rolle, was Ihr XML enthält. Erst nach dem Analysieren kann die Gültigkeit überprüft werden. Diese Domäne oder Kontext ist abhängig und erfordert eine DTD oder ein Schema zur Überprüfung. Für einfache XML-Dokumente 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. Natürlich bedeutet das nicht, dass Sie es nicht verwenden können, es bedeutet nur, dass Sie nicht sagen können, ob es gültig ist oder nicht.

4
Simon Forrest

W3C hat in der XML-Spezifikation bestimmte Regeln definiert, die beim Erstellen von XML-Dokumenten beachtet werden müssen. Die Beispiele für solche Regeln umfassen genau ein Stammelement, ein End-Tag für jedes Start-Tag, die Verwendung von einfachen/doppelten Anführungszeichen für Attributwerte usw. Wenn ein XML-Dokument all diesen Regeln folgt, handelt es sich um ein wohlgeformtes Dokument, und XML-Parser können zum Analysieren und Verarbeiten solcher Dokumente verwendet werden.

DTDs oder XML-Schemas können verwendet werden, um die Struktur und den Inhalt einer bestimmten Klasse von XML-Dokumenten zu definieren. Dazu gehören die Eltern-Kind-Beziehungsdetails, Attributlisten, Datentypinformationen, Werteinschränkungen usw. Wenn ein XML-Dokument zusätzlich zu den Regeln für die ordnungsgemäße Formung auch den in der zugehörigen DTD/dem Schema angegebenen Regeln folgt, wird dies gesagt ein gültiges XML-Dokument sein.

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

3
harsha

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

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


Für diejenigen, die Pseudo-Code gegenüber Absätzen vor Textabschnitten bevorzugen ... :)

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. Valid

1
Kent Pawar

Ich füge hinzu, dass gültiges XML auch bedeutet, dass es wohlgeformtes, aber wohlgeformtes XML nicht unbedingt gültig ist.

1
Joel Coehoorn

Wenn XML die DTD-Regeln bestätigt, ist es ein gültiges XML . Wenn ein XML-Dokument den XML-Regeln entspricht (alle Tags Sind geschlossen, es gibt ein Stammelement usw.), ist es ein XML.

1
Narasimhareddy

Neben den oben genannten DTDs gibt es zwei weitere Möglichkeiten, XML-Dokumente zu beschreiben und zu validieren: XMLSchema und RelaxNG . Beide Methoden sind möglicherweise einfacher zu verwenden und unterstützen mehr Funktionen als DTDs.

1
Kyle Burton

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

Bei der Validierung wird ein Dokument gegen eine DTD (im Allgemeinen gegen eine Reihe von Konstruktionsregeln) geprüft.

Der Validierungsprozess und der Aufbau von DTDs sind die zwei schwierigsten Teile des XML-Lebenszyklus. Eine DTD definiert kurz alle möglichen Elemente, die in Ihrem Dokument zu finden sind, wie die formale Form Ihres Dokumentbaums ist (durch Definition des zulässigen Inhalts eines Elements; entweder Text, ein regulärer Ausdruck für die erlaubte Liste von Kindern oder gemischter Inhalt) dh sowohl Text als auch Kinder). Die DTD definiert auch die gültigen Attribute für alle Elemente und die Typen dieser Attribute.

0
Rachna Garg

Siehe XML-DTD für W3-Schulen :

Ein XML-Dokument mit korrekter Syntax wird als "Gut geformt" bezeichnet.

Ein mit einer DTD validiertes XML-Dokument ist "Gut geformt" und "Gültig".

0
Attila

Nun, XML, das nicht wohlgeformt ist, ist definitionsgemäß nicht XML. Normalerweise bezeichnen Menschen gültiges XML als XML, das einem bestimmten Schema (XSD oder DTD) entspricht.

0
Charles Graham