En esta página: Definición de Tipos de Atributos 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:
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
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
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.
|