| Schema

## Attribute Syntax Definitions

> An attribute's syntax specifies the representation of the attribute's values. Examples of attribute syntaxes are Directory String, which specifies a case-insensitive character string encoded using the ISO 10646 character set, and Octet String, which specifies a sequence of octets.

> In the schema tree, the name `"SyntaxDefinition"` is bound to a flat context containing `DirContext` objects that represent syntax definitions in the schema. For example, if a directory supports the 1.3.6.1.4.1.1466.115.121.1.15 (Directory String) syntax, then the `"SyntaxDefinition"` context will have a binding with the name `"1.3.6.1.4.1.1466.115.121.1.15"` that is bound to a `DirContext` object.

> Each object in the `"SyntaxDefinition"` context has the mandatory and optional attributes listed in the following table.

> Attribute Identifier | Attribute Value Description
> --- | ---
> NUMERICOID (mandatory) | Unique object identifier (OID)
> DESC | Description of syntax

> These attributes correspond to the definition of "SyntaxDescription" in RFC 2252. All the attribute values are represented by the `java.lang.String` class.

> #### Retrieving the Schema of an Attribute Syntax Definition

> To retrieve the schema object of an attribute syntax, you look for it in the schema tree. For example, you can obtain the schema object that represents the Directory String syntax by using the following code. The OID for Directory String is 1.3.6.1.4.1.1466.115.121.1.15.

> >     // Get the schema tree root
> >     DirContext schema = ctx.getSchema("");

> >     // Get the schema object for Directory String's syntax
> >     DirContext dsSchema =
> >       (DirContext)schema.lookup("SyntaxDefinition/1.3.6.1.4.1.1466.115.121.1.15");

> If you get the attributes of the `dsSchema` schema object, then you will see the following.

> >     NUMERICOID: 1.3.6.1.4.1.1466.115.121.1.15
> >     DESC: Directory String

> > Note: This example won't work with the Netscape Directory Server v4.1 because that server does not publish syntax definitions in the schema.

> You can use not only `lookup()` to retrieve schema objects from the schema tree, but also such methods as `list()` or `search()`.

> #### Getting an Attribute's Syntax Definition

> Given an `Attribute` object representing an LDAP attribute, you can get its schema object by invoking `getAttributeSyntaxDefinition()` on it. For example, to retrieve the schema object for the Directory String syntax, you first fetch an attribute that uses that syntax (such as the `"cn"` attribute) and then invoke `getAttributeSyntaxDefinition()` on it. Here's an example.

> >     // Get an attribute that uses that syntax
> >     Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People",
> >         new String[]{"cn"});
> >     Attribute cnAttr = attrs.get("cn");

> >     // Get its attribute syntax definition
> >     DirContext dsSyntax = cnAttr.getAttributeSyntaxDefinition();

> > Note: This example won't work with the Netscape Directory Server v4.1 because that server does not publish syntax definitions in the schema.

> #### Creating, Modifying, or Updating an Attribute Syntax Definition

> Dynamically creating, deleting, or modifying attribute syntaxes does not make sense. Even if the LDAP server allows you to add a syntax to (or delete a syntax from) its schema, the necessary implementation changes must be done on the LDAP server to support the new syntax. Most servers support a fixed set of syntaxes. Changing that set programmatically is usually not a supported feature.

| Schema