Note | ||
---|---|---|
| ||
This site is in the process of being reviewed and updated. |
Introduction
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
SyntaxDescription ::= <OPEN_PAREN> <WS> <numericoid> ( <WS> "DESC" <SP> <qdstring> )? <WS> <CLOSE_PAREN>
|
Future grammar
The next version should be a The next version should be a little bit more powerfull :
...
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>
|
What does not appears in this grammar is an information regarding human readability (wether the attribute is binary or textual)..