- PCDATA è un testo che verrà analizzato da un parser. I tag all'interno del testo verranno trattati come markup e le entità verranno espanse.
- CDATA è un testo che sarà non analizzato da un parser. I tag all'interno del testo saranno non da trattare come markup e le entità non verranno espanse.
Per impostazione predefinita, tutto è PCDATA. Nel seguente esempio, ignorando la radice, verrà analizzato e non avrà alcun contenuto, ma un figlio.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Quando vogliamo specificare che un elemento conterrà solo il testo, e non elementi figlio, usiamo la parola chiave PCDATA, perché questa parola chiave specifica che l'elemento deve contenere i dati di carattere analizzabile - vale a dire, qualsiasi testo ad eccezione i caratteri minori di (<), maggiore di (>), e commerciale (&), preventivo (') e doppio preventivo (").
Nell'esempio seguente, la barra è CDATA e non viene analizzata , e ha il contenuto "contenuto!".
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
Esistono diversi modelli di contenuto in SGML. Il modello di contenuto #PCDATA afferma che un elemento può contenere testo normale. La parte "analizzata" significa che il markup (inclusi i PI, i commenti e le direttive SGML) in esso contenuto viene analizzato anziché visualizzato come testo non elaborato. Significa anche che i riferimenti di entità sono sostituiti.
Un altro tipo di modello di contenuto che consente il contenuto di testo semplice è CDATA. In XML, il modello di contenuto dell'elemento non può essere implicitamente impostato su CDATA, ma in SGML significa che i riferimenti di markup e entità vengono ignorati nei contenuti dell'elemento. Tuttavia, negli attributi del tipo CDATA, i riferimenti di entità vengono sostituiti.
In XML #PCDATA è l'unico modello di contenuto in testo normale. Lo si utilizza se si desidera consentire il contenuto del testo nell'elemento. Il modello di contenuto CDATA può essere utilizzato esplicitamente attraverso il markup del blocco CDATA in #PCDATA, ma il contenuto dell'elemento non può essere definito come CDATA per impostazione predefinita.
In un DTD, il tipo di attributo che contiene testo deve essere CDATA. La parola chiave CDATA in una dichiarazione di attributo ha un significato diverso rispetto alla sezione CDATA in un documento XML. Nella sezione CDATA tutti i caratteri sono legali (incluso <,>, &, "e" caratteri) eccetto "]]>" tag finale ".
#PCDATA non è appropriato per il tipo di un attributo. È usato per il tipo di testo "foglia".
#PCDATA è preceduto da un hashtag semplicemente per ragioni storiche.
La confusione può essere causata dal fatto che CDATA può essere analizzato, ma da un parser diverso. Ad esempio, il contenuto di un elemento 'script', che è CDATA in HTML, viene analizzato dall'interprete Javascript. –