An LDAP repository may have any number of item descriptors. Because the LDAP directory might contain any kind of data, the item descriptors may represent different kinds of items—people, computers, and mailing lists. Each item descriptor simply maps to a particular set of object classes specified in the LDAP schema.

The LDAP model also nicely supports hierarchies of item descriptors that map to object class subtypes. For example, suppose the inetorgPerson object class has several subclasses, such as engineeringPerson and salesPerson. The engineeringPerson class contains all the same attributes as the inetorgPerson class, and adds a few, such as engineerType and currentProject. In the LDAP repository, you can define an engineer item descriptor that inherits from the user item descriptor but supports these additional attributes. The following example shows how a portion of an LDAP repository definition might describe such an engineer item descriptor:

<item-descriptor name="engineer" parent="user">

  <!-- object classes (added to parent classes) -->
  <object-class>engineeringPerson</object-class>

  <!-- properties (added to parent properties) -->
  <property name="engineerType" data-type="enumerated" default="products"
    description="Type of engineer: products or services">
    <option>products</option>
    <option>services</option>
  </property>
  <property name="currentProject" data-type="string"
    description="Project or product the engineer is currently working on"/>

  <!-- child properties (override parent properties) -->
  <child-property name="department" default="Engineering"/>

  <!-- item creation (overrides parent behavior) -->
  ...

</item-descriptor>

The optional parent property of an <item-descriptor> specifies that the item descriptor inherits all parent’s object classes and properties. Any additional object-class and property values are added to the list of the parent’s object classes and properties.

You can also specify <child-property> tags to override any parent properties that have the same name. The only aspect of the parent property definition that can be overridden is the property’s default value. The property’s data-type and other attributes must stay the same. The example above demonstrates how the <child-property> tag can be used to assign the default value of Engineering to the parent’s department property; the salespeople item descriptor might assign the default value of Sales to the same property.