2009-05-13 26 views
26

parece que una definición flexible de PCDATA y CDATA es que¿qué es realmente PCDATA y CDATA?

  1. PCDATA es datos de caracteres, pero es para ser analizada.
  2. CDATA son datos de caracteres y no es para analizar.

pero luego alguien me dijo que CDATA está realmente analizado o que PCDATA en realidad no se analiza ... por lo que es un poco confuso. ¿Alguien sabe que el verdadero negocio es?

Actualización: De hecho, agregué la definición de PCDATA en Wikipedia ... así que no tomes esa respuesta demasiado en serio, ya que es solo mi entendimiento de ella.

+0

La confusión puede ser causada por el hecho de que CDATA puede ser analizado, pero por un analizador diferente. Por ejemplo, el intérprete Javascript analiza el contenido de un elemento 'script', que es CDATA en HTML. –

Respuesta

22

de wiki:

PCDATA

En pocas palabras, PCDATA representa caracteres de datos analizados. Eso significa que los caracteres deben ser analizados por el analizador XML, XHTML o HTML. (&lt; se cambiará a <, <p> se interpretará como una etiqueta de párrafo, etc.). Compare eso con CDATA, donde los caracteres no deben ser analizados por el analizador XML, XHTML o HTML.

CDATA

El término CDATA, es decir, los datos de caracteres, se utiliza para distintas, pero relacionadas propósitos en el lenguajes de marcado SGML y XML. El término indica que una cierta porción del documento es datos de caracteres generales, en lugar de datos sin carácter o datos de caracteres con una estructura más específica y limitada.

0

Su primera definición es correcta.

PCDATA se analiza, lo que significa que las entidades se expanden y que el texto se trata como marcado. CDATA no es analizado por un analizador XML.

9

Se analizan PCDATA y CDATA. Ambos son caracteres de datos.

Ambos solo deben incluir caracteres válidos. Por ejemplo, si la codificación de su documento es UTF-8, el contenido de las secciones CDATA debe seguir siendo caracteres UTF-8 válidos. Entonces, los datos binarios aleatorios probablemente evitarán que el documento esté bien formado. Además, las secciones CDATA aún se analizan, aunque solo sea para encontrar la etiqueta de la sección final. Pero el analizador ignora y pasa otros tipos de caracteres como, por ejemplo, <,> y &.

OTOH en PCDATA litteral < y & (y 'o "en los valores de los atributos) se deben escapar, o se interpretarán como marcas. Las entidades también se expandirán.

Así que sí, las secciones CDATA están realmente analizadas. No estoy seguro de por qué le dijeron que PCDATA no es analizado.

3
  • 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, se analizará la raíz, se analizará 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, la barra es CDATA, y no se analiza y tiene el contenido "contenido".

<?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 la 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 a un hashtag simplemente por razones históricas.

0

Si solo los elementos se configuraron en CDATA de forma predeterminada en las DTD XHTML, se ahorrarían muchas modificaciones manuales feas ... ¿Por qué los bloques de script contienen otros elementos? Si existen tales elementos, son manejados por el intérprete JS en las acciones de manipulación DOM, en cuyo caso el analizador XML debe ignorarlos por completo antes de la inserción y el procesamiento del documento. Supongo que puede haber sido diseñado para forzar el uso de archivos de recursos de scripts externos, que en última instancia es algo bueno.