| Title: 4.1 - Schema |
| NavPrev: 4-schema-management.html |
| NavPrevText: 4 - Schema Management |
| NavUp: 4-schema-management.html |
| NavUpText: 4 - Schema Management |
| NavNext: 4.2-schema-manager.html |
| NavNextText: 4.2 - Schema manager |
| Notice: Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| . |
| http://www.apache.org/licenses/LICENSE-2.0 |
| . |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| # 4.1 - Schema |
| |
| A **Schema** is a set of elements that are used by the **LDAP Server** to describe the data that are stored. The top two elements are **ObjectClass** and **AttributeType**. An **ObjectClass** is a container, describing what an **LDAP** entry can contain, while an **AttributeType** describe each singe element stored in this container. |
| |
| The key here is that an **LDAP** entry uses **ObjectClasses** to list all the possible **AttributeTypes** that an entry can contain, some of them being mandatory, some other optional. |
| |
| Now, there is more. We have many other **Schema Objects** that are colateral: |
| |
| * **LdapComparator** (_ApacheDS_ specific) |
| * **DitContentRule** |
| * **DitStructureRule** |
| * **MatchingRule** |
| * **MatchingRuleUse** |
| * **NameForm** |
| * **Normalizer** (_ApacheDS_ specific) |
| * **Syntax** |
| * **SyntaxChecker** (_ApacheDS_ specific) |
| |
| Most of those elements are defined in [RFC 4512](https://tools.ietf.org/html/rfc4512), we have added three others (**LDdapComparator**, **Normalizer** and **SyntaxChecker**) in order to make the server easy to extend by adding some new ones. |
| |
| Those **SchemaObjects** are used to refine the relation between elements, or define their syntax, or some other constraints. The most important ones are **LdapComparator**, **MatchingRule**, **Normalizer**, **Syntax** and **SyntaxChecker**. All of them have dependencies, exposed in this picture: |
| |
| ![SchemaObjects relationship](images/SchemaObjects.png) |