Qual è la differenza tra #PCDATA
e #CDATA
in DTD?Differenza tra PCDATA e CDATA in DTD
risposta
PCDATA - analizzato carattere di dati
parser XML normalmente analizzare tutto il testo in un documento XML.
CDATA - (non analizzate) Character dati
Il termine CDATA viene utilizzata per i dati di testo che non deve essere analizzato dal parser XML.
Caratteri come "<" e "&" non sono consentiti negli elementi XML.
From here (Google is your friend):
In una DTD, PCDATA e CDATA sono utilizzati per affermare qualcosa ammissibile contenuto di elementi e attributi, rispettivamente . Nel modello del contenuto di un elemento, #PCDATA dice che l'elemento contiene (può contenere) "qualsiasi vecchio testo". (Con come indicato di seguito. Eccezioni) In dichiarazione di un attributo, CDATA è una sorta di vincolo che si può mettere su valori ammissibili dell'attributo (altri tipi, tutti si escludono a vicenda, 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 confusa è che c'è un'altra "CDATA," noto anche come sezioni marcate. Una sezione contrassegnata da è una porzione del contenuto di elemento (#PCDATA) delimitata da stringhe speciali : per chiuderla. Se si ricordare che PCDATA è "analizzato dati di carattere", una sezione CDATA è letteralmente la stessa cosa, senza il " " analizzato. " Gli parser trasmettono il contenuto di una sezione contrassegnata alle applicazioni downstream senza singhiozzamento ogni volta che incontrano caratteri speciali come < e &. Questo è utile quando stai codificando un documento che contiene molti di questi caratteri speciali (come gli script e frammenti di codice); è più facile sull'immissione dei dati, e più facile sulla lettura , rispetto all'entità corrispondente di riferimento.
Così si può dedurre che l'eccezione alla regola "qualsiasi vecchio testo" è che PCDATA non può includere uno qualsiasi di questi caratteri speciali escape, salvo che rientrino nell'ambito di un CDATA segnato sezione.
- 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. Nell'esempio seguente, ignorando la radice, verrà analizzato <bar>
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 personaggi meno-che (<), maggiore di (>), commerciale (&), preventivo (') e doppie virgolette (").
Nel prossimo esempio, <bar>
contiene CDATA. il suo contenuto non sarà analizzato ed è quindi <test>content!</test>
.
<?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. In una sezione CDATA tutti i caratteri sono legali (inclusi <,>, &, "e" caratteri), ad eccezione di "]]>" end tag.
#PCDATA non è appropriato per il tipo di un attributo. È usato per il tipo di testo "foglia".
#PCDATA è preceduto da un hash semplicemente per ragioni storiche.
Ottima risposta, ad eccezione dell'ultima frase. '#' non è un hashtag. Solo un tag preceduto da questo simbolo è un hashtag. Il simbolo stesso ha [molti nomi] (https://en.wikipedia.org/wiki/Number_sign#Other_names_in_English), tra cui "number sign", "pound sign" (principalmente Canada e Stati Uniti), o semplicemente "hash" (quindi il nome "hashtag"). –
#justhadtogetthatoffmychest –
Non sono d'accordo che il # di fronte a # # PCDATA sia lì per ragioni storiche. È lì perché in un DTD, un elemento potrebbe contenere anche un elemento chiamato 'PCDATA', che deve essere possibile, e che dovrebbe apparire come' '. –
La differenza principale tra molto PCDATA e CDATA è
PCDATA - In sostanza utilizzata per gli elementi, mentre
CDATA - Usato per gli attributi di XML cioè ATTLIST
PCDATA - analizzati i dati di carattere. Analizza tutti i dati in un documento xml.
Esempio:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
Qui, l'elemento di famiglia contiene più di 2 elementi “madre” e “padre”. Quindi analizzare ulteriormente per ottenere il testo della madre e del padre per dare il valore della famiglia come “mom dad”
CDATA - non analizzate i carattere dati. Questi sono i dati che non devono essere analizzati ulteriormente in un documento xml.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
Qui, il valore della famiglia sarà <mother>mom</mother><father>dad</father>
.
CDATA (C haracter DATI): E 'simile ad un commento, ma è parte del documento. Ad esempio, CDATA è un dato, è parte del documento ma i dati non possono essere analizzati in XML.
Nota: Il commento XML si omette durante l'analisi di un XML, ma CDATA mostra così com'è.
PCDATA (P arsed C haracter DATI): per impostazione predefinita, tutto è PCDATA. PCDATA è un dato, può essere analizzato in XML.
possibile duplicato di [cosa è effettivamente PCDATA e CDATA?] (Http://stackoverflow.com/questions/857876/what-actually-is-pcdata-and-cdata) –
I nomi delle parole chiave utilizzate nei DTD XML sono '# PCDATA' e' CDATA'. Non esiste una parola chiave 'PCDATA' e nessun' # CDATA'. – mzjn
Oltre alla risposta accettata, è necessario leggere https://stackoverflow.com/a/918462/2013911 perché spiega la differenza tra il tipo di attributo CDATA e le sezioni contrassegnate da . –