Domanda

Questa domanda è spinto dal rifiuto piuttosto militante sviluppatore Michael Rys per includere l'analisi di sezioni CDATA in FOR XML PATH perché "non v'è alcuna differenza semantica nei dati che si desidera salvare."

Ho immagazzinato pepite di HTML in nodi CDATA e altri contenuti che richiedono l'utilizzo di caratteri speciali o ingombranti. Tuttavia non mi sento qualificato per sfidare l'affermazione controversa di Rys perché, suppongo, tecnicamente ha ragione negli scenari in cui ho impiegato CDATA per convenienza.

La cosa veramente la cottura la mia noodle è che, come gli sviluppatori prendono a internet accattonaggio per un consiglio su come rendere i segmenti CDATA utilizzando FOR XML PATH, intervistati direttamente continuamente loro di utilizzare FOR XML EXPLICIT invece, il metodo di rendering XML Rys citato come il "query da inferno".

Se possiamo davvero fare a meno CDATA in ogni caso d'uso che chiunque può suggerire Credo che dovremmo smettere di lamenti e rifiutare l'uso CDATA d'ora in poi. Ma se ci sono casi ben definiti in cui CDATA è Rys essenziali già intrapreso che avrebbe cuocere in FOR XML PATH andando avanti nel collegamento più in alto in questa domanda.

Quindi, quale è di essere? Sono sezioni CDATA davvero reliquie del passato? O dovrebbe Rys tirare il dito fuori e consentire l'analisi CDATA in FOR XML PATH? E già che ci siamo, nel frattempo, ci sono hack per ottenere FOR XML PATH per tornare sezioni CDATA?

È stato utile?

Soluzione

sezioni CDATA sono utili se non vi interessa circa la semantica dei dati in essi (cioè non è necessario per analizzarlo - è semplicemente una sequenza di caratteri), e non si desidera per sfuggire qualsiasi l'XML al loro interno.

La definizione, in base alle w3 :

  Possono verificarsi

??Le sezioni CDATA possono verificare i dati carattere da nessuna parte; essi sono utilizzati per sfuggire blocchi di caratteri di testo che contiene, che altrimenti sarebbero riconosciuti come markup.

wikipedia :

  

I nuovi autori di documenti XML spesso fraintendere lo scopo di una sezione CDATA, credendo erroneamente che il suo scopo è quello di "proteggere i dati" da essere trattati come dati di caratteri normali durante la lavorazione. Alcune API per lavorare con i documenti XML fanno offrono opzioni per l'accesso indipendente alle sezioni CDATA, ma tali opzioni esistono al di là delle normali esigenze di sistemi di elaborazione XML, e ancora non cambiano il significato implicito dei dati. Dati carattere è dati di caratteri, indipendentemente dal fatto che si esprime attraverso una sezione CDATA o markup ordinaria.

     sezioni

??CDATA sono utili per la scrittura di codice XML come dati di testo all'interno di un documento XML. Ad esempio, se si vuole comporre una libro con XSL che spiega l'uso di un'applicazione XML, il markup XML per apparire nel libro stesso sarà scritto nel file di origine in una sezione CDATA. Tuttavia, una sezione CDATA non può contenere la stringa "]]>" e quindi non è possibile per una sezione CDATA per contenere sezioni CDATA nidificate. L'approccio preferito per usare sezioni CDATA per codificare testo che contiene la triade "]]>" è quello di utilizzare più sezioni CDATA dalla scissione ogni occorrenza della triade poco prima del ">". Ad esempio, per codificare "]]>" si potrebbe scrivere:

Altri suggerimenti

Le sezioni CDATA sono inutili. Non sono una "reliquia del passato", perché sono sempre stati inutili.

Questo non significa che non sono utili. Guardate in quasi ogni linguaggio di programmazione o biblioteca e si può trovare un gran numero di cose che si potrebbe fare a meno, perché sono semanticamente equivalenti a qualcos'altro, ma che sono utili se c'è un essere umano seduto lì dover scrivere le cose.

Del resto, anche con la produzione programmatica è anche utile che si può prendere l'approccio opposto e utilizzare le sezioni CDATA per ogni singolo pezzo di c-dati (bloaty, ma potrebbe avere guadagni di efficienza altrove).

per il percorso XML non comporta un essere umano seduto lì dover scrivere la roba. E 'un mezzo per produrre XML valido da un i risultati di una query SQL. (Non è anche una questione di parsing sezioni CDATA, ma di loro produzione - una questione diversa).

E non si può davvero lamentare FOR XML EXPLICIT essere l'alternativa quando si vuole il controllo davvero bene - la ragione per FOR XML EXPLICIT è così brutto da usare a volte è proprio perché ti dà il controllo davvero bene. Infatti, in considerazione se il supporto per le sezioni CDATA e supporto poi aggiunto hanno aggiunto prima di ogni altra opzione Tweak e la configurazione che sembrava altrettanto vitale a qualcun altro là fuori. Quanto tempo ci vuole prima FOR XML EXPLICIT è stata la scelta automatica a causa di esso che è più semplice di FOR XML PATH?

Ci sono quattro casi in cui CDATA sono utili:

  1. Stai seduto a una tastiera digitando queste cose in te stesso.
  2. Avete a che fare con un miscelazione tecnologie diverse con diversi standard progettati in tempi diversi e che verranno interpretati da diversi analizzatori in modi diversi (ad esempio, JavaScript incorporato in XHTML - anche se non è al 100% necessario qui è un incubo di fare altrimenti) .
  3. Si sta cercando di analizzare il codice XML con qualcosa che non capisce XML.
  4. Si sta tentando di utilizzare qualcosa di costruito su un parser che permette l'accesso a basso livello che distingue tra le sezioni CDATA e altri dati di caratteri e usando che l'accesso a basso livello in modo inappropriato.

Stranamente, questi quattro casi sono anche i quattro casi in cui un divieto di accettare sezioni CDATA può avere senso.

Caso 1 non si applica qui, non è il codice umano-generato. Caso 2 potrebbe applicarsi qui se si sta facendo qualcosa di veramente pazzesco. Francamente, la mancanza di sezioni CDATA è l'ultima delle vostre preoccupazioni qui; passare alla produzione di XML semplice nella query e trasformandola altrove. Caso 3 potrebbe applicarsi qui, ma non è giusto lamentarsi alla gente SQL se lo fa, quando si dovrebbe lamentarsi con il parser XML rotto che fa &lt;example&gt; non tratta lo stesso di <![CDATA[<example>]]>. Caso 4 potrebbe applicarsi qui, ma ancora una volta si lamentano per la persona che ha scritto il codice buggy, non le persone SQL.

Lei ha assolutamente ragione, CDATA sono essenziali in molti scenari, sono parte di standard XML Non Sei e dovrebbe essere sostenuta da ogni manipolazione XML strumento / metodo. Ma cosa è che MS solito dosn't cura .. sai, "640KB dovrebbe essere sufficiente per tutti" tipo di approccio.
Edit: A proposito di FOR XML EXPLICIT - questo è il metodo migliore per la generazione di dati XML formattati con precisione. Sì, la sintassi è un pò doloroso da guardare e confusione, ma una volta che lo si utilizza feww volte, ti ammirano la sua bellezza e potenza.

E 'interessante vedere come qualcuno può semplicemente gettare un pezzo di grande valore dello Standard con tale approccio stravagante. Non tutti utilizzano XML per poche centinaia di caratteri di HTML o un elenco di elementi per un giù goccia.

Alcuni di noi sono in realtà utilizzando XML per lo scambio di dati, dati molto complessi come un CCD, CDA CDR, questi sono tutti i formati di documenti standard in ambito sanitario e stanno diventando sempre più prominente con ObamaCare. Una parte di queste strutture documenti contengono allegati cose DICOM immagini, PDF e altri dati binari che non deve essere letto dal parser la ragione esiste la definizione CDATA.

Perché dovrei pagare l'overhead del parser lettura di un'immagine 3 megabyte DICOM incorporato in un documento CCD? Perché dovrei essere costretto a separare il documento quando si è nei dati originali e fa parte dello standard XML. E voglio l'essere in grado di individuare e recuperare il documento ed è contenuto con XML.

Questo mi sconcerta perché tutti voi avrebbe sostenuto l'analisi dei dati che ha lo scopo di non essere analizzato dal motore. Se il motore vede CDATA ignorarlo, è molto semplice. E la continua argomento che alcuni non hanno bisogno è irrilevante. E 'parte dello standard e lo standard dovrebbe essere mantenuto. Se vorrebbero aggiungere una "caratteristica", come è stato chiamato poi sostenere il comportamento predefinito con un'opzione.

Si prega di interrompere l'analisi CDATA e ignorarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top