#\#CIF_2.0
##############################################################################
#                                                                            #
#                      DDLm REFERENCE DICTIONARY                             #
#                                                                            #
##############################################################################

data_DDL_DIC

    _dictionary.title             DDL_DIC
    _dictionary.class             Reference
    _dictionary.version           4.2.0
    _dictionary.date              2025-07-04
    _dictionary.uri
        https://raw.githubusercontent.com/COMCIFS/cif_core/master/ddl.dic
    _dictionary.ddl_conformance   4.2.0
    _dictionary.namespace         DdlDic
    _description.text
;
    This dictionary contains the definitions of attributes that
    make up the DDLm dictionary definition language. It provides
    the meta meta data for all CIF dictionaries.
;

save_ATTRIBUTES

    _definition.id                ATTRIBUTES
    _definition.scope             Category
    _definition.class             Head
    _definition.update            2011-07-27
    _description.text
;
    This category is parent of all other categories in the DDLm
    dictionary.
;
    _name.category_id             DDL_DIC
    _name.object_id               ATTRIBUTES

save_

save_ALIAS

    _definition.id                ALIAS
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2013-09-08
    _description.text
;
    The attributes used to specify the aliased names of definitions.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               ALIAS
    _category_key.name            '_alias.definition_id'

save_

save_alias.definition_id

    _definition.id                '_alias.definition_id'
    _definition.class             Attribute
    _definition.update            2019-04-02
    _description.text
;
    Identifier tag of an aliased definition.
;
    _name.category_id             alias
    _name.object_id               definition_id
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_alias.deprecation_date

    _definition.id                '_alias.deprecation_date'
    _definition.class             Attribute
    _definition.update            2024-02-05
    _description.text
;
    Date that the aliased tag was deprecated as a definition tag.

    An unquoted value of '.' indicates that the associated alias has not been
    deprecated.
;
    _name.category_id             alias
    _name.object_id               deprecation_date
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Date
    _enumeration.default          .

save_

save_alias.dictionary_uri

    _definition.id                '_alias.dictionary_uri'
    _definition.class             Attribute
    _definition.update            2024-04-04
    _description.text
;
    An absolute URI of the dictionary that includes the aliased definition.
    The URI should preferably point to a specific version of the dictionary
    identified by the _alias.dictionary_version attribute, however, a more
    general URI, e.g. one that always points to the latest version of the
    dictionary, can also be provided when this is not possible.
;
    _name.category_id             alias
    _name.object_id               dictionary_uri
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Uri

save_

save_alias.dictionary_version

    _definition.id                '_alias.dictionary_version'
    _definition.class             Attribute
    _definition.update            2024-04-04
    _description.text
;
    The version identifier of the dictionary containing a compatible version of
    the aliased definition.
;
    _name.category_id             alias
    _name.object_id               dictionary_version
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_CATEGORY_KEY

    _definition.id                CATEGORY_KEY
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2020-10-29
    _description.text
;
    The attributes used to specify (possibly multiple)
    keys for a given category.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               CATEGORY_KEY
    _category_key.name            '_category_key.name'

save_

save_category_key.name

    _definition.id                '_category_key.name'
    _definition.class             Attribute
    _definition.update            2021-08-18
    _description.text
;
    A minimal list of tag(s) that together constitute a compound key
    to access other items in a Loop category. In other words, the combined
    values of the data items listed in this loop must be unique, so that
    unambiguous access to a packet (row) in the table of values is possible.
;
    _name.category_id             category_key
    _name.object_id               name
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_DEFINITION

    _definition.id                DEFINITION
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-20
    _description.text
;
    The attributes for classifying dictionary definitions.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               DEFINITION

save_

save_definition.class

    _definition.id                '_definition.class'
    _definition.class             Attribute
    _definition.update            2019-10-08
    _description.text
;
    The nature and the function of a definition or definitions.
;
    _name.category_id             definition
    _name.object_id               class
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Attribute
;
         Item used as an attribute in the definition of other data items in
         DDLm dictionaries. These items never appear in data instance files.
;
         Functions
;
         Category of items that are transient function definitions used only in
         dREL methods scripts. These items never appear in data instance files.
;
         Datum
;
         Item defined in a domain-specific dictionary. These items appear only
         in data instance files.
;
         Head
;
         Category of items that is the parent of all other categories in the
         dictionary.
;
         Loop
;
         Category of items that in a data file may reside in a loop-list with a
         key item defined.
;
         Set
;
         Category of items that form a set (but not a loopable list). These
         items may be referenced as a class of items in a dREL methods
         expression.
;

    _enumeration.default          Datum

save_

save_definition.id

    _definition.id                '_definition.id'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    Identifier name of the Item or Category being defined.
;
    _name.category_id             definition
    _name.object_id               id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_definition.scope

    _definition.id                '_definition.scope'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    The extent to which a definition affects other definitions.
;
    _name.category_id             definition
    _name.object_id               scope
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Dictionary           'Applies to all defined items in the dictionary.'
         Category             'Applies to all defined items in the category.'
         Item                 'Applies to a single item definition.'

    _enumeration.default          Item

save_

save_definition.update

    _definition.id                '_definition.update'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    The date that a definition was last changed.
;
    _name.category_id             definition
    _name.object_id               update
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Date

save_

save_DEFINITION_REPLACED

    _definition.id                DEFINITION_REPLACED
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2019-04-02
    _description.text
;
    Attributes used to describe deprecated and replaced definitions.
;
    _name.category_id             DEFINITION
    _name.object_id               DEFINITION_REPLACED
    _category_key.name            '_definition_replaced.id'

save_

save_definition_replaced.by

    _definition.id                '_definition_replaced.by'
    _definition.class             Attribute
    _definition.update            2019-04-02
    _description.text
;
    Name of the data item that should be used instead of the defined data
    item. The defined data item is deprecated and should not be used. A
    value of '.' signifies that the data item is deprecated, with no
    replacement.
;
    _name.category_id             definition_replaced
    _name.object_id               by
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_definition_replaced.id

    _definition.id                '_definition_replaced.id'
    _definition.class             Attribute
    _definition.update            2019-04-02
    _description.text
;
    An opaque identifier for the replacement.
;
    _name.category_id             definition_replaced
    _name.object_id               id
    _type.purpose                 Key
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_DESCRIPTION

    _definition.id                DESCRIPTION
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-20
    _description.text
;
    The attributes of descriptive (non-machine parsable) parts of
    definitions.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               DESCRIPTION

save_

save_description.common

    _definition.id                '_description.common'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    Commonly-used identifying name for the item.
;
    _description.common           'common name'
    _name.category_id             description
    _name.object_id               common
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_description.key_words

    _definition.id                '_description.key_words'
    _definition.class             Attribute
    _definition.update            2013-03-06
    _description.text
;
    List of key-words categorising the item.
;
    _description.common           'key words'
    _name.category_id             description
    _name.object_id               key_words
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_description.text

    _definition.id                '_description.text'
    _definition.class             Attribute
    _definition.update            2021-07-20
    _description.text
;
    The text description of the defined item, category,
    or dictionary.
;
    _description.common           description
    _name.category_id             description
    _name.object_id               text
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_DESCRIPTION_EXAMPLE

    _definition.id                DESCRIPTION_EXAMPLE
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2021-07-20
    _description.text
;
    Descriptive (non-machine parsable) examples of values of the
    defined items and categories.
;
    _name.category_id             DESCRIPTION
    _name.object_id               DESCRIPTION_EXAMPLE
    _category_key.name            '_description_example.case'

save_

save_description_example.case

    _definition.id                '_description_example.case'
    _definition.class             Attribute
    _definition.update            2021-11-15
    _description.text
;
    An example case of the defined item or category. Category example cases
    present data names and values as they would appear in a CIF-formatted file.
    Item example cases present values only, which inherit the enumeration range,
    enumeration set, container, dimension, content and purpose type constraints
    of the defining item.
;
    _name.category_id             description_example
    _name.object_id               case
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Implied
    _type.contents                Implied

save_

save_description_example.detail

    _definition.id                '_description_example.detail'
    _definition.class             Attribute
    _definition.update            2021-07-20
    _description.text
;
    A description of an example case for the defined item or category.
;
    _name.category_id             description_example
    _name.object_id               detail
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_DICTIONARY

    _definition.id                DICTIONARY
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-20
    _description.text
;
    Attributes for identifying and registering the dictionary. The items
    in this category are NOT used as attributes of INDIVIDUAL data items.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               DICTIONARY

save_

save_dictionary.class

    _definition.id                '_dictionary.class'
    _definition.class             Attribute
    _definition.update            2012-05-07
    _description.text
;
    The nature, or field of interest, of data items defined in the dictionary.
;
    _name.category_id             dictionary
    _name.object_id               class
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Reference           'DDLm reference attribute definitions.'
         Instance            'Domain-specific data instance definitions.'
         Template            'Domain-specific attribute/enumeration templates.'
         Function            'Domain-specific method function scripts.'

    _enumeration.default          Instance

save_

save_dictionary.date

    _definition.id                '_dictionary.date'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    The date that the last dictionary revision took place.
;
    _name.category_id             dictionary
    _name.object_id               date
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Date

save_

save_dictionary.ddl_conformance

    _definition.id                '_dictionary.ddl_conformance'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    The version number of the DDL dictionary that this dictionary
    conforms to.
;
    _name.category_id             dictionary
    _name.object_id               ddl_conformance
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Version

save_

save_dictionary.doi

    _definition.id                '_dictionary.DOI'
    _definition.class             Attribute
    _definition.update            2023-06-19
    _description.text
;
    The digital object identifier (DOI) of the dictionary.
;
    _name.category_id             dictionary
    _name.object_id               doi
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text
    _description_example.case     10.5555/12345678

save_

save_dictionary.formalism

    _definition.id                '_dictionary.formalism'
    _definition.class             Attribute
    _definition.update            2021-08-18
    _description.text
;
    The definitions contained in this dictionary are associated
    with the value of this attribute. Data items may only be
    redefined if the value of this attribute is also changed, and
    any such redefinitions must include the original behaviour as
    a particular case.
;
    _name.category_id             dictionary
    _name.object_id               formalism
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_dictionary.namespace

    _definition.id                '_dictionary.namespace'
    _definition.class             Attribute
    _definition.update            2006-12-05
    _description.text
;
    The namespace code that may be prefixed (with a trailing double colon
    '::') to an item tag defined in the defining dictionary when used
    in particular applications. Because tags must be unique, namespace
    codes are unlikely to be used in data files.
;
    _name.category_id             dictionary
    _name.object_id               namespace
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_dictionary.title

    _definition.id                '_dictionary.title'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    The common title of the dictionary. Will usually match the name
    attached to the data_ statement of the dictionary file.
;
    _name.category_id             dictionary
    _name.object_id               title
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_dictionary.uri

    _definition.id                '_dictionary.uri'
    _definition.class             Attribute
    _definition.update            2006-11-16
    _description.text
;
    An absolute uniform resource identifier (URI) for this dictionary.
;
    _name.category_id             dictionary
    _name.object_id               uri
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Uri

save_

save_dictionary.version

    _definition.id                '_dictionary.version'
    _definition.class             Attribute
    _definition.update            2017-07-21
    _description.text
;
    A unique version identifier for the dictionary.
;
    _name.category_id             dictionary
    _name.object_id               version
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Version

save_

save_DICTIONARY_AUDIT

    _definition.id                DICTIONARY_AUDIT
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2013-09-08
    _description.text
;
    Attributes for identifying and registering the dictionary. The items
    in this category are NOT used as attributes of individual data items.
;
    _name.category_id             DICTIONARY
    _name.object_id               DICTIONARY_AUDIT
    _category_key.name            '_dictionary_audit.version'

save_

save_dictionary_audit.date

    _definition.id                '_dictionary_audit.date'
    _definition.class             Attribute
    _definition.update            2011-06-27
    _description.text
;
    The date of each dictionary revision.
;
    _name.category_id             dictionary_audit
    _name.object_id               date
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Date

save_

save_dictionary_audit.revision

    _definition.id                '_dictionary_audit.revision'
    _definition.class             Attribute
    _definition.update            2011-06-27
    _description.text
;
    A description of the revision applied for the _dictionary_audit.version.
;
    _name.category_id             dictionary_audit
    _name.object_id               revision
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_dictionary_audit.version

    _definition.id                '_dictionary_audit.version'
    _definition.class             Attribute
    _definition.update            2019-04-02
    _description.text
;
    A unique version identifier for each revision of the dictionary.
;
    _name.category_id             dictionary_audit
    _name.object_id               version
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Version

save_

save_DICTIONARY_AUTHOR

    _definition.id                DICTIONARY_AUTHOR
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2023-06-02
    _description.text
;
    Attributes used to record the dictionary author information.
;
    _name.category_id             DICTIONARY
    _name.object_id               DICTIONARY_AUTHOR
    _category_key.name            '_dictionary_author.id'

save_

save_dictionary_author.email

    _definition.id                '_dictionary_author.email'
    _definition.class             Attribute
    _definition.update            2023-07-13
    _description.text
;
    The electronic mail address of an author of the dictionary, in a form
    recognizable to international networks. The format of e-mail addresses is
    given in Section 3.4, Address Specification, of Internet Message Format,
    RFC 2822, P. Resnick (Editor), Network Standards Group, April 2001.
;
    _name.category_id             dictionary_author
    _name.object_id               email
    _type.purpose                 Encode
    _type.source                  Recorded
    _type.container               Single
    _type.contents                Text

    loop_
      _description_example.case
         name@host.domain.country
         bm@iucr.org

save_

save_dictionary_author.id

    _definition.id                '_dictionary_author.id'
    _definition.class             Attribute
    _definition.update            2023-07-13
    _description.text
;
    Arbitrary identifier for this author.
;
    _name.category_id             dictionary_author
    _name.object_id               id
    _type.purpose                 Key
    _type.source                  Related
    _type.container               Single
    _type.contents                Word

save_

save_dictionary_author.id_orcid

    _definition.id                '_dictionary_author.id_ORCID'
    _definition.class             Attribute
    _definition.update            2023-07-13
    _description.text
;
    Identifier in the ORCID Registry of a publication
    author. ORCID is an open, non-profit, community-driven
    service to provide a registry of unique researcher
    identifiers (https://orcid.org/).
;
    _name.category_id             dictionary_author
    _name.object_id               id_ORCID
    _type.purpose                 Encode
    _type.source                  Recorded
    _type.container               Single
    _type.contents                Code
    _description_example.case     0000-0003-0391-0002

save_

save_dictionary_author.name

    _definition.id                '_dictionary_author.name'
    _definition.class             Attribute
    _definition.update            2025-02-19
    _description.text
;
    The name of an author of this dictionary. The family name(s), followed
    by a comma and including any dynastic components, precedes the first
    name(s) or initial(s). For authors with only one name, provide the full
    name without abbreviation.
;
    _name.category_id             dictionary_author
    _name.object_id               name
    _type.purpose                 Describe
    _type.source                  Recorded
    _type.container               Single
    _type.contents                Text

    loop_
      _description_example.case
         "Bleary, Percival R."
         "O'Neil, F.K."
         "Van den Bossche, G."
         "Yang, D.-L."
         "Simonov, Yu.A."
         "Müller, H.A."
         "Ross II, C.R."
         "Chandra"

save_

save_DICTIONARY_VALID

    _definition.id                DICTIONARY_VALID
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2021-07-20
    _description.text
;
    Data items which are used to specify the contents of definitions in
    the dictionary in terms of the _definition.scope and the required
    and prohibited attributes. Validation rules described by data items
    in this category apply only to Reference and Instance dictionaries.
;
    _name.category_id             DICTIONARY
    _name.object_id               DICTIONARY_VALID

    loop_
      _category_key.name
         '_dictionary_valid.scope'
         '_dictionary_valid.option'

save_

save_dictionary_valid.application

    _definition.id                '_dictionary_valid.application'
    _definition.class             Attribute
    _definition_replaced.id       1
    _definition_replaced.by       .
    _definition.update            2021-07-20
    _description.text
;
    Deprecated. Provides the information identifying the definition scope
    (from the _definition.scope enumeration list) and the validity options
    (from the _dictionary_valid.option enumeration list), as a two element
    list.
;
    _name.category_id             dictionary_valid
    _name.object_id               application
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               List
    _type.dimension               '[2]'
    _type.contents                Code
    _method.purpose               Evaluation
    _method.expression
;
    _dictionary_valid.application
                     = [_dictionary_valid.scope,_dictionary_valid.option]
;

save_

save_dictionary_valid.attributes

    _definition.id                '_dictionary_valid.attributes'
    _definition.class             Attribute
    _definition.update            2021-07-21
    _description.text
;
    A list of the attribute names and categories that are assessed
    for application in the item, category and dictionary definitions. A
    parent attribute category implicitly recursively includes all child
    categories.
;
    _name.category_id             dictionary_valid
    _name.object_id               attributes
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               List
    _type.dimension               '[]'
    _type.contents                Code

save_

save_dictionary_valid.option

    _definition.id                '_dictionary_valid.option'
    _definition.class             Attribute
    _definition.update            2021-07-20
    _description.text
;
    Option codes for applicability of attributes in definitions. Attributes
    not listed as 'Prohibited' for a given scope are allowed in that scope.
;
    _name.category_id             dictionary_valid
    _name.object_id               option
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Mandatory            'Attribute must be present in definition frame.'
         Recommended          'Attribute is usually in definition frame.'
         Prohibited           'Attribute must not be used in definition frame.'

    _enumeration.default          Recommended

save_

save_dictionary_valid.scope

    _definition.id                '_dictionary_valid.scope'
    _definition.class             Attribute
    _definition.update            2015-01-28
    _description.text
;
    The scope to which the specified restriction on usable
    attributes applies.
;
    _name.category_id             dictionary_valid
    _name.object_id               scope
    _type.purpose                 Audit
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Dictionary             'Restriction applies to dictionary definition.'
         Category               'Restriction applies to a category definition.'
         Item                   'Restriction applies to an item definition.'

save_

save_ENUMERATION

    _definition.id                ENUMERATION
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-20
    _description.text
;
    The attributes for restricting the values of defined data items.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               ENUMERATION

save_

save_enumeration.def_index_id

    _definition.id                '_enumeration.def_index_id'
    _definition.class             Attribute
    _definition_replaced.id       1
    _definition_replaced.by       '_enumeration.def_index_ids'
    _definition.update            2023-06-23
    _description.text
;
    Deprecated. The _enumeration.def_index_ids data item should be
    used instead of this item.

    Specifies the data name of the item with a value used as an index
    to the DEFAULT enumeration list (in category enumeration_default)
    in order to select the default enumeration value for the
    defined item. The value of the identified data item must match
    one of the _enumeration_default.index values.
;
    _name.category_id             enumeration
    _name.object_id               def_index_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_enumeration.def_index_ids

    _definition.id                '_enumeration.def_index_ids'
    _definition.class             Attribute
    _definition.update            2023-06-23
    _description.text
;
    Specifies the data names of items that are collectively used to identify
    the suitable default value in the ENUMERATION_DEFAULTS category loop.
    The values of these items are used to construct an ordered list which is
    checked against the values of the _enumeration_defaults.index attribute.
;
    _name.category_id             enumeration
    _name.object_id               def_index_ids
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               List
    _type.dimension               '[]'
    _type.contents                Tag

save_

save_enumeration.default

    _definition.id                '_enumeration.default'
    _definition.class             Attribute
    _definition.update            2021-11-15
    _description.text
;
    The default value for the defined item if it is not specified explicitly.
    Value of this attribute inherits the enumeration range, enumeration set,
    container, dimension, content and purpose type constraints of the defining
    item.
;
    _name.category_id             enumeration
    _name.object_id               default
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Implied
    _type.contents                Implied

save_

save_enumeration.mandatory

    _definition.id                '_enumeration.mandatory'
    _definition.class             Attribute
    _definition.update            2012-05-07
    _description.text
;
    Yes or No flag on whether the enumerate states specified for an
    item in the current definition (in which item appears) MUST be
    used on instantiation.
;
    _name.category_id             enumeration
    _name.object_id               mandatory
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Yes                      'Use of state is mandatory.'
         No                       'Use of state is unnecessary.'

    _enumeration.default          Yes

save_

save_enumeration.range

    _definition.id                '_enumeration.range'
    _definition.class             Attribute
    _definition.update            2023-01-09
    _description.text
;
    The inclusive range of numerical values allowed for the defined item.
    If the defined item has associated SU values, the reported data values
    may fall outside these limits.
;
    _name.category_id             enumeration
    _name.object_id               range
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Range

    loop_
      _description_example.case
      _description_example.detail
         -4:10
;
         Values must be no less than -4 and no greater than 10.
;
         0:
;
         Values must be greater than or equal to 0.
;
         :3.1415
;
         Values must be less than or equal to 3.1415.
;

save_

save_ENUMERATION_DEFAULT

    _definition.id                ENUMERATION_DEFAULT
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2023-06-23
    _description.text
;
    Deprecated. The ENUMERATION_DEFAULTS category should be used instead
    of this category.

    Loop of pre-determined default enumeration values indexed to a
    data item by the item _enumeration.def_index_id.
;
    _name.category_id             ENUMERATION
    _name.object_id               ENUMERATION_DEFAULT
    _category_key.name            '_enumeration_default.index'

save_

save_enumeration_default.index

    _definition.id                '_enumeration_default.index'
    _definition.class             Attribute
    _definition_replaced.id       1
    _definition_replaced.by       '_enumeration_defaults.index'
    _definition.update            2023-06-23
    _description.text
;
    Deprecated. The _enumeration_defaults.index data item should be
    used instead of this item.

    Index key in the list default values referenced to by the value
    of _enumeration.def_index_id.
;
    _name.category_id             enumeration_default
    _name.object_id               index
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_enumeration_default.value

    _definition.id                '_enumeration_default.value'
    _definition.class             Attribute
    _definition_replaced.id       1
    _definition_replaced.by       '_enumeration_defaults.value'
    _definition.update            2023-06-23
    _description.text
;
    Deprecated. The _enumeration_defaults.value data item should be
    used instead of this item.

    Default enumeration value in the list referenced by the value of
    _enumeration.def_index_id. The reference index key is given by
    the value of _enumeration_default.index value.
;
    _name.category_id             enumeration_default
    _name.object_id               value
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Implied
    _type.contents                Implied

save_

save_ENUMERATION_DEFAULTS

    _definition.id                ENUMERATION_DEFAULTS
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2023-06-23
    _description.text
;
    Loop of pre-determined default enumeration values indexed by a set of data
    items specified using the _enumeration.def_index_ids attribute.
;
    _name.category_id             ENUMERATION
    _name.object_id               ENUMERATION_DEFAULTS
    _category_key.name            '_enumeration_defaults.index'

save_

save_enumeration_defaults.index

    _definition.id                '_enumeration_defaults.index'
    _definition.class             Attribute
    _definition.update            2023-06-23
    _description.text
;
    An index value, in the form of an ordered list, which allows the
    identification of the most suitable default value. The order of values in
    the list must correspond to the order of the related data item references
    in the _enumeration.def_index_ids attribute list. That is, the n^th^ list
    element is assumed to represent a value that may be assigned to the data
    item referenced at the n^th^ position of the _enumeration.def_index_ids
    attribute list value.

    The constituent values of the _enumeration_defaults.index attribute inherit
    the enumeration range, enumeration set, and the content type from the
    data item with which they are paired.
;
    _name.category_id             enumeration_defaults
    _name.object_id               index
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               List
    _type.dimension               '[]'
    _type.contents                Inherited

save_

save_enumeration_defaults.source_id

    _definition.id                '_enumeration_defaults.source_id'
    _definition.class             Attribute
    _definition.update            2023-07-13
    _description.text
;
    An identifier which corresponds to an entry in the ENUMERATION_SOURCE
    category loop. Used to provide a reference to the original source of
    a specific enumeration value.
;
    _name.category_id             enumeration_defaults
    _name.object_id               source_id
    _name.linked_item_id          '_enumeration_source.id'
    _type.purpose                 Link
    _type.source                  Related
    _type.container               Single
    _type.contents                Word

save_

save_enumeration_defaults.value

    _definition.id                '_enumeration_defaults.value'
    _definition.class             Attribute
    _definition.update            2023-06-23
    _description.text
;
    The default enumeration value associated with a specific index value
    constructed using data items referenced by the _enumeration.def_index_ids
    attribute. The associated index value is provided using the
    _enumeration_defaults.index attribute.
;
    _name.category_id             enumeration_defaults
    _name.object_id               value
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Implied
    _type.contents                Implied

save_

save_ENUMERATION_SET

    _definition.id                ENUMERATION_SET
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2013-09-08
    _description.text
;
    Attributes of data items which are used to define a
    set of unique pre-determined values.
;
    _name.category_id             ENUMERATION
    _name.object_id               ENUMERATION_SET
    _category_key.name            '_enumeration_set.state'

save_

save_enumeration_set.detail

    _definition.id                '_enumeration_set.detail'
    _definition.class             Attribute
    _definition.update            2011-06-27
    _description.text
;
    The meaning of the code (identified by _enumeration_set.state)
    in terms of the value of the quantity it describes.
;
    _name.category_id             enumeration_set
    _name.object_id               detail
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_enumeration_set.state

    _definition.id                '_enumeration_set.state'
    _definition.class             Attribute
    _definition.update            2023-11-07
    _description.text
;
    Permitted value state for the defined item. Value of this attribute inherits
    the enumeration range, enumeration set, container, dimension, content and
    purpose type constraints of the defining item.
;
    _name.category_id             enumeration_set
    _name.object_id               state
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Implied
    _type.contents                Implied

save_

save_ENUMERATION_SOURCE

    _definition.id                ENUMERATION_SOURCE
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2023-06-23
    _description.text
;
    Attributes used to record the original sources of the default values
    enumerated using the ENUMERATION_DEFAULTS category.
;
    _name.category_id             ENUMERATION
    _name.object_id               ENUMERATION_SOURCE
    _category_key.name            '_enumeration_source.id'

    loop_
      _description_example.case
      _description_example.detail
;
         loop_
         _enumeration_source.id
         _enumeration_source.reference
         a 'International Tables Vol. C Table 4.4.4.1 2nd ed.'
         b 'International Tables Vol. H Table 4.3.2.1 1st ed.'

         loop_
         _enumeration_defaults.index
         _enumeration_defaults.value
         _enumeration_defaults.source_id
         [ H  ]  1  a
         [ H- ]  2  a
         [ He ]  2  b
         # ...
;
;
         There are two sources for the default values given in the enumeration.
         Entries marked with 'a' come from Table 4.4.4.1 in the 2nd edition of
         Volume C of the International Tables of Crystallography. Entries marked
         with 'b' come from Table 4.3.2.1 in the 1st edition of Volume H of the
         International Tables of Crystallography.
;
;
         _enumeration_source.reference
             'https://doi.org/10.1107/S2053273322010944, Table S4'

         loop_
         _enumeration_defaults.index
         _enumeration_defaults.value
         [ He ] 0.8733928
         [ Li ] 1.129319
         [ Be ] 1.592162
         # ...
;
;
         There is a single source for all default values given in the
         enumeration. All entries can be found in Table S4 of the material
         referenced by the given DOI.
;

save_

save_enumeration_source.id

    _definition.id                '_enumeration_source.id'
    _definition.class             Attribute
    _definition.update            2023-06-23
    _description.text
;
    A unique identifier of the source material from which the
    _enumeration_defaults.value attribute values were taken.
;
    _name.category_id             enumeration_source
    _name.object_id               id
    _type.purpose                 Key
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Word

save_

save_enumeration_source.reference

    _definition.id                '_enumeration_source.reference'
    _definition.class             Attribute
    _definition.update            2023-06-23
    _description.text
;
    Bibliographic information sufficient to identify the original source of
    the associated _enumeration_defaults.value attribute values.
;
    _name.category_id             enumeration_source
    _name.object_id               reference
    _type.purpose                 Describe
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_IMPORT

    _definition.id                IMPORT
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-27
    _description.text
;
    Used to import the values of specific attributes from other dictionary
    definitions within and without the current dictionary.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               IMPORT

save_

save_import.get

    _definition.id                '_import.get'
    _definition.class             Attribute
    _definition.update            2023-11-13
    _description.text
;
    A list of tables of attributes defined individually in the category
    IMPORT_DETAILS, used to import definitions from other dictionaries.
;
    _name.category_id             import
    _name.object_id               get
    _type.purpose                 Import
    _type.source                  Assigned
    _type.container               List
    _type.dimension               '[]'
    _type.contents                ByReference
    _type.contents_referenced_id  '_import_details.single'
    _method.purpose               Evaluation
    _method.expression
;
     imp_order_list = []
     loop id as import_details {
         imp_order_list ++= id.order
     }
     imp_order_list = sort(imp_order_list)
     final_val = []
     for ord in imp_order_list {
         final_val ++= import_details[ord].single
     }
    _import.get = final_val
;

save_

save_IMPORT_DETAILS

    _definition.id                IMPORT_DETAILS
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2015-05-06
    _description.text
;
    Items in IMPORT_DETAILS describe individual attributes of an import
    operation.
;
    _name.category_id             IMPORT
    _name.object_id               IMPORT_DETAILS
    _category_key.name            '_import_details.order'

save_

save_import_details.file_id

    _definition.id                '_import_details.file_id'
    _definition.class             Attribute
    _definition.update            2021-02-03
    _description.text
;
    A URI reference as per RFC 3986 giving the location of the source
    dictionary. When a relative URI is used, the base URI for the URI reference
    is the _dictionary.uri of the importing dictionary.
;
    _name.category_id             import_details
    _name.object_id               file_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Uri

save_

save_import_details.file_version

    _definition.id                '_import_details.file_version'
    _definition.class             Attribute
    _definition.update            2017-07-21
    _description.text
;
    The required version number for _dictionary.version of the
    imported dictionary. Dictionaries with the same major version
    number are compatible. If absent or null, any version is permitted.
;
    _name.category_id             import_details
    _name.object_id               file_version
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Version

save_

save_import_details.frame_id

    _definition.id                '_import_details.frame_id'
    _definition.class             Attribute
    _definition.update            2021-08-18
    _description.text
;
    The save frame code of the definition frame to be imported.
;
    _name.category_id             import_details
    _name.object_id               frame_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

save_

save_import_details.if_dupl

    _definition.id                '_import_details.if_dupl'
    _definition.class             Attribute
    _definition.update            2021-11-09
    _description.text
;
    Code identifying the action taken if the requested definition block
    already exists within the importing dictionary in 'Full' mode, or
    an attribute exists in both the importing definition block and the
    requested definition block in 'Contents' mode.
;
    _name.category_id             import_details
    _name.object_id               if_dupl
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Ignore
;
         Ignore imported definitions if block identifiers match in 'Full' mode.
         Ignore imported attributes that match attributes already in the
         importing definition in 'Contents' mode.

         When importing in 'Contents' mode, if the ignored attribute belongs to
         a Loop category, all attributes from that category must be ignored to
         avoid loop mismatches.
;
         Replace
;
         Replace existing definitions with imported definitions if block
         identifiers match in 'Full' mode.

         When importing in 'Contents' mode, contents of the two save frames
         should be merged and any duplicate attributes replaced with those from
         the imported save frame. In case the replaced attribute belongs to a
         Loop category, all attributes from that category must first be removed
         from the importing save frame to avoid loop mismatches.
;
         Exit
;
         Issue an error exception and exit.
;

    _enumeration.default          Exit

save_

save_import_details.if_miss

    _definition.id                '_import_details.if_miss'
    _definition.class             Attribute
    _definition.update            2015-05-06
    _description.text
;
    Code identifying the action taken if the requested definition block
    is missing from the source dictionary.
;
    _name.category_id             import_details
    _name.object_id               if_miss
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Ignore                   'Ignore import.'
         Exit                     'Issue error exception and exit.'

    _enumeration.default          Exit

save_

save_import_details.mode

    _definition.id                '_import_details.mode'
    _definition.class             Attribute
    _definition.update            2019-04-03
    _description.text
;
    Code identifying how the definition referenced by
    _import_details.frame_id is to be imported.

    'Full' imports the entire definition together with any child definitions
    (in the case of categories) found in the target dictionary. The importing
    definition becomes the parent of the imported definition. As such, the
    'Full' mode must only be used in category definitions.

    As a special case, a 'Head' category importing a 'Head' category is
    equivalent to importing all children of the imported 'Head' category
    as children of the importing 'Head' category. A 'Head' category can
    only be imported in 'Full' mode and only by another 'Head' category.

    'Contents' imports only the attributes found in the imported definition.
;
    _name.category_id             import_details
    _name.object_id               mode
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Full
             'Import requested definition together with any child definitions.'
         Contents
             'Import contents of requested definition.'

    _enumeration.default          Contents

save_

save_import_details.order

    _definition.id                '_import_details.order'
    _definition.class             Attribute
    _definition.update            2021-03-01
    _description.text
;
    The order in which the import described by the referenced row should be
    executed.
;
    _name.category_id             import_details
    _name.object_id               order
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Integer
    _units.code                   none

save_

save_import_details.single

    _definition.id                '_import_details.single'
    _definition.class             Attribute
    _definition.update            2017-07-21
    _description.text
;
    A Table mapping attributes defined individually in category IMPORT to
    their values; used to import definitions from other dictionaries.
;
    _name.category_id             import_details
    _name.object_id               single
    _type.purpose                 Internal
    _type.source                  Assigned
    _type.container               Table
    _type.contents                Text
    _type.indices                 ByReference
    _type.indices_referenced_id   '_import_details.single_index'
    _method.purpose               Evaluation
    _method.expression
;
    with id as import_details
    _import_details.single = {"file":id.file_id,
                              "version":id.file_version,
                              "save":id.frame_id,
                              "mode":id.mode,
                              "dupl":id.if_dupl,
                              "miss":id.if_miss}
;

save_

save_import_details.single_index

    _definition.id                '_import_details.single_index'
    _definition.class             Attribute
    _definition.update            2021-08-18
    _description.text
;
    One of the indices permitted in the entries of values of attribute
    _import_details.single.
;
    _name.category_id             import_details
    _name.object_id               single_index
    _type.purpose                 Internal
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         file
;
         URI reference as per RFC 3986 giving the location of the source
         dictionary.
;
         version
;
         Version of source dictionary.
;
         save
;
         Save frame code of source definition.
;
         mode
;
         Mode for including save frames.
;
         dupl
;
         Option for duplicate entries.
;
         miss
;
         Option for missing duplicate entries.
;

save_

save_METHOD

    _definition.id                METHOD
    _definition.scope             Category
    _definition.class             Loop
    _definition.update            2013-09-08
    _description.text
;
    Methods used for evaluating, validating and defining items.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               METHOD
    _category_key.name            '_method.purpose'

save_

save_method.expression

    _definition.id                '_method.expression'
    _definition.class             Attribute
    _definition.update            2023-11-14
    _description.text
;
    The method expression for the defined item or category.
;
    _name.category_id             method
    _name.object_id               expression
    _type.purpose                 Method
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Text

save_

save_method.purpose

    _definition.id                '_method.purpose'
    _definition.class             Attribute
    _definition.update            2023-06-28
    _description.text
;
    The purpose and scope of the method expression.
;
    _name.category_id             method
    _name.object_id               purpose
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Evaluation
;
         Method evaluates an item from related item values. Definitions of
         primitive data items should normally not contain methods of this type.
;
         Definition
;
         Method generates attribute value(s) in the definition.
;
         Validation
;
         Method compares an evaluation with existing item value.
;

    _enumeration.default          Evaluation

save_

save_NAME

    _definition.id                NAME
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-20
    _description.text
;
    Attributes for identifying items and item categories.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               NAME

save_

save_name.category_id

    _definition.id                '_name.category_id'
    _definition.class             Attribute
    _definition.update            2011-07-27
    _description.text
;
    The name of the category in which a category or item resides.
    For Head categories this is the _dictionary.title given in the
    enclosing data block.
;
    _name.category_id             name
    _name.object_id               category_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Name

save_

save_name.linked_item_id

    _definition.id                '_name.linked_item_id'
    _definition.class             Attribute
    _definition.update            2021-12-16
    _description.text
;
    Data name of an equivalent item which has a
    common set of values, or, in the definition of a type SU
    item is the name of the associated measurand item to
    which the standard uncertainty applies.
;
    _name.category_id             name
    _name.object_id               linked_item_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_name.object_id

    _definition.id                '_name.object_id'
    _definition.class             Attribute
    _definition.update            2011-07-27
    _description.text
;
    The object name of a category or name unique within the
    category or family of categories.
;
    _name.category_id             name
    _name.object_id               object_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Name

save_

save_TYPE

    _definition.id                TYPE
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2011-06-26
    _description.text
;
    Attributes which specify the 'typing' of data items.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               TYPE

save_

save_type.container

    _definition.id                '_type.container'
    _definition.class             Attribute
    _definition.update            2021-12-08
    _description.text
;
    The structure of values for the defined data item.
;
    _name.category_id             type
    _name.object_id               container
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Single
;
         Single value.
;
         List
;
         Ordered set of values. Elements need not be of same contents type.
;
         Array
;
         Ordered set of values of the same type. Operations across arrays are
         equivalent to operations across elements of the Array.
;
         Matrix
;
         Ordered set of numerical values for a tensor. Tensor operations such
         as dot and cross products, are valid cross matrix objects. A matrix
         with a single dimension is interpreted as a row or column vector as
         required.
;
         Table
;
         An unordered set of id:value elements.
;
         Implied
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         The value structure is taken from _type.container in the definition in
         which the defined attribute appears.
;

    _enumeration.default          Single

save_

save_type.contents

    _definition.id                '_type.contents'
    _definition.class             Attribute
    _definition.update            2025-07-04
    _description.text
;
    Syntax of the value elements within the container type. Where the
    definition is of a 'List' or 'Array' type, this attribute
    describes the contents of each element. Where the definition is
    of a 'Table' container this attribute describes the construction
    of the value elements within those (Table) values.  The CIF2
    character set referenced below consists of the following Unicode
    code points:

    [U+0009], [U+000A], [U+000D], [U+0020-U+007E], [U+00A0-U+D7FF],
    [U+E000-U+FDCF], [U+FDF0-U+FFFD], [U+10000-U+1FFFD],
    [U+20000-U+2FFFD], [U+30000-U+3FFFD], [U+40000-U+4FFFD],
    [U+50000-U+5FFFD], [U+60000-U+6FFFD], [U+70000-U+7FFFD],
    [U+80000-U+8FFFD], [U+90000-U+9FFFD], [U+A0000-U+AFFFD],
    [U+B0000-U+BFFFD], [U+C0000-U+CFFFD], [U+D0000-U+DFFFD],
    [U+E0000-U+EFFFD], [U+F0000-U+FFFFD], [U+100000-U+10FFFD]

    Two case-insensitive strings are considered identical when
    they match under the Unicode canonical caseless matching algorithm.

    In all cases, 'whitespace' refers to ASCII whitespace only, that
    is [U+0009], [U+000A], [U+000D] and [U+0020].

    Note that descriptions of text syntax are relevant only to those
    formats that encode data values as text.
;
    _name.category_id             type
    _name.object_id               contents
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Text
;
         Case-sensitive sequence of CIF2 characters.
;
         Word
;
         Case-sensitive sequence of CIF2 characters containing no ASCII
         whitespace.
;
         Code
;
         Case-insensitive sequence of CIF2 characters containing no ASCII
         whitespace.
;
         Name
;
         Case-insensitive sequence of ASCII alphanumeric characters or
         underscore.
;
         Tag
;
         Case-insensitive CIF2 character sequence with leading underscore and
         no ASCII whitespace.
;
         Uri
;
         Uniform Resource Identifier reference as defined in RFC 3986 Section
         4.1.
;
         Date
;
         ISO standard date format <yyyy>-<mm>-<dd>. Use DateTime for all new
         dictionaries.
;
         DateTime
;
         A timestamp. Text formats must use date-time or full-date productions
         of RFC 3339 ABNF.
;
         Version
;
         Version number string that adheres to the formal grammar provided in
         the Semantic Versioning specification version 2.0.0. Version strings
         must take the general form of <major>.<minor>.<patch> and may also
         contain an optional postfix with additional information such as the
         pre-release identifier.

         Reference: https://semver.org/spec/v2.0.0.html
;
         Dimension
;
         Size of an Array/Matrix/List expressed as a text string. The text
         string itself consists of zero or more non-negative integers separated
         by commas placed within bounding square brackets. Empty square
         brackets represent a list of unknown size.
;
         Range
;
         Inclusive range of numerical values expressed using the min:max
         notation in which the smallest value 'min' and the largest value
         'max' are separated by a colon character. If 'max' is omitted, then
         the range includes all values that are greater than or equal to 'min'.
         If 'min' is omitted, then the range includes all values that are less
         than or equal to 'max'. Omitting both 'min' and 'max' at the same time
         is not allowed.
;
         Integer
;
         A number from the set of all integers.
;
         Real
;
         Floating-point real number.
;
         Imag
;
         Floating-point imaginary number.
;
         Complex
;
         A complex number.
;
         Symop
;
         A string composed of a positive integer optionally followed by an
         underscore or space and three or more digits.
;
         Implied
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         The contents are described by the _type.contents attribute in the
         definition in which the defined attribute appears.
;
         ByReference
;
         The contents have the same form as those of the attribute referenced
         by _type.contents_referenced_id.
;
         Inherited
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         Intended to be used with List, Array, Matrix or Table containers which
         may simultaneously contain values of several content types. The content
         type of each value in such containers matches the content type of the
         data item to which it is directly related. Specific rules for relating
         data values to data items MUST be provided as human-readable text in
         the _description.text attribute of all data items that have the
         Inherited content type.
;
    _enumeration.default          Text
    _description_example.case     Integer
    _description_example.detail   'Content is a single or multiple integer(s).'

save_

save_type.contents_referenced_id

    _definition.id                '_type.contents_referenced_id'
    _definition.class             Attribute
    _definition.update            2015-04-24
    _description.text
;
    The value of the _definition.id attribute of an attribute definition
    whose type is to be used also as the type of this item. Meaningful only
    when this item's _type.contents attribute has value 'ByReference'.
;
    _name.category_id             type
    _name.object_id               contents_referenced_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_type.dimension

    _definition.id                '_type.dimension'
    _definition.class             Attribute
    _definition.update            2021-07-28
    _description.text
;
    The dimensions of a list, array or matrix of elements expressed as
    a text string. A Matrix with a single dimension is interpreted as
    a vector.
;
    _name.category_id             type
    _name.object_id               dimension
    _type.purpose                 Encode
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Dimension

    loop_
      _description_example.case
      _description_example.detail
         '[3,3]'                  '3x3 matrix of elements.'
         '[6]'                    'List of 6 elements.'
         '[]'                     'Unknown number of list elements.'

save_

save_type.indices

    _definition.id                '_type.indices'
    _definition.class             Attribute
    _definition.update            2023-01-13
    _description.text
;
    Used to specify the syntax construction of indices of the entries in the
    defined object when the defined object has 'Table' as its
    _type.container attribute. Values are a subset of the codes and
    constructions defined for attribute _type.contents, accounting
    for the fact that syntactically, indices are always case-sensitive
    quoted strings.

    Meaningful only when the defined item has _type.container 'Table'.

    See the definition for _type.contents for the character set definition.
;
    _name.category_id             type
    _name.object_id               indices
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Text
;
         A case-sensitive sequence of CIF2 characters.
;
         Code
;
         Case-insensitive sequence of CIF2 characters containing no ASCII
         whitespace.
;
         Date
;
         ISO date format <yyyy>-<mm>-<dd>.
;
         Uri
;
         A Uniform Resource Identifier string, per RFC 3986.
;
         Version
;
         Version digit string of the form <major>.<version>.<update>
;
         ByReference
;
         Indices have the same form as the contents of the attribute identified
         by _type.indices_referenced_id.
;

    _enumeration.default          Text

save_

save_type.indices_referenced_id

    _definition.id                '_type.indices_referenced_id'
    _definition.class             Attribute
    _definition.update            2015-04-24
    _description.text
;
    The _definition.id attribute of a definition whose type describes the
    form and construction of the indices of entries in values of the present
    item.

    Meaningful only when the defined item's _type.container attribute has
    value 'Table', and its _type.indices attribute has value 'ByReference'.
;
    _name.category_id             type
    _name.object_id               indices_referenced_id
    _type.purpose                 Identify
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Tag

save_

save_type.purpose

    _definition.id                '_type.purpose'
    _definition.class             Attribute
    _definition.update            2023-11-14
    _description.text
;
    The primary purpose or function the defined data item serves in a
    dictionary or a specific data instance.
;
    _name.category_id             type
    _name.object_id               purpose
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Import
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         Used to type the SPECIAL attribute '_import.get' that is present in
         dictionaries to instigate the importation of external dictionary
         definitions.
;
         Method
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         Used to type the attribute '_method.expression' that is present in
         dictionary definitions to provide the text method expressing the
         defined item in terms of other defined items.
;
         Audit
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         Used to type attributes employed to record the audit definition
         information (creation date, update version and cross reference codes)
         of items, categories and files.
;
         Identify
;
         >>> Applied ONLY in the DDLm Reference Dictionary <<<
         Used to type attributes that identify an item tag (or part thereof)
         or external location.
;
         Describe
;
         Used to type items with values that are descriptive text intended for
         human interpretation.
;
         Encode
;
         Used to type items with values that are text or codes that are
         formatted to be machine parsable.
;
         State
;
         Used to type items with values that are restricted to codes present in
         their _enumeration_set.state lists.
;
         Key
;
         Used to type an item with a value that is unique within the looped
         list of these items, and does not contain encoded information.
;
         Link
;
         Used to type an item that acts as a foreign key between two
         categories. The definition of the item must additionally contain the
         attribute '_name.linked_item_id' specifying the data name of the item
         with unique values in the linked category. The values of the defined
         item are drawn from the set of values in the referenced item. Cross
         referencing items from the same category is allowed.
;
         Composite
;
         Used to type items with value strings composed of separate parts.
         These will usually need to be separated and parsed for complete
         interpretation and application.
;
         Number
;
         Used to type items that are numerical and exact (i.e. no standard
         uncertainty value).
;
         Measurand
;
         Used to type an item with a numerically estimated value that has been
         recorded by measurement or derivation. A data item definition for the
         standard uncertainty (SU) of this item must be provided in a separate
         definition with _type.purpose of 'SU'. The value of a measurand item
         should be accompanied by a value of its associated SU item, either: 1)
         integrated with the measurand value in a manner characteristic of the
         data format; or 2) as a separate, explicit value for the associated SU
         item. These alternatives are semantically equivalent.
;
         SU
;
         Used to type an item with a numerical value that is the standard
         uncertainty of another data item. The definition of an SU item must
         have the _type.source attribute set to 'Related' and must include
         the _name.linked_item_id attribute which explicitly identifies
         the associated measurand item. SU values must be non-negative.
;
         Internal
;
         Used to type items that serve only internal purposes of the dictionary
         in which they appear. The particular purpose served is not defined by
         this state.
;

    _enumeration.default          Describe

save_

save_type.source

    _definition.id                '_type.source'
    _definition.class             Attribute
    _definition.update            2023-07-11
    _description.text
;
    The origin or source of the defined data item, indicating by what
    recording process it has been added to the domain instance.

    All data items can be classified as primitive or non-primitive based on
    the origin of the data. Primitive data items record data that usually
    cannot be deduced without repeating the entire experiment such as
    measurements, observations (e.g. instrument settings) and decisions
    made in nonlinear processes. Non-primitive data items record derivable
    data that can be directly evaluated from other data.
;
    _name.category_id             type
    _name.object_id               source
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    loop_
      _enumeration_set.state
      _enumeration_set.detail
         Recorded
;
         Data value (numerical or otherwise) was recorded by observation or
         measurement during the experimental collection of data.

         Data items of this type are considered primitive.
;
         Assigned
;
         Data value (numerical or otherwise) was assigned as part of the data
         collection, analysis or modelling required for a specific domain
         instance.

         These assignments often represent a decision made that determines the
         course of the experiment (and therefore the data item may be deemed
         primitive) or a particular choice in the way the data was analysed
         (and therefore the data item may be considered non-primitive).
;
         Related
;
         Data item was added based on a relationship to another data item.

         This state indicates that the item was used to record the SU value of
         a related measurand item or that the item was used in the construction
         of looped lists of data. In the latter case, it typically identifies
         an item whose unique values are used as the reference key for a loop
         category and/or an item which has values in common with those of
         another loop category and is considered a Link between these lists.

         Data items of this type includes both primitive and non-primitive
         items.
;
         Derived
;
         Data item was derived from other data items within the domain instance.

         Data items of this type are considered non-primitive.
;

    _enumeration.default          Assigned

save_

save_UNITS

    _definition.id                UNITS
    _definition.scope             Category
    _definition.class             Set
    _definition.update            2013-03-06
    _description.text
;
    The attributes for specifying units of measure.
;
    _name.category_id             ATTRIBUTES
    _name.object_id               UNITS

save_

save_units.code

    _definition.id                '_units.code'
    _definition.class             Attribute
    _definition.update            2023-06-10
    _description.text
;
    A code which identifies the units of measurement.

    The 'unspecified' code should only be used in cases when the units cannot
    be properly expressed in DDLm. A typical example of such situation is a
    List data item with constituent values that may have differing units.
;
    _name.category_id             units
    _name.object_id               code
    _type.purpose                 State
    _type.source                  Assigned
    _type.container               Single
    _type.contents                Code

    _import.get                   [{'file':templ_enum.cif  'save':units_code}]

save_

    loop_
      _dictionary_valid.scope
      _dictionary_valid.option
      _dictionary_valid.attributes
         Dictionary  Mandatory    ['_dictionary.title'  '_dictionary.class'
                                   '_dictionary.version'  '_dictionary.date'
                                   '_dictionary.uri'
                                   '_dictionary.ddl_conformance'
                                   '_dictionary.namespace']
         Dictionary  Recommended  ['_description.text'
                                   '_dictionary_audit.version'
                                   '_dictionary_audit.date'
                                   '_dictionary_audit.revision'
                                   '_dictionary.doi']
         Dictionary  Prohibited   [ALIAS  CATEGORY_KEY  DEFINITION
                                   DESCRIPTION_EXAMPLE  ENUMERATION  IMPORT
                                   METHOD  NAME  TYPE  UNITS]
         Category    Mandatory    ['_definition.id'  '_definition.scope'
                                   '_definition.class'  '_definition.update'
                                   '_name.category_id'  '_name.object_id']
         Category    Recommended  ['_category_key.name'  '_description.text']
         Category    Prohibited   [ALIAS  DICTIONARY  ENUMERATION  TYPE  UNITS]
         Item        Mandatory    ['_definition.id'  '_definition.update'
                                   '_name.object_id'  '_name.category_id'
                                   '_type.container'  '_type.contents']
         Item        Recommended  ['_definition.scope'  '_definition.class'
                                   '_type.source'  '_type.purpose'
                                   '_description.text']
         Item        Prohibited   [CATEGORY_KEY  DICTIONARY]

    loop_
      _dictionary_audit.version
      _dictionary_audit.date
      _dictionary_audit.revision
         3.3.0                    2004-11-09
;
       Change definition.import_id to definition_import.id in many defs.
       Insert category DEFINITION_IMPORT and the items .id, .conflict,
       .protocol and .source.
;
         3.3.1                    2004-11-10
;
       Make further changes to the DEFINITION_IMPORT definitions and
       introduce the DEFINITION_TEMPLATE category.
;
         3.3.2                    2004-11-11
;
       Introduce an IMPORT category containing IMPORT_DICTIONARY,
       IMPORT_DEFINITION, IMPORT_CATEGORY, IMPORT_ATTRIBUTE.
       Change DEFINITION_TEMPLATE to IMPORT_TEMPLATE.
;
         3.3.3                    2004-11-12
;
       Major changes to all the new attributes. Introduce categories
       DEFINITION_CONTEXT.
;
         3.3.4                    2004-11-13
;
       Cleaned up the IMPORT changes and cases of enumerates.
;
         3.3.5                    2004-11-16
;
       Further changes to IMPORT definitions.
;
         3.3.6                    2004-11-18
;
       Some minor correction of typos.
;
         3.3.7                    2005-11-22
;
       Changed _dictionary.name to _dictionary.filename.
       Changed _dictionary_xref.name to _dictionary_xref.filename.
       Added _dictionary.title to describe the common name of the dictionary.
;
         3.3.8                    2005-12-12
;
       Changed ddl to ddl_attr.
       Added Template and Function to _dictionary.class.
;
         3.3.9                    2006-02-02
;
       Add the definition of _dictionary_xref.source.
;
         3.3.10                   2006-02-07
;
       Add import attribute definitions.
;
         3.4.1                    2006-02-12
;
       Remove save frames from dictionary attributes.
       Change the attribute _dictionary.parent_name to _dictionary.parent_id.
;
         3.4.2                    2006-02-16
;
       In the import_*.conflict definitions change the enumeration state Unique
       to Ignore, and change the default state to Error.
       In the import_*.missing definitions change default enumeration state to
       Error.
;
         3.5.1                    2006-03-07
;
       Structural changes to the file to conform with the import model 3.
       Move the template file for *.relational_id to com_att.dic.
       Change all references to *.relational_id into the tuple format.
       Move the _codes_ddl.units_code to enum_set.dic and insert the
       import_enum_set.id tuples.
;
         3.5.2                    2006-03-22
;
       Rename _enumeration.default_index_id to _enumeration.def_index_id.
       Correct the attributes _enumeration_default.index and *.value.
;
         3.5.3                    2006-05-09
;
       Reword many of the import attributes.
       Correct the tuple description for import_dictionary.
       Insert all of the definitions for import_defaults attributes.
       Update _dictionary.class definition - change "Template" to "Import".
       Remove _enumeration.scope "open" from _definition_context.domain.
;
         3.6.1                    2006-06-16
;
       Major revamp of TYPE attributes... changed:
          _type.value to _type.contents and expand enumeration list.
          _type.purpose has new role and different enumeration states.
       _name.object_id changed to _name.object_id.
       _enumeration_set.code becomes _enumeration_set.state.
       Changed the _type.value (now .contents) states to match expanded list.
       Added _dictionary.ddl_conformance attribute.
       Changed _category.join_set_id to _category.join_cat_id.
       Remove _enumeration.scope definition.
;
         3.6.2                    2006-06-17
;
       Change the states of _type.purpose.
;
         3.6.3                    2006-06-18
;
       Correct _type.contents value in import_dictionary.id.
;
         3.6.4                    2006-06-20
;
       Change state 'Point' to 'Link' in _type.contents definition.
       Add Formula to _type.contents.
;
         3.6.5                    2006-06-27
;
       Change all IMPORT attributes and apply.
       Add _dictionary.namespace attribute and apply.
       Add states to _definition.class and apply.
       Add _enumeration_set.scope.
       Add .context to ENUMERATE_SET, ENUMERATE_DEFAULT, DESCRIPTION_EXAMPLE
;
         3.6.6                    2006-07-18
;
       Change the descriptions of the _type.container states.
       The _enumeration_set.scope removed (enumeration.mandatory used).
       In _type_array.dimension change _type.contents to List.
;
         3.6.7                    2006-08-30
;
       Change 'att' to 'sta' in the imports of _type.contents and _units.code.
       Replace states 'vector' and 'matrix' in _type.container with 'array'.
       In _type.purpose change 'model' to 'assigned'; 'observe' to 'observed';
       and 'measure' to 'measured'.
;
         3.6.8                    2006-08-31
;
       Remove the category TYPE_ARRAY and insert _type.dimension.
       Replace _description.compact with _description.common.
       Replace _description.abbreviated with _description.key_words.
;
         3.6.9                    2006-10-31
;
       Remove all attributes and categories referring to 'context'.
;
         3.6.10                   2006-11-09
;
       Replace _method.id with method.purpose.
       Redefine the DICTIONARY_VALID values.
;
         3.7.1                    2006-11-16
;
       Apply _definition.scope changes.
       Add _category.parent_join.
       Add _dictionary.xref_code.
       Add _enumeration_set.xref_dictionary.
       Remove all relational keys.
;
         3.7.2                    2006-12-05
;
       Rewording of description.text in DDL_ATTR and definition.namespace.
       Rewording of category_mandatory.item_id.
       Reworded descriptions of definition.class descriptions.
       Removed dictionary.filename.
       Corrected examples in type.dimension.
       Remove dictionary.parent_id and dictionary.parent_uri.
;
         3.7.3                    2006-12-21
;
       Default for _category.parent_join is now "No".
;
         3.7.4                    2007-02-06
;
       Change _category_key.item_id to _category_key.generic.
       Add _category_key.primitive.
;
         3.7.5                    2007-02-08
;
       Change the _type.purpose of _category_key.generic and .primitive
       to Identify.
;
         3.7.6                    2007-03-18
;
       Change the description for _name.linked_item_id.
;
         3.7.7                    2007-10-11
;
       Correct the _type.dimension assignments to [n[m]].
       Remove _type_array.dimension from _type.dimension definition.
;
         3.7.8                    2008-01-17
;
       Change 'Definition' to 'Evaluation' in import_list.id.
       Changed import.scope entries to leading uc character.
;
         3.7.9                    2008-02-12
;
       Change 'Itm' to 'Def' in import.scope.
;
         3.7.10                   2008-03-28
;
       Update the definition of _type.dimension.
;
         3.7.11                   2008-05-18
;
       Changed 2 type.contents values from "Implied" to "Inherited".
       Change import_list.id to be ((.....)).
;
         3.7.12                   2008-08-05
;
       Correct _type.dimension definition.
;
         3.7.13                   2011-01-27
;
       Change definition scope of Head category to "Dictionary".
       Remove all tabs and replace with blank string.
;
         3.7.14                   2011-03-25
;
       In the attribute import_list.id:
        Change _type.contents  Tuple(Code,Tag,Uri,Code,Code)
        To     _type.contents  Tuple(Code,Ctag,Uri,Code,Code)
       In the attribute import.block:
        Change _type.contents    Tag
        To     _type.contents    Ctag
       And change the case examples.
;
         3.8.1                    2011-06-07
;
       Remove the Tuple and Array enumerations from _type.container.
       Change category class enumeration from List to Loop; and change
       all invocations of _category.class in the definitions.
       Introduce nested save frames for expressing nested categories.
;
         3.8.2                    2011-06-21
;
       Reconfigure _dictionary_valid attributes into lists, and reset the
       attribute application criteria at the rear of the DDL dictionary.
;
         3.8.3                    2011-06-22
;
       Change IMPORT_LIST to IMPORT_TABLE. Change the IMPORT arguments to
       match this. Change the import_list.id invocations to import_table
       equivalents. Add _enumeration_set.table_tag.
;
         3.8.4                    2011-06-23
;
       Remove IMPORT_TABLE. Change the IMPORT to a set category.
       Insert an import.get attribute to replace import_table.id.
       Rename the DDL_ATTR category as ATTRIBUTES.
;
         3.8.5                    2011-06-27
;
       Change the _name.category_id value to reflect the parent category.
;
         3.8.6                    2011-06-29
;
       Change Reference in _type.purpose to Ref-key.
;
         3.8.7                    2011-06-30
;
       Change Reference in _definition.class to Ref-loop.
       Remove import from type.contents and insert enumeration_set list.
       Insert name.category_id into every category definition.
;
         3.8.8                    2011-07-28
;
       Add name.category_id and name.object_id to category definitions.
       Remove category.parent_id from category definitions.
       Remove definitions for category.parent_id and the CATEGORY_KEY
       and CATEGORY_MANDATORY definitions. Define category.key_id.
;
         3.8.9                    2011-08-15
;
       Add the state "Extend" to the type.purpose" attribute.
;
         3.9.1                    2011-12-08
;
       Add types "Array" and "Matrix" to type.container attribute definition.
       Add type "Su" to the type.purpose attribute definition.
;
         3.9.2                    2012-01-25
;
       For import.get change the key "fram" to "save".
;
         3.10.1                   2012-05-07
;
       Revamp the type.purpose states. Remove state "Limit".
       Add the new attribute type.source.
       Change dictionary.class "Attribute" to "Reference".
       Removed attribute enumeration_set.construct.
;
         3.10.2                   2012-10-16
;
       Correct enum states for type.contents and type.container.
;
         3.10.3                   2012-11-20
;
       Remove "Implied" as an enumeration state for type.contents.
;
         3.10.4                   2013-02-12
;
       Added missing loop statement to methods of dictionary_valid.application.
       Corrected the definition of the enumeration state 'Code' in
       type.contents.
;
         3.10.5                   2013-02-22
;
       Add state value to enum_set loop of import.get defn as the key.
;
         3.10.6                   2013-02-25
;
       Remove the quotes from Multiple string in type.container definition.
       Add 'Functions' to the enumeration states of definition.class.
;
         3.10.7                   2013-03-03
;
       Added type.contents enum state "Implied" for category key definitions.
;
         3.10.8                   2013-03-06
;
       Added various attributes to conform with ALIGN requirements.
;
         3.11.1                   2013-04-11
;
       Added type.source to all definitions.
       Change type.contents state "Table" to "Pairs".
;
         3.11.2                   2013-04-16
;
       Removed 'Measured' as a state for type.source.
;
         3.11.3                   2013-04-24
;
       Changed type.source 'Quantity' to 'Number' or 'Encode'.
       State 'Float' in type.contents removed.
;
         3.11.4                   2013-09-08
;
       Attribute _alias.deprecation_date added.
       Attribute _category.key_list      added.
       The attribute _category.key_list added to all Loop category defs.
;
         3.11.5                   2014-09-18
;
       Looped category _category_key replaces _category.key_list.
       Added _category_key.name and changed all occurrences of
       _category.key_list to _category_key.name.
       Changed _type.source and _type.purpose to Recommended. (JRH)
;
         3.11.6                   2015-01-27
;
       Replaced stub category names with full category names in
       _name.category_id and _name.object_id.
       Corrected all _category.key_name to _category_key.name. (JRH)
;
         3.11.7                   2015-01-27
;
       Converted to CIF2 format using automatic tool and post-editing for
       presentation (JRH).
;
         3.11.8                   2015-01-28
;
       Created _dictionary_valid.scope and corrected dREL method for
       _dictionary_valid.application.
;
         3.11.9                   2015-05-07
;
       Removed _enumerated.table_id and replaced with ByReference attributes
       _type.contents_referenced_id and _type.indices_referenced_id. Updated
       _type.contents and _type.purpose to describe the ByReference approach.
       Fixed _import.get dREL methods by moving individual table entries into
       a sub-category and adding reference and order attributes. (James Hester/
       John Bollinger)
;
         3.11.10                  2017-01-25
;
       Adjusted definition of _import_details.mode to remove references to
       save frames and add special 'Head' category treatment. Added
       _dictionary.formalism.
;
         3.11.11                  2017-06-10
;
       Added '_definition.replaced_by' to flag deprecated definitions.
;
         3.12.0                   2017-07-13
;
       Clarified character sets and syntax. Fixed incorrect use of Name in
       '_definition.replaced_by'.
;
         3.13.0                   2017-07-23
;
       Added _import_details.file_version.  Removed 'Filename' as a data type.
       Clarified use of URIs in dictionaries. (JRH)
;
         3.13.1                   2017-10-26
;
       Added 'Implied' container type to allow examples and defaults to adjust
       to the item being defined. Changed relevant attribute definitions. (JRH)
;
         3.14.0                   2019-10-08
;
       Updated the description of the _description_example.case data item.

       Updated the description of the 'Key' type purpose and changed the
       purpose of several data items in order to avoid conflicts with
       the new description.

       Replaced the _definition.replaced_by data item with a looped
       DEFINITION_REPLACED category.

       Updated the definition of the _import_details.mode data item.

       Changed the purpose of a dREL method in the definition of the
       _dictionary_valid.application data item from 'Definition' to
       'Evaluation'.

       Changed the content type of the _loop.level data item from
       'Index' to 'Integer'.

       Deprecated the 'Index' and 'Count' content types.
       Updated the description of the 'Loop' definition class. The new
       description allows the child data items to appear in a loop-list instead
       of strictly requiring it ('must' -> 'may').
;
         4.0.0                    2020-10-30
;
       Removed all xref datanames.
       Removed LOOP category.
       Removed complex dataname type (Multiple) and type specifications.
       Removed non-import use of save frames and ref-loops.
       Allow Arrays to include string types.
       Removed purpose "Extend".
       Removed CATEGORY category and category.key_id.
       Removed 'Index' and 'Count' content types.
;
         4.0.1                    2021-07-20
;
       Clarified use of 'SU' data items.

       Updated the _import_details.single_index data item description
       to explicitly state that the 'file' index can refer not only to
       URI, but also to URI reference values.

       Updated the definition of the 'Uri' content type to explicitly state
       that it allows URI-reference values. _alias.dictionary_uri is
       explicitly an absolute URI.

       Updated the DICTIONARY_VALID category description to explicitly state
       that the rules only apply to Reference and Instance dictionaries.

       Clarified the interpretation of the _dictionary_valid.option data item.

       Removed the default enumeration value of the _units.code data item.

       Added measurement units to the definition of the _import_details.order
       data item.

       Clarified use of DESCRIPTION_EXAMPLE category and _description.text.
;
         4.0.2                    2021-08-18
;
       Deprecated _dictionary_valid.application.

       Marked the DESCRIPTION_EXAMPLE category as prohibited in
       the 'Dictionary' scope.

       Updated the descriptions of the _type.dimension and _type.container
       data items to be more consistent with the rest of the dictionary.

       Unified the spelling of certain words.
;
         4.1.0                    2023-01-13
;
       Added new 'Word' content type.

       Removed _description.common from the list of attributes that
       are recommended in the 'Item' scope.

       Clarified use of if_dupl replacement when importing.

       Updated the descriptions of the _enumeration.default and
       _description_example.case data items to explicitly list
       all the constraints that they inherit from the defining item.

       Improved wording of "Implied" value descriptors.

       Updated the description of the _name.linked_item_id data item.

       Clarified that the "Range" content type can describe half-bounded
       intervals. Added several usage examples of the _enumeration.range
       attribute.

       Updated definition of "Integer" in _type.contents.

       Clarified the definition of the "Version" state in _type.contents
       by explicitly specifying that it adheres to the formal grammar
       provided in SemVer version 2.0.0.
;
         4.2.0                    2025-07-04
;
       # Please update the date above and describe the change below until
       # ready for the next release

       Added the "unspecified" enumeration value for the _units.code attribute.

       Added DICTIONARY_AUTHOR to allow details of dictionary authors to be
       recorded.

       Added _dictionary.doi to record the persistent Digital Object Identifier
       of a dictionary.

       Added _enumeration.def_index_ids and ENUMERATION_DEFAULTS to allow
       default values to be dependent on multiple keys. Deprecated the
       _enumeration.def_index_id attribute and the ENUMERATION_DEFAULT category.

       Added ENUMERATION_SOURCE and _enumeration_defaults.source_id to allow
       the source of default enumeration values to be recorded.

       Added 'Inherited' as an enumeration value to _type.contents.

       Updated the description of _type.source and _method.purpose attributes.

       Clarified the use of the 'SU' state of the _type.purpose attribute.

       Changed _description.text of _dictionary.namespace to say "trailing
       double colon '::' " in accordance with DDLm specs and other
       discussion in Volume G 2ed (bm).

       Some cosmetic changes (single quotes instead of double) to match
       IUCr house style and angle brackets around <yyyy>-<mm>-<dd> (bm).

       Updated the _enumeration_set.state attribute to inherit various
       properties from the defining data item.

       Explicitly specified that the _type.contents attribute value 'Implied'
       can only be applied in the DDLm Reference dictionary.

       Updated the description of the 'Symop' content type.

       Updated the definition of the _method.expression attribute.

       Updated definition of the _alias.deprecation_date attribute.
       Updated definition of the _alias.dictionary_uri attribute.
       Added the _alias.dictionary_version attribute.

       Added _definition.update to the list of attributes that are mandatory
       in the 'Category' scope.

       Clarified that empty range values that include neither the upper nor
       the lower bound are not allowed.
;
