Si sta utilizzando qualcosa di diverso da XML consigliabile per il mio file di configurazione?

8

Ho un piccolo strumento che sto progettando e che richiederebbe un file di configurazione di qualche tipo. Il file di configurazione nel mio caso è davvero più di un database, ma deve essere leggero e, se necessario, l'utente finale dovrebbe trovarlo facilmente modificabile. Tuttavia, conterrà anche molte cose in esso. (a seconda di determinati fattori, potrebbe essere 1Mb o più)

Ho deciso che preferirei usare solo testo normale, piuttosto che provare a usare SQLite o altro. Tuttavia, con l'utilizzo del testo, devo anche occuparmi della varietà di formati. Finora, le mie opzioni sono

  • XML
  • JSON
  • Formato personalizzato

I dati nel mio file sono abbastanza semplici e consistono per la maggior parte delle cose di tipo chiave-valore. Quindi, un formato personalizzato non sarebbe così difficile ... ma preferirei non dovermi preoccupare di scrivere il supporto per questo. Non ho mai visto JSON utilizzato per i file di configurazione. E XML avrebbe gonfiato le dimensioni del file sostanzialmente, credo. (Ho anche solo una antipatia per XML in generale).

Cosa dovrei fare in questo caso?

Fattori da considerare:

  • Questo file di configurazione può essere caricato su un servizio web (quindi le dimensioni contano)
  • Gli utenti devono essere in grado di modificarlo manualmente, se necessario (facilità di modifica e lettura di argomenti)
  • Deve essere in grado di generare ed elaborare automaticamente (la velocità non conta molto, ma non eccessivamente lenta)
  • Le "chiavi" e "valori" sono semplici stringhe, ma devono essere sottoposte a escape perché possono contenere qualsiasi cosa. (unicode ed escaping devono funzionare facilmente)
  • Più file di configurazione. Fondamentalmente, ogni file di configurazione è legato a un "progetto"
posta Earlz 11.11.2012 - 09:38
fonte

7 risposte

10

Penso che YAML sia la soluzione ideale per il tuo caso. A mio avviso, YAML è il formato standard de facto per i file di configurazione che devono essere modificati a mano. Molti linguaggi di programmazione hanno una libreria per leggere e / o scrivere YAML. JSON è strettamente correlato a YAML, ma è un po 'meno facile da scrivere rispetto a YAML e viene usato di più per le comunicazioni tra web server e il programma client.

    
risposta data 12.11.2012 - 06:23
fonte
7

Dopo aver esaminato le tue esigenze e visto che hai una antipatia per XML, ti consiglierei di andare con JSON. Devo ammettere che mi sono occupato solo di XML e JSON, quindi non posso parlare per nessun altro formato di configurazione comune.

JSON è davvero facile da scrivere e, se formattato correttamente, è facile da leggere. Google ama solo JSON per l'uso della configurazione nei loro strumenti. Inoltre, JavaScript può trasformarlo in oggetti in modo nativo.

    
risposta data 11.11.2012 - 09:50
fonte
3

Se usi JSON, le persone non saranno in grado di commentare frammenti di configurazione per provare cose diverse. Per me, questo è un rompicapo.

Significa anche che non puoi fornire un file di esempio di configurazione ben commentato che gli utenti possano personalizzare.

XML è standard e se puoi fornire uno schema, i tuoi utenti ti ringrazieranno

    
risposta data 01.10.2013 - 11:16
fonte
1

Per quanto riguarda i file di configurazione, "1Mb o più" è certamente di grandi dimensioni, e la necessità di evitare stringhe e mantenere molte virgolette di corrispondenza non funziona bene con gli umani. Questo è il motivo per cui per i file di configurazione di grandi dimensioni che devono essere gestiti dagli esseri umani è necessario prendere in considerazione la possibilità di definire un formato personalizzato e creare un parser personalizzato. Ecco un articolo sull'argomento degli umani che devono scrivere XML: Gli umani non dovrebbero devi ingannare XML .

Quando parser e parser generatori erano nella loro infanzia, si potrebbe fare un caso per non costruirne uno personalizzato dicendo che la costruzione di una lingua personalizzata è troppo complessa. Ora che i generatori di parser eccellenti e molto semplici sono maturati, non ci sono scuse: puoi costruire un parser personalizzato nel giro di poche ore, alla pari del tempo necessario per creare un parser per un linguaggio basato su XML < sup> * .

Ecco un piccolo tutorial che spiega il processo di costruzione un parser personalizzato con ANTLR . È in Java, ma ANTLR supporta anche C #.

* A meno che non si scelga la conversione basata sulla deserializzazione da XML, nel qual caso la creazione di un parser basato su XML richiederebbe meno tempo, ma le classi avrebbero bisogno di una "forma" che assomigli da vicino al tuo XML.     
risposta data 11.11.2012 - 12:01
fonte
1

Alcune buone risposte già qui. Ma se fossi nei tuoi panni, prima di buttar via XML, prenderei in considerazione i seguenti punti:

  • XML è molto ben supportato dal framework .NET e da strumenti di terze parti, per JSON dovrai scegliere una libreria di terze parti e vedere se soddisfa tutti i tuoi requisiti.

  • se hai bisogno di modifiche manuali solo per alcuni casi eccezionali, XML probabilmente ne soffrirà. Se è necessario apportare molte modifiche e l'elenco delle opzioni di configurazione presenta una complessità particolare, gli utenti probabilmente necessitano di un tipo di applicazione di configurazione / configurazione basata sulla finestra di dialogo - il che significa che non importa se il formato XML sottostante è 100 % di facile utilizzo. Se non vuoi scrivere una cosa del genere, almeno puoi consigliare qualche tipo di editor XML ai tuoi utenti. Strumenti come Blocco note XML o Gli strumenti XML per Notepad ++ funzionano bene per molte persone.

  • Immagino che le probabilità siano più alte che i tuoi utenti finali abbiano visto prima un qualche tipo di XML che le probabilità che abbiano già visto JSON - il che renderà un po 'più facile afferrarlo (se davvero devono)

  • se le dimensioni diventano davvero un problema per il caricamento dei dati su un servizio web, considera l'utilizzo della compressione dei dati

In realtà, se pensi a questi punti e non vuoi comunque usare XML, vai invece con JSON. L'uso di XML o JSON fornisce già metodi standard di escape delle stringhe, modi standard di estendere la struttura di configurazione in seguito, metodi standard di aggiunta di commenti e librerie già pronte per leggere e scrivere quei formati - non è necessario reinventare la ruota con qualsiasi "formato personalizzato".

    
risposta data 11.11.2012 - 17:40
fonte
1

Un file "proprietà" è valido per chiave / valore poiché il formato stesso è chiave / valore. È semplicemente 1 riga per chiave / valore. Il primo = segno nella linea divide la chiave e il valore.

Sarà più piccolo di un file XML equivalente poiché l'unica formattazione è il separatore "=" e il carattere di nuova riga. In un file XML il markup potrebbe occupare tutto lo spazio del contenuto stesso. Potrebbe letteralmente significare la differenza tra un caricamento da 1 MB e 2 MB. La compressione ti aiuta ma sei ancora in vantaggio se inizi in piccolo.

Le librerie esistenti possono gestire l'accesso ai file delle proprietà. Ma è così banale che puoi crearne uno in pochi minuti. Campane e fischietti in meno di un'ora.

IP=11.22.33.44
BuildNumber=5.02.004
MaxFrameRate=50
    
risposta data 12.11.2012 - 16:11
fonte
0

JSON è una buona scelta per la sua flessibilità, facilità di lettura e modifica al di fuori del programma, l'ampia disponibilità di librerie parse per supportarlo. Supporta la gerarchia, si presta alla semplice compatibilità avanti / indietro che un file che semplicemente salva i dati in sequenza non lo fa. Penso che abbia anche tecniche semplici per la conversione tra classi Java e dati di file e poi di ritorno dall'altra parte. Un sacco di persone sanno e hanno codificato per questo formato, e il formato è importante per altri programmi con cui probabilmente dovrai lavorare in futuro.

Molti sistemi erano basati sul formato .ini e sono abbastanza facili da analizzare se stavate scrivendo un parser da zero.

csv può essere veloce da codificare e funziona con poco overhead, ma ha problemi di flessibilità, compatibilità avanti / indietro.

L'uso del registro era una pratica comune in Windows.

L'utilizzo dei cookie è comune per lo sviluppo web.

Per una funzione di utilità, forse basta usare un testo in formato libero che corrisponda alle opzioni della riga di comando, basta leggerlo e creare un array di stringhe argv da esso.

    
risposta data 11.11.2012 - 10:09
fonte

Leggi altre domande sui tag