DTDにおけるPCDATAとCDATAの違い


86

違いは何である#PCDATA#CDATAにおけるDTDは



XML DTDで使用されるキーワードの名前は、#PCDATAおよびCDATAです。何もありませんPCDATAキーワードと何が #CDATA
mzjn 2016

1
受け入れられた回答に加えて、stackoverflow.com / a / 918462/2013911を読む必要があります。これは、CDATA属性タイプと<![CDATA []]>マークされたセクションの違いを説明しているためです。
Niklas Peter

回答:


75

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

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

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

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

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


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

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

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

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

次の例で<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コンテンツモデルを介して明示的に使用することができるCDATAのブロックのマークアップ#PCDATAが、エレメントの内容は、以下のように定義されない場合がありCDATA、デフォルトあたり。

DTDでは、テキストを含む属性のタイプはである必要がありますCDATACDATA属性宣言のキーワードはCDATA、XMLドキュメントのセクションとは異なる意味を持っています。でCDATAセクション全ての文字が(含む合法である<>&'および"を除いて、文字)]]>終了タグ。

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

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


6
最後の文を除いて、素晴らしい答え。#ハッシュタグではありません。この記号が前に付いているタグのみがハッシュタグです。シンボル自体が持っている多くの名前「番号記号」、「シャープ記号」(主にカナダ&アメリカ)、または単に「ハッシュ」(したがって、その名前「ハッシュタグ」)を含むが、。

6
#justhadtogetthatoffmychest

3
#PCDATA歴史的な理由から、前の#がそこにあることに同意しません。これは、DTDでは、要素に、という名前の要素が含まれてPCDATAいる可能性があるためです<!ELEMENT foo (PCDATA)>。これは可能である必要があり、のようになります。
マティアスミュラー

PCDATAコンテンツでは、引用符と二重引用符は完全に合法です。また、アンパサンドが表示される場合がありますが、(XMLでは)エンティティの紹介者としてのみ表示されます。
TobySpeight19年

12

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

例:

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

ここで、<family>要素にはさらに2つの要素が含まれています:<mother><father>。したがって、さらに解析して、母と父のテキストを取得し、家族のテキスト値を「お母さんお父さん」として与えます

CDATA –未解析の文字データ。これは、xmlドキュメントでこれ以上解析してはならないデータです。

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

ここで、familyのテキスト値はになります<mother>mom</mother><father>dad</father>


11

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

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

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

したがって、「古いテキスト」ルールの例外は、CDATAでマークされたセクションの範囲内にない限り、PCDATAにこれらのエスケープされていない特殊文字を含めることはできないということです。


3

PCDATAとCDATAの主な違いは

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

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


0

CDATA(C haracter DATA):コメントに似ていますが、ドキュメントの一部です。つまり、CDATAはデータであり、ドキュメントの一部ですが、データをXMLで解析することはできません。
注: XMLコメントは、XMLの解析中に省略されますが、CDATAはそのまま表示されます。

PCDATA(P arsed C haracter DATA):デフォルトでは、すべてがPCDATAです。PCDATAはデータであり、XMLで解析できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.