Versions Compared

Key

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

...

  • ObjectClasses
  • AttributeTypes

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

Futur grammar

The next version should be a little bit more powerfull :

  • it should use RFC 4512 grammar, which as extensions
  • and it also should allow a less restrictive ordering of ObjectClass and AttributeType elements.

ObjectClass object

The ObjectClass syntax is (as of RFC 4512) :

Code Block
<ObjectClassDescription> ::=
          <LPAREN> <SP> <numericoid> <parameters> <extensions> <WSP> RPAREN

// Each parameters should not be seen more than once
<parameters>  ::=
          ( <SP> "NAME" <SP> <qdescrs>
          | <SP> "DESC" <SP> <qdstring>
          | <SP> "OBSOLETE"
          | <SP> "SUP" <SP> <oids>
          | <SP> ( "ABSTRACT" | "STRUCTURAL" | "AUXILIARY" )
          | <SP> "MUST" <SP> <oids>
          | <SP> "MAY" <SP> <oids> )+

with the following rules :

...