2009-05-27 54 views
71

¿Cuál es la diferencia entre #PCDATA y #CDATA en DTD?Diferencia entre PCDATA y CDATA en DTD

+1

posible duplicado de [lo que en realidad es PCDATA y CDATA?] (Http://stackoverflow.com/questions/857876/what-actually-is-pcdata-and-cdata) –

+0

Los nombres de las palabras clave utilizadas en XML DTDs son '# PCDATA' y' CDATA'. No hay palabra clave 'PCDATA' y no' # CDATA'. – mzjn

+0

Además de la respuesta aceptada, debe leer https://stackoverflow.com/a/918462/2013911 porque explica la diferencia entre el tipo de atributo CDATA y las secciones marcadas . –

Respuesta

61

PCDATA - Datos de Carácter Parsed

analizadores XML normalmente analizan todo el texto en un documento XML.

CDATA - (no analizada) Carácter de datos

El término se utiliza CDATA sobre los datos de texto que no debe ser analizado por el analizador XML.

Caracteres como "<" y "&" son ilegales en elementos XML.

10

From here (Google is your friend):

En una DTD, PCDATA y CDATA se usan para aserción algo sobre el contenido permisible de elementos y atributos, respectivamente. En el contenido de un elemento modelo, #PCDATA dice que el elemento contiene (puede contener) "cualquier texto anterior". (con las excepciones que se indican a continuación.) En la declaración de un atributo, CDATA es un tipo de limitación que puede poner en valores permitidos del atributo (otros géneros, todas mutuamente excluyentes, incluyen identificación, IDREF y NMTOKEN). Un atributo cuyos valores permitidos son CDATA puede (como PCDATA en un elemento) contener "cualquier texto anterior".

Una cuestión que puede ser muy confuso es que hay otra "CDATA" también conocida como secciones marcadas. Una sección marcada es una porción del contenido del elemento (#PCDATA) delimitada con cadenas especiales : para cerrarla. Si recuerda que PCDATA es "datos de caracteres analizados", una sección CDATA es literalmente la misma cosa, sin el "analizado". Los analizadores transmiten el contenido de una sección marcada a las aplicaciones en sentido descendente sin que ocurra 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 en la lectura , que la entidad correspondiente de referencia.

Por lo que se puede inferir que la excepción a la "cualquier texto antiguo" regla es que PCDATA no puede incluir ninguno de estos caracteres especiales sin escape, a menos que caigan dentro del ámbito de un CDATA marcado sección.

54
  • PCDATA es texto que será analizado por un analizador.Las etiquetas dentro del texto se tratarán como marcas y las entidades se expandirán.
  • CDATA es texto que no ser analizado por un analizador. Las etiquetas dentro del texto serán no se tratarán como marcas y las entidades no se expandirán.

Por defecto, todo es PCDATA. En el siguiente ejemplo, ignorando la raíz, se analizará <bar>, y no tendrá contenido, sino un elemento secundario.

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

Cuando queremos especificar que un elemento sólo contendrá el texto, y no hay elementos secundarios, que utilice la palabra clave PCDATA, porque esta palabra clave especifica que el elemento debe contener datos de carácter parsable - es decir, cualquier texto, salvo los caracteres menor que (<), mayor que (>), comercial (&), cita (') y comillas dobles (").

En el siguiente ejemplo, <bar> contiene CDATA. Su contenido no serán analizado y es por lo tanto <test>content!</test>.

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

Hay varios modelos de contenido en SGML. El modelo de contenido #PCDATA 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 formato. También significa que las referencias de entidad son reemplazadas.

Otro tipo de modelo de contenido que permite contenido de texto sin formato es CDATA. En XML, el modelo de contenido del elemento no puede establecerse implícitamente en CDATA, pero en SGML, significa que las referencias de marcado y entidad se ignoran en el contenido del elemento. Sin embargo, en los atributos de tipo CDATA, las referencias de entidad son reemplazadas.

En XML, #PCDATA es el único modelo de contenido de texto sin formato. Lo usa si quiere permitir el contenido de texto en el elemento. El modelo de contenido CDATA se puede usar explícitamente a través del marcado de bloque CDATA en #PCDATA, pero el contenido del elemento no se puede definir como CDATA por defecto.

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

#PCDATA no es apropiado para el tipo de atributo. Se usa para el tipo de texto de "hoja".

#PCDATA se antepone por un hash simplemente por razones históricas.

+4

Gran respuesta, a excepción de 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] (https://en.wikipedia.org/wiki/Number_sign#Other_names_in_English), incluyendo "signo de número", "signo de libra" (principalmente Canadá y EE. UU.), O simplemente "hash" (por lo tanto, el nombre 'hashtag'). –

+4

#justhadtogetthatoffmychest –

+2

No estoy de acuerdo con que el # delante de '# PCDATA' esté allí por razones históricas. Está ahí porque en una DTD, un elemento también podría contener un elemento llamado 'PCDATA', que debe ser posible, y que se vería como' '. –

3

La misma diferencia principal entre PCDATA y CDATA es

PCDATA - Básicamente utiliza para los elementos, mientras que

CDATA - Se utiliza para atributos de XML es decir ATTLIST

5

PCDATA - datos de carácter analizado. Analiza todos los datos en un documento xml.

Ejemplo:

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

En este caso, el elemento familiar consta de 2 elementos más “madre” y“padre”. Por lo tanto, analizar aún más para obtener el texto de la madre y el padre para dar el valor de la familia como “mamá papá”

CDATA - unparsed characted de datos. Estos son los datos que no se deben analizar en un documento xml.

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

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

0

CDATA (C r incón dele DATOS): Es similar a un comentario, pero es parte del documento. es decir, CDATA es una información, es parte del documento pero los datos no pueden analizarse en XML.
Nota: El comentario XML se omite al analizar un XML, pero CDATA aparece tal 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.