You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Introduction

This page describe the way schema are loaded into ADS. The schema are defined by the following document : RFC 4512 (wgich obsoletes the RFC 2252)

A schema defines two types of elements, accordingly to RFC 4512 :

  • ObjectClasses
  • AttributeTypes

Actual grammar

The actual grammar used to parse schema is the following :

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

<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 :

<qdescrs>      ::= <qdescr> | <LPAREN> <WSP> <qdescrlist> <WSP> <RPAREN>
<qdescrlist>   ::= ( <qdescr> ( <SP> <qdescr> )* )?
<qdescr>       ::= <SQUOTE> <descr> <SQUOTE>
<qdstrings>    ::= <qdstring> | <LPAREN> <WSP> <qdstringlist> <WSP> <RPAREN>
<qdstringlist> ::= ( <qdstring> ( <SP> <qdstring> )* )?
<qdstring>     ::= <SQUOTE> <dstring> <SQUOTE>
<dstring>      ::= ( <QS> | <QQ> | <QUTF8> )+
<oids>         ::= <oid> | <LPAREN> <WSP> <oidlist> <WSP> <RPAREN>
<oidlist>      ::= <oid> ( <WSP> <DOLLAR> <WSP> <oid> )*
<extensions>  ::= ( SP <xstring> SP <qdstrings> )*
<noidlen>     ::= <numericoid> ( LCURLY <number> RCURLY )?

and the lexical elements :

<xstring>     ::= "X" <HYPHEN> ( <ALPHA> | <HYPHEN> | <USCORE> )+

<oid>         ::= <descr> | <numericoid>
<numericoid>  ::= <number> ( DOT <number> )+
<descr>       ::= <keystring>
<keystring>   ::= <leadkeychar> ( <keychar> )*
<leadkeychar> ::= <ALPHA>
<keychar>     ::= <ALPHA> | <DIGIT> | <HYPHEN>
<number>      ::= <DIGIT> | <LDIGIT> ( <DIGIT> )*

<ALPHA>   ::= "A"-"Z" | "a"-"z"
<DIGIT>   ::= "0".."9"
<LDIGIT>  ::= "1".."9"
<HEX>     ::= "0".."9" | "A".."F" | "a".."f"
<SP>      ::= ( " " )+
<WSP>     ::= ( " " )*
<HYPHEN>  ::= "-"
<DOLLAR>  ::= "$"
<DOT>     ::= "."
<SQUOTE>  ::= "'"
<LPAREN>  ::= "("
<RPAREN>  ::= ")"
<USCORE>  ::= "_"
<QQ>      ::= "\27"
<QS>      ::= "\5C" | "\5c"
<QUTF8>   ::= <QUTF1> / <UTFMB>
<QUTF1>   ::= 0x00..0x26 | 0x28..0x5B | 0x5D..0x7F
<UTFMB>   ::= <UTF2> | <UTF3> | <UTF4>
<UTF0>    ::= 0x80..0xBF
<UTF1>    ::= 0x00..0x7F
<UTF2>    ::= 0xC2..0xDF <UTF0>
<UTF3>    ::= 0xE0 0xA0..0xBF <UTF0> | 0xE1..0xEC <UTF0> <UTF0>) | 0xED 0x80..0x9F <UTF0> | 0xEE..0xEF <UTF0> <UTF0>
<UTF4>    ::= 0xF0 0x90..0xBF <UTF0> <UTF0> | 0xF1..0xF3 <UTF0> <UTF0> <UTF0> | 0xF4 0x80..0x8F <UTF0> <UTF0>

AttributeType object 

  • No labels