web-dev-qa-db-ja.com

「有効なxml」と「整形式のxml」に違いはありますか?

私は違いに気付いていませんでしたが、彼はそれをバックアップすることはできませんが、同僚はあると言います。違いはありますか?

75
user18931

はい、違いがあります。

XML標準 に準拠するXMLは整形式と見なされ、 [〜#〜] dtd [〜#〜] に準拠するxmlは有効と見なされます。

78
Kilhoffer

有効なXMLは、DTDに対する検証に成功したXMLです。

整形式XMLは、すべてのタグが適切な順序で閉じられたXMLであり、宣言がある場合、ファイル内で適切な属性を持つ最初のものが含まれます。

言い換えれば、有効性はセマンティクスを指し、整形式は構文を指します。

したがって、無効な整形式XMLを使用できます。

27
Vinko Vrsalovic

整形式と有効なXML

Well-formedは、テキストオブジェクトが W3C要件 for for XML 。)を満たすことを意味します。

Validは、整形式XMLが指定されたスキーマで指定された追加要件を満たすことを意味します。


公式の定義

XMLの W3C勧告

[定義:データオブジェクトは、この仕様で定義されている well-formed である場合、XMLドキュメントです。さらに、XMLドキュメントは valid さらに特定の制約を満たす場合。]


観察:


ドキュメントの原因の例...

整形式ではない

  • 要素には終了タグがありません(自己終了ではありません)。
  • 適切なネストなしで要素が重なります:<a><b></a></b>
  • 属性値に開始引用符と一致する終了引用符がありません。
  • <または&ではなく、&ltまたは&amp;がコンテンツで使用されています。
  • 複数のルート要素が存在します。
  • 複数のXML宣言が存在するか、ドキュメントの最上部以外にXML宣言が表示されます。

無効

  • 要素または属性はありませんが、XMLスキーマで必要です。
  • 要素または属性が使用されていますが、XMLスキーマによって定義されていません。
  • 要素のコンテンツは、XMLスキーマで指定されたコンテンツと一致しません。
  • 属性の値が、XMLスキーマで指定されたタイプと一致しません。

名前空間の形式

技術的には、XMLのコンポーネント名にコロン文字を使用できます。ただし、コロン should は名前空間の目的でのみ名前に使用されます。

注:

XML推奨の名前空間[ XML Names ]は、コロン文字を含む名前に意味を割り当てます。したがって、著者は名前空間の目的を除いてXML名にコロンを使用するべきではありませんが、XMLプロセッサはコロンを名前文字として受け入れる必要があります。

そのため、別の用語 namespace-well-formed )が Namespaces in XML 1.0で定義されていますW3C勧告 これは、整形式のすべてのXMLルールを意味しますplusネームスペースとネームスペースプレフィックスを管理するルール。

口語的には、namespace-well-formedがより正確な場合、well-formedという用語がよく使用されます。ただし、これは、この回答で説明されている整形式と有効なXMLの区別ほど実用的ではない軽微な技術的方法です。

25
kjhughes

他の人が言ったように、整形式XMLはXML仕様に準拠しており、有効なXMLは特定のスキーマに準拠しています。

別の言い方をすれば、整形式XMLは字句的に正しい(解析可能)であり、有効なXMLは文法的に正しい(既知の語彙に一致させることができる)および文法)。

XMLドキュメントは、整形式になるまで有効になりません。すべてのXMLドキュメントは、整形式(W3によって公開されたRFC)のために同じ標準に従っています。 1つのXMLドキュメントは、一部のスキーマに対して有効であり、他のスキーマに対して無効になる場合があります。多数のスキーマ言語があり、その多くはそれ自体がXMLベースです。

16
harpo

整形式XMLは、言語の構文要件を満たすXMLです。終了タグが欠落していないこと、すべてのシングルトンタグが<whatever />だけでなく<whatever>を使用していること、および終了タグが正しい順序になっていること。

有効なXMLは、DTDを使用し、そのすべての要件に準拠するXMLです。したがって、属性を不適切に使用すると、DTDに違反し、無効になります。

有効なXMLはすべて整形式ですが、整形式のXMLがすべて有効であるとは限りません。

6
ZachPruckowski

標準で設定されているすべてのXMLドキュメントの要件を満たしている場合、XMLは整形式です。そのため、単一のルートノード、正しくネストされたノード、すべてのノードの終了タグ(またはスラッシュの空のノードの短縮形の使用など)閉じ山括弧)、引用されている属性など。整形式であることは、XMLのルールに準拠しているため、適切に解析できることを意味します。

XMLは、DTDまたはスキーマに対して検証する場合に有効です。これは明らかにケースごとに異なります。1つのスキーマに対して有効なXMLは、まだ整形式であっても、別のスキーマに対して有効ではありません。

XMLの形式が適切でない場合、適切に解析できません。パーサーは単に例外をスローするか、エラーを報告します。これは汎用的なものであり、XMLに何が含まれていてもかまいません。一度解析されると、妥当性を確認できます。このドメインまたはコンテキストは依存しており、検証するDTDまたはスキーマが必要です。単純なXML文書の場合、DTDまたはスキーマがない場合があります。その場合、XMLが有効かどうかを知ることはできません。この場合、概念または有効性はまったく適用されません。もちろん、これは使用できないという意味ではなく、有効かどうかわからないという意味です。

4
Simon Forrest

XML仕様のW3Cは、XMLドキュメントの作成中に従う必要がある特定のルールを定義しています。このようなルールの例には、ルート要素を1つだけ持つ、各開始タグに終了タグを付ける、属性値に単一引用符または二重引用符を使用するなどが含まれます。 XMLドキュメントがこれらすべての規則に従っている場合、整形式ドキュメントと呼ばれ、XMLパーサーを使用してそのようなドキュメントを解析および処理できます。

ドキュメントタイプ定義(DTD)またはXMLスキーマを使用して、XMLドキュメントの特定のクラスの構造とコンテンツを定義できます。これには、親子関係の詳細、属性リスト、データ型情報、値の制限などが含まれます。整形式ルールに加えて、XMLドキュメントが関連するDTD /スキーマで指定されたルールにも従う場合、有効なXMLドキュメントであること。

すべての有効なXMLドキュメントは整形式ですが、その逆は必ずしも当てはまりません。整形式のXMLドキュメントは必ずしも有効である必要はありません。

3
harsha

Extensible Markup Language(XML)1.0(第5版)-W3C勧告2008年11月26日 から取得

[定義:データオブジェクトは、この仕様で定義されているように、整形式であればXMLドキュメントです。さらに、XMLドキュメントは、さらに特定の制約を満たす場合に有効です。]


テキストの段落上の段落よりも擬似コードを好む人のために...:)

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

理論に基づく: "Well Formed" vs. Valid

1
Kent Pawar

また、有効なXMLは整形式であることを暗示しますが、整形式XMLは必ずしも有効ではありません。

1
Joel Coehoorn

XMLがDTDルールを確認している場合、それは有効なXMLです。 XMLドキュメントがXMLルールに準拠している場合(開始されたすべてのタグが閉じられている場合、ルート要素があるなど)、それは整形式のXMLです。

1
Narasimhareddy

前述のDTDに加えて、XML文書の記述および検証には、 XMLSchema および RelaxNG の2つの方法があります。どちらもより使いやすく、より多くの機能をサポートできます。 DTD。

1
Kyle Burton

DTDはDocument Type Definitionの頭字語です。これは、一連のXMLファイルのコンテンツの説明です。これはXML 1.0仕様の一部であり、特定のドキュメントインスタンスがその構造とコンテンツを詳述する一連のルールに準拠していることを記述および検証できます。

検証は、DTDに対してドキュメントをチェックするプロセスです(より一般的には、一連の構築ルールに対して)。

検証プロセスとDTDの構築は、XMLライフサイクルの2つの最も難しい部分です。簡単に言えば、DTDは、ドキュメント内で検出される可能性のあるすべての要素、ドキュメントツリーの正式な形状を定義します(要素の許可コンテンツを定義することにより、テキスト、子の許可リストの正規表現、または混合コンテンツのいずれかすなわち、テキストと子の両方)。 DTDは、すべての要素の有効な属性とそれらの属性のタイプも定義します。

0
Rachna Garg

W3学校のXML DTD を参照してください:

正しい構文のXMLドキュメントは「Well Formed」と呼ばれます。

DTDに対して検証されたXMLドキュメントは、「Well Formed」と「Valid」の両方です。

0
Attila

まあ、定義上、整形式ではないXMLはXMLではありません。通常、人々は有効なXMLを特定のスキーマ(XSDまたはDTD)に準拠するXMLと呼びます。

0
Charles Graham