"CDATA" in XHTML
Daniel N.
- html
Hallo,
ich bin davon ausgegangen, dass ich in einer XHTML-Datei auch das
Konstrukt "![CDATA[ xxx ]]" nutzen kann.
In dem folgenden kleinen Beispiel verwende ich dieses innerhalb eines Paragraphen und innerhalb von <pre>.
Tidy meldet keine Fehler und keine Warungen, der beihaltete Text wird nur im Browser leider nicht angezeigt!
Wo ist der Fehler?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<p><![CDATA[Dieses ist "CDATA" in einem normalen Absatz.]]></p>
<pre><![CDATA[Dieses ist bereits formatierter
Text, der u. a. feste
Zielenumbrüche enthält.]]>
</pre>
</body>
</html>
Vielen Dank und viele Grüße
Daniel
Hallo,
ich bin davon ausgegangen, dass ich in einer XHTML-Datei auch das
Konstrukt "![CDATA[ xxx ]]" nutzen kann.
Ja, in XHTML mit Content-Type: application/xhtml+xml.
Tidy meldet keine Fehler und keine Warungen, der beihaltete Text wird nur im Browser leider nicht angezeigt!
Doch, im Firefox und Opera schon, eben nur mit Content-Type: application/xhtml+xml.
Wo ist der Fehler?
Nichts desto trotz darf in XHTML in den Elementen P und PRE natürlich kein CDATA stehen.
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
...
<!ELEMENT p %Inline;>
...
<!ELEMENT pre %pre.content;>
...
...
<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
...
<!ENTITY % pre.content
"(#PCDATA | a | %fontstyle; | %phrase; | %special.pre; | %misc.inline;
| %inline.forms;)*">
...
usw.
viele Grüße
Axel
Hallo,
Ja, in XHTML mit Content-Type: application/xhtml+xml.
...
Tidy meldet keine Fehler und keine Warungen, der beihaltete Text wird nur im Browser leider nicht angezeigt!
Doch, im Firefox und Opera schon, eben nur mit Content-Type: application/xhtml+xml.
Das Tidy in meinem Firefox meldet keine Fehler, auch nicht wenn ich den Content-Type wie folgt angebe?!
<meta http-equiv="content-type" content="application/xhtml+xml; charset=ISO-8859-1" />
Nichts desto trotz darf in XHTML in den Elementen P und PRE natürlich kein CDATA stehen.
Das hatte ich übersehen, bzw. erwartet, dass Tidy mir das meldet?!
Viele Grüße
Daniel
Hallo,
Ja, in XHTML mit Content-Type: application/xhtml+xml.
Tidy meldet keine Fehler und keine Warungen, der beihaltete Text wird nur im Browser leider nicht angezeigt!
Doch, im Firefox und Opera schon, eben nur mit Content-Type: application/xhtml+xml.
Das Tidy in meinem Firefox meldet keine Fehler, auch nicht wenn ich den Content-Type wie folgt angebe?!
Nein, ich meinte, wenn Du es mit diesem Content-Type auslieferst, wird es angezeigt. Fehler sind nicht zu melden (siehe Gunnar).
> <meta http-equiv="content-type" content="application/xhtml+xml; charset=ISO-8859-1" />
Nein, das reicht nicht. Der Server muss es mit Content-Type: application/xhtml+xml ausliefern.
Nichts desto trotz darf in XHTML in den Elementen P und PRE natürlich kein CDATA stehen.
Nein, darf es doch, #PCDATA enthält CDATA, siehe Gunnar.
viele Grüße
Axel
Hello out there!
Nichts desto trotz darf in XHTML in den Elementen P und PRE natürlich kein CDATA stehen.
?? Na aber doch.
<![CDATA[foo]]>
ist doch PCDATA. Sonst würde der Parser bei der Zeichenfolge '<!' kein Start-Tag erkennen, sondern diese darstellen.
„CDATA-Abschnitte dürfen überall dort stehen, wo auch Zeichendaten erlaubt sind.“ [XML10 §2.7]
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
<!ENTITY % pre.content
"(#PCDATA | a | %fontstyle; | %phrase; | %special.pre; | %misc.inline;
| %inline.forms;)*">
Dort steht auch
<!ELEMENT script (#PCDATA)>
Und script darf selbstverstandlich auch CDATA-Bereiche enthalten.
See ya up the road,
Gunnar
Hallo,
Nichts desto trotz darf in XHTML in den Elementen P und PRE natürlich kein CDATA stehen.
Zitat aus der XML Spezifikation:
„CDATA sections MAY occur anywhere character data may occur; ...“
<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
CDATA-Sektionen sind hier schon in dem Stichwort #PCDATA enthalten. Wenn Du meinst, es gäbe ein analoges Stichwort #CDATA, muss ich Dich enttäuschen (Achtung: nicht mit dem Attributwert CDATA verwechseln.) Auch in XHTML 1 sind CDATA-Sektionen überall dort erlaubt, wo #PCDATA erlaubt ist.
Nur: Die Browser scheinen sich uneinig zu sein, ob sie CDATA-Inhalt wie von der DOM Spezifikation gefordert als Textknoten in den DOM-Baum einbasteln (und folglich auch darstellen) sollen. Meine Schnelltests mit einer XML/XHTML-Datei und Ian Hicksons Live DOM Viewer ergaben dieses Resultat:
Safari 2.0 – Wird nicht dargestellt, nicht im DOM-Baum vorhanden
Firefox 1.5 – Wird dargestellt, im DOM-Baum vorhanden
Opera 8.5 – Wird dargestellt, im DOM-Baum vorhanden
Wie das im Internet Explorer ist, muss jemand überprüfen, der einen IE zur Hand hat.
Daniel: Ich vermute, Du hast ein einem Browser getestet, der CDATA-Sektionen nicht als Textknoten interpretiert. Ist ein eher schwaches Ergebnis. Ich würde Dir daher empfehlen, CDATA-Sektionen in XHTML nicht einzusetzen, sondern „traditionelle“ Maskierung mittels < vorzunehmen, wenn Du Markup darstellen willst.
Tim