#  A DDL1 dictionary file for validity checking.  The item names
#  defined here are used for two purposes; one set of names are
#  used in constructing valid/invalid blocks to be tested, and
#  the other set is used to construct a test report block.  A
#  program is considered to correctly validate a CIF if it is
#  able to produce an equivalent report CIF block to that contained
#  together with the incorrectly constructed block

data_on_this_dictionary

    _dictionary_name            cif_validity_test.dic
    _dictionary_version         0.1
    _dictionary_update          2005-09-07
    _dictionary_history

;
    2005-09-07    Initial draft          J.R.  Hester
;

data_test_reference_[test]
    _name       '_test_reference_[test]'
    _category   category_overview
    _type       null
    _definition
;              Items in this category are used to describe the
               background of the validity test, and to link the
	       test block with the report block.
;

data_test_reference_block_id
    _name       '_test_reference_block_id'
    _category    test_reference
    _type        char
    _list        no
    _definition
;              This id is used to link the block to be tested for
               validity with the report block.  It should therefore
	       be unique within the space of invalid blocks for checking.
;

data_test_reference_history
    _name          '_test_reference_history'
    _category      test_reference
    _type          char
    _list          both
    _definition    'Description of changes to the test block'

data_test_reference_background
    _name          '_test_reference_background'
    _category      test_reference
    _type          char
    _list          no
    _definition    
;              A description of the motivation for a test and the logic
               behind the construction of the invalid test block.
;

data_test_construct_[test]
    _name          '_test_contruct_[test]'
    _category       category_overview
    _type           null
    _definition
;               _test_construct contains item names which can be used in
                constructing simple tests.  Validity checking software 
		should be able to validate against the definitions in
		this category and produce a report conforming to the
		definitions in the _test_report category
;

data_test_construct_character
    _name          '_test_construct_character'
    _category      test_construct
    _type          char
    _list          both
    _definition    
;              A character type data item.  There seems to be no way to
               construct a non-conformant item in a syntactically correct
	       CIF.
;

data_test_construct_number
    _name          '_test_construct_number'
    _category      test_construct
    _type          numb
    _list          both
    _type_conditions     none
    _definition
;              A plain number with no esd appended
;
    
data_test_construct_number_esd
    _name          '_test_construct_number_esd'
    _category      test_construct
    _type          numb
    _list          both
    _type_conditions     esd
    _definition
;              A plain number with or without esd appended
;

data_test_construct_enumeration
    _name          '_test_construct_enumeration'
    _category      test_construct
    _type          char
    _list          both
    loop_
        _enumeration
	_enumeration_detail
                   ABC        'first letters'
		   123        'first numbers'
		   'do re mi' 'first notes'
		   'Jan Feb'  'first months'
    _definition
;               An enumerated data item
;

data_test_construct_type_construct
    _name          '_test_construct_type_construct'
    _category      test_construct
    _type          numb
    _type_construct '( *-?[0-9]+)'
    _list          both
    _definition
;                 An item with an explicit type construct, in this case
                  cribbed from the MS dictionary.  We may need to add a
		  number of these for comprehensive testing.
;

data_test_construct_enumeration_range
    _name          '_test_construct_enumeration_range'
    _category      test_construct
    _type          char
    _list          both
    _enumeration_range    -2:11.7
    _definition
;               A data item with a specified range
;

data_test_result_[test]
    _name          '_test_result_[test]'
    _category      category_overview
    _type          null
    _definition
;               Items in this category describe the results of validity
                tests.  A conformant validity checking program should use
		these items to produce a CIF block identical to that
		provided with the invalid test block.
;

data_test_result_block_id
    _name          '_test_result_block_id'
    _category      test_result
    _type          char
    _definition
;               This id should be identical to the _test_reference_block_id
                of the invalid CIF block to which this test result corresponds.
;

data_test_result_validity
    _name         '_test_result_validity'
    _category     test_result
    _type         char
    loop_
        _enumeration
	_enumeration_detail
	          valid        'No invalid items or structures found'
		  invalid      'One or more invalid items or structures present'
    _definition  
;                 This item describes whether or not the validity checking
                  program found any errors in the test block
;

data_test_result_missing_name
    _name         '_test_result_missing_name'
    _category     test_result
    _type         char
    _list         both
    _definition
;                 A list of item names which were not found in the dictionary.
                  Note that item names which are not present in the dictionary
		  do not invalidate a data block.
;

data_test_result_fail_item_name
    _name         '_test_result_fail_item_name'
    _category     test_result
    _type         char
    _list         both
    _definition
;                 The name of a data item which has an invalid value or is
                  incorrectly placed in the data block
;

data_test_result_fail_item_value
    _name         '_test_result_fail_item_value'
    _category     test_result
    _type         char
    _list         both
    _definition
;                 If the validity error relates to an item value, the value
                  of the invalid item
;

data_test_result_fail_type
    _name        '_test_result_fail_type'
    _category    test_result
    _type        char
    _list        both
    loop_
        _enumeration
	_enumeration_detail
	         'Value construction'   
;                                       The value does not conform to the 
                                        construction specified in the 
					dictionary or DDL1 file
;
                 'Value range'          'Value outside specified range'
		 'Value enumeration'    'Value not in enumeration set'
		 'Esd appended'         'Esd appended when not allowed'

