Qual è la differenza tra #PCDATA
e #CDATA
in DTD ?
#PCDATA
e CDATA
. Non ci sono PCDATA
parole chiave e no #CDATA
.
Qual è la differenza tra #PCDATA
e #CDATA
in DTD ?
#PCDATA
e CDATA
. Non ci sono PCDATA
parole chiave e no #CDATA
.
Risposte:
PCDATA - Dati carattere analizzati
I parser XML normalmente analizzano tutto il testo in un documento XML.
CDATA - Dati carattere (non analizzati)
Il termine CDATA viene utilizzato per i dati di testo che non devono essere analizzati dal parser XML.
Caratteri come "<" e "&" sono illegali negli elementi XML.
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 non verrà analizzato da un parser. I tag all'interno del testo
non verranno trattati come markup e le entità non verranno espanse.Per impostazione predefinita, tutto è PCDATA
. Nell'esempio seguente, ignorando la radice, <bar>
verrà analizzato e non avrà contenuto, ma un figlio.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Quando vogliamo specificare che un elemento conterrà solo testo e nessun elemento figlio, utilizziamo la parola chiave PCDATA
, poiché questa parola chiave specifica che l'elemento deve contenere dati carattere analizzabili, ovvero qualsiasi testo eccetto i caratteri minori di ( <
), maggiore di ( >
), e commerciale ( &
), virgolette ( '
) e virgolette doppie ( "
).
Nel prossimo esempio, <bar>
contiene CDATA
. Il suo contenuto non verrà analizzato ed è così <test>content!</test>
.
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
Esistono diversi modelli di contenuto in SGML. Il #PCDATA
modello di contenuto afferma che un elemento può contenere testo normale. La parte "analizzata" significa che il markup (inclusi PI, commenti e direttive SGML) viene analizzato invece che visualizzato come testo grezzo. Significa anche che i riferimenti all'entità vengono sostituiti.
Un altro tipo di modello di contenuto che consente contenuti di testo normale è CDATA
. In XML, il modello di contenuto dell'elemento potrebbe non essere impostato implicitamente CDATA
, ma in SGML significa che i riferimenti a markup e entità vengono ignorati nel contenuto dell'elemento. Negli attributi di CDATA
tipo, tuttavia, i riferimenti alle entità vengono sostituiti.
In XML, #PCDATA
è l'unico modello di contenuto in testo normale. Lo usi se vuoi consentire il contenuto del testo nell'elemento. Il CDATA
modello di contenuto può essere utilizzato esplicitamente attraverso il CDATA
markup del blocco in #PCDATA
, ma il contenuto dell'elemento potrebbe non essere definito come CDATA
predefinito.
In una DTD, il tipo di un attributo che contiene testo deve essere CDATA
. La CDATA
parola chiave in una dichiarazione di attributo ha un significato diverso rispetto alla CDATA
sezione in un documento XML. In una CDATA
sezione di tutti i personaggi sono legali (tra cui <
, >
, &
, '
e "
caratteri), ad eccezione del ]]>
tag di chiusura.
#PCDATA
non è appropriato per il tipo di attributo. Viene utilizzato per il tipo di testo "foglia".
#PCDATA
è anteposto da un hash nel modello di contenuto per distinguere questa parola chiave da un elemento denominato PCDATA
(che sarebbe perfettamente legale).
#
non è un hashtag. Solo un tag preceduto da questo simbolo è un hashtag. Il simbolo stesso ha molti nomi , tra cui "simbolo del numero", "cancelletto" (principalmente Canada e Stati Uniti) o semplicemente "hash" (da cui il nome "hashtag").
#PCDATA
sia lì per ragioni storiche. È lì perché in un DTD, un elemento potrebbe contenere anche un elemento denominato PCDATA
, che deve essere possibile e che sarebbe simile <!ELEMENT foo (PCDATA)>
.
PCDATA - dati dei caratteri analizzati. Analizza tutti i dati in un documento XML.
Esempio:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
Qui, l' <family>
elemento contiene altri 2 elementi: <mother>
e <father>
. Quindi analizza ulteriormente per ottenere il testo di madre e padre per dare al testo valore della famiglia come "mamma papà"
CDATA - Dati carattere non analizzati. Questi sono i dati che non dovrebbero essere analizzati ulteriormente in un documento xml.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
Qui, il valore testuale della famiglia sarà <mother>mom</mother><father>dad</father>
.
Da qui ( Google è tuo amico ):
In un DTD, PCDATA e CDATA vengono utilizzati per affermare qualcosa sul contenuto consentito di elementi e attributi, rispettivamente. Nel modello di contenuto di un elemento, #PCDATA dice che l'elemento contiene (può contenere) "qualsiasi vecchio testo". (Con le eccezioni riportate di seguito). Nella dichiarazione di un attributo, CDATA è un tipo di vincolo che è possibile applicare ai valori consentiti dell'attributo (altri tipi, tutti mutuamente esclusivi, includono ID, IDREF e NMTOKEN). Un attributo i cui valori consentiti sono CDATA può (come PCDATA in un elemento) contenere "qualsiasi vecchio testo".
Un problema potenzialmente molto confuso è la presenza di un altro "CDATA", denominato anche sezioni contrassegnate. Una sezione contrassegnata è una porzione di contenuto dell'elemento (#PCDATA) delimitata da stringhe speciali: per chiuderla. Se ricordi che PCDATA è "dati di caratteri analizzati", una sezione CDATA è letteralmente la stessa cosa, senza "parsed". I parser trasmettono il contenuto di una sezione contrassegnata alle applicazioni a valle senza singhiozzi ogni volta che incontrano caratteri speciali come <e &. Ciò è utile quando si codifica un documento che contiene molti di quei caratteri speciali (come script e frammenti di codice); è più facile nell'immissione dei dati e più facile nella lettura rispetto al riferimento all'entità corrispondente.
Quindi puoi dedurre che l'eccezione alla regola "qualsiasi vecchio testo" è che PCDATA non può includere nessuno di questi caratteri speciali senza caratteri di escape, A MENO che non rientrino nell'ambito di una sezione contrassegnata da CDATA.
CDATA ( C haracter DATA ): è simile a un commento ma fa parte del documento. cioè CDATA è un dato, fa parte del documento ma i dati non possono essere analizzati in XML.
Nota: il commento XML viene omesso durante l'analisi di un XML ma CDATA viene visualizzato così com'è.
PCDATA ( P arsed C haracter DATA ): per impostazione predefinita, tutto è PCDATA. PCDATA è un dato, può essere analizzato in XML.