Les noms des mots-clés utilisés dans les DTD XML sont #PCDATAet CDATA. Il n'y a pas de PCDATAmot-clé et non #CDATA.
mzjn
1
En plus de la réponse acceptée, vous devriez lire stackoverflow.com/a/918462/2013911 car elle explique la différence entre le type d'attribut CDATA et les sections marquées <! [CDATA []]>.
Niklas Peter
Réponses:
75
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 texte qui ne doivent pas être analysées par l'analyseur XML.
Les caractères tels que "<" et "&" sont illégaux dans les éléments XML.
PCDATAest du texte qui sera analysé par un analyseur. Les balises à l'intérieur du texte seront traitées comme du balisage et les entités seront développées.
CDATAest du texte qui ne sera pas analysé par un analyseur. Les balises à l'intérieur du texte ne seront
pas traitées comme du balisage et les entités ne seront pas développées.
Par défaut, tout est PCDATA. Dans l'exemple suivant, ignorant la racine, <bar>sera analysé, et il n'aura aucun contenu, mais un enfant.
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é spécifie que l'élément doit contenir des données de caractères analysables - c'est-à-dire tout texte à l'exception des caractères inférieurs à ( <), supérieur à ( >), esperluette ( &), guillemet ( ') et guillemet double ( ").
Dans l'exemple suivant, <bar>contient CDATA. Son contenu ne sera pas analysé et l'est donc <test>content!</test>.
Il existe plusieurs modèles de contenu dans SGML. Le #PCDATAmodèle de contenu indique qu'un élément peut contenir du texte brut. La partie "analysée" signifie que le balisage (y compris les PI, 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 d'entité sont remplacées.
Un autre type de modèle de contenu permettant le contenu en texte brut est CDATA. En XML, le modèle de contenu d'élément ne peut pas être implicitement défini sur CDATA, mais en SGML, cela signifie que le balisage et les références d'entité sont ignorés dans le contenu de l'élément. Dans les attributs de CDATAtype cependant, les références d'entité sont remplacées.
En XML, #PCDATAest le seul modèle de contenu en texte brut. Vous l'utilisez si vous souhaitez autoriser le contenu de texte dans l'élément. Le CDATAmodèle de contenu peut être utilisé explicitement via le CDATAbalisage de bloc dans #PCDATA, mais le contenu de l'élément peut ne pas être défini CDATApar défaut.
Dans une DTD, le type d'un attribut contenant du texte doit être CDATA. Le CDATAmot-clé dans une déclaration d'attribut a une signification différente de celle de la CDATAsection dans un document XML. Dans une CDATAsection tous les caractères sont légaux (y compris <, >, &, 'et "caractères), à l' exception de la ]]>balise de fin.
#PCDATAne convient pas au type d'attribut. Il est utilisé pour le type de texte "feuille".
#PCDATAest précédé d'un hachage dans le modèle de contenu pour distinguer ce mot-clé d'un élément nommé PCDATA(ce qui serait parfaitement légal).
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 de nombreux noms , y compris «signe dièse», «signe dièse» (principalement au Canada et aux États-Unis), ou simplement «hachage» (d'où le nom «hashtag»).
6
#justhadtogetthatoffmychest
3
Je ne suis pas d'accord pour dire que le # devant #PCDATAest là pour des raisons historiques. Il est là parce que dans une DTD, un élément peut également contenir un élément nommé PCDATA, qui doit être possible, et qui ressemblerait à <!ELEMENT foo (PCDATA)>.
Mathias Müller
La citation et la double citation sont parfaitement légales dans le contenu PCDATA. Et une esperluette peut apparaître, mais (en XML) uniquement en tant qu'introducteur d'entité.
Toby Speight
12
PCDATA - données de caractères analysées. Il analyse toutes les données d'un document XML.
Ici, l' <family>élément contient 2 éléments supplémentaires: <mother>et <father>. Donc, il analyse plus avant pour obtenir le texte de la mère et du père pour donner la valeur textuelle de la famille en tant que «maman papa»
CDATA - Données de caractère non analysées. Ce sont les données qui ne doivent pas être analysées plus avant dans un document xml.
Dans une DTD, PCDATA et CDATA sont utilisés pour affirmer quelque chose sur le contenu autorisé des éléments et des attributs, respectivement. Dans le modèle de contenu d'un élément, #PCDATA indique que l'élément contient (peut contenir) "n'importe quel ancien texte". (Avec des exceptions comme indiqué ci-dessous.) Dans la déclaration d'un attribut, CDATA est une sorte de contrainte que vous pouvez mettre sur les valeurs autorisées de l'attribut (d'autres sortes, toutes mutuellement exclusives, incluent ID, IDREF et NMTOKEN). Un attribut dont les valeurs autorisées sont CDATA peut (comme PCDATA dans un élément) contenir «n'importe quel ancien texte».
Un problème potentiellement très déroutant est qu'il existe un autre «CDATA», également appelé sections marquées. Une section marquée est une partie du contenu de l'élément (#PCDATA) délimitée par des chaînes spéciales: pour la fermer. Si vous vous souvenez que PCDATA est «des données de caractères analysées», une section CDATA est littéralement la même chose, sans le «analysé». Les analyseurs transmettent le contenu d'une section marquée aux applications en aval sans hoquet à 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 des scripts et des fragments de code); c'est plus facile pour la saisie des données et plus facile pour la lecture que la référence d'entité correspondante.
Vous pouvez donc en déduire que l'exception à la règle «tout ancien texte» est que PCDATA ne peut inclure aucun de ces caractères spéciaux non échappés, À MOINS qu'ils ne tombent dans le cadre d'une section marquée CDATA.
CDATA ( C haracter DATA ): C'est similaire à un commentaire mais cela fait partie du document. c'est-à-dire que CDATA est une donnée, elle fait partie du document mais les données ne peuvent pas être analysées en XML. Remarque: le commentaire XML est omis lors de l'analyse d'un XML, mais CDATA s'affiche tel quel.
PCDATA ( P arsed C haracter DATA ): Par défaut, tout est PCDATA. PCDATA est une donnée, elle peut être analysée en XML.
#PCDATA
etCDATA
. Il n'y a pas dePCDATA
mot-clé et non#CDATA
.Réponses:
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 texte qui ne doivent pas être analysées par l'analyseur XML.
Les caractères tels que "<" et "&" sont illégaux dans les éléments XML.
la source
PCDATA
est du texte qui sera analysé par un analyseur. Les balises à l'intérieur du texte seront traitées comme du balisage et les entités seront développées.CDATA
est du texte qui ne sera pas analysé par un analyseur. Les balises à l'intérieur du texte ne seront pas traitées comme du balisage et les entités ne seront pas développées.Par défaut, tout est
PCDATA
. Dans l'exemple suivant, ignorant la racine,<bar>
sera analysé, et il n'aura aucun 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é spécifie que l'élément doit contenir des données de caractères analysables - c'est-à-dire tout texte à l'exception des caractères inférieurs à (<
), supérieur à (>
), esperluette (&
), guillemet ('
) et guillemet double ("
).Dans l'exemple suivant,
<bar>
contientCDATA
. Son contenu ne sera pas analysé et l'est donc<test>content!</test>
.<?xml version="1.0"?> <foo> <bar><![CDATA[<test>content!</test>]]></bar> </foo>
Il existe plusieurs modèles de contenu dans SGML. Le
#PCDATA
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 PI, 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 d'entité sont remplacées.Un autre type de modèle de contenu permettant le contenu en texte brut est
CDATA
. En XML, le modèle de contenu d'élément ne peut pas être implicitement défini surCDATA
, mais en SGML, cela signifie que le balisage et les références d'entité sont ignorés dans le contenu de l'élément. Dans les attributs deCDATA
type cependant, les références d'entité 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 de texte dans l'élément. LeCDATA
modèle de contenu peut être utilisé explicitement via leCDATA
balisage de bloc dans#PCDATA
, mais le contenu de l'élément peut ne pas être définiCDATA
par défaut.Dans une DTD, le type d'un attribut contenant du texte doit être
CDATA
. LeCDATA
mot-clé dans une déclaration d'attribut a une signification différente de celle de laCDATA
section dans un document XML. Dans uneCDATA
section tous les caractères sont légaux (y compris<
,>
,&
,'
et"
caractères), à l' exception de la]]>
balise de fin.#PCDATA
ne convient pas au type d'attribut. Il est utilisé pour le type de texte "feuille".#PCDATA
est précédé d'un hachage dans le modèle de contenu pour distinguer ce mot-clé d'un élément nomméPCDATA
(ce qui serait parfaitement légal).la source
#
n'est pas un hashtag. Seule une balise précédée de ce symbole est un hashtag. Le symbole lui-même a de nombreux noms , y compris «signe dièse», «signe dièse» (principalement au Canada et aux États-Unis), ou simplement «hachage» (d'où le nom «hashtag»).#PCDATA
est là pour des raisons historiques. Il est là parce que dans une DTD, un élément peut également contenir un élément nomméPCDATA
, qui doit être possible, et qui ressemblerait à<!ELEMENT foo (PCDATA)>
.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, l'
<family>
élément contient 2 éléments supplémentaires:<mother>
et<father>
. Donc, il analyse plus avant pour obtenir le texte de la mère et du père pour donner la valeur textuelle de la famille en tant que «maman papa»CDATA - Données de caractère non analysé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>
.la source
De là ( Google est votre ami ):
la source
La principale différence entre PCDATA et CDATA est
PCDATA - Principalement utilisé pour les ELEMENTS
CDATA - Utilisé pour les attributs de XML ie ATTLIST
la source
CDATA ( C haracter DATA ): C'est similaire à un commentaire mais cela fait partie du document. c'est-à-dire que CDATA est une donnée, elle fait partie du document mais les données ne peuvent pas être analysées en XML.
Remarque: le commentaire XML est omis lors de l'analyse d'un XML, mais CDATA s'affiche tel quel.
PCDATA ( P arsed C haracter DATA ): Par défaut, tout est PCDATA. PCDATA est une donnée, elle peut être analysée en XML.
la source