89 votes

Différence entre PCDATA et CDATA dans la DTD

Quelle est la différence entre #PCDATA et #CDATA sur DTD ?

1 votes

1 votes

Les noms des mots-clés utilisés dans les DTD XML sont les suivants #PCDATA et CDATA . Il n'y a pas de PCDATA et pas de #CDATA .

1 votes

En plus de la réponse acceptée, vous devez lire stackoverflow.com/a/918462/2013911 car il explique la différence entre le type d'attribut CDATA et les sections marquées < ![CDATA[]]>.

80voto

Rose Perrone Points 14478
  • PCDATA est un texte qui sera analysé par un analyseur syntaxique. Les balises à l'intérieur du texte seront traitées comme des balises et les entités seront développées.
  • CDATA est un texte qui pas être analysé par un analyseur syntaxique. Les balises dans le texte seront pas seront traitées comme des balises et les entités ne seront pas développées.

Par défaut, tout est PCDATA . Dans l'exemple suivant, on ignore la racine, <bar> sera analysé, et il n'aura pas de contenu, mais un enfant.

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

Lorsque nous voulons spécifier qu'un élément ne contiendra que du texte, et aucun élément enfant, nous utilisons le mot-clé PCDATA car ce mot-clé indique que l'élément doit contenir des données de caractères analysables, c'est-à-dire tout texte à l'exception des caractères moins que ( < ), plus grand que ( > ) , esperluette ( & ), quote( ' ) et les guillemets doubles ( " ).

Dans l'exemple suivant, <bar> contient CDATA . Son contenu ne sera pas analysé et sera donc <test>content!</test> .

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

Il existe plusieurs modèles de contenu en SGML. Le site #PCDATA Le modèle de contenu indique qu'un élément peut contenir du texte brut. La partie "analysée" signifie que le balisage (y compris les IP, les commentaires et les directives SGML) qu'il contient est analysé au lieu d'être affiché sous forme de texte brut. Cela signifie également que les références aux entités sont remplacées.

Un autre type de modèle de contenu permettant des contenus en texte brut est CDATA . Dans le XML, le modèle de contenu de l'élément ne peut pas être implicitement fixé à CDATA mais en SGML, cela signifie que les références aux balises et aux entités sont ignorées dans le contenu de l'élément. Dans les attributs de CDATA Toutefois, les références aux entités sont remplacées.

En XML, #PCDATA est le seul modèle de contenu en texte brut. Vous l'utilisez si vous souhaitez autoriser le contenu textuel de l'élément. Le site CDATA peut être utilisé explicitement par le biais de l'option CDATA balisage du bloc dans #PCDATA mais le contenu des éléments peut ne pas être défini comme CDATA par défaut.

Dans une DTD, le type d'un attribut qui contient du texte doit être CDATA . Le site CDATA dans une déclaration d'attribut a une signification différente de celle du mot-clé CDATA dans un document XML. Dans un CDATA section tous les caractères sont légaux (y compris < , > , & , ' et " ), à l'exception des ]]> étiquette de fin.

#PCDATA n'est pas approprié pour le type d'un attribut. Il est utilisé pour le type de texte "feuille".

#PCDATA est précédé d'un dièse dans le modèle de contenu pour distinguer ce mot-clé d'un élément nommé PCDATA (ce qui serait parfaitement légal).

6 votes

Excellente réponse, sauf pour la dernière phrase. # n'est pas un hashtag. Seule une balise précédée de ce symbole est un hashtag. Le symbole lui-même a plusieurs noms Le terme "hashtag" peut être utilisé pour désigner une série de mots, notamment le "signe numérique", le "signe dièse" (principalement au Canada et aux États-Unis), ou simplement le "hash" (d'où le nom "hashtag").

7 votes

justhadtogetthatoffmychest

3 votes

Je ne suis pas d'accord que le numéro devant #PCDATA est là pour des raisons historiques. Il est présent parce que dans une DTD, un élément peut également contenir un élément nommé PCDATA ce qui doit être possible, et qui ressemblerait à ceci <!ELEMENT foo (PCDATA)> .

78voto

Matthew Vines Points 14425

PCDATA - Données de caractères analysées

Les analyseurs XML analysent normalement tout le texte d'un document XML.

CDATA - Données de caractères (non analysées)

Le terme CDATA est utilisé pour les données textuelles qui ne doivent pas être analysées par l'analyseur XML.

Les caractères comme "<" et "&" sont illégaux dans les éléments XML.

13voto

winter Points 996

PCDATA - données de caractères analysées. Il analyse toutes les données d'un document XML.

Exemple :

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

Ici, le <family> contient deux autres éléments : <mother> et <father> . Il analyse donc plus en profondeur pour obtenir le texte de la mère et du père afin de donner la valeur textuelle de la famille en tant que "Maman, Papa"

CDATA - caractère non analysé Données. Ce sont les données qui ne doivent pas être analysées plus avant dans un document xml.

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

Ici, la valeur textuelle de la famille sera <mother>mom</mother><father>dad</father> .

12voto

Oli Points 65050

D'ici ( Google est votre ami ) :

Dans une DTD, PCDATA et CDATA sont utilisés pour affirmer quelque chose sur le contenu autorisé contenu autorisé des éléments et des attributs, respectivement. Dans le modèle de contenu d'un élément d'un élément, #PCDATA indique que l'élément contient (peut contenir) "tout texte ancien". (Avec les exceptions mentionnées ci-dessous.) Dans déclaration d'un attribut, CDATA est une sorte de contrainte que vous pouvez imposer sur les valeurs autorisées de l'attribut (d'autres sortes, toutes mutuellement exclusives, comprennent ID, IDREF et NMTOKEN). Un attribut dont les valeurs autorisées sont CDATA peut (comme PCDATA dans un élément) contenir "n'importe quel texte ancien".

Un problème potentiellement très déroutant est qu'il y a un autre "CDATA," également appelées sections marquées. A section marquée est une partie du contenu d'un élément (#PCDATA) délimitée par des des chaînes de caractères spéciales : pour la fermer. Si vous rappelez-vous que PCDATA signifie " données données de caractères ", une section CDATA est littéralement la même chose, sans le "analysé". Les analyseurs transmettent le contenu d'une section marquée à des applications applications en aval sans hoqueter à chaque chaque fois qu'ils rencontrent des caractères spéciaux comme < et &. Ceci est utile lorsque vous codez un document qui contient beaucoup de ces caractères spéciaux (comme scripts et fragments de code). plus facile à saisir et à lire que l'entité lecture, que l'entité correspondante référence.

Vous pouvez donc en déduire que l'exception à à la règle du "n'importe quel vieux texte" est que PCDATA ne peut inclure aucun de ces caractères spéciaux caractères spéciaux non encodés, À MOINS qu'ils n'entrent dans le cadre d'une section marquée CDATA marqué.

3voto

Rachana K Points 61

La principale différence entre PCDATA et CDATA est la suivante

PCDATA - Essentiellement utilisé pour les ELEMENTS alors que

CDATA - Utilisé pour les attributs du XML, par exemple ATTLIST.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X