LDAP Model schema package

Contains interfaces and base classes for representing the LDAP schema domain model. We model the following LDAP schema objects:

- attributeTypes
- dITContentRules
- dItStructureRules
- matchingRules
- matchingRuleUses
- nameForms
- objectClasses
- syntaxes

An interface is defined for each type of schema object. All these interfaces extend from a common root interface: SchemaObject. Other interfaces have been added to associate some useful behavoir with these objects. These interfaces are listed below:

- Normalizer
- Comparator [from SDK]
- SyntaxChecker

These interfaces are primitive constructs that help define what some schema objects like a syntax or a matchingRule is in terms of use. Namely these constructs determine how schema objects are applied. For example a syntax exists not only as an OID to be implemented internally by some directory server. It exists to constrain the values of attributes which are associated with the syntax. This function is defined by the SyntaxChecker interface. All syntaxes have a value checker that can apply the syntax to the value to determine if the value is accepted by the syntax. A SyntaxChecker is nothing but a lexical pattern matcher like a regular expression.

Normalizers and Comparators play an important role in controlling matching and hence giving meaning to matchingRules. They respectively define how values are to be reduced to a canonical form and how they are to be compared to match filter assertions to values while conducting a search. This is a very important aspect of the directory and unfortunately it is the least understood. These two interfaces give tangible meaning to what a matchingRule is about making a matchingRule definition more than just an OID tag or place holder but something that can be used.

The extra interfaces above are not SchemaObjects although they play a critical role in defining how schema objects are applied. SchemaObjects are those that you actually get back from a directory server and are part of the protocol. Within a server environment the relevant schema objects will have valid SyntaxCheckers, Normalizers and Comparators. However outside of the this environment these properties MAY be undefined. We hope to make it defined on the client side as well if desired.

Here's what the OID of each element means according to [MODELS ]:

Schema Description | Numericoid Description
--- | ---
ObjectClass | numericoid is object identifier assigned to this object class;
AttributeType | numericoid is object identifier assigned to this attribute type;
MatchingRule | numericoid is object identifier assigned to this matching rule;
MatchingRuleUse | numericoid is the object identifier of the matching rule associated with this matching rule use description; matching rule uses are [0-1]:[1] cardinality with their respective matchingRule.
Syntax | numericoid is object identifier assigned to this LDAP syntax;
DitContentRule | numericoid is the object identifier of the structural object class associated with this DIT content rule;
DitStructureRule | this now something very special and needs further investigation
NameForm | numericoid is object identifier which identifies this name form;