Una risposta che vedo usata in varie lingue è la versione di ogni formato stabile. Successivamente, quando si passa a un nuovo formato, si scrive un traduttore che legge il formato precedente e lo converte nel nuovo quando caricato.
Il traduttore non è solo responsabile del riconfezionamento dei dati nel nuovo formato, ma fornisce anche impostazioni predefinite sensibili per nuove proprietà o la fusione di proprietà estinte in quelle esistenti se il loro significato non è destinato a perdersi.
Puoi continuare a creare nuove versioni finché continui a scrivere traduttori di corrispondenza, le conversioni avverranno in serie dalla prima corrispondenza alla più recente (ad esempio v1 - > v2 - > v3 - > v4) .
Quando i nuovi dati vengono salvati automaticamente viene impostato sulla versione più recente. In questo modo scrivere un'utilità per tradurre in massa tutti i vecchi dati (per le versioni principali) è semplice come un ciclo:
while files
read file
write file
end while