web-dev-qa-db-ja.com

DTDのPCDATAとCDATAの違い

違いは何ですか #PCDATAおよび#CDATA in [〜#〜] dtd [〜#〜]

81
Jakub Arnold

PCDATA-解析された文字データ

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

CDATA-(未解析)文字データ

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

「<」や「&」などの文字は、XML要素では無効です。

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

デフォルトでは、すべてがPCDATAです。次の例では、ルートを無視します<bar>は解析され、コンテンツはありませんが、1つの子があります。

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

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

次の例では、<bar>には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コンテンツモデルは、#PCDATAのCDATAブロックマークアップを通じて明示的に使用できますが、要素コンテンツはデフォルトでCDATAとして定義されない場合があります。

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

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

#PCDATAは、単に歴史的な理由でハッシュが付加されます。

67
Rose Perrone

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

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

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

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

11
Oli

PCDATA –解析された文字データ。 xmlドキュメント内のすべてのデータを解析します。

例:

<family>
    <mother>mom</mother>
    <father>dad</father>
</family>

ここでは、ファミリ要素にさらに2つの要素“ mother”および“ father”が含まれています。したがって、さらに解析して、母親と父親のテキストを取得して、家族の価値を“ mom dad”

CDATA –解析されていない文字データ。これは、XMLドキュメントでこれ以上解析されるべきではないデータです。

<family>
    <![CDATA[ 
       <mother>mom</mother>
       <father>dad</father>
    ]]>
</family>

ここでは、家族の価値は<mother>mom</mother><father>dad</father>

9
winter

PCDATAとCDATAの主な違いは

PCDATA-基本的にELEMENTSに使用されます

CDATA-XMLの属性、つまりATTLISTに使用

3
Rachana K

CDATA([〜#〜] c [〜#〜] haracter [〜#〜] data [〜#〜]):コメントに似ていますが、文書の一部。つまり、CDATAはデータであり、ドキュメントの一部ですが、データはXMLで解析できません。
注: XMLの解析中にXMLコメントは省略されますが、CDATAはそのまま表示されます。

PCDATA([〜#〜] p [〜#〜] arsed [〜#〜] c [〜#〜] haracter [〜#〜] data [〜#〜]):デフォルトでは、すべてがPCDATAです。 PCDATAはデータであり、XMLで解析できます。

0
Premraj