Dimitri LEMBOKOLO
8
point important ici est que dans l'instanciation d'un objet (dans son écriture
LDIF, par exemple), on doit spécifier l'entière hiérarchie des classes. Comme ici
dans notre exemple, où le domain descend de top. Ce mécanisme est peut-être
un peu contraignant (surtout si vous avez à migrer un annuaire OpenLDAP 2.0
vers un 2.1 ou un 2.2, car la version 2.0 ne vous obligeait pas à spécifier toute la
hiérarchie d'objets), mais permet une chose importante : ne pas mélanger
torchons et serviettes. Imaginez en effet que nous ayons à définir des
utilisateurs, mais aussi des groupes. Cela ferait mauvais effet de ne serait-ce que
pouvoir mélanger les genres, et d'avoir un objet qui soit à la fois un groupe et un
utilisateur. Mais comme les classes afférentes aux groupes et utilisateurs sont
structurelles, elles ne peuvent donc être mélangées.
Il existe le dernier type de classe, AUXILIARY, qui permet de s'affranchir
de ce mécanisme d'héritage, et d'attribuer des données complémentaires
(« auxiliaires » dirait-on en bon franglais) à un objet.
Pour en finir avec les classes, sachez que bon nombre de classes sont
définies en standard dans un certain nombre de RFC (comme les RFC 2252 et
2256). Si l'on fait un parallèle (pas si anodin que ça) avec SNMP, on peut
considérer les classes comme des MIB SNMP (cf. Linux Magazine France n°43
d'octobre 2002), que l'on peut créer soi-même, ou dont on peut utiliser les MIB
standards comme la MIB-II (RFC 1213).
Les attributs et les types
Les attributs sont donc définissables pour un objet en fonction de la classe
à laquelle l'objet appartient.
Le typage est relativement faible contrairement à un SGBD. Ou plutôt, il
sert un autre dessein : l'interopérabilité. Les types sont en effet spécifiques aux
annuaires, et permettent de stocker essentiellement des données
alphanumériques, voire des données binaires. Mais il n'est pas complètement
dans le rôle de l'annuaire de vérifier ces types. Sur un SGBD, si.
Il existe une cinquantaine de types de données, certains génériques,
comme « DirectoryString » (chaîne de caractères UTF-8), « INTEGER » ou
« Binary String », d'autres limités à des usages spécifiques, comme « DN »
(Distinguished Name, le nom d'un objet dans un annuaire) ou « JPEG » (image
au format JPEG). Tous les types sont définis dans la RFC 2252. Nous verrons
plus loin, dans l'écriture d'un schéma, que ces syntaxes (le nom des types LDAP)
sont référencées par des OID (oui, les mêmes OID ASN-1 que pour SNMP,
mais dans un espace de nommage différent).