89

DTD#PCDATAのと#CDATAの違いは何ですか?

4

7 に答える 7

81
  • PCDATAパーサーによって解析されるテキストです。テキスト内のタグはマークアップとして扱われ、エンティティは展開されます。
  • CDATAパーサーによって解析されないテキストです。テキスト内のタグは マークアップとして扱われず、エンティティは展開されません

デフォルトでは、すべてがPCDATA. 次の例では、ルートを無視<bar>すると解析され、コンテンツはなく、1 つの子が含まれます。

<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>

要素にテキストのみが含まれ、子要素が含まれないように指定する場合は、キーワード を使用します。これは、このキーワードが、要素に解析可能な文字データ (つまり、( )PCDATA未満の文字を除くすべてのテキスト) を含める必要があることを指定するためです。<大なり ( >) 、アンパサンド ( &)、引用 ( ')、および二重引用符 ( ")。

次の例では、<bar>contains CDATA. その内容は解析されないため、<test>content!</test>.

<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>

SGML にはいくつかのコンテンツ モデルがあります。コンテンツ モデルは、#PCDATA要素にプレーン テキストを含めることができると述べています。その「解析された」部分は、その中のマークアップ (PI、コメント、および SGML ディレクティブを含む) が生のテキストとして表示される代わりに解析されることを意味します。また、エンティティ参照が置き換えられることも意味します。

プレーン テキスト コンテンツを許可する別のタイプのコンテンツ モデルはCDATAです。XML では、要素コンテンツ モデルが暗黙的に に設定されない場合がありますCDATAが、SGML では、要素のコンテンツでマークアップとエンティティ参照が無視されることを意味します。ただし、タイプの属性でCDATAは、エンティティ参照が置き換えられます。

XML では#PCDATA、唯一のプレーン テキスト コンテンツ モデルです。要素にテキスト コンテンツを許可したい場合に使用します。CDATAコンテンツ モデルは、 のブロック マークアップを通じて明示的に使用できますがCDATA#PCDATA要素のコンテンツはデフォルトで定義されていない場合がありCDATAます。

DTD では、テキストを含む属性の型は でなければなりませんCDATA。属性宣言のキーワードは、XML ドキュメントCDATAのセクションとは異なる意味を持ちます。セクションでは、終了タグを除くすべての文字 ( CDATA、、、および文字を含む)が有効です。CDATA<>&'"]]>

#PCDATA属性のタイプに適していません。「リーフ」テキストのタイプに使用されます。

#PCDATAこのキーワードを指定された要素と区別するために、コンテンツ モデルの先頭にハッシュが追加されますPCDATA(これは完全に合法です)。

于 2012-07-24T05:19:39.490 に答える
78

PCDATA - 解析済み文字データ

XML パーサーは通常、XML ドキュメント内のすべてのテキストを解析します。

CDATA - (解析されていない) 文字データ

CDATA という用語は、XML パーサーによって解析されるべきではないテキスト データについて使用されます。

「<」や「&」などの文字は、XML 要素では使用できません。

于 2009-05-27T23:23:31.450 に答える
14
于 2016-12-26T19:28:50.930 に答える
12

ここから( Google はあなたの友達です):

DTD では、PCDATA と CDATA を使用して、要素と属性の許容可能な内容について何かをアサートします。要素のコンテンツ モデルでは、#PCDATA は要素が「古いテキスト」を含む (含む可能性がある) ことを示します。(以下に示す例外を除きます。) 属性の宣言では、CDATA は、属性の許容値に適用できる一種の制約です (その他の種類はすべて相互に排他的で、ID、IDREF、および NMTOKEN が含まれます)。許容値が CDATA である属性には、(要素内の PCDATA のように) 「任意の古いテキスト」を含めることができます。

非常に紛らわしい可能性がある問題は、マークされたセクションとも呼ばれる別の「CDATA」があることです。マークされたセクションは、特殊な文字列で区切られた要素 (#PCDATA) コンテンツの一部です: それを閉じます。PCDATA が「解析された文字データ」であることを覚えていれば、CDATA セクションは「解析された」部分がなくても文字通り同じものです。パーサーは、< や & などの特殊文字に遭遇するたびに問題なく、マークされたセクションのコンテンツをダウンストリーム アプリケーションに送信します。これは、これらの特殊文字 (スクリプトやコード フラグメントなど) を多数含むドキュメントをコーディングする場合に便利です。対応するエンティティ参照よりも、データの入力と読み取りが簡単です。

したがって、「すべての古いテキスト」規則の例外は、PCDATA がこれらのエスケープされていない特殊文字を含めることはできないということであると推測できます。

于 2009-05-27T23:23:29.517 に答える