Condividi tramite


Schemi GDL

Il parser GDL consente di creare e implementare uno schema basato sui dati. Quando viene fornito uno schema, il parser esegue la convalida dello schema e converte i dati.

Uno schema descrive la struttura e il formato dei dati nel file di origine GDL associato. Lo schema può essere definito all'interno del file di dati di origine GDL stesso oppure può essere un file separato a cui fa riferimento il file di dati di origine GDL. Lo schema definisce le voci di dati che possono essere visualizzate all'interno di ogni costrutto e il numero di volte in cui è possibile definire ogni attributo. Ad esempio, è possibile definire un costrutto per descrivere una persona. È possibile che il costrutto includa il nome, la data di nascita, l'altezza, il peso, l'indirizzo di casa e alcune informazioni sull'impiego.

I dati GDL potrebbero essere simili all'esempio di codice seguente.

*Person: person_ID
{
  *Name:
  *Birthdate:
  *Height:
  *Weight:
  *HomeAddress:
  *EmploymentInfo:
} 

Poiché *HomeAddress e *EmploymentInfo rappresentano raggruppamenti logici di informazioni, possono essere definiti anche come costrutti, come illustrato nell'esempio di codice seguente.

*HomeAddress:
{
  *StreetAddress:
  *Apt_Number:
  *City:
  *State:
  *Zip:
}

*EmploymentInfo:
{
  *Employer:
  *Address:
  *Position:
  *Salary:
  *StartDate:
}

I costrutti GDL, ad esempio quelli illustrati nell'esempio precedente, non definiscono regole di sintassi per la struttura e il contenuto. Ad esempio, potrebbero essere presenti due istanze del costrutto *Person, una che specifica *Peso in chilogrammi e l'altra che specifica *Peso in libbre. Queste istanze possono causare incoerenze.

Lo schema GDL fornisce un metodo per specificare formalmente la struttura e il contenuto a cui devono essere conformi i dati in ingresso. Il parser convalida i dati in base a questo schema e avvisa se i dati o la struttura dei dati non sono conformi allo schema. È possibile specificare se le voci sono obbligatorie o facoltative (ad esempio Apt) o se le voci possono essere definite. Ad esempio, *Apt_Number potrebbe essere facoltativo e una singola persona può mantenere due processi.

Lo schema consente di condividere e ereditare la definizione delle voci. Ad esempio, la definizione dello schema per *Address in *EmploymentInfo può essere condivisa da *HomeAddress. Lo schema consente di derivare nuove definizioni dalle definizioni esistenti. I due costrutti address non devono essere identici perché possono essere varianti derivate da una definizione ereditata comune.

Lo schema può essere usato per specificare il formato di un valore di attributo specificato. Ad esempio, lo schema può richiedere che il valore della data venga specificato nel formato MM-GG-AAAA. È anche possibile che il parser scompone le espressioni di valore complesse nei componenti costitutivi e le visualizzi nello snapshot. Ad esempio, l'applicazione client potrebbe voler scomporre la data in tre campi separati, come illustrato nell'esempio di codice seguente.

*Date:
{
  *Month: Jan
  *Day: 1
  *Year: 2001
}

La capacità dello schema di supportare l'ereditarietà ha implicazioni aggiuntive. L'ereditarietà consente naturalmente di estendere lo schema mantenendo la compatibilità. Se è presente uno schema derivato da un altro schema, anche un file di dati conforme allo schema derivato sarà conforme allo schema originale. Questa ereditarietà consente ai fornitori di personalizzare il proprio schema (e implicando i file di dati) mantenendo la compatibilità con uno schema master (e tutte le applicazioni che richiedono la conformità allo schema master). In pratica, il fornitore deve fare riferimento solo al file che definisce lo schema master e creare nuove definizioni che ereditano dalle definizioni nello schema master. Il fornitore non deve creare una copia privata dello schema master o modificare lo schema master in alcun modo. Questa situazione garantisce che il fornitore non debba eseguire alcuna azione se lo schema master viene successivamente modificato.

Come illustrato nell'esempio precedente, l'ereditarietà consente di prendere in considerazione i modelli comuni ed evitare la duplicazione inutile delle definizioni e la manutenzione associata. Di conseguenza, gli schemi e i set di dati che rappresentano possono essere ben strutturati e strutturati in modo logico.

Per altre informazioni su come usare schemi basati sull'ereditarietà, vedere Modelli GDL.