Passa al contenuto principale

2. Modello delle informazioni utente della directory

Come afferma [X.501]:

  Lo scopo della Directory è contenere, e rendere accessibili, informazioni
su oggetti di interesse (objects) presenti in un certo «mondo». Un
oggetto può essere qualsiasi cosa identificabile (a cui si possa
assegnare un nome).

Una classe di oggetti (object class) è una famiglia identificata di
oggetti, reali o concepibili, che condividono determinate caratteristiche.
Ogni oggetto appartiene ad almeno una classe. Una classe di oggetti può
essere una sottoclasse di altre classi di oggetti; in tal caso, i membri
della prima classe, la sottoclasse, sono considerati anche membri delle
seconde, le superclassi. Possono esistere sottoclassi di sottoclassi, e
così via fino a una profondità arbitraria.

Una voce di directory (directory entry), ossia una raccolta di informazioni dotata di nome, è l’unità informativa fondamentale conservata nella Directory. Esistono più tipi di voci di directory.

Una voce oggetto (object entry) rappresenta un oggetto specifico. Una voce alias (alias entry) fornisce un nome alternativo. Una sottovoce (subentry) contiene informazioni amministrative e/o operative.

L’insieme delle voci che rappresentano la base informativa della directory (Directory Information Base, DIB) è organizzato gerarchicamente in una struttura ad albero denominata albero informativo della directory (Directory Information Tree, DIT).

La Sezione 2.1 descrive l’albero informativo della directory. La Sezione 2.2 tratta la struttura delle voci. La Sezione 2.3 tratta la denominazione delle voci.

La Sezione 2.4 tratta le classi di oggetti. La Sezione 2.5 tratta le descrizioni degli attributi. La Sezione 2.6 tratta le voci alias.

2.1. L’albero informativo della directory​

Come osservato sopra, la DIB è composta da un insieme di voci organizzate gerarchicamente in una struttura ad albero denominata albero informativo della directory (DIT); più precisamente, un albero i cui vertici sono le voci.

Gli archi tra i vertici definiscono le relazioni tra le voci. Se esiste un arco da X a Y, la voce in X è l’immediata superiore di Y e Y è l’immediata subordinata di X. Le voci superiori di una voce sono la sua immediata superiore e le superiori di quest’ultima. Le voci subordinate sono tutte le sue immediate subordinate e le rispettive subordinate.

Analogamente, la relazione superiore/subordinata tra le voci oggetto può servire a derivare una relazione tra gli oggetti rappresentati. Le regole di struttura del DIT possono disciplinare le relazioni tra gli oggetti.

Nota: l’immediata superiore di una voce è detta anche genitore della voce, mentre l’immediata subordinata è detta anche figlio della voce. Le voci con lo stesso genitore sono dette sorelle.

2.2. Struttura di una voce​

Una voce consiste in un insieme di attributi contenenti informazioni sull’oggetto rappresentato. Alcuni attributi rappresentano informazioni utente e sono detti attributi utente (user attributes). Altri rappresentano informazioni operative e/o amministrative e sono detti attributi operativi (operational attributes).

Un attributo è formato da una descrizione dell’attributo (un tipo e zero o più opzioni) e da uno o più valori associati. Spesso un attributo viene indicato mediante la sua descrizione. Per esempio, l’attributo 'givenName' è costituito dalla descrizione 'givenName' (il tipo di attributo 'givenName' [RFC4519] e zero opzioni) e da uno o più valori associati.

Il tipo di attributo determina se l’attributo può avere più valori, la sintassi e le regole di corrispondenza usate per costruirne e confrontarne i valori, nonché altre funzioni. Le opzioni indicano sottotipi e altre funzioni.

I valori di attributo sono conformi alla sintassi definita per il tipo di attributo.

Due valori di uno stesso attributo non possono essere equivalenti. Due valori sono considerati equivalenti se e solo se corrisponderebbero secondo la regola di corrispondenza per uguaglianza del tipo di attributo. Se il tipo di attributo non definisce tale regola, due valori sono equivalenti se e solo se sono identici. (Per altre limitazioni, vedere la Sezione 2.5.1.)

Per esempio, un attributo 'givenName' può avere più valori; questi devono essere Directory Strings e non distinguono tra maiuscole e minuscole. Un attributo 'givenName' non può contenere sia "John" sia "JOHN", poiché tali valori sono equivalenti secondo la regola di corrispondenza per uguaglianza del tipo di attributo.

Inoltre, nessun attributo deve avere un valore non equivalente a se stesso. Per esempio, 'givenName' non può avere come valore una Directory String che includa il punto di codice REPLACEMENT CHARACTER (U+FFFD), poiché una corrispondenza che coinvolga tale stringa risulta Undefined secondo la regola di corrispondenza per uguaglianza dell’attributo.

Quando un attributo viene usato per denominare la voce, uno e un solo valore dell’attributo viene impiegato per formare il nome distinto relativo (Relative Distinguished Name). Tale valore è detto valore distintivo (distinguished value).

2.3. Denominazione delle voci​

2.3.1. Nomi distinti relativi​

Ogni voce è denominata relativamente alla sua immediata superiore. Questo nome relativo, detto nome distinto relativo (Relative Distinguished Name, RDN) [X.501], è composto da un insieme non ordinato di una o più asserzioni di valore di attributo (attribute value assertions, AVA), ciascuna formata da una descrizione di attributo con zero opzioni e da un valore di attributo. Le AVA sono scelte in modo da corrispondere ai valori di attributo della voce (ciascuno dei quali è un valore distintivo).

Il nome distinto relativo di una voce deve essere univoco tra tutte le immediate subordinate della sua immediata superiore (cioè tra tutte le voci sorelle).

Seguono esempi di rappresentazioni testuali di RDN [RFC4514]:

  UID=12345
OU=Engineering
CN=Kurt Zeilenga+L=Redwood Shores

L’ultimo è un esempio di RDN multivalore, cioè composto da più AVA.

2.3.2. Nomi distinti​

Il nome pienamente qualificato di una voce, detto nome distinto (Distinguished Name, DN) [X.501], è la concatenazione del suo RDN e del DN della sua immediata superiore. Un nome distinto identifica senza ambiguità una voce nell’albero. Seguono esempi di rappresentazioni testuali di DN [RFC4514]:

  [email protected],DC=example,DC=com
CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US

2.3.3. Nomi alias​

Un alias, o nome alias, è «un nome per un oggetto, fornito mediante l’uso di voci alias» [X.501]. Le voci alias sono descritte nella Sezione 2.6.

2.4. Classi di oggetti​

Una classe di oggetti è «una famiglia identificata di oggetti (o oggetti concepibili) che condividono determinate caratteristiche» [X.501].

Come definito in [X.501]:

  Le classi di oggetti sono usate nella Directory per vari scopi:

- descrivere e classificare gli oggetti e le voci che vi
corrispondono;

- ove opportuno, controllare il funzionamento della Directory;

- disciplinare, insieme alle specifiche delle regole di struttura del
DIT, la posizione delle voci nel DIT;

- disciplinare, insieme alle specifiche delle regole di contenuto del
DIT, gli attributi contenuti nelle voci;

- identificare classi di voci che l’autorità amministrativa competente
deve associare a una determinata politica.

Una classe di oggetti (una sottoclasse) può derivare da una classe di
oggetti (la sua superclasse diretta), a sua volta derivata da una classe
ancora più generica. Per le classi strutturali, il processo termina con
la classe di oggetti più generica, 'top' (definita nella Sezione 2.4.1).
L’insieme ordinato delle superclassi fino alla classe più alta di una
classe di oggetti costituisce la sua catena di superclassi (superclass
chain).

Una classe di oggetti può derivare da due o più superclassi dirette
(superclassi che non appartengono alla stessa catena). Questa
caratteristica della relazione di sottoclasse è detta ereditarietà
multipla (multiple inheritance).

Ogni classe di oggetti identifica l’insieme degli attributi che devono essere presenti nelle voci appartenenti alla classe e l’insieme di quelli che possono essere presenti. Poiché una voce deve soddisfare i requisiti di ogni classe cui appartiene, una classe di oggetti eredita dalle superclassi gli insiemi degli attributi consentiti e obbligatori. Una sottoclasse può rendere obbligatorio un attributo consentito dalla superclasse. Se un attributo appartiene a entrambi gli insiemi, la sua presenza è obbligatoria.

Ogni classe di oggetti appartiene a uno di tre tipi: astratta (Abstract), strutturale (Structural) o ausiliaria (Auxiliary).

Ogni classe è identificata da un identificatore di oggetto (object identifier, OID) e, facoltativamente, da uno o più nomi brevi (descrittori).

2.4.1. Classi di oggetti astratte​

Come suggerisce il nome, una classe astratta fornisce una base di caratteristiche dalla quale si possono definire altre classi che le ereditano. Una voce non può appartenere a una classe astratta a meno che non appartenga a una classe strutturale o ausiliaria che eredita da essa.

Le classi astratte non possono derivare da classi strutturali o ausiliarie.

Tutte le classi strutturali derivano, direttamente o indirettamente, dalla classe astratta 'top'. Le classi ausiliarie non derivano necessariamente da 'top'.

Segue la definizione della classe di oggetti 'top' (vedere la Sezione 4.1.1):

  ( 2.5.6.0 NAME 'top' ABSTRACT MUST objectClass )

Tutte le voci appartengono alla classe astratta 'top'.

2.4.2. Classi di oggetti strutturali​

Come afferma [X.501]:

  Una classe di oggetti definita per l’uso nella specifica strutturale del
DIT è detta classe strutturale. Le classi strutturali sono usate per
definire la struttura dei nomi degli oggetti delle voci conformi.

Una voce oggetto o alias è caratterizzata da una e una sola catena di
superclassi strutturali, che ha una singola classe strutturale come
classe più subordinata. Questa è detta classe strutturale della voce.

Le classi strutturali sono correlate alle voci associate:

- una voce conforme a una classe strutturale deve rappresentare
l’oggetto del mondo reale vincolato da tale classe;

- le regole di struttura del DIT fanno riferimento unicamente alle
classi strutturali; la classe strutturale di una voce serve a
specificarne la posizione nel DIT;

- la classe strutturale di una voce, insieme a una regola di contenuto
del DIT associata, serve a controllare il contenuto della voce.

La classe strutturale di una voce non deve essere modificata.

Ogni classe strutturale è una sottoclasse, diretta o indiretta, della classe astratta 'top'.

Le classi strutturali non possono essere sottoclassi di classi ausiliarie.

Ogni voce appartiene alla propria classe strutturale e a tutte le classi della catena di superclassi di quest’ultima.

2.4.3. Classi di oggetti ausiliarie​

Le classi ausiliarie servono ad ampliare le caratteristiche delle voci. Sono comunemente usate per ampliare gli insiemi degli attributi la cui presenza è obbligatoria o consentita in una voce. Possono descrivere voci o classi di voci.

Le classi ausiliarie non possono essere sottoclassi di classi strutturali.

Una voce può appartenere a qualsiasi sottoinsieme delle classi ausiliarie consentite dalla regola di contenuto del DIT associata alla classe strutturale della voce. Se alla classe strutturale non è associata alcuna regola di contenuto del DIT, la voce non può appartenere ad alcuna classe ausiliaria.

L’insieme delle classi ausiliarie cui appartiene una voce può cambiare nel tempo.

2.5. Descrizioni degli attributi​

Una descrizione di attributo è composta da un tipo di attributo (vedere la Sezione 2.5.1) e da un insieme di zero o più opzioni di attributo (vedere la Sezione 2.5.2).

Una descrizione di attributo è rappresentata dalla seguente ABNF:

  attributedescription = attributetype options
attributetype = oid
options = *( SEMI option )
option = 1*keychar

dove identifica il tipo di attributo e ogni