Was ist der Unterschied zwischen #PCDATA
und #CDATA
in der DTD ?
#PCDATA
und CDATA
. Es gibt kein PCDATA
Schlüsselwort und nein #CDATA
.
Was ist der Unterschied zwischen #PCDATA
und #CDATA
in der DTD ?
#PCDATA
und CDATA
. Es gibt kein PCDATA
Schlüsselwort und nein #CDATA
.
Antworten:
PCDATA - Analysierte Zeichendaten
XML-Parser analysieren normalerweise den gesamten Text in einem XML-Dokument.
CDATA - (nicht analysierte) Zeichendaten
Der Begriff CDATA wird für Textdaten verwendet, die vom XML-Parser nicht analysiert werden sollten.
Zeichen wie "<" und "&" sind in XML-Elementen unzulässig.
PCDATA
ist Text, der von einem Parser analysiert wird. Tags im Text werden als Markup behandelt und Entitäten werden erweitert.CDATA
ist Text, der von einem Parser nicht analysiert wird. Tags im Text werden
nicht als Markup behandelt und Entitäten werden nicht erweitert.Standardmäßig ist alles PCDATA
. Im folgenden Beispiel wird das Ignorieren des Stamms <bar>
analysiert und es enthält keinen Inhalt, sondern nur ein untergeordnetes Element.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Wenn wir angeben möchten, dass ein Element nur Text und keine PCDATA
untergeordneten Elemente enthält, verwenden wir das Schlüsselwort , da dieses Schlüsselwort angibt, dass das Element analysierbare Zeichendaten enthalten muss, dh jeden Text mit Ausnahme der Zeichen kleiner als ( <
). Größer als ( >
), kaufmännisches Und ( &
), Anführungszeichen ( '
) und Anführungszeichen ( "
).
Im nächsten Beispiel <bar>
enthält CDATA
. Sein Inhalt wird nicht analysiert und ist somit <test>content!</test>
.
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
In SGML gibt es mehrere Inhaltsmodelle. Das #PCDATA
Inhaltsmodell besagt, dass ein Element einfachen Text enthalten kann. Der "analysierte" Teil davon bedeutet, dass Markups (einschließlich PIs, Kommentare und SGML-Anweisungen) darin analysiert werden, anstatt als Rohtext angezeigt zu werden. Dies bedeutet auch, dass Entitätsreferenzen ersetzt werden.
Eine andere Art von Inhaltsmodell, das Nur-Text-Inhalte zulässt, ist CDATA
. In XML ist das Elementinhaltsmodell möglicherweise nicht implizit auf festgelegt. CDATA
In SGML bedeutet dies jedoch, dass Markup- und Entitätsreferenzen im Inhalt des Elements ignoriert werden. In Attributen vom CDATA
Typ werden jedoch Entitätsreferenzen ersetzt.
In XML #PCDATA
ist dies das einzige Nur-Text-Inhaltsmodell. Sie verwenden es, wenn Sie überhaupt Textinhalte im Element zulassen möchten. Das CDATA
Inhaltsmodell kann explizit über das CDATA
Block-Markup in verwendet werden #PCDATA
, der Elementinhalt ist jedoch möglicherweise nicht CDATA
standardmäßig definiert .
In einer DTD muss der Typ eines Attributs sein, das Text enthält CDATA
. Das CDATA
Schlüsselwort in einer Attributdeklaration hat eine andere Bedeutung als der CDATA
Abschnitt in einem XML-Dokument. In einem CDATA
Abschnitt alle Zeichen sind legal (einschließlich <
, >
, &
, '
und "
Zeichen), mit Ausnahme des ]]>
End - Tages.
#PCDATA
ist für den Typ eines Attributs nicht geeignet. Es wird für die Art des "Blatt" -Textes verwendet.
#PCDATA
wird im Inhaltsmodell durch einen Hash vorangestellt, um dieses Schlüsselwort von einem Element mit dem Namen zu unterscheiden PCDATA
(was vollkommen legal wäre).
#
ist kein Hashtag. Nur ein Tag, dem dieses Symbol vorangestellt ist, ist ein Hashtag. Das Symbol selbst hat viele Namen , einschließlich "Nummernzeichen", "Nummernzeichen" (meistens Kanada und USA) oder einfach "Hash" (daher der Name "Hashtag").
#PCDATA
historischen Gründen vorhanden ist. Es ist da, weil in einer DTD ein Element auch ein Element mit dem Namen enthalten könnte PCDATA
, das möglich sein muss und wie es aussehen würde <!ELEMENT foo (PCDATA)>
.
PCDATA - analysierte Zeichendaten. Es analysiert alle Daten in einem XML-Dokument.
Beispiel:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
Hier <family>
enthält das Element 2 weitere Elemente: <mother>
und <father>
. Es wird also weiter analysiert, um den Text von Mutter und Vater dazu zu bringen, den Textwert der Familie als „Mama, Papa“ anzugeben.
CDATA - nicht analysierte Zeichendaten. Dies sind die Daten, die in einem XML-Dokument nicht weiter analysiert werden sollten.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
Hier wird der Textwert der Familie sein <mother>mom</mother><father>dad</father>
.
Von hier aus ( Google ist dein Freund ):
In einer DTD werden PCDATA und CDATA verwendet, um etwas über den zulässigen Inhalt von Elementen bzw. Attributen zu behaupten. Im Inhaltsmodell eines Elements sagt #PCDATA, dass das Element "jeden alten Text" enthält (möglicherweise enthält). (Mit den unten angegebenen Ausnahmen.) In der Deklaration eines Attributs ist CDATA eine Art von Einschränkung, die Sie für die zulässigen Werte des Attributs festlegen können (andere Arten, die sich alle gegenseitig ausschließen, umfassen ID, IDREF und NMTOKEN). Ein Attribut, dessen zulässige Werte CDATA sind, kann (wie PCDATA in einem Element) "jeden alten Text" enthalten.
Ein möglicherweise wirklich verwirrendes Problem ist, dass es eine weitere "CDATA" gibt, die auch als markierte Abschnitte bezeichnet wird. Ein markierter Abschnitt ist ein Teil des Elementinhalts (#PCDATA), der durch spezielle Zeichenfolgen begrenzt ist: um ihn zu schließen. Wenn Sie sich daran erinnern, dass PCDATA "analysierte Zeichendaten" sind, ist ein CDATA-Abschnitt buchstäblich dasselbe, ohne das "analysierte". Parser übertragen den Inhalt eines markierten Abschnitts an nachgeschaltete Anwendungen, ohne jedes Mal Schluckauf zu haben, wenn sie auf Sonderzeichen wie <und & stoßen. Dies ist nützlich, wenn Sie ein Dokument codieren, das viele dieser Sonderzeichen enthält (z. B. Skripte und Codefragmente). Es ist einfacher bei der Dateneingabe und beim Lesen als die entsprechende Entitätsreferenz.
Sie können also schließen, dass die Ausnahme von der Regel "Jeder alte Text" darin besteht, dass PCDATA keines dieser nicht entkoppelten Sonderzeichen enthalten darf, es sei denn, sie fallen in den Geltungsbereich eines mit CDATA gekennzeichneten Abschnitts.
Der Hauptunterschied zwischen PCDATA und CDATA ist
PCDATA - Wird grundsätzlich für ELEMENTE verwendet
CDATA - Wird für Attribute von XML verwendet, dh ATTLIST
CDATA ( C haracter DATA ): Es ähnelt einem Kommentar, ist jedoch Teil des Dokuments. dh CDATA sind Daten, sie sind Teil des Dokuments, aber die Daten können nicht in XML analysiert werden.
Hinweis: Beim Parsen eines XML wird der XML-Kommentar weggelassen, CDATA wird jedoch so angezeigt, wie er ist.
PCDATA ( P arsed C haracter DATA ): Standardmäßig ist alles PCDATA. PCDATA sind Daten, die in XML analysiert werden können.