Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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 have some relations between those elements, the OIDs, the element's names and the schema file's name. Here they are :

  1. A schema contains N ObjectClass and N AttributesType.
  2. An ObjectClass is contained by only one schema
  3. An AttributesType is contained by only one schema
  4. An OID is associated with N ObjectClass name
  5. An OID is associated with N AttributesType name
  6. A ObjectClass name is associated with only one OID
  7. A AttributesType name is associated with only one OID
  8. An ObjectClass name has only one OID
  9. An AttributesType name has only one OID
  10. An OID is associated with only one ObjectClass
  11. ... (To be continued)

The following diagram represent all those relations :Image Added
 

Actual grammar

The actual grammar used to parse schema is the following :

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" )

...

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>