私は違いに気づいていませんでしたが、同僚は違いがあると言いましたが、彼はそれを裏付けることはできません. あるとすれば違いは何ですか?
13 に答える
整形式と有効な XML
整形式とは、テキスト オブジェクトが XMLであるためのW3C 要件を満たしていることを意味します。
有効とは、整形式の XML が、指定されたスキーマによって指定された追加の要件を満たしていることを意味します。
正式な定義
XMLに関する W3C 勧告に従って:
[定義: データ オブジェクトは、 この仕様で定義されているように整形式の場合、XML ドキュメントです。さらに、特定のさらなる制約を満たす場合、XML ドキュメントは有効です。]
所見:
- 整形式でないドキュメントは XML ではありません。(整形式の XMLが一般的に使用されますが、技術的に冗長です。)
- 有効であるということは、整形式であることを意味します。
- 整形式であることは、有効であることを意味しません。
- XMLのW3C 勧告では有効性が DTD に反するものであると定義されていますが、従来の使用法では、XSD、RELAX NG、Schematron、またはその他の方法で指定された XML スキーマへの適合のためにこの用語を適用することができます。
文書の原因の例...
整形式ではありません:
- 要素に終了タグがありません (自己終了ではありません)。
- 適切な入れ子なしで要素が重なっています:
<a><b></a></b>
- 属性値に、開始引用符と一致する終了引用符がありません。
<
orは、 or&
ではなくコンテンツで使用されます。<
&
- 複数のルート要素が存在します。
- 複数の XML 宣言が存在するか、XML 宣言がドキュメントの先頭以外に表示されます。
無効
- 要素または属性が欠落していますが、XML スキーマに必要です。
- 要素または属性が使用されていますが、XML スキーマで定義されていません。
- 要素の内容が、XML スキーマで指定された内容と一致しません。
- 属性の値が XML スキーマで指定された型と一致しません。
名前空間の整形式
技術的には、XML のコンポーネント名にはコロン文字を使用できます。ただし、コロンは名前空間の目的でのみ名前に使用する必要があります。
ノート:
XML 勧告の名前空間 [ XML Names ] は、コロン文字を含む名前に意味を割り当てます。したがって、作成者は名前空間の目的以外で XML 名にコロンを使用しないでください。ただし、XML プロセッサはコロンを名前文字として受け入れる必要があります。
そのため、別の用語namespace-well -formedは XML 1.0 W3C 勧告の名前空間で定義されており、整形式であることに関するすべての XML 規則に加えて、名前空間と名前空間プレフィックスを管理する規則を意味します。
口語的に、適切な形式の用語は、名前空間の適切な形式がより正確な場合によく使用されます。ただし、これは、この回答で説明されている適切な形式の XML と有効な XMLの区別よりも実用的な結果が得られないマイナーな技術的な方法です。
有効な XML は、DTD に対する検証に成功する XML です。
適切な形式の XML は、すべてのタグが適切な順序で閉じられている XML であり、宣言がある場合は、適切な属性を持つファイルの最初のものです。
言い換えれば、有効性はセマンティクスを指し、整形式は構文を指します。
そのため、整形式の無効な XML を持つことができます。
他の人が言ったように、整形式の XML は XML 仕様に準拠しており、有効な XML は特定のスキーマに準拠しています。
別の言い方をすると、整形式の XML は字句的に正しい (解析可能) のに対し、有効な XML は文法的に正しい (既知の語彙や文法に一致させることができる) ということです。
XML ドキュメントは、整形式になるまで有効ではありません。すべての XML ドキュメントは、整形式であることを示す同じ標準 (W3 が発行した RFC) に準拠しています。1 つの XML ドキュメントが、一部のスキーマに対して有効であり、他のスキーマに対して無効である場合があります。多数のスキーマ言語があり、その多くは XML ベースです。
整形式 XML は、言語の構文要件を満たす XML です。<whatever />
終了タグが欠落していないこと、すべてのシングルトン タグが<whatever>
.
有効な XML は、DTD を使用し、そのすべての要件に準拠する XML です。したがって、属性を不適切に使用すると、DTD に違反し、無効になります。
有効な XML はすべて整形式ですが、整形式の XML がすべて有効というわけではありません。
XML は、標準によって設定されたすべての XML ドキュメントの要件を満たしている場合、整形式です。つまり、ルート ノードが 1 つある、ノードが正しくネストされている、すべてのノードに終了タグがある (または前にスラッシュの空のノードの省略形を使用する) などがあります。整形式であるということは、XML の規則に準拠しているため、適切に解析できることを意味します。
XML は、DTD またはスキーマに対して検証される場合に有効です。これは明らかにケースバイケースです。あるスキーマに対して有効な XML は、整形式であっても、別のスキーマに対しては有効ではありません。
XML が整形式でない場合、適切に解析できません。パーサーは単純に例外をスローするか、エラーを報告します。これは一般的なものであり、XML に何が含まれているかは問題ではありません。解析されて初めて、有効性をチェックできます。このドメインまたはコンテキストに依存し、検証する DTD またはスキーマが必要です。単純な XML 文書の場合、DTD またはスキーマがない場合があります。その場合、XML が有効かどうかを知ることができません。この場合、概念または有効性は適用されません。もちろん、これは使用できないという意味ではなく、有効かどうかわからないということです。
W3C の XML 仕様では、XML ドキュメントを作成する際に従う必要がある特定のルールが定義されています。このようなルールの例には、ルート要素を 1 つだけ持つ、各開始タグに終了タグを持たせる、属性値に一重/二重引用符を使用する、などが含まれます。XML ドキュメントがこれらすべてのルールに従っている場合、それは整形式のドキュメントであると言われ、XML パーサーを使用してそのようなドキュメントを解析および処理できます。
ドキュメント タイプ定義 (DTD) または XML スキーマを使用して、XML ドキュメントの特定のクラスの構造と内容を定義できます。これには、親子関係の詳細、属性リスト、データ型情報、値の制限などが含まれます。整形式規則に加えて、XML ドキュメントが関連する DTD/スキーマで指定された規則にも従う場合、それは次のようになります。有効な XML ドキュメントである必要があります。
すべての有効な XML ドキュメントは整形式ですが、その逆は必ずしも真ではありません。整形式の XML ドキュメントは必ずしも有効である必要はありません。
XML が DTD ルールに準拠している場合、それは有効な XML です。XML ドキュメントが XML 規則に準拠している場合 (開始されたすべてのタグが閉じられている、ルート要素があるなど)、それは整形式の XML です。
有効な XML は整形式であることも意味しますが、整形式の XML が必ずしも有効であるとは限りません。
DTD は Document Type Definition の頭字語です。これは、XML ファイルのファミリーのコンテンツの説明です。これは XML 1.0 仕様の一部であり、特定のドキュメント インスタンスがその構造と内容を詳述する一連の規則に準拠していることを記述および検証できます。
検証とは、ドキュメントを DTD に照らして (より一般的には一連の構築規則に照らして) チェックするプロセスです。
検証プロセスと DTD の構築は、XML ライフ サイクルの中で最も困難な 2 つの部分です。簡単に言えば、DTD は、ドキュメント内で検出される可能性のあるすべての要素、ドキュメント ツリーの正式な形状を定義します (要素の許可されたコンテンツを定義することにより、テキスト、許可された子のリストの正規表現、または混合コンテンツのいずれか)。つまり、テキストと子の両方)。DTD は、すべての要素の有効な属性とそれらの属性の型も定義します。
定義上、整形式でない XML は XML ではありません。人々は通常、有効な XML を特定のスキーマ (XSD または DTD) に準拠する XML と呼んでいます。