...
This page describe the way schema are loaded into ADS. The schema are defined by the following document : RFC 4512 (wgich which obsoletes the RFC 2252)
A schema defines two types of elements, accordingly to RFC 4512 :
- ObjectClasses
- AttributeTypes
Those two elements are used internally by ADS to check that an entry is valid, and to apply the correct rules to compare attributes, sort entries, check attributes, etc.
We also use Syntax, defined in RFC 4512 and described in RFC 4517
Objects relations
We have some relations between those elements, the OIDs, the element's names and the schema file's name. Here they are :
...
Code Block |
---|
<WS> ::= ( '#' (~'\n')* '\n' | ' ' | '\t' | '\r' '\n' | '\n' | '\r' )
<QUOTE> ::= '\''
<DIGIT> ::= '0' .. '9'
<DOLLAR> ::= '$'
<OPEN_PAREN> ::= '('
<CLOSE_PAREN> ::= ')'
<OPEN_BRACKET> ::= '{'
<CLOSE_BRACKET> ::= '}'
<NUMERIC_STRING> ::= ('0' .. '9')+
<NUMERICOID> ::= <NUMERIC_STRING ( '.' NUMERIC_STRING )+
<IDENTIFIER> ::= ( 'a' .. 'z') ( 'a' .. 'z' | '0' .. '9' | '-' | ';' )*
<DESC> ::= "desc" <WS> <QUOTE> ( ~'\'' )+ <QUOTE>
<SYNTAX> ::= "syntax" <WS> <NUMERICOID> ( <OPEN_BRACKET> ( <DIGIT> )+ <CLOSE_BRACKET> )?
<parseSchema> ::= ( <attributeType> | <objectClass> )*
<objectClass> ::=
"objectclass"
<OPEN_PAREN> <NUMERICOID>
( <objectClassNames> )?
( <objectClassDesc> )?
( "OBSOLETE" )?
( <objectClassSuperiors> )?
( "ABSTRACT" | "STRUCTURAL" | "AUXILIARY" )?
( <must> )?
( <may> )?
<CLOSE_PAREN>
<may> ::= "MAY" <woidlist>
<must> ::= "MUST" <woidlist>
<objectClassSuperiors> ::= "SUP" <woidlist>
<woid> ::= ( <NUMERICOID> | <IDENTIFIER> )
<woidlist> ::= ( <woid> | ( <OPEN_PAREN> <woid> ( <DOLLAR> <woid> )* <CLOSE_PAREN> ) )
<objectClassDesc> ::= <DESC>
<objectClassNames> ::=
( "NAME" ( <QUOTE> <IDENTIFIER> <QUOTE> |
( <OPEN_PAREN> <QUOTE> <IDENTIFIER> <QUOTE> ( <QUOTE> <IDENTIFIER> <QUOTE> )* <CLOSE_PAREN> ) ) )
<attributeType> ::=
"attributetype" <OPEN_PAREN> <NUMERICOID>
( <names> )?
( <desc> )?
( "OBSOLETE" )?
( <superior> )?
( <equality> )?
( <ordering> )?
( <substr> )?
( <syntax> )?
( "SINGLE-VALUE" )?
( "COLLECTIVE" )?
( "NO-USER-MODIFICATION" )?
( <usage> )?
<CLOSE_PAREN>
<desc> ::= <DESC>
<superior> ::= "SUP" ( <NUMERICOID> | <IDENTIFIER> );
<equality> ::= "EQUALITY" ( <NUMERICOID> | <IDENTIFIER> );
<substr> ::= "SUBSTR" ( <NUMERICOID> | <IDENTIFIER> )
<ordering> ::= "ORDERING" ( <NUMERICOID> | <IDENTIFIER> )
<names> ::= "NAME" ( <QUOTE> <IDENTIFIER> <QUOTE> | ( <OPEN_PAREN> ( <QUOTE> <IDENTIFIER> <QUOTE> )+ <CLOSE_PAREN> ) )
<syntax> ::= <SYNTAX>
<usage> ::= "USAGE" ( "userApplications" | "directoryOperation" | "distributedOperation" | "dSAOperation" )
|
Future grammar
The next version should be a little bit more powerfull :
 SyntaxDescription = <LPAREN> <WSP>
<numericoid>
( <SP> "DESC" <SP> <qdstring> )?
<WSP> <RPAREN>Â
|
Future grammar
The next version should be a little bit more powerfull :
- it should it should use RFC 4512 grammar, which has extensions
- and it also should allow a less restrictive ordering of ObjectClass and AttributeType elements.
...
Code Block |
---|
<AttributeTypeDescription> = <LPAREN> <WSP> <numericoid> <atparameters> <extensions> <WSP> <RPAREN>
// Each parameters should not be seen more than once
<atparameters> ::=
<SP> "NAME" <SP> <qdescrs>
| <SP> "DESC" <SP> qdstring
| <SP> "OBSOLETE"
| <SP> "SUP" <SP> <oid>
| <SP> "EQUALITY" <SP> <oid>
| <SP> "ORDERING" <SP> <oid>
| <SP> "SUBSTR" <SP> <oid>
| <SP> "SYNTAX" <SP> <noidlen>
| <SP> "SINGLE-VALUE"
| <SP> "COLLECTIVE"
| <SP> "NO-USER-MODIFICATION"
| <SP> "USAGE" <SP> <usage>
|
Syntax object
Th Syntax grammar is :
Code Block |
---|
SyntaxDescription = <LPAREN> <WSP>
<numericoid>
( <SP> "DESC" <SP> <qdstring> )?
<extensions> <WSP> <RPAREN>
|