Diferencia entre PCDATA y CDATA en DTD

86

¿Cuál es la diferencia entre #PCDATAy #CDATAen DTD ?

Jakub Arnold
fuente
1
posible duplicado de lo que realmente es PCDATA y CDATA?
Joshua Drake
Los nombres de las palabras clave utilizadas en las DTD XML son #PCDATAy CDATA. No hay PCDATApalabra clave y no #CDATA.
mzjn
1
Además de la respuesta aceptada, debe leer stackoverflow.com/a/918462/2013911 porque explica la diferencia entre el tipo de atributo CDATA y las secciones marcadas <! [CDATA []]>.
Niklas Peter

Respuestas:

75

PCDATA - Datos de caracteres analizados

Los analizadores XML normalmente analizan todo el texto de un documento XML.

CDATA - Datos de caracteres (sin analizar)

El término CDATA se utiliza para los datos de texto que no deben ser analizados por el analizador XML.

Los caracteres como "<" y "&" son ilegales en elementos XML.

Matthew Vines
fuente
77
  • PCDATAes texto que será analizado por un analizador. Las etiquetas dentro del texto se tratarán como marcas y las entidades se expandirán.
  • CDATAes texto que no será analizado por un analizador. Las etiquetas dentro del texto no se tratarán como marcado y las entidades no se expandirán.

Por defecto, todo lo es PCDATA. En el siguiente ejemplo, si se ignora la raíz, <bar>se analizará y no tendrá contenido, sino un hijo.

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

Cuando queremos especificar que un elemento solo contendrá texto y no elementos secundarios, usamos la palabra clave PCDATA, porque esta palabra clave especifica que el elemento debe contener datos de caracteres analizables, es decir, cualquier texto excepto los caracteres menores que ( <), mayor que ( >), ampersand ( &), comillas ( ') y comillas dobles ( ").

En el siguiente ejemplo, <bar>contiene CDATA. Su contenido no se analizará y es así <test>content!</test>.

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

Hay varios modelos de contenido en SGML. El #PCDATAmodelo de contenido dice que un elemento puede contener texto sin formato. La parte "analizada" significa que el marcado (incluidos los PI, los comentarios y las directivas SGML) se analiza en lugar de mostrarse como texto sin procesar. También significa que se reemplazan las referencias a entidades.

Otro tipo de modelo de contenido que permite contenidos de texto plano es CDATA. En XML, el modelo de contenido del elemento no se puede establecer implícitamente CDATA, pero en SGML, significa que el marcado y las referencias a entidades se ignoran en el contenido del elemento. CDATASin embargo, en los atributos de tipo, se reemplazan las referencias a entidades.

En XML, #PCDATAes el único modelo de contenido de texto sin formato. Úselo si desea permitir contenido de texto en el elemento. El CDATAmodelo de contenido puede usarse explícitamente a través del CDATAmarcado de bloque en #PCDATA, pero el contenido del elemento puede no estar definido CDATApor defecto.

En una DTD, el tipo de atributo que contiene texto debe ser CDATA. La CDATApalabra clave en una declaración de atributo tiene un significado diferente al de la CDATAsección en un documento XML. En una CDATAsección de todos los caracteres son legales (incluyendo <, >, &, 'y "caracteres), excepto la ]]>etiqueta final.

#PCDATAno es apropiado para el tipo de atributo. Se utiliza para el tipo de texto "hoja".

#PCDATAestá precedido por un hash en el modelo de contenido para distinguir esta palabra clave de un elemento nombrado PCDATA(que sería perfectamente legal).

Rosa Perrone
fuente
6
Gran respuesta, excepto por la última oración. #no es un hashtag. Solo una etiqueta precedida por este símbolo es un hashtag. El símbolo en sí tiene muchos nombres , incluido "signo de número", "signo de libra" (principalmente Canadá y EE. UU.) O simplemente "hash" (de ahí el nombre "hashtag").
6
#justhadtogetthatoffmychest
3
No estoy de acuerdo con que el # de delante #PCDATAesté ahí por razones históricas. Está ahí porque en un DTD, un elemento también podría contener un elemento llamado PCDATA, que debe ser posible y que se vería así <!ELEMENT foo (PCDATA)>.
Mathias Müller
La cotización y la doble cotización son perfectamente legales en el contenido de PCDATA. Y puede aparecer un signo comercial, pero (en XML) solo como un introductor de entidad.
Toby Speight
12

PCDATA: datos de caracteres analizados. Analiza todos los datos de un documento XML.

Ejemplo:

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

Aquí, el <family>elemento contiene 2 elementos más: <mother>y <father>. Por lo tanto, analiza más para obtener el texto de la madre y el padre para dar el valor de texto de la familia como "mamá y papá".

CDATA: datos de caracteres sin analizar. Estos son los datos que no deben analizarse más en un documento xml.

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

Aquí, el valor de texto de familia será <mother>mom</mother><father>dad</father>.

huellas dactilares
fuente
11

Desde aquí ( Google es tu amigo ):

En una DTD, PCDATA y CDATA se utilizan para afirmar algo sobre el contenido permitido de elementos y atributos, respectivamente. En el modelo de contenido de un elemento, #PCDATA dice que el elemento contiene (puede contener) "cualquier texto antiguo". (Con las excepciones que se indican a continuación). En la declaración de un atributo, CDATA es un tipo de restricción que puede poner en los valores permitidos del atributo (otros tipos, todos mutuamente excluyentes, incluyen ID, IDREF y NMTOKEN). Un atributo cuyos valores permitidos son CDATA puede (como PCDATA en un elemento) contener "cualquier texto antiguo".

Un problema potencialmente realmente confuso es que hay otro "CDATA", también conocido como secciones marcadas. Una sección marcada es una parte del contenido del elemento (#PCDATA) delimitada con cadenas especiales: para cerrarla. Si recuerda que PCDATA son "datos de caracteres analizados", una sección CDATA es literalmente lo mismo, sin el "analizado". Los analizadores transmiten el contenido de una sección marcada a aplicaciones posteriores sin problemas cada vez que encuentran caracteres especiales como <y &. Esto es útil cuando está codificando un documento que contiene muchos de esos caracteres especiales (como scripts y fragmentos de código); es más fácil en la entrada de datos y más fácil de leer que la referencia de entidad correspondiente.

Por lo tanto, puede inferir que la excepción a la regla "cualquier texto antiguo" es que PCDATA no puede incluir ninguno de estos caracteres especiales sin escape, A MENOS que estén dentro del alcance de una sección marcada con CDATA.

Oli
fuente
3

La principal diferencia entre PCDATA y CDATA es

PCDATA: se utiliza básicamente para ELEMENTS mientras

CDATA: se utiliza para atributos de XML, es decir, ATTLIST

Rachana K
fuente
0

CDATA ( C r incón dele DATOS ): Es similar a un comentario, pero es parte del documento. es decir, CDATA es un dato, es parte del documento pero los datos no se pueden analizar en XML.
Nota: el comentario XML se omite al analizar un XML, pero CDATA se muestra como está.

PCDATA ( P arsed C r incón dele DATOS ): Por defecto, todo es PCDATA. PCDATA es un dato, se puede analizar en XML.

Premraj
fuente