Considerazioni sull'evoluzione dei metadati?

1

Man mano che l'applicazione si evolve, anche i metadati. Quali sono le considerazioni principali per la transizione in uno schema di metadati più raffinato?

Due casi di esempio, che a mio parere sono piuttosto archetipici.

Caso 1. I nuovi metadati sono più strutturati e dettagliati. Ad esempio, il campo Posizione passa da testo libero a Paese, Città e il resto dell'indirizzo Street. (questo è solo un esempio. Immagina per un momento che non ci siano servizi di gazeteer che facciano un lavoro decente per convertire il testo libero in una posizione strutturata)

Caso 2. I nuovi metadati hanno attributi, solitamente espressi in un altro attributo in modo informale. Ad esempio, Info sull'occupazione (in precedenza testo libero) ha bisogno di attributi più precisi su proprio - Categoria lavoro (vocabolario controllato) e Tipo di contratto (anche vocaboli controllati) (e le Informazioni sull'occupazione originali possono avere ancora più significato, quindi rimane anche) .

Il problema sorge mentre "allinei le ontologie" quando si integra con un altro sistema. Per come la vedo, ci sono due forze qui. Una forza è: l'interfaccia utente di input dell'utente finale deve essere mantenuta minima. (Data la mancanza di standard de facto nel dominio delle risorse umane e diversi sistemi per integrarsi in tale ambito potrebbero esserci molti metadati simili da inserire). Un'altra forza è che i consumatori di metadati ne hanno bisogno in un particolare formato e tipo, non sempre corrispondente a quello del sistema di origine. Ancora un'altra forza (una più debole) è quella di mantenere tale processo di allineamento efficiente dal punto di vista computazionale.

I casi valgono anche per l'evoluzione dello stesso sistema. Oggi è abbastanza per avere un campo di testo informale, domani deve essere esteso con attributi semanticamente rigidi. Allo stesso tempo, il vecchio utilizzo informale potrebbe essere ancora sufficiente per molti utenti.

Quale potrebbe essere un buon approccio e quali considerazioni più importanti?

    
posta Roman Susi 11.05.2018 - 08:36
fonte

1 risposta

1

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.

    
risposta data 11.05.2018 - 18:13
fonte

Leggi altre domande sui tag