This is an archive copy of the IUCr web site dating from 2008. For current content please visit https://www.iucr.org.
[IUCr Home Page] [CIF Home Page] [mmCIF Home Page]

Draft Version of Macromolecular DDL (V 1.2.10)

John Westbrook (jwest@wormhole)
Sun, 16 Oct 94 16:48:25 -0400


#
#               THIS IS A DRAFT VERSION OF THE mmDDL ...
# 
# This is the version of the proposed mmDDL reflecting changes that were made
#                during the CIF Workshop in Brussels.    
#
#  This is being placed on the DDL mailing list for the purposes of 
#                       review and discussion only.  
#
# -----------------------------------------------------------------------------
#         
#             Macromolecular Structure Data Description Language        
#         -----------------------------------------------------------        
#                         DDL-MM  1.2.10 (post Brussels)
#                                                                            
# -----------------------------------------------------------------------------


global_    
        
data_ddl-mm

    _Dictionary.dictionaryName            'ddl-mm'
    _Dictionary.version                   '1.2.10'

loop_
    _DictionaryHistory.version 
    _DictionaryHistory.updateYear 
    _DictionaryHistory.updateMonth 
    _DictionaryHistory.updateDay 
    _DictionaryHistory.revisionDescription 

  '1.1'  1994 07 25 
;
    DDL 1.1 from Syd Hall et. al.
;
  '1.2.1'  1994 09 18
;
    Changes:   (J. Westbrook)

    DDL with minimal category alterations and new attributes
    for the category level and subcategory level.  In this variant
    there are no conventions placed on the attribute names.    
;
  '1.2.2'  1994 09  22
;
    Serious work on a compromise DDL begin with this version.
    The blame for this can be divided between Phil Bourne (PB)
    and John Westbrook (JW).
   
    Changes:    (JW)
       + Enforce item naming convention.
       + Introduce global aliases for data item names.
       + Introduce the concept of virtual categories. These are 
         combinations of base categories and virtual categories.
       + Replace the replaced old idea of list_reference data 
         item with a placeholder for the key of the category.
       + Introduce many other new categories..
       + Introduce cat_ and def_ into the DDL grammar.
       + Introduced but did not implement the idea of an implicit
         data item that obtains its value from context.  This
         could be a useful device to reduce the complexity of 
         a def_ or cat_ entry as the _Schema.itemName         
         and _Schema.categoryName  values
         can always be inferred from the name of the current section.
       
       Changes to data typing are NOT included in this version.
 
       Link relationships are incomplete at this point..

       This has been proofread only very casually... 
;
  '1.2.3'  1994 09  23
;
    Changes:   (JW)
       + Corrects to  alias_ list and additions of some parent child
         relations.
;
  '1.2.4'  1994 09  27
;
    Changes:   (JW)
       + Added the correct compound key to the Siblings category.
;

  '1.2.5'  1994 09  28
;
    Changes:   (JW)
       + Reorganized attribute order to comply with category expression
         rules.  These terse alias names make it easy to violate the rule 
         that all of the members of a category should be declared in 
         single block.
       + Split of any concatenated data item names into components.
;
  '1.2.6'  1994 09  30
;
    Changes:   (JW)
       + Added some subcategories and virtual categories in global_. 
;
  '1.2.7'  1994 10  04
;
    Changes:   (JW)
       + Made data types extensible.  Added types and type qualifiers in
         a new table which could be extended in a user dictionary.
;
  '1.2.8'  1994 10  05
;
    Changes:   (JW)
       + Removed category _Catagory.list and the Siblings category.
       + Added category TypeStructure and StructureTypes
;
  '1.2.9'  1994 10  05
;
    Changes:   (JW)
       + Removed redundant itemName and categoryName declarations
         that can be resolved implicitly.
       + Added missing connection between Dictionary and DictionaryHistory
         categories.
;
  '1.2.9'  1994 10  05
;
    Changes:   (JW)
       + Reflect the results of the Treaty of Brussels.
;


#
# These specifications are merely examples ... 
#
loop_
    _DataTypes.typeName
    _DataTypes.primitiveType
    _DataTypes.pattern
     'char'     'char'           '[A-Za-z0-9,.;:"&<>?/\{}`~!@#$%]*'
     'text'     'char'           '[A-Za-z0-9,.;:"&<>?/\{}`~!@#$%\n]*'
     'int'      'int'            '[0-9]+'
     'name'     'char'           '[A-Za-z]+'

loop_
    _Subcategory.subcategoryName
    _Subcategory.description
     'Date'  
;
     The collection of year, month, and day expressed as integers.
     For instance the following constitute a complete date '1994 09 30'.
;

loop_
    _VirtualCategory.virtualCategoryName
    _VirtualCategory.parentCategory
    _VirtualCategory.description
     'DDLCategory' 'DDLCategory' 
;
     Component categories of the macromolecular DDL
;
     'CategoryLevel'  'DDLCategory'
;
     Categories that describe the characteristics of categories.
;
     'ItemLevel'    'DDLCategory'
;
     Categories that describe the characteristics of data items.
;
     'Dictionary'    'DDLCategory'
;
     Categories that describe the Dictionary..
;

# -----------------------------------------------------------------------
#                DDL-MM category = 'Category'
#
save_Category
    _CategoryKey.keyName                            'categoryName'
    _Category.mandatory                             'no'
    _Category.description    
;
     This category holds the characteristics that pertain to the
     entire category.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'CategoryLevel'

save_Category.categoryName
    loop_
       _Schema.itemName                                
       _Schema.categoryName                            
       _Schema.mandatory 
       _Schema.parentCategory 
       _Schema.parentItem           
        'categoryName' 'Category'            'implicit' 'Category'  'categoryName'
        'categoryName' 'CategoryKey'         'implicit' 'Category'  'categoryName'
        'categoryName' 'CategoryExamples'    'implicit' 'Category'  'categoryName'
        'categoryName' 'Schema'              'implicit' 'Category'  'categoryName'
        'categoryName' 'VirtualCategoryList' 'implicit' 'Category'  'categoryName'
        'categoryName' 'Definition'          'implicit' 'Schema'    'categoryName'
        'categoryName' 'Enumeration'         'implicit' 'Schema'    'categoryName'
        'categoryName' 'ValueConstraints'    'implicit' 'Schema'    'categoryName'
        'categoryName' 'DefaultValue'        'implicit' 'Schema'    'categoryName'
        'categoryName' 'Examples'            'implicit' 'Schema'    'categoryName'
        'categoryName' 'Method'              'implicit' 'Schema'    'categoryName'
        'categoryName' 'Related'             'implicit' 'Schema'    'categoryName'
        'categoryName' 'DataType'            'implicit' 'Schema'    'categoryName'
        'categoryName' 'TypeStructure'       'implicit' 'Schema'    'categoryName'
        'categoryName' 'TypeConditions'      'implicit' 'Schema'    'categoryName'
        'categoryName' 'Units'               'implicit' 'Schema'    'categoryName'
    _DataType.typeName                              'char'
    _Definition.definition                           
;    
     A name which identifies the natural grouping of data 
     items. If the data item belongs in a looped list then it may only 
     be grouped with  items from the same category.  
;

save_Category.description
    _Schema.mandatory                               'yes'
    _DataType.typeName                              'text'
    _Definition.definition   
;              
     Text description of a category ...
;


save_Category.mandatory
    _Schema.mandatory                               'yes'
    _DataType.typeName                              'char'
    loop_ _Enumeration.enumeration        
          _Enumeration.detail         'yes'   'This category must appear'
                                      'no'    'This category is optional'
    _Definition.definition   
;
     Specifies if the category must be specified ...
;

save_Category.methodName

#
#--------------------------------------------------------------------------
#                  DDL-MM category = 'CategoryKey'
#

save_CategoryKey
    loop_
        _CategoryKey.keyName
         'categoryName'
         'keyName'
    _Category.mandatory                             'no'
    _Category.description    
;
     This category holds a list of the data items names that uniquely
     identify the elements of the category.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'CategoryLevel'

save_CategoryKey.categoryName

save_CategoryKey.keyName
    _Schema.itemName                              'keyName'
    _Schema.categoryName                          'CategoryKey'
    _Schema.mandatory                             'yes'
    _Schema.parentCategory                        'Schema'
    _Schema.parentItem                            'itemName'
    _DataType.typeName                            'name'
    _Schema.mandatory                             'yes'
    _Definition.definition   
;
     The name of a data item within the category that serves as one
     of the 'key' identifiers for the category.  (eg. a component
     of the primary key)
;


#
#--------------------------------------------------------------------------
#                  DDL-MM category = 'CategoryExamples'
#

save_CategoryExamples
    loop_
        _CategoryKey.keyName
         'categoryName'
         'example'
    _Category.mandatory                             'no'
    _Category.description                          
;
     This category holds a list of examples and associated descriptions
     for the category.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'CategoryLevel'

save_CategoryExamples.categoryName

save_CategoryExamples.example
    _Schema.mandatory                               'yes'
    _DataType.typeName                              'text'
    _Definition.definition                         
;
     An example pertaining to the entire category.
;

save_CategoryExamples.detail
    _Schema.mandatory                               'no'
    _DataType.typeName                              'text'
    _Definition.definition                                     
;
     A description of an example of the category...
;

#
# -----------------------------------------------------------------------
#
#  The following two categories provide for the declaration of the
#  characteristics  that pertain to a subcategory ...
#
#               DDL-MM category = 'Subcategory'
#
save_Subcategory
    _CategoryKey.keyName                            'subcategoryName'
    _Category.mandatory                             'no'
    _Category.description  
;              
     This category holds the characteristics pertaining to subcategories
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'SubcategoryLevel'

save_Subcategory.subcategoryName
    loop_
        _Schema.itemName                                
        _Schema.categoryName                            
        _Schema.mandatory                          
        _Schema.parentCategory
        _Schema.parentItem
         'SubcategoryName' 'Subcategory' 'yes' 
                           'Subcategory' 'subcategoryName'
         'SubcategoryName' 'SubcategoryExamples' 'yes' 
                           'Subcategory' 'subcategoryName'
         'SubcategoryName' 'Schema'       'no' 
                           'Subcategory' 'subcategoryName'
    _DataType.typeName                              'name'
    _Definition.definition   
;
     The name of the subcategory..              
;

save_Subcategory.description
    _Schema.mandatory                               'yes'
    _DataType.typeName                              'text'
    _Definition.definition   
;
              Text description of the subcategory ...
;

save_Subcategory.methodName

#--------------------------------------------------------------------------
#                DDL-MM category = 'SubcategoryExamples'
#
save_SubcategoryExamples
    loop_
        _CategoryKey.keyName
         'subcategoryName'
         'example'
    _Category.mandatory                            'no'
    _Category.description      
;
     This category provides examples and associated descriptions 
     of subcategories...
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'SubcategoryLevel'

save_SubcategoryExamples.subcategoryName

save_SubcategoryExamples.example
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'text'
    _Definition.definition                      
;              
     A complete example pertaining to a subcategory ..
;

save_SubcategoryExamples.detail
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'text'
    _Definition.definition                     
;              
     A description of an example value for the subcategory.
;

#
# -----------------------------------------------------------------------
#                DDL-MM category = 'VirtualCategory'
#
save_VirtualCategory
    _CategoryKey.keyName                            'virtualCategoryName'
    _Category.mandatory                             'no'
    _Category.description    
;
     This category provides a description of each virtual category.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'CategoryLevel'

save_VirtualCategory.virtualCategoryName
    loop_
       _Schema.itemName                                
       _Schema.categoryName                            
       _Schema.mandatory                             
       _Schema.parentCategory                        
       _Schema.parentItem                             
        'virtualCategoryName' 'VirtualCategory'     'yes'  
                                'VirtualCategory'  'virtualCategoryName'
        'virtualCategoryName' 'VirtualCategoryList'  'yes'  
                                'VirtualCategory'  'virtualCategoryName'
    _DataType.typeName                               'name'
    _Definition.definition   
;              
     The name of a virtual category ...
;

save_VirtualCategory.description
    _Schema.mandatory                               'yes'
    _DataType.typeName                              'text'
    _Definition.definition   
;              
     Text description of a virtual category ...
;

save_VirtualCategory.parentCategory
    _Schema.mandatory                               'no'
    _Schema.parentCategory                          'VirtualCategory'
    _Schema.parentItem                              'virtualCategoryName'
    _DataType.typeName                              'name'
    _Definition.definition   
;              
     The name of the parent virtual category.
;

#
#--------------------------------------------------------------------------
#                  DDL-MM category = 'VirtualCategoryList'
#

save_VirtualCategoryList
    _CategoryKey.keyName                            'categoryName'
    _Category.mandatory                             'no'
    _Category.description                               
;
     Provides a list of virtual categories to which the base category
     belongs
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'CategoryLevel'

save_VirtualCategoryList.categoryName

save_VirtualCategoryList.virtualCategoryName

#
# -----------------------------------------------------------------------------
#                     DDL-MM category = 'Schema'
# 
#  Category has been expanded to include all attributes that pertain
#          specifying a data item's role in the schema...
#
save_Schema
    loop_
      _CategoryKey.keyName                           
       'itemName'
       'categoryName'
    _Category.mandatory                            'yes'
    _Category.description      
;
     This category specifies the data item memberships within categories
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'


save_Schema.itemName   
    loop_ 
        _Schema.itemName                                
        _Schema.categoryName                            
        _Schema.mandatory                               
        _Schema.parentCategory                          
        _Schema.parentItem                              
         'itemName' 'Schema'           'implicit'  'Schema' 'itemName'
         'itemName' 'Definition'       'implicit'  'Schema' 'itemName'
         'itemName' 'Enumeration'      'implicit'  'Schema' 'itemName'
         'itemName' 'DefaultValue'     'implicit'  'Schema' 'itemName'
         'itemName' 'Examples'         'implicit'  'Schema' 'itemName'
         'itemName' 'ValueConstraints' 'implicit'  'Schema' 'itemName'
         'itemName' 'Related'          'implicit'  'Schema' 'itemName'
         'itemName' 'DataType'         'implicit'  'Schema' 'itemName'
         'itemName' 'TypeConditions'   'implicit'  'Schema' 'itemName'
         'itemName' 'TypeStructure'    'implicit'  'Schema' 'itemName'
         'itemName' 'Units'            'implicit'  'Schema' 'itemName'
    _DataType.typeName                             'name'
    _Definition.definition                                
;              
     The name of the defined item within the it's category.  
     Must be unique within the category... 
;

save_Schema.categoryName

save_Schema.subcategoryName

save_Schema.parentCategory
    _Schema.mandatory                               'no'
    _Schema.parentCategory                          'Schema'
    _Schema.parentItem                              'categoryName'
    _DataType.typeName                              'name'
    _Definition.definition                              
;              
     Identifies the category in which the parent of this data item resides.
;

save_Schema.parentItem
    _Schema.mandatory                               'no'
    _Schema.parentCategory                          'Schema'
    _Schema.parentItem                              'itemName'
    _DataType.typeName                              'name'
    _Definition.definition                       
;              
     Identifies the item name of the parent of this data item.
;

save_Schema.mandatory    
    _Schema.mandatory                               'no'
    _DataType.typeName                              'char'
    loop_ _Enumeration.enumeration        
          _Enumeration.detail        
           'yes'   'required item in this category of looped list'
           'no'    'optional item in this category of looped list'
           'implicit' 
;
  The value for this item is required but it can be determined
  from the current context.   
;
    _DefaultValue.default                            'no'
    _Definition.definition                      
;               
     Signals if the defined item is mandatory for the proper description 
     of its category. 
;                


# -----------------------------------------------------------------------------
#                      DDL-MM category = 'Definition'
#
save_Definition
    loop_
        _CategoryKey.keyName
         'itemName'
         'categoryName'
    _Category.mandatory                           'no'
    _Category.description                          
;
     This category holds the definition for a data item.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_Definition.itemName

save_Definition.categoryName

save_Definition.definition   
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'text'
    _Definition.definition                        
;
     The text description of the defined item.
;

# -----------------------------------------------------------------------------
#                     DDL-MM category = 'Enumeration'
#  
save_Enumeration
    loop_
        _CategoryKey.keyName                         
         'itemName'
         'categoryName'
         'enumeration'
    _Category.mandatory                           'no'
    _Category.description    
;
     This category the permissible values for a data item and optional 
     associated descriptions.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_Enumeration.itemName

save_Enumeration.categoryName

save_Enumeration.enumeration          
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'void'
    _Definition.definition   
;
     A permissible value, character or number, for the defined item.
;

save_Enumeration.detail   
    _Schema.mandatory                             'no'
    _DataType.typeName                            'text'
    _Definition.definition   
;
     A description of a permissible value for the defined item.
;

#
# ---------------------------------------------------------------------------
#                DDL  category = 'ValueConstraints'
#

save_ValueConstraints
    loop_
        _CategoryKey.keyName 
         'categoryName'
         'itemName'
    _Category.mandatory                           'no'
    _Category.description   
;              
     Specifies value constraints placed on the a data item.
     In the case where multiple constraints are specified they
     are interpreted sequentially using a logical OR.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_ValueConstraints.itemName

save_ValueConstraints.categoryName

save_ValueConstraints.minimumValue
    _Schema.mandatory                             'no'
    _DataType.typeName                            'void'
    _Definition.definition   
;              
     Minimum permissible value of a data item or the lower bound
     of a permissible range.  ( minimumValue < data)
;

save_ValueConstraints.maximumValue
    _Schema.mandatory                             'no'
    _DataType.typeName                            'void'
    _Definition.definition   
;              
     Maximum permissible value of a data item or the upper bound
     of a permissible range.  ( maximumValue >=  data)
;

#
#--------------------------------------------------------------------------
#                  DDL-MM category = 'DefaultValue'
#

save_DefaultValue
    loop_
        _CategoryKey.keyName                         
         'itemName'
         'categoryName'
    _Category.mandatory                           'no'
    _Category.description    
;              
     This category holds  default values
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_DefaultValue.itemName

save_DefaultValue.categoryName

save_DefaultValue.default
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'void'
    _Definition.definition   
;              
     The default value for the defined item if it is not specified
     explicitly. If a data value is not declared the default is 
     assumed to be the most likely or natural value.
;

#
#--------------------------------------------------------------------------
#                      DDL-MM category = 'Examples'
#
save_Examples
    loop_
        _CategoryKey.keyName                        
         'itemName'
         'categoryName'
    _Category.mandatory                            'no'
    _Category.description                        
;
    This category holds examples and associated descriptions that pertain
    to data items.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'


save_Examples.itemName

save_Examples.categoryName

save_Examples.example
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'text'
    _Definition.definition   
;              
     A complete example for the defined data item.
;

save_Examples.detail
    _Schema.mandatory                              'yes'
    _DataType.typeName                             'text'
    _Definition.definition   
;              
     A description of an example value for the defined item.
;

# ----------------------------------------------------------------------------
#                      DDL-MM category = 'Method'
#
save_Method
    loop_
        _CategoryKey.keyName                             
         'itemName'
         'categoryName'
         'methodName'
    _Category.mandatory                              'no'
    _Category.description            
;
    This category holds the association between data items and methods.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_Method.itemName

save_Method.categoryName

save_Method.methodName


# ----------------------------------------------------------------------------
#                      DDL-MM category = 'MethodList'
#
save_MethodList 
    _CategoryKey.keyName                             'methodName'
    _Category.mandatory                              'no'
    _Category.description            
;
    This category holds source text for validation and computational methods.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_MethodList.methodName
    loop_
        _Schema.itemName                                 
        _Schema.categoryName                              
        _Schema.mandatory                      
        _Schema.parentCategory
        _Schema.parentItem       
          'methodName'  'MethodList'  'yes'  'MethodList' 'methodName'
          'methodName'  'Method'      'yes'  'MethodList' 'methodName'
	  'methodName'  'Category'    'no'   'MethodList' 'methodName'
          'methodName'  'Subcategory' 'no'   'MethodList' 'methodName'
    _DataType.typeName                                 'char'
    _Definition.definition   
;
     Method name associated with the data item.
;

save_MethodList.method
    _Schema.mandatory                                  'yes'
    _DataType.typeName                                 'text'
    _Definition.definition   
;
     Inline text of a method associated with the data item.
;

save_MethodList.methodType
    _Schema.mandatory                                  'yes'
    _DataType.typeName                                 'char'
    loop_ 
        _Enumeration.enumeration        
        _Enumeration.detail          
         'calculation'     'method to calculate the item'
         'verification'    'method to verify the data item'
         'cast'            'method to provide cast conversion'
         'addition'        'method to define item + item'
         'division'        'method to define item / item'
         'multiplication'  'method to define item * item'
         'equivalence'     'method to define item = item'
         'other'           'miscellaneous method'
    _DefaultValue.default                              'no'
    _Definition.definition   
;
     Purpose of the indicate method.
;

save_MethodList.methodLanguage
    _Schema.mandatory                                   'yes'
    _DataType.typeName                                  'char'
    loop_ 
       _Enumeration.enumeration        
        'BNF'
        'C'
        'C++'
        'FORTRAN'
        'LISP'
        'PASCAL'
        'PEARL'
        'TCL'
	'OTHER"
    _Definition.definition   
;
     Language in which the method is expressed.
;

#
# ----------------------------------------------------------------------------
#                  DDL-MM category =  'Related'
#                         
save_Related
    loop_
        _CategoryKey.keyName 
         'itemName'
         'categoryName'                             
         'relatedItemName'
         'relatedItemCategory'
    _Category.mandatory                               'no'
    _Category.description     
;
    This table identifies various common relationships that may exist between
    data items.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_Related.itemName

save_Related.categoryName

save_Related.relatedItem
    _Schema.itemName                                   'relatedItem'
    _Schema.categoryName                               'Related'
    _Schema.mandatory                                  'yes'
    _Schema.parentCategory                             'Schema'
    _Schema.parentItem                                 'itemName'
    _DataType.typeName                                 'name'
    _Definition.definition   
;
     Identifies a data item by name which is closely related to the
     defined data item by the manner described by  relatedFunction.
;

save_Related.relatedItemCategory
    _Schema.itemName                                   'relatedItemCategory'
    _Schema.categoryName                               'Related'
    _Schema.mandatory                                  'yes'
    _Schema.parentCategory                             'Schema'
    _Schema.parentItem                                 'categoryName'
    _DataType.typeName                                 'name'
    _Definition.definition   
;
     Identifies a data item by name which is closely related to the
     defined data item by the manner described by  relatedFunction.
;


save_Related.relatedFunction
    _Schema.mandatory                                   'yes'
    _DataType.typeName                                  'char'
    loop_ 
        _Enumeration.enumeration        
        _Enumeration.detail      
         'alternate'  'alternate data item for referencing lists'
         'convention' 'depends on defined convention'
         'constant'   'related by a numerical conversion factor'
         'replace'    'new definition replaces the current one'
    _Definition.definition   
;
     Code for the type of relationship of the item identified by
     relatedItem and the defined item.

     'alternate' signals that the item referred to in relatedItem 
     is an alternate item in terms of its application and attributes 
     to the item in this definition.

     'convention' signals that the item referred to in relatedItem
     is an equivalent item in terms of its application and attributes
     to the item in this definition except for a predefined
     convention.

     'constant' signals that the item referred to in relatedItem is 
     an equivalent item in terms of its application and attributes to 
     the item in this definition except for a numerical constant.

     'replace' signals that the item referred to in relatedItem may
      replace the item in this definition.
;

#
# -------------------------------------------------------------------------
#                       DDL-MM category = 'DataType'
#
save_DataType
    loop_
        _CategoryKey.keyName
         'itemName'
         'categoryName'
    _Category.mandatory                           'yes'
    _Category.description    
;
     This category holds data type information a data item.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_DataType.itemName

save_DataType.categoryName

save_DataType.typeName   

#
# -------------------------------------------------------------------------
#                       DDL-MM category = 'DataTypes'
#
save_DataTypes
    loop_
        _CategoryKey.keyName
         'typeName'
    _Category.mandatory                           'yes'
    _Category.description    
;
     This category holds a description of each data type name.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_DataTypes.typeName
    loop_
       _Schema.itemName                                
       _Schema.categoryName                            
       _Schema.mandatory 
       _Schema.parentCategory 
       _Schema.parentItem           
           'typeName'   'DataTypes'   'yes'   'DataTypes'  'typeName'
           'typeName'   'DataType'    'yes'   'DataTypes'  'typeName'
    _DataType.typeName                            'char'
    _Definition.definition   
;
     The name of the data type that is associated with a data item.
;
save_DataTypes.primitiveType
    _Schema.mandatory                             'yes'
    _DataType.type                                'char'
    loop_ 
        _Enumeration.enumeration        
        _Enumeration.detail         
         'float'     'floating point number'
         'integer'   'integer number'
         'char'      'character string'
         'void'      'undefined type'
    _Definition.definition   
;
     The primitive data type of this data type.
;

save_DataTypes.pattern 
    _Schema.mandatory                             'yes'
    _DataType.type                                'char'
    _Definition.definition   
;
   The data pattern is a character string that can be interpreted as a 
   regular expression (POSIX 1003.2).  The regular expression defines
   the pattern in terms of the ASCII character set which must be 
   matched by any valid data item of this type.
;

#
# -----------------------------------------------------------------------
#                    DDL  category = 'TypeStructure'
#
#
save_TypeStucture
    loop_
        _CategoryKey.keyName
         'itemName'
         'categoryName'
         'structureName'
    _Category.mandatory                           'no'
    _Category.description    
;
    This category holds the association between data items and 
    named vector/matrix declarations.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_TypeStructure.itemName

save_TypeStructure.categoryName

save_TypeStructure.structureName   

save_TypeStructure.structureOrganization
    _Schema.mandatory                             'yes'
    _DataType.type                                'char'
    loop_ 
        _Enumeration.enumeration        
        _Enumeration.detail         
         'columnwise'     'column major order'
         'rowwise'        'row major order'
    _Definition.definition   
;
     Identifies if the structure is defined in column or row major order.
;

#
# -------------------------------------------------------------------------
#                       DDL-MM category = 'StructureTypes'
#
save_StructureTypes
    loop_
        _CategoryKey.keyName
         'structureName'
    _Category.mandatory                           'no'
    _Category.description    
;
     This category holds a description of each structure type name.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_StructureTypes.structureName
    loop_
       _Schema.itemName                                
       _Schema.categoryName                            
       _Schema.mandatory 
       _Schema.parentCategory 
       _Schema.parentItem           
           'structureName'   'StructureTypes'  
                             'yes'   'StructureTypes'  'structureName'
           'structureName'   'TypeStructure'    
                             'yes'   'StructureTypes'  'structureName'
    _DataType.typeName                            'char'
    _Definition.definition   
;
     The name of the matrix/vector structure declaration.
;

save_StructureTypes.dimensionNumber
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'int'
    _Definition.Definition
;
    Identifies the zero based index of a row/column of the structure.
;

save_StructureTypes.dimensionValue
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'int'
    _Definition.Definition
;
    Identifies the length of this row/column of the structure structure. 
;

#
# -----------------------------------------------------------------------
#                    DDL  category = 'TypeConditions'
#
#                This is retained for CIF compliance...
#
save_TypeConditions
    loop_
        _CategoryKey.keyName
         'itemName'
         'categoryName'
         'typeConditions'
    _Category.mandatory                           'no'
    _Category.description    
;
    This category holds additional conditions associated with the data item.
    It is included only to support the esd extension used in CIF.  
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'
         'Compliance'

save_TypeConditions.itemName

save_TypeConditions.categoryName

save_TypeConditions.typeConditions   
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'char'
    loop_ 
        _Enumeration.enumeration        
        _Enumeration.detail        
         'none'  'no type conditions'
         'esd'   'numbers may have esd's appended within ()'
    _Definition.definition   
;
     Codes defining conditions on the _DataType.typeName  specification. 
     'esd' permits a number string to contain an appended standard
           deviation number enclosed within parentheses.                
;

#
# --------------------------------------------------------------------
#                       DDL-MM category  = 'Units'
#
save_Units
    loop_
        _CategoryKey.keyName
         'itemName'
         'categoryName'
         'unitsExtension'
    _Category.mandatory                           'no'
    _Category.description      
;
     Conversion factors in other common systems of units ...  
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'ItemLevel'

save_Units.itemName

save_Units.categoryName

save_Units.unitsExtension
    _DataType.typeName                            'char'
    _Schema.mandatory                             'yes'
    _Definition.definition   
;              
     The data name extension code identifying the numerical units  
     information given by _units_description and the conversion
     factor given by _units conversion.
;

save_Units.unitsDescription
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'char'
    _Definition.definition   
;              A description of the numerical units applicable to the defined
               item with the data name extension given by _units_extension.
;

save_Units.unitsConversion
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'char'
    _Definition.definition   
;
               The arithmetic process for converting the defined item with
               an extension given by _units_extension. The format of the code
               is <operator><number>. Permissible operator codes are:
                         *  multiply
                         /  divide
                         +  add
                         -  subtract
               To convert a declared value into the default units:
                 [value in default units] = [entered value]<operator><number>
;
 
#
# -----------------------------------------------------------------------------
#                DDL-MM category  = 'DictionaryHistory'
#
#  

save_DictionaryHistory
    _CategoryKey.keyName                          'version'
    _Category.mandatory                           'no'
    _Category.description    
;
   This category holds the revision history records.  The key for this
   category is data item 'version'.
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'Dictionary'


save_DictionaryHistory.version
    loop_
       _Schema.itemName                                
       _Schema.categoryName                            
       _Schema.mandatory 
       _Schema.parentCategory 
       _Schema.parentItem           
           'version'   'DictionaryHistory'  
                             'yes'   'DictionaryHistory'  'version'
           'version'   'Dictionary'    
                             'yes'   'DictionaryHistory'  'version'
    _DataType.typeName                            'char'
    _Definition.definition   
;              
     A unique version identifier for the dictionary revision.
;

save_DictionaryHistory.updateDay        
    _Schema.subcategoryName                       'Date'
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'int'
    _Definition.definition                         
;
     The day of which the update took place.
;

save_DictionaryHistory.updateMonth        
    _Schema.subcategoryName                       'Date'
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'int'
    _Definition.definition                               
;
     The month of which the update took place.
;

save_DictionaryHistory.updateYear        
    _Schema.subcategoryName                       'Date'
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'int'
    _Definition.definition                                     
;
     The year in which the update took place.
;

save_DictionaryHistory.revisionDescription        
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'text'
    _Definition.definition                                     
;
     The text description of the revision ... 
;

#
# -----------------------------------------------------------------------------
#                   DDL-MM category  = 'Dictionary'
#
#  More attributes for 'Dictionary' later... 
#  
save_Dictionary
    loop_
        _CategoryKey.keyName
         'name'
         'version'
    _Category.mandatory                           'yes'
    _Category.description    
;
     This category holds characteristics that pertain to the entire 
     dictionary.  The key for this category is 'name'
;
    loop_
        _VirtualCategoryList.virtualCategoryName
         'DDLCategory'
         'Dictionary'

save_Dictionary.dictionaryName          
    _Schema.mandatory                             'yes'
    _DataType.typeName                            'name'
    _Definition.definition   
;              
     The name code which identifies the dictionary application.
;

save_Dictionary.version       

#-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof-eof


****************************************************************************
*  John Westbrook                       Ph:  (908) 445-5156                *
*  Department of Chemistry              Fax: (908) 445-5958                *
*  Rutgers University                                                      *
*  PO Box 939                        e-mail: jwest@rutchem.rutgers.edu     *
*  Piscataway, NJ 08855-0939                                               *
****************************************************************************