Seguirò questi principi:
- Mantieni (meta) il formato dei dati espandibile; non forzare l'espansione.
- Consenti verifiche di verifica e integrità.
- Consenti e incoraggia i commenti.
- Versione sempre i dati.
Punto per punto, dall'ultimo (più semplice) al primo (il più difficile).
Visualizza sempre i dati
La tua rappresentazione dei metadati si evolverà. Versione ogni tale cambiamento (ad esempio usando semere). Ciò evita i problemi di indovinare in che formato si trovano realmente i dati e come interpretarli correttamente quando versioni diverse consentono interpretazioni diverse.
Le tue implementazioni devono essere pronte per interpretare una serie di versioni e gestire i dati delle versioni precedenti che sono inevitabilmente meno completi e dettagliati.
Se possibile, consenti (ma non imponi) informazioni sulla versione in ogni nodo del documento dei metadati. Ciò consente la graduale migrazione di parti che necessitano delle funzionalità della nuova versione senza una migrazione forzata del resto.
Questo è problematico se non si dispone di una singola autorità di versioning e diversi utenti indipendenti creano versioni divergenti dei formati di metadati. Questo può anche essere risolto, ma per semplicità è meglio evitare.
Consenti e incoraggia i commenti
Consentire alle persone di aggiungere un contesto di forma libera alla rappresentazione formale. La perdita di tale contesto porta a errori secondari e orribili quando i dati vengono modificati e / o migrati a rappresentazioni più recenti.
Incoraggia l'aggiunta di commenti nello strumento di modifica dei metadati. Limita la quantità e il formato dei commenti il meno possibile.
JSON è un formato di configurazione notoriamente negativo perché manca di commenti; se viene utilizzato, consenti un campo "comment"
in più in qualsiasi oggetto.
Nota che i commenti dovrebbero essere normalmente accessibili come parte dei metadati, in modo che tutti gli strumenti che si evolvono possano vederli e aggiornarli facilmente.
Consenti verifiche di verifica e integrità
Per quanto il tuo dominio dei problemi lo consente, aggiungi uno strumento automatico per controllare i metadati e rilevare i problemi più comuni. Verifica la presenza di valori incoerenti, nomi di incoerenti, errori di ortografia (un problema particolarmente sgradevole nei dati con stringhe tipizzate che sono la maggior parte dei metadati). Se si dispone di alcune regole formali (un tipo di schema), verificare le sue violazioni (ad esempio formato e intervalli numerici, formato data, valori vuoti, eventuali riferimenti ad altri nodi, ecc.).
Molto probabilmente dovrai permettere a alcune violazioni di rimanere, fino a quando non verrà implementato un modo migliore per esprimere qualcosa. Ma tu vuoi renderli facilmente visibili.
Mantieni (meta) il formato dei dati espandibile; non forzare l'espansione
Prendi un formato facile da espandere e capire. Molto probabilmente sarà un albero (xml, yml, s-expressions, json, ucf, ecc.) Con attributi primitivi, liste e altri alberi come nodi.
Consentirei solo "valore", "versione" e "commento" per portare valori primitivi e combinarli sempre in una sottostruttura / "oggetto" sotto il nome "reale":
foo {
comment: the metasyntactic variable. # The comment to "foo".
version: 1.2 # The version of the schema for "foo"; optional.
value: bar # The value we store.
}
Alla fine ti consigliamo di aggiungere più strutture:
foo {
comment: ...
version: 2.0
value: bar
constraints {
allow-empty: false
min-length: 3
all-lowercase: true
}
}
Quindi vorrai scomporre parti comuni. Consentire un tipo di sostituzione che preservi la correttezza del formato e probabilmente uno spazio dei nomi di servizio:
@define {
@version { # Only applicable to nodes with this version range.
from: 2.0
to: 3.1
constraint var-name {
allow-empty: false
min-length: 3
all-lowercase: true
}
}
}
...
foo {
comment: ...
version: 2.0.1
value: bar
constraints {
@var-name # Refer to a factored-out definition.
max-length: 10
}
}
moo {
comment: What the cow says.
version: 1.5.7 # Old version node, old format.
value: MOO!
}
Ci sarà molto più dettagli coinvolti in un documento così frammentario-evolutivo. Penso ancora che sia un buon punto di partenza. L'unico fattore che definisce la longevità dell'architettura è la sua capacità di cambiare, dicono.