Blaubart: Entities vs. CDATA

Tach.

Wenn als Inhalt für ein XML-Dokument ein Text vorliegt, in dem auch XML-Sonderzeichen (<, & usw.) vorkommen, kann ich mich zwischen zwei Möglichkeiten entscheiden:

1. Ich wandle die Sonderzeichen in ihre Entities um, bevor ich sie ins XML-Dokument schreibe.

2. Ich stecke die entsprechenden Elementinhalte in einen http://de.selfhtml.org/xml/regeln/zeichen.htm#cdata@title=CDATA-Abschnitt.

Landet der fragliche Text sowieso unverändert in einem XHTML-Dokument, käme mir Methode 1 gerade recht, weil die Sonderzeichen bereits in der passenden Form aus der XML-Datei kommen. Möchte ich den Text hingegen an anderer Stelle ausgeben oder weiterverarbeiten, wo solche Entities nicht auftauchen dürfen, müßte vorher eine Rückübersetzung Entity → Sonderzeichen vorgenommen werden. Sinnvoller erscheint es mir, von Anfang an den fraglichen Text unverändert in einem CDATA-Abschnitt zu speichern und jeden Programmteil, der den Text in *anderer* Form benötigt, die Konvertierung selber vornehmen zu lassen.

Letztlich läuft dies darauf hinaus, daß z. B. alle vom User kommenden Texte im XML-Dokument als CDATA gespeichert werden (wenn ich daran <, & usw. zulassen möchte). Habe ich bei obigen Überlegungen einen Punkt nicht beachtet, der sich noch als Nachteil der "CDATA-Methode" darstellen könnte? Was sind eure Empfehlungen in dieser Angelegenheit?

--
Once is a mistake, twice is jazz.
  1. Hallo,

    Wenn als Inhalt für ein XML-Dokument ein Text vorliegt, in dem auch XML-Sonderzeichen (<, & usw.) vorkommen, kann ich mich zwischen zwei Möglichkeiten entscheiden:

    1. Ich wandle die Sonderzeichen in ihre Entities um, bevor ich sie ins XML-Dokument schreibe.

    2. Ich stecke die entsprechenden Elementinhalte in einen http://de.selfhtml.org/xml/regeln/zeichen.htm#cdata@title=CDATA-Abschnitt.

    Habe ich bei obigen Überlegungen einen Punkt nicht beachtet, der sich noch als Nachteil der "CDATA-Methode" darstellen könnte? Was sind eure Empfehlungen in dieser Angelegenheit?

    Entities müssen eingefügt werden, d.h. du brauchst z.B. eine DTD in der diese Entities definiert sind. Dann müssen sie vom Parser aufgelöst werden*.
    Wenn die Texte die du so einfügen willst, fest stehen und sich selten oder gar nicht ändern ist das ein möglicher Weg. * Wobei auch hier zu Problemen kommen kann.

    Wenn die Texte aber von User kommen und sich häufig ändern, ist dieser Weg ziemlich unwegsam. Da ist es besser, wenn die Texte im CDATA-Abschnitten liegen, so hast du alles in einer XML-Datei. So ist das z.B. hier im Forum: die Postingstexte stehen im CDATA-Abschnitten (XML-Sonderzeichen sind da noch nicht umgewandelt: d.h. es steht < und nicht &lt; drinn).

    Grüße
    Thomas

    1. Hallo,

      So ist das z.B. hier im Forum: die Postingstexte stehen im CDATA-Abschnitten (XML-Sonderzeichen sind da noch nicht umgewandelt: d.h. es steht < und nicht &lt; drinn).

      Gerade aus dem Quelltext kopiert:

      d.h. es steht &lt; und nicht &amp;lt; drin

      Die Verwendung von CDATA-Abschnitten für andere Elemente als <script> und <style> hat den Nachteil, dass sie einen HTML-Parser durcheinanderbringen könnten. Die betreffende Datei muss dann also zwingend als XML-kompatible Datei geparst werden.

      mfg. Daniel

      1. Hallo,

        So ist das z.B. hier im Forum: die Postingstexte stehen im CDATA-Abschnitten (XML-Sonderzeichen sind da noch nicht umgewandelt: d.h. es steht < und nicht &lt; drinn).

        Gerade aus dem Quelltext kopiert:

        d.h. es steht &lt; und nicht &amp;lt; drin

        Ja, schnuki. Im HTML steht das dann, im XML aber nicht. (mein Vorteil: ich kann mir auch die XML-Dateien des Forums ansehen)

        Die Verwendung von CDATA-Abschnitten für andere Elemente als <script> und <style> hat den Nachteil, dass sie einen HTML-Parser durcheinanderbringen könnten. Die betreffende Datei muss dann also zwingend als XML-kompatible Datei geparst werden.

        Ein HTML-Parser hat damit nichts zu tun. Es ist die Frage wann und ob der OP HTML braucht d.h. wann er eine Konvertierung benötigt.

        Grüße
        Thomas

        1. Hallo,

          Ja, schnuki.

          Was soll das heißen?

          Im HTML steht das dann, im XML aber nicht. (mein Vorteil: ich kann mir auch die XML-Dateien des Forums ansehen)

          Achso, wusste ich nicht. Naja, dass es intern anders abgespeichert wird, dachte ich mir aber…

          mfg. Daniel

          1. Hallo,

            Ja, schnuki.

            Was soll das heißen?

            Eine schlechte Gewohnheit von mir ;-)

            Grüße
            Thomas

            1. Ja, schnuki.

              Was soll das heißen?

              Eine schlechte Gewohnheit von mir ;-)

              Darf ich dich mit Vitamin C kurieren?

              Roland

              --
              -)
              1. Hallo,

                Eine schlechte Gewohnheit von mir ;-)

                Darf ich dich mit Vitamin C kurieren?

                Oh, _ich_ wusste was das heisst ;-)
                Das heisst aber nicht, dass es nicht eine schlechte Gewohnheit von mir ist ;-)

                Grüße
                Thomas

  2. Hi,

    Sinnvoller erscheint es mir, von Anfang an den fraglichen Text unverändert in einem CDATA-Abschnitt zu speichern

    Das erscheint mir nicht sinnvoll.
    Zumindest die Zeichenfolge ]]> solltest Du einer Sonderbehandlung unterziehen ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Tach.

      Sinnvoller erscheint es mir, von Anfang an den fraglichen Text unverändert in einem CDATA-Abschnitt zu speichern

      Das erscheint mir nicht sinnvoll.
      Zumindest die Zeichenfolge ]]> solltest Du einer Sonderbehandlung unterziehen ...

      Guter Hinweis. Hm, damit nehmen sich (zumindest bezüglich der Sonderbehandlung bestimmter Zeichen) beiden Methoden letztlich nichts mehr. Ausnahmefälle gibt es ja in beiden.

      Danke für die Hilfe.

      --
      Once is a mistake, twice is jazz.