Una definici�n de tipo de atributo especifica la s�ntaxis de un atributo y c�mo se ordenan y comparan los atributos de ese tipo. Los tipos de atributos en el directorio forman un �rbol de clases. Por ejemplo, el tipo de atributo "commonName" es una subclase del tipo de atributo "name". Sin embargo, no muchos servidores LDAP soportan subclasificaci�n de atributos.
En el �rbol de esquema, el nombre "AttributeDefinition" est� unido a un contexto plano que contiene objetos DirContext que representan definiciones del tipos de atributos en el esquema. Por ejemplo, si un directorio soporta un atributo "commonName", el contexto "AttributeDefinition" tendr� una uni�n con el nombre "commonName" que est� unido a un objeto DirContext.
Cada objeto del contexto "AttributeDefinition" tiene los atributos obligatorios y opcionales listados en la siguiente tabla:
| Identificador de Atributo | Descripci�n del Valor de Atributo |
|---|---|
| NUMERICOID (obligatorio) | Identificador de Objeto �nico (OID) |
| NAME | Nombre del Atributo |
| DESC | Descripci�n del Atributo |
| OBSOLETE | "true" si es obsoleto; "false" o ausente si no lo es |
| SUP | Nombre del tipo de atributo superior del que se deriba el tipo de atributo. |
| EQUALITY | Nombre o OID de la regla de correspondencia si la igualdad de correspondencia est� permitida; ausente si no lo est�. |
| ORDERING | Nombre o OID de la regla de correspondencia si est� permitida la ordenaci�n; ausente si no lo est�. |
| SUBSTRING | Nombre o OID de la regla de correspondencia si est� permitida la correspondencia de sub-string; ausente si no lo est�. |
| SYNTAX | OID num�rico de la s�ntaxis de los valores de este tipo. |
| SINGLE-VALUE | "true" si el atributo no es multi-valor; "false" o ausente si lo es. |
| COLLECTIVE | "true" si el atributo es colectivo; "false" o ausente si no lo es. |
| NO-USER-MODIFICATION | "true" si el atributo no es modificable por el usuario; "false" o ausente si lo es. |
| USAGE | Descripci�n del uso del atributo. |
Estos atributos corresponden a la definci�n de "AttributeTypeDescription" en la RFC 2252. Todos los valores de atributos est�n representados por la clase java.lang.String. Algunos directorios no publican todos los datos del esquema. Por ejemplo, el Netscape Directory Server v4.1 no publica las reglas de igualdad, ordenaci�n y sustring para sus definiciones de atributos aunque el servidor si las soporta para ciertos atributos. En estos casos, los objetos esquema no describen completamente las definiciones de atributos.
�Recuperar el Objeto Esquema de una Definici�n de Tipo de Atributo
Para recuperar el objeto esquema de una definici�n de tipo de atributo, la buscamos en el �rbol de esquema. Por ejemplo, podemos obtener el objeto esquema que representa el atributo "cn" usando el siguiente c�digo:
// Get the schema tree root
DirContext schema = ctx.getSchema("");
// Get the schema object for "cn"
DirContext cnSchema = (DirContext)schema.lookup("AttributeDefinition/cn");
Si obtenemos los atributos del objeto esquema cnSchema, veremos lo siguiente:
NUMERICOID: 2.5.4.3 NAME: cn SYNTAX: 1.3.6.1.4.1.1466.115.121.1.15 DESC: Standard Attribute
No s�lo podemos usar lookup() para recuperar objetos esquema del �rbol de esquema, tambi�n podemos usar m�todos como list() o search().
�Obtener una Definici�n de Tipo de Atributo
Dando un objeto Attribute que representa un atributo LDAP, podemos obtener su objeto esquema llamando a getAttributeDefinition() sobre �l. As�, otra forma de obtener el objeto esquema de "cn" es obtener el atributo "cn" y luego llamar a getAttributeDefinition(). Aqu� tenemos un ejemplo.
// Get an attribute of that type
Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People",
new String[]{"cn"});
Attribute cnAttr = attrs.get("cn");
// Get its attribute type definition
DirContext cnSchema = cnAttr.getAttributeDefinition();
�A�adir una Nueva Definici�n de Tipo de Atributo
|
Antes de Continuar:
Ver las notas de la secci�n Definici�n de Clases Obejto sobre actualizaci�n del esquema. |
A�adir una nueva definici�n de tipo de atributo al esquema es como a�adir una nueva entrada al directorio. Esto es as� porque el �rbol de esquema y los objetos esquema son objetos DirContext.
Aqu� hay un ejemplo que a�ade una nueva definici�n de tipo de atributo ("fooAttr") al esquema. Primero declara el atributo que describe la nueva definici�n y luego a�ade la definici�n al esquema usando DirContext.createSubcontext().
// Specify attributes for the schema object
Attributes attrs = new BasicAttributes(true); // Ignore case
attrs.put("NUMERICOID", "1.3.6.1.4.1.42.2.27.4.2.3.1.1.2");
attrs.put("NAME", "fooAttr");
attrs.put("DESC", "for JNDITutorial example only");
attrs.put("SYNTAX", "1.3.6.1.4.1.1466.115.121.1.15");
// Get the schema tree root
DirContext schema = ctx.getSchema("");
// Add the new schema object for "fooAttr"
DirContext newAttr = schema.createSubcontext("AttributeDefinition/fooAttr", attrs);
�Modificar una Definici�n de Tipo de Atributo
No podemos modificar una definici�n de atributo existente. Primero debemos borrar la definici�n existente y luego a�adir la versi�n actualizada.
�Borrar una Definici�n de Tipo de Atributo
|
Antes de Continuar:
Ver las notas de la secci�n Definici�n de Clases Obejto sobre actualizaci�n del esquema. |
Borrar una definici�n de tipo de atributo del esquema es como borrar una entrada del directorio. Aqu� hay un ejemplo que elimina la definici�n de tipo de atributo "fooAttr" del esquema usando DirContext.destroySubcontext():
// Get the schema tree root
DirContext schema = ctx.getSchema("");
// Remove the schema object for "fooAttr"
schema.destroySubcontext("AttributeDefinition/fooAttr");
Alguno servidores podr�an no permitirnos borrar una definici�n de tipo de atributo que est� siendo utilizada por entradas del directorio. Podr�amos evitar esta restricci�n desactivando el chequeo de esquema.