Die Namen der in XML-DTDs verwendeten Schlüsselwörter sind #PCDATAund CDATA. Es gibt kein PCDATASchlüsselwort und nein #CDATA.
mzjn
1
Zusätzlich zur akzeptierten Antwort sollten Sie stackoverflow.com/a/918462/2013911 lesen, da hier der Unterschied zwischen dem CDATA-Attributtyp und den mit <! [CDATA []]> markierten Abschnitten erläutert wird.
Niklas Peter
Antworten:
75
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.
PCDATAist Text, der von einem Parser analysiert wird. Tags im Text werden als Markup behandelt und Entitäten werden erweitert.
CDATAist 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.
Wenn wir angeben möchten, dass ein Element nur Text und keine PCDATAuntergeordneten 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>.
In SGML gibt es mehrere Inhaltsmodelle. Das #PCDATAInhaltsmodell 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. CDATAIn SGML bedeutet dies jedoch, dass Markup- und Entitätsreferenzen im Inhalt des Elements ignoriert werden. In Attributen vom CDATATyp werden jedoch Entitätsreferenzen ersetzt.
In XML #PCDATAist dies das einzige Nur-Text-Inhaltsmodell. Sie verwenden es, wenn Sie überhaupt Textinhalte im Element zulassen möchten. Das CDATAInhaltsmodell kann explizit über das CDATABlock-Markup in verwendet werden #PCDATA, der Elementinhalt ist jedoch möglicherweise nicht CDATAstandardmäßig definiert .
In einer DTD muss der Typ eines Attributs sein, das Text enthält CDATA. Das CDATASchlüsselwort in einer Attributdeklaration hat eine andere Bedeutung als der CDATAAbschnitt in einem XML-Dokument. In einem CDATAAbschnitt alle Zeichen sind legal (einschließlich <, >, &, 'und "Zeichen), mit Ausnahme des ]]>End - Tages.
#PCDATAist für den Typ eines Attributs nicht geeignet. Es wird für die Art des "Blatt" -Textes verwendet.
#PCDATAwird im Inhaltsmodell durch einen Hash vorangestellt, um dieses Schlüsselwort von einem Element mit dem Namen zu unterscheiden PCDATA(was vollkommen legal wäre).
Tolle Antwort, bis auf den letzten Satz. #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").
6
#justhadtogetthatoffmychest
3
Ich bin nicht der Meinung, dass das # vor aus #PCDATAhistorischen 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)>.
Mathias Müller
Zitat und doppeltes Zitat sind in PCDATA-Inhalten vollkommen legal. Und kaufmännisches Und wird möglicherweise angezeigt, jedoch (in XML) nur als Entity-Einführer.
Toby Speight
12
PCDATA - analysierte Zeichendaten. Es analysiert alle Daten in einem XML-Dokument.
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.
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.
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.
#PCDATA
undCDATA
. Es gibt keinPCDATA
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.
quelle
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.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ältCDATA
. Sein Inhalt wird nicht analysiert und ist somit<test>content!</test>
.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 vomCDATA
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. DasCDATA
Inhaltsmodell kann explizit über dasCDATA
Block-Markup in verwendet werden#PCDATA
, der Elementinhalt ist jedoch möglicherweise nichtCDATA
standardmäßig definiert .In einer DTD muss der Typ eines Attributs sein, das Text enthält
CDATA
. DasCDATA
Schlüsselwort in einer Attributdeklaration hat eine andere Bedeutung als derCDATA
Abschnitt in einem XML-Dokument. In einemCDATA
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 unterscheidenPCDATA
(was vollkommen legal wäre).quelle
#
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önntePCDATA
, 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:
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.
Hier wird der Textwert der Familie sein
<mother>mom</mother><father>dad</father>
.quelle
Von hier aus ( Google ist dein Freund ):
quelle
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
quelle
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.
quelle