Quelle est la différence entre #PCDATA
et #CDATA
dans DTD ?
#PCDATA
et CDATA
. Il n'y a pas de PCDATA
mot-clé et non #CDATA
.
Quelle est la différence entre #PCDATA
et #CDATA
dans DTD ?
#PCDATA
et CDATA
. Il n'y a pas de PCDATA
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.
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>
contient CDATA
. 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 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 CDATA
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. Le CDATA
modèle de contenu peut être utilisé explicitement via le CDATA
balisage de bloc dans #PCDATA
, mais le contenu de l'élément peut ne pas être défini CDATA
par défaut.
Dans une DTD, le type d'un attribut contenant du texte doit être CDATA
. Le CDATA
mot-clé dans une déclaration d'attribut a une signification différente de celle de la CDATA
section dans un document XML. Dans une CDATA
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).
#
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>
.
De là ( Google est votre ami ):
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.