Se XML è così male ... perché così tante persone lo usano? [chiuso]


37

Capisco lo scopo di XML, ma sento sempre persone lamentarsi di quanto sia MALE? Non capisco davvero cosa ci sia di male? Di solito ascolto i termini "gonfio" e "lento".

Ma immagino che come programmatori, per cosa lo usi principalmente? E lo consideri davvero "cattivo" ... perché se lo è, moltissime persone lo usano per il trasporto di dati ...


1
La tua risposta è nella domanda. La gente lo usa ancora perché la gente lo usava e le opzioni sono (1) riscrivere tutto il codice che lo utilizzava prima di JSON e YAML, oppure (2) succhiarlo e fare la cosa stupida. Molte persone perpetuano anche cicli di violenza. Ciò non dimostra il valore intrinseco della pratica.
Colpo di Parthian del

5
Prova JSON per un documento reale (pagina man, Knuth, Hamlet, ecc.). Capirai quindi perché XML è essenziale. Questo è uno spazio in cui JSON fa schifo (vai avanti, prova). L'uso di uno dei due nello spazio di progettazione dell'altro è discutibile. I problemi derivanti dall'uso di XML nello spazio di JSON sono principalmente la verbosità e la velocità, mentre i problemi derivanti dall'uso di JSON nello spazio di XML tendono a comportare la portabilità (prova a interagire con un amico che ha fatto un libro in JSON, ma a modo suo), integrità e problemi di interpretazione che richiedono un grande sforzo umano per risolvere. Usa lo strumento giusto per il tuo lavoro.
TextGeek

L'XML è negativo solo perché molte persone lo abusano di cose per le quali non è stato progettato. Se non hai bisogno che i tuoi dati siano prontamente estensibili (ovvero lo schema viene utilizzato da più parti che hanno bisogno di interoperare, piuttosto che dettato centralmente da una parte autorevole), e se i tuoi dati non sono un documento (cioè se DOM sarebbe è stata una cattiva astrazione dei dati), quindi XML non è adatto a tali applicazioni. Quando il tuo dominio problematico rientra in quello per cui XML è progettato, nient'altro corrisponde a XML. JSON, YAML, ecc. Sono scarsamente adatti allo spazio per cui XML è realmente progettato.
Lie Ryan,

Risposte:


90

Xml è perfetto per quello che è stato progettato: un protocollo di trasferimento dati leggibile dall'uomo, neutro dalla piattaforma, con alcune funzionalità per applicare la convalida dei dati a livelli bassi. Dubito che chiunque usi Xml in questo modo abbia una vera lamentela. È il formato di filo più succinto? No. Ma ci sono opzioni peggiori. È veloce come leggere il tuo formato binario personalizzato? No. Ma i tuoi partner commerciali possono leggerlo nello stack che stanno utilizzando.

Il problema, tuttavia, è che gli umani - specialmente la razza conosciuta come architetti d'impresa - sono malvagi e prendono le cose buone e le rendono cattive. Nel caso di Xml, la prima parte di questo secolo ha visto Xml come il martello universale per ogni problema IT. Cospargi un po 'di design per commissione e finirai con alcune mostruosità orribili come SOAP e oXML . Nessuno dei due dovrebbe essere desiderato sui nemici, non dimenticare amici o colleghi.


15
+1 - chiunque abbia mai avuto a che fare con EDI vorrebbe solo che XML fosse stato inventato prima che accadesse quel casino.
Scott Whitlock,

12
+1 Abbina i miei pensieri quasi esattamente. Aggiungo solo che per l'archiviazione di dati chiari e semplici, anche se si tratta di un gerarchico (ma non troppo profondo, che non si fonde bene con nulla ), ci sono alcuni formati che funzionano altrettanto bene, in particolare JSON e YAML. Quest'ultimo è fantastico per quanto riguarda la leggibilità umana.

11
Per parafrasare jwz: "C'è un certo tipo di programmatore che esaminerà qualsiasi problema e dirà:" Lo so, userò XML ". Ora ha due problemi ".
Adam Crossland,

13
Per favore, dimmi che oXML era inteso come uno scherzo, come Brainfuck o Whitespace o LOLCODE.
dsimcha,

9
@Shamim Hafiz, SOAP è sicuramente tra le peggiori mostruosità mai allevate dall'umanità.
Logica SK

24

XML è solo uno strumento disponibile in molti gusti e usi. XML eccelle in alcune cose e fa schifo in altre. Penso che uno dei problemi sia che le persone hanno visto XML "enterprise" che è inutilmente complesso con spazi dei nomi e schifezze sparse (SOAP, chiunque?). Il trucco per la progettazione di formati XML per gli esseri umani consiste nell'aggiungere un significato reale ai dati senza renderli schiaccianti da leggere.

Una delle cose con cui le persone si mettono in discussione è che a volte XML soffoca su alcuni caratteri o su alcune parentesi mancanti. Vi è, tuttavia, sia un lato positivo che un lato negativo. Il lato positivo è che non hai ambiguità come hai fatto con l'HTML in cui diversi casi di sintassi semi-non valida possono essere interpretati in modo diverso.

Il rovescio della medaglia è che è un po 'più difficile da creare e più difficile da imparare. Sono d'accordo che si potrebbe sostenere che il Web non sarebbe diventato così grande se l'HTML fosse rigoroso come l'XML, ma direi anche che saremmo contenti se lo facesse oggi. :)

Inoltre, non usarlo per tutto solo perché puoi, avere il senso e il giudizio per applicarlo in modo appropriato. Se tutto ciò che hai è XML, tendi sempre ad essere una trasformazione XSLT lontano da ciò che desideri. :)

Direi che il formato conta davvero solo quando gli umani devono interagire con esso. Se stai scrivendo un programma che serializza qualcosa e lo invia da qualche parte dove deve essere consumato da un altro dei tuoi programmi, a chi importa che aspetto ha, purché sia ​​il più efficiente possibile? Usa un formato binario o coniglietti e unicorni per tutto ciò che mi interessa.

Pro di XML

  • Copre molti casi limite che YAML e JSON non hanno
  • Esistono strumenti eccellenti per l'analisi e la convalida di XML in una matrice di piattaforme e linguaggi diversi
  • L'XML può essere facilmente e potentemente trasformato in un altro formato (tramite cose come XSLT)
  • I documenti XML ragionevoli sono semplici da leggere e modificare per gli esseri umani; non dirmi che JSON è più facile, non è :)
  • XML è auto-descrittivo in una certa misura, cioè contiene direttamente informazioni sulla sua struttura e significato (contrariamente alla maggior parte dei formati binari)
  • Gestisce la codifica
  • Spazio bianco agnostico, che semplifica l'utilizzo multipiattaforma
  • Si rompe se non è ben formato (Assicura che i dati siano strutturalmente corretti)
  • Non è SGML

Contro

  • verboso
  • Analizzare non è veloce come binario
  • Si interrompe se non è ben formato (arresta in modo anomalo l'applicazione)

Buoni usi

  • File di configurazione
  • Formati di scambio dati
  • Formati di file resilienti alla versione
  • Archiviazione di documenti in database

Usi non così buoni

  • Formati di trasferimento dati
  • Serializzazione di oggetti
  • Memorizzazione dei dati relazionali nei database
  • Formato file per scenari I / O ad alte prestazioni

13
Dubito che i "file di configurazione" dovrebbero trovarsi in "buoni usi". Non sono dati, piuttosto istruzioni.
daknøk,

3
Sono qui con @ daknøk: non posso contare i tempi in cui ho dovuto dedicare enormi quantità di tempo a capire un bug di configurazione in un file XML di centinaia di righe che specifica l'iniezione di dipendenza, che si basava su un piccolo errore di battitura in un attributo XML.
Gjallar,

3
Se i dati errati si arrestano in modo anomalo in un'app, sono i dati ad avere un problema?
James Snell,

4
Qualsiasi formato di file malformato / corrotto ha il potenziale di crash del software rotto. Quindi XML non è il colpevole qui ... solo la tua applicazione. Altrimenti, buon post.
Thomas Eding,

3
Potresti espandere "Copre molti casi limite che YAML e JSON non hanno".
Trevor Hickey,

14

Jeff Atwood ha un post sul blog abbastanza buono in XML: The Angle Bracket Tax su questo se vuoi che una fonte ne parli.

Gli usi più comuni che ho per questo sono:

  • Servizi che parlano tra loro. Ad esempio, un sito Web che utilizza un sistema di gestione dei contenuti deve inviare alcuni dati in un sistema di gestione delle relazioni con i clienti e questo viene fatto con XML.

  • Memoria di configurazione. Web.config e app.config sono esempi comuni, ma anche gli script nAnt possono utilizzare anche alcuni XML.

Non penso che sia ottimale, ma da solo non mi dispiace.


11

Due motivi:

  1. Ci sono un sacco di cattivi programmatori là fuori. L'XML può essere dannoso, ma è anche semplice (almeno in superficie) e semplifica la scrittura di software dannoso. Sorta come VB.
  2. Molte persone che prendono queste decisioni non sono programmatori, ma tipi di attività che hanno sentito solo che "tutti usano XML" e quindi decidono che vogliono che anche il loro prodotto usi XML.

Che punti assurdi e totalmente inutili. 1) XML è tutt'altro che male e non ha assolutamente nulla a che fare con la qualità del software che la gente scrive se lo scelgono o no, ho visto abbastanza buoni programmatori VB, il che implica che se usi VB in realtà scrivi software cattivo è semplicemente sciocco perché c'è una disconnessione completa tra il modo in cui scrivi il software e quello che usi per scriverlo. 2) Ancora un altro falso presupposto, scegliere XML è fantastico e la maggior parte delle persone che lo scelgono nel bene e nel male sono sicuramente programmatori. XML non è un proiettile d'argento ma è buono per certe cose.
Eyal Solnik,

2
@EyalSolnik: Alcune persone, quando si presentano un problema, pensano "Lo so, userò XML".<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </ProblemWorsening>
Mason Wheeler,

3
Solo perché le persone abusano di qualcosa non significa che la tecnologia stessa sia cattiva, puoi vedere la stessa sindrome in molti luoghi.
Eyal Solnik,

8

Di solito ascolto i termini "gonfio" e "lento".

Non è la sintassi più compatta, ma è chiaramente la più espressiva. Leggibile dagli umani? dipende da come progetti la tua lingua. Molte persone non progettano un linguaggio per XML, ma semplicemente serializzano gli oggetti come XML.

... perché così tante persone lo usano?

È onnipresente. Puoi interrogare un database XML con XQuery, trasformare i risultati con XSLT come XHTML o Atom, ottenere Atom o altri formati XML da altri servizi Web, ottenere XML dagli utenti utilizzando XForms, convalidarlo con XMLSchema, Relax NG o Schematron, elaborarlo con XProc, salvarlo di nuovo nel database con XQuery Update. Tutti questi strumenti comprendono l'XML, quindi non è necessario mappare tra diverse rappresentazioni.

XML non è una tecnologia di serializzazione, è un insieme di informazioni di uso generale.


... e ci chiediamo da anni perché Chrissakes SOAP sia stato costruito su XML.
JensG

6

Qui, lo usiamo per lo scambio di dati tra diversi sistemi realizzati da diversi fornitori con diverse rappresentazioni interne. Costruiamo un sistema di trasformazione / interscambio XML per trasferire i dati avanti e indietro. Funziona bene per quello.

XML non è intrinsecamente negativo, ma riconosco che progettare una soluzione "buona" utilizzando XML non è banale.


5

"L'essenza dell'XML è questa: il problema che risolve non è difficile e non risolve bene il problema." - Phil Wadler, POPL 2003

La mia opinione personale è che fino a quando non ti preoccupi della convalida, degli schemi, degli XSLT e delle altre cose brutte e mantieni le dimensioni dei file piccole (altrimenti l'analisi diventa lenta) puoi trovare alcuni buoni usi dell'XML (un esempio serve per configurare la tua applicazione invece di usare i file INI).


4

Nella mia esperienza, le persone si lamentano principalmente del modo in cui viene utilizzato, non della tecnologia stessa.

I bit gonfi e lenti di cui le persone si lamentano sono in genere le librerie / i metodi utilizzati per recuperare informazioni da esso.

Lo uso per archiviare piccole quantità di informazioni strutturate che voglio archiviare su disco (senza database o serializzazione binaria) o passare a un'altra applicazione (che in sostanza descrive anche SOAP).


2

È buono perché:

È una "interfaccia" standard con cui possono comunicare più sistemi eterogenei. Ed è "Human" leggibile (tipo di, prova a fissare XML da 5 MB)

È male perché:

È gonfio, dimensioni maggiori = maggiore larghezza di banda = più $$

Ci sono altri motivi, ognuno ha una lamentela diversa ...


4
@Darknight: sfido l'essere umano leggibile lanciando Entità Xml contro di te ... (peeve personale)
Matthieu M.

1
Non credo che l'XML sia intrinsecamente gonfio, ma le implementazioni lo sono. Trovo che XML-RPC sia particolarmente egregio in caso di gonfiamento inutile.
HorusKol,

3
@HorusKol: <advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>Il rapporto dati / markup è così basso ... Lo chiamo "gonfio". JSON, per esempio, sarebbe solo come mezzo gonfio: advanceAcceptanceIndicator: "Y". C'è anche il fatto che il testo tra i tag è valido, quindi quando leggi Xml, devi decidere cosa fare con questa cruft \n\t\t\t, e la soluzione è generalmente ignorarla, perché all'inizio non sei mai stato interessato a questo.
Matthieu M.

1
@HorusKol: Lo sarebbe, ma non ho mai detto che fosse un valore booleano, capita solo di essere un singolo carattere :) L'uso dell'attributo qui ( value?) Sarebbe probabilmente anche superiore, perché le persone potrebbero essere tentate di inserire spazi bianchi tra due tag.
Matthieu M.

1
"È gonfio, dimensioni maggiori = più larghezza di banda = più $$" Immagino che la compressione non sia stata inventata dove sei ancora.
Andy,

2

Come per qualsiasi altra tecnologia: ci sono molti strumenti e librerie disponibili.

Non mi piace l'XML, soprattutto perché è funky, quando le persone dicono che è leggibile dall'uomo, scherzano, penso, o non hanno mai veramente letto un XML quando si tenta di incorporare XML in un attributo ... le entità XML lo rendono davvero illeggibile. Inoltre, è sorprendente quanto spazio viene sprecato a causa del tag di fine ridondante e della capacità di mescolare testo e dati gratuiti ...

Ma:

  • Xml può essere specificato (xsd) e sono disponibili strumenti che controllano la conformità dei dati Xml
  • molti strumenti (editor di testo e simili) supportano Xml
  • molte librerie (in circa tutti i linguaggi di programmazione) supportano Xml

Ha anche il vantaggio della precedenza, il più delle volte. Quando stai già fornendo servizi web in Xml e uno ti chiede un nuovo servizio ... probabilmente verrà fatto in Xml perché è quello che sai.


5
XML è più leggibile dei dati binari o delimitati da posizione o virgola.
FrustratedWithFormsDesigner

Solo per un utente ingenuo. Se devo scansionare visivamente un paio di centinaia di record alla ricerca di uno che manca di alcuni dati, preferirei piuttosto cercare alcune colonne vuote in un blocco di record a lunghezza fissa piuttosto che guadare una massa di elementi e attributi alla ricerca di un tag vuoto.
TMN,

1
@FrustratedWithFormsDesigner: dipende davvero dai dati a portata di mano. Xml incorpora la natura delle informazioni accanto alle informazioni appropriate. Se guardi i linguaggi di programmazione funzionale vedrai cose come (Haskell):, data Person = Person { surname :: String, firstName :: String, age :: Int }se poi vedo Person "Doe" "John" 42che è anche leggibile, ed evito molta cruft, ma è più vicino alla virgola delimitata.
Matthieu M.,

1
Ok, il tuo esempio è stato più facile da leggere senza il markup, ma esempi banali (direi meno di 8 o 9 elementi di dati) possono essere fatti per supportare tutti i moduli (tranne forse binario). I feed di dati dal mainframe hanno origine come stringhe delimitate dalla posizione (e la maggior parte sono solo codici numerici) e sono molto più facili da leggere, eseguire il debug e gestire dopo essere stati trasformati in XML. Come hai detto, può dipendere ...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner: Sì, questo è esattamente il mio punto :) Dipende, ma poiché esiste un ecosistema così ricco per XML e poiché è più facile mantenere un solo set di strumenti / librerie, le persone di solito usano XML per tutto. Personalmente, preferisco JSon su XML, ma ancora una volta senza indentazione, è disordinato: p
Matthieu M.

-1

XML è una cattiva scelta per i file che devono essere gestiti dagli umani. Non c'è separazione visiva tra il markup e il contenuto, il che rende difficile la lettura. È noioso scrivere correttamente senza un editor per scopi speciali. Qualsiasi errore in un documento XML è fatale; un documento XML non può essere parzialmente elaborato. Quando un file XML non è valido, il messaggio di errore risultante è spesso inutile.

Per qualsiasi file che deve essere gestito da un essere umano, preferirei utilizzare uno qualsiasi di JSON, YAML o codice sorgente in un linguaggio interpretato (Python, Ruby, Groovy, ecc.). Abbiamo scoperto che un ottimo modo per creare una configurazione XML per il codice legacy è utilizzare Groovy MarkupBuilder. Un'altra buona scelta è quella di creare un linguaggio specifico per il dominio; questo è abbastanza facile da fare con Ruby, Groovy e molte altre lingue.


8
Penso che ti manchi il punto di XML, il markup è contenuto. Lo scopo di XML è descrivere il significato dei tuoi dati. Ad esempio, se si dispone di un numero di telefono, contrassegnandolo come numero di rete fissa o numero di telefono si aggiunge un contesto che potrebbe essere utilizzato da altri. O aggiungendo un'etichetta telefonica attorno al testo per quella materia (potrebbe rendere quel numero richiamabile su un telefono cellulare). Per quanto riguarda gli altri punti, non sono d'accordo. La creazione di documenti XML è in genere piuttosto semplice. I messaggi di errore sono sempre legati alla buona forma e mi occuperò di modificare l'xml a mano su JSON ogni giorno
Homde

@konrad il tuo esempio di telefono sarebbe valido per HTML.
Florian F,

"Qualsiasi errore in un documento XML è fatale; un documento XML non può essere parzialmente elaborato." Sì, questo è un grande punto di partenza per l'XML.
Andy,

@Andy È abbastanza inutile se l'XML è stato scritto dall'umano e l'applicazione dice semplicemente "sbagliato!". Un editor umano deve conoscere la riga in cui è stato rilevato l'errore.
Kevin Cline il

Qualsiasi numero di strumenti ti dice esattamente su quale linea e spesso su quale carattere viene rilevato l'errore. Strumenti XML in NotePad ++ per esempio. .Net ti dirà esattamente dove anche il tuo file .config è sbagliato. Se stai parlando di un'API, uno dei vantaggi di XML è che lo sviluppatore API può anche fornire un XSD, che oltre a garantire una sintassi XML valida può anche dirti se hai elementi che non appartengono, se ci dovrebbe essere solo uno di quegli elementi, ecc. Json scritto a mano è molto più facile da rovinare.
Andy,

-2

L'analisi è relativamente semplice pur essendo leggibile dall'uomo allo stesso tempo.

E alcuni simpatici parser (ad esempio Xerces {c ++}) sono prontamente disponibili.


2
Bene, è facile purché i documenti siano piccoli. Se devi analizzare documenti troppo grandi per essere ragionevolmente inseriti nella memoria, allora le cose diventano tristi.
TMN,

Metterei in dubbio la parte della leggibilità umana. Ci vuole solo troppo sforzo per leggere XML oltre a leggere un JSON equivalente.
cmaster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.