...
- 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 :
- A schema contains N ObjectClass and N AttributesType.
- An ObjectClass is contained by only one schema
- An AttributesType is contained by only one schema
- An OID is associated with N ObjectClass name
- An OID is associated with N AttributesType name
- A ObjectClass name is associated with only one OID
- A AttributesType name is associated with only one OID
- An ObjectClass name has only one OID
- An AttributesType name has only one OID
- An OID is associated with only one ObjectClass
- ... (To be continued)
The following diagram represent all those relations :
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> |