Domanda

Reading StackOverflow e ascoltare i podcast di Joel Spolsky e Jeff Atwood, comincio a credere che molti sviluppatori odiano utilizzando XML o almeno cercare di evitare l'uso di XML, per quanto possibile per la conservazione o lo scambio di dati .

D'altra parte, mi piace utilizzando XML molto per diversi motivi:

  • serializzazione XML è implementato nella maggior parte delle lingue moderne ed è estremamente facile da usare ,
  • Essere più lento di serializzazione binaria, la serializzazione XML è molto utile quando si tratta di utilizzando gli stessi dati provenienti da diversi linguaggi di programmazione o in cui è destinato ad essere leggere e capire, anche per il debug, da un umana (JSON, ad esempio, è più difficile da capire),
  • supporti XML unicode , e se usato correttamente, non ci sono problemi con diversa codifica, caratteri, ecc.
  • Ci sono un sacco di strumenti che lo rende facile lavorare con dati XML. XSLT è un esempio, rendendo più semplice per presente e per trasformare i dati. XPath è un altro, rendendo più semplice per cercare i dati,
  • XML può essere conservato in alcuni server SQL, che consente gli scenari quando i dati che è troppo complicato per essere facilmente memorizzate in tabelle SQL deve essere salvato e manipolati; JSON o dati binari, ad esempio, non possono essere manipolati tramite SQL direttamente (se non da corde manipolare, che è pazza nella maggior parte delle situazioni),
  • XML non richiede tutte le applicazioni da installare. Se voglio la mia app per utilizzare un database, devo installare un server di database prima. Se voglio la mia app per l'uso di XML, Non è necessario installare nulla ,
  • XML è molto più esplicito ed estensibile che, per esempio, i file del Registro di sistema di Windows o INI,
  • Nella maggior parte dei casi, ci sono senza problemi CR-LF , grazie al livello di astrazione fornita da XML.

Così, prendendo in considerazione tutti i vantaggi dell'utilizzo di XML, perché così molti sviluppatori odiano usarlo? IMHO, l'unico problema con esso è che:

  • XML è troppo prolisso e richiede molto più posto maggior parte delle altre forme di dati, soprattutto quando si tratta di codifica Base64.

Naturalmente, ci sono molti scenari in cui XML non va bene a tutti. Memorizzazione di domande e risposte di SO in un file XML sul lato server sarà assolutamente sbagliato. Oppure, quando la memorizzazione di un video AVI o di un gruppo di immagini JPG, XML è la cosa peggiore per l'uso.

Ma che dire di altri scenari? Quali sono i punti deboli di XML?


Per le persone che hanno ritenuto che questa domanda non è una vera e propria domanda:

Contrariamente a domande come un significative nuove invenzioni in informatica dal 1980 , la mia domanda è una domanda molto chiara e chiaramente invita a spiegare ciò che le debolezze altrui esperienza quando si utilizza XML e perché a loro non piace esso. Essa non invita a discutere, per esempio, se XML è buono o cattivo . Né lo fa richiedono discussioni estesi; in tal modo, le risposte attuali ricevuti finora sono brevi e precisi e di fornire abbastanza informazioni che volevo.

ma è un wiki, dal momento che non ci può essere un Unique buona risposta a questa domanda.

Secondo SO "non una vera e propria domanda" è una domanda in cui "E 'difficile dire ciò che viene chiesto qui. Questa domanda è ambigua, vaga, incompleta, o retorico e non può essere ragionevolmente risolta in sua attuale formare. "

  • Che cosa si chiede qui : Penso che la domanda stessa è molto chiara, e diversi paragrafi di testo di cui sopra rende ancora più chiaro,
  • Questa domanda è ambigua, vaga, incompleta : ancora una volta, non c'è nulla di ambiguo, né vaga né incompleta,
  • o retorico : it non è: la risposta alla mia domanda non è una cosa ovvia,
  • e non può essere ragionevolmente risolta :. Diverse persone già dato ottimi risposte alla domanda, mostrando che la questione può essere risolta ragionevolmente

Sembra anche abbastanza ovvio come tariffa le risposte e determinare la risposta accettata. Se la risposta dà buone ragioni di ciò che è sbagliato con XML, ci sono possibilità che questa risposta sarà votato, poi accettato.

È stato utile?

Soluzione

Alcuni punti deboli:

  • E 'un po' difficile per i file XML associati e risorse esterne, che è il motivo per cui i nuovi formati di documenti Office utilizzano una busta zip che comprende uno scheletro di file file XML e di risorse in bundle insieme. L'altra possibilità di utilizzare la codifica base64 è molto dettagliata e non consente un buon accesso casuale, che porta uno al punto successivo:
  • accesso
  • a caso è difficile. Nessuno dei due modi tradizionali di lettura di un file XML -. Costruiscono un DOM o forward-only lettura stile SAX consentono l'accesso realmente casuale
  • l'accesso in scrittura contemporanea su diverse parti del file è difficile, motivo per cui il suo uso in manifesti eseguibili di Windows è soggetto a errori.
  • Che codifica fa un uso di file XML? A rigor di termini si indovina la codifica, poi leggere il file e verificare la codifica aveva ragione.
  • E 'difficile porzioni versione di un file. Quindi se si vuole fornire delle versioni granulare, è necessario dividere i tuoi dati. Questo non è solo un problema di formato di file, ma anche a causa del fatto che gli strumenti in genere forniscono una semantica per file -. Strumenti di controllo delle versioni, strumenti di sincronizzazione come Dropbox, ecc

Altri suggerimenti

<xml>
    <noise>
        The
    </noise>
    <adjective>
        main
    </adjective>
    <noun>
        weakness
    </noun>
    <noise>
        of
    </noise>
    <subject>
        XML
    </subject>
    <noise>
        ,
    </noise>
    <whocares>
        in my opinion
    </whocares>
    <noise>
        ,
    </noise>
    <wildgeneralisation>
        is its verbosity
    </wildgeneralisation>
    <noise>
        .
    </noise>
</xml>

Io non sono la persona giusta per chiedere, come io sono un grande fan di XML me stesso. Tuttavia, posso dirvi una delle principali lamentele che ho sentito:

È difficile con cui lavorare. Qui, mezzi duri che ci vuole conoscere un'API e che sarà necessario scrivere relativamente molto codice per analizzare il vostro XML. Mentre io non direi che è davvero tutto così difficile, non posso che concordare che un linguaggio che è fatto per descrivere gli oggetti, si può accedere più facilmente quando si utilizza un linguaggio che supporti dinamicamente creati oggetti.

Credo che in generale la reazione è semplicemente perché XML è abusato.

Tuttavia, se c'è una parola che odio su XML, con la passione, è namespace. La perdita di produttività intorno ai problemi di spazio dei nomi è orribile.

XML scende dal SGML, il gran-nonno di linguaggi di markup. Lo scopo di SGML e XML estensione è quello di text annotate . XML fa questo bene e ha una vasta gamma di strumenti che aumentano la sua struttura per una varietà di applicazioni.

Il problema, come la vedo io, è che XML è usato frequentemente, non il testo di annotazione, ma per rappresentare dati strutturati , che è una differenza sottile ma importante. In termini pratici, dati strutturati deve essere concisa per una serie di motivi. La prestazione è ovvia, soprattutto quando la larghezza di banda è limitata. Questo è probabilmente uno dei motivi principali per cui JSON è così popolare per le applicazioni web. rappresentazione sintetica struttura dati sui mezzi a filo maggiore scalabilità.

Purtroppo, JSON non è molto leggibile senza imbottitura spazi in più, che è quasi sempre omesso. D'altra parte, se avete mai provato la modifica di un file di grandi dimensioni XML utilizzando un editor della riga di comando, può essere molto scomoda pure.

Personalmente, trovo che YAML colpisce un buon equilibrio tra i due estremi. Confrontare la seguente (copiato da yaml.org con lievi modifiche).

YAML:

invoice: 34843
  date: 2001-01-23
  billto: &id001
    given: Chris
    family: Dumars
    address:
      lines: |
        458 Walkman Dr.
        Suite #292
      city: Royal Oak
      state: MI
      postal: 48046
  shipto: *id001
  product:
  - sku: BL394D
    quantity: 4
    description: Basketball
    price: 450.00
  - sku: BL4438H
    quantity: 1
    description: Super Hoop
    price: 2392.00
  tax : 251.42
  total: 4443.52
  comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

XML:

<invoice>
   <number>34843</number>
   <date>2001-01-03</date>
   <billto id="id001">
      <given>Chris</given>
      <family>Dumars</family>
      <address>
        <lines>
          458 Walkman Dr.
          Suite #292
        </lines>
        <city>Royal Oak</city>
        <state>MI</state>
        <postal>48046</postal>
      </address>
   </billto>
   <shipto xref="id001" />
   <products>
      <product>
        <sku>BL394D</sku>
        <quantity>4</quantity>
        <description>Basketball</description>
        <price>450.00</price>
      </product>
      <product>
        <sku>BL4438</sku>
        <quantity>1</quantity>
        <description>Super Hoop</description>
        <price>2392.00</price>
      </product>
   </products>
   <tax>251.42</tax>
   <total>4443.52</total>
   <comments>
    Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338
   </comments>
</invoice>

Entrambi rappresentano gli stessi dati, ma la YAML è più piccolo oltre il 30% e forse più leggibile. Che si preferisce avere modificare con un editor di testo? Ci sono molte librerie disponibili per analizzare e emettere YAML (vale a dire snakeyaml per gli sviluppatori Java).

Come per ogni cosa, lo strumento giusto per il lavoro giusto è la regola migliore da seguire.

Il mio problema brutto preferito è con i formati di serializzazione XML che utilizzano attributi - come XAML.

Questo funziona:

<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding CurrentSelection}"/>

Questo non:

<ListBox SelectedItem="{Binding CurrentSelection}" ItemsSource="{Binding Items}"/>

XAML assegna deserializzazione valori delle proprietà come vengono letti dal flusso XML. Così nel secondo esempio, quando la proprietà SelectedItem viene assegnata, ItemsSource del controllo non è stato ancora fissato, e la proprietà SelectedItem viene assegnato a un elemento che esiste ancora il know.

Se si sta utilizzando Visual Studio per creare i file XAML, tutto sarà freddo, perché Visual Studio mantiene l'ordine degli attributi. Ma modificare la XAML in qualche strumento XML che crede che la raccomandazione XML quando dice che l'ordine degli attributi non è significativo, e il ragazzo si è in un mondo di male.

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