Frage

Diese Frage wird durch die eher militante Ablehnung des Entwicklers Michael Rys aufgefordert, das Parsen von CDATA-Abschnitten in FOR XML PATH aufzunehmen, weil "Es gibt in den Daten kein semantischer Unterschied ist, dass Sie speichern."

Ich habe Nuggets von HTML in CDATA-Knoten und anderen Inhalten gespeichert, die die Verwendung von speziellen oder umständlich Zeichen erfordern. Allerdings kann ich nicht qualifiziert fühlen Rys umstrittene Behauptung in Frage zu stellen, weil, ich nehme an, technisch er in den Szenarien korrekt ist, wo ich CDATA für Bequemlichkeit verwendet haben.

Was ist meine Nudel wirklich Backen ist, dass, wie Entwickler mit dem Internet nehmen um Rat bittet, wie CDATA Segmente machen FOR XML PATH verwenden die Befragten sie ständig direkt FOR XML verwenden EINDEUTIG stattdessen die XML-Rendering-Methode Rys zitiert als das sein "Abfrage aus der Hölle."

Wenn wir wirklich ohne CDATA in jedem Anwendungsfall tun kann, dass jemand vorschlagen kann, ich denke, wir jammern aufhören sollte und lehnen von nun an CDATA-Nutzung. Aber wenn es klar definierten Fälle, wo CDATA ist wichtig Rys bereits verpflichtet, dass er es in FOR XML PATH backen würde für die Zukunft in dem obersten Glied in dieser Frage.

So, das soll es sein? Sind CDATA Abschnitte wirklich Relikte der Vergangenheit? Oder sollte Rys zieht die Finger aus und ermöglicht CDATA in FOR XML PATH Parsen? Und wenn wir schon dabei, in der Zwischenzeit sind, gibt es irgendwelche Hacks für FOR XML PATH immer CDATA-Abschnitte zurück?

War es hilfreich?

Lösung

CDATA Abschnitte sind nützlich, wenn Sie nicht über die Semantik der Daten in ihnen ist es egal (dh Sie müssen nicht, sie zu analysieren - es ist einfach ein Lauf von Zeichen ist), und Sie wollen nicht von entkommen die XML in ihnen.

Die Definition laut w3 :

  

CDATA-Abschnitte können überall Zeichendaten auftreten auftreten können; sie werden verwendet, Textblöcke enthalten Zeichen zu entkommen, die andernfalls als Markup erkannt werden würde.

wikipedia :

  

Neue Autoren von XML-Dokumenten oft mißverstehen der Zweck eines CDATA-Abschnitt, fälschlicherweise glauben, dass ihr Zweck zu „schützen“ Daten ist als gewöhnliche Zeichendaten während der Verarbeitung behandelt werden. Einige APIs für die Arbeit mit XML-Dokumenten bieten Optionen für einen unabhängigen Zugang zu CDATA-Abschnitte, aber solche Optionen bestehen oben und über die normalen Anforderungen von XML-Verarbeitungssysteme und noch nicht die implizite Bedeutung der Daten ändern. Zeichendaten Zeichendaten, unabhängig davon, ob sie über einen CDATA-Abschnitt oder gewöhnlichen Markup ausgedrückt wird.

     

CDATA-Abschnitte sind nützlich, um innerhalb eines XML-Dokuments XML-Code als Textdaten zu schreiben. Zum Beispiel, wenn man wünscht, ein Buch mit XSL erläutert die Verwendung einer XML-Anwendung zu setzen, der XML-Markup in dem Buch erscheint selbst in der Quelldatei in einem CDATA-Abschnitt geschrieben werden. Allerdings kann ein CDATA-Abschnitt nicht enthält die Zeichenfolge „]]>“ und daher ist es nicht möglich, dass ein Abschnitt CDATA um verschachtelte CDATA-Abschnitte zu enthalten. Der bevorzugte Ansatz zur Verwendung von CDATA Abschnitten für Textcodierung, das die Triaden enthält „]]>“ ist, mehrere CDATA Abschnitte durch Aufspalten jedes Auftreten der Triade zu verwenden, kurz vor dem „>“. Zum Beispiel, zu kodieren "]]>" würde man schreiben:

Andere Tipps

CDATA-Abschnitte sind nicht erforderlich. Sie sind nicht ein „Relikt der Vergangenheit“, weil sie immer unnötig waren.

Das bedeutet nicht, dass sie nicht geeignet sind. Schauen Sie sich fast jede Programmiersprache oder Bibliothek und Sie können eine große Anzahl von Dingen, finden Sie ohne tun könnten, weil sie zu etwas semantisch äquivalent sind anders, aber die nützlich sind, wenn ein Mensch es ist dort sitzen die Sachen zu schreiben.

Für diese Angelegenheit, auch mit programmatischen Produktion praktisch ist es auch, dass man den umgekehrten Weg nehmen und verwenden CDATA-Abschnitte für jedes einzelne Stück von c-Daten (bloaty, aber es könnte Effizienzsteigerungen an anderer Stelle haben).

FOR XML PATH kein Mensch beteiligt zu sein, die dort sitzen, das Zeug zu schreiben. Es ist ein Mittel, gültigen XML aus einem den Ergebnissen einer SQL-Abfrage zu erzeugen. (Es ist auch keine Frage der Abschnitte CDATA Parsen, aber sie produzieren können - eine andere Sache).

Und man kann wirklich nicht über FOR XML EXPLICIT beklagen ist die Alternative, wenn Sie wirklich eine Feinsteuerung wollen - der Grund für XML EXPLICIT so böse ist manchmal zu verwenden ist, gerade weil es Sie wirklich feine Kontrolle. Tatsächlich betrachtet, wenn sie zum ersten Mal Unterstützung für CDATA-Abschnitte hinzugefügt und dann zusätzliche Unterstützung für jede andere zwicken und Konfigurationsoption, die genauso wichtig für jemanden anderes da draußen zu sein schien. Wie lange würde es dauern, bis FOR XML EXPLICIT wurde die automatische Wahl aufgrund es einfacher zu sein als für XML PATH?

Es gibt vier Fälle, in denen CDATA sind nützlich:

  1. Sie befinden sich in einer Tastatur sitzt in sich das Zeug eingeben.
  2. Sie haben es mit einer Mischung verschiedener Technologien mit unterschiedlichen Standards zu verschiedenen Zeiten entwickelt und die durch unterschiedliche Parser auf unterschiedliche Weise interpretiert werden (zB Javascript in XHTML eingebettet - obwohl es nicht 100% notwendig ist, hier ist es ein Alptraum sonst zu tun) .
  3. Sie versuchen, die XML mit etwas zu analysieren, die nicht XML nicht versteht.
  4. Sie versuchen, etwas zu Verwendung auf einem Parser gebaut, die Low-Level-Zugriff ermöglicht, dass unterscheidet zwischen CDATA-Abschnitten und anderen Zeichendaten und der Verwendung dieses Low-Level-Zugriff unangemessen.

Komischerweise sind diese vier Fälle auch die vier Fälle, in denen ein Verbot der Annahme von CDATA-Abschnitte Sinn machen kann.

Fall 1 gilt nicht hier, es ist nicht menschlich-generierten Code. Fall 2 könnte hier gelten, wenn Sie etwas wirklich verrückt machen. Ehrlich gesagt, ist der Mangel an CDATA-Abschnitte die wenigsten Sorgen hier; Umschalten auf einfachere XML in der Abfrage produzieren und es an anderer Stelle zu verwandeln. Fall 3 könnte hier gelten, aber es ist nicht fair gegenüber den SQL Menschen zu beschweren, wenn es der Fall ist, wenn Sie an den gebrochenen XML-Parser beschweren sollte, die nicht behandeln &lt;example&gt; macht das gleiche wie <![CDATA[<example>]]>. Fall 4 könnte hier gelten, aber wieder beschweren sich die Person, die den fehlerhaften Code geschrieben hat, nicht die SQL-Leute.

Sie sind absolut richtig, sind CDATA wesentlich in vielen Szenarien, sie sind Teil des XML-Standard und sollen von jeder XML-Manipulationswerkzeug / Methode unterstützt werden. Aber daran ist, dass MS in der Regel Pflege dosn't .. Sie wissen, „640kB sollte genug für alle da sein“ Art von Ansatz.
Edit: Über FOR XML EXPLICIT - das ist die beste Methode für die präzise formatiert XML-Daten zu erzeugen. Ja, das ist Syntax irgendwie schmerzhaft zu sehen und verwirrend, aber wenn man es mal feww verwenden, werden Sie seine Schönheit und Kraft bewundern.

Es ist interessant zu sehen, wie jemand nur ein sehr wertvolles Stück des Standard mit solchen wunderlichen Ansatz werfen. Nicht jeder wird mit Hilfe von XML für ein paar hundert Zeichen HTML oder eine Liste von Elementen für einen Drop-Down.

Einige von uns sind tatsächlich XML zum Austausch von Daten verwendet wird, sehr komplexe Daten wie ein CCD, CDA CDR, dies sind alle gängigen Dokumentenformate in der Healthcare-Arena und werden immer mehr und mehr im Vordergrund mit Care. Ein Teil dieser Dokumente Struktur enthält Anhänge Dinge wie DICOM-Bilder, PDF-Dateien und andere binäre Daten, die durch den Parser, den Grund der CDATA Definition existiert nicht gelesen werden sollen.

Warum sollte ich zahlen den Aufwand des Parsers ein 3 Megabyte DiCom Bild eingebettet in einem CCD-Dokument zu lesen? Warum soll ich gezwungen werden, um das Dokument zu trennen, wenn es in den ursprünglichen Daten stammte und Teil der XML-Standards ist. Und ich möchte, dass die Lage, das Dokument zu finden und wiederherzustellen und Inhalte mit XML.

Das verwirrt mich, warum Sie alle Parsen von Daten unterstützen würde, die dazu bestimmt ist, vom Motor nicht analysiert werden. Wenn der Motor CDATA es ignorieren sieht, ist es sehr einfach. Und das fortgesetzte Argument, dass einige es nicht brauchen, ist irrelevant. Es ist Teil des Standard und der Standard beibehalten werden soll. Wenn sie möchten, ein „Feature“ hinzufügen, wie es dann das Standardverhalten mit einer Option unterstützt aufgerufen wurde.

Bitte beenden Sie CDATA Parsen und ignorieren es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top