Abstract examples

The following examples don’t use real _obsinfo_ structures, but their simplicity may help you to understand the basic concepts.

Priority levels

base:
    param1: 'A'
    param2: 'A'
    param3: 'A'
    param4: 'A'
    param5: 'A'
    configuration_default: 'CONFIGA'
    configuration_definitions:
        'CONFIGA':
            configuration-description: "The standard configuration"
        'CONFIGB':
            configuration-description: "The B definition"
            param1: 'B'
            param2: 'B'
configuration: "CONFIGB"
modifications:
    param2: 'C'
    param3: 'C'

will return :

param1: 'B'
param2: 'C'
param3: 'C'
param4: 'A'
param5: 'A'

because the configuration CONFIGB overrides the base values of param1 and param2, then the modifications param2 and param3 override the result.

Only specified sub-elements are changed

base:
    param1:
        sub-param1: 'A'
        sub-param2: 'A'
modifications:
    param1: {sub_param1: 'C'}

will return:

param1:
    sub-param1: 'C'
    sub-param2: 'A'

and so on for deeper levels.

Multi-level priorities

Modifications > configuration > base priority

base:
    paramA1:
        base:
            paramB1: 'A'
            paramB2: 'A'
            configuration_default: 'CONFIGX'
            configuration_definitions:
                'CONFIGX':
                    configuration-description: "The standard configuration"
                'CONFIGY':
                    configuration-description: "The Y definition"
                    paramB1: 'D'
                    paramB2: 'D'
                'CONFIGZ':
                    configuration-description: "The Z definition"
                    paramB1: 'E'
                    paramB2: 'E'
        configuration: "CONFIGY"
        modifications:
            paramB2: 'C'
    paramA2: 'A'
    configuration_default: 'CONFIGA'
    configuration_definitions:
        'CONFIGA':
            configuration-description: "The standard configuration"
        'CONFIGB':
            configuration-description: "The B definition"
            paramA1:
                paramB1: 'B'
            paramA2: 'B'
configuration: "CONFIGB"
modifications:
    paramA1:
        configuration: 'CONFIGZ'
        paramB2: 'F'
    paramA2: 'C'

will return :

paramA1:
    paramB1: 'E'
    paramB2: 'F'
paramA2: 'C'

because the top-level configuration of paramA1 (“CONFIGZ”) overrides the lower level configuration (‘CONFIGY’)a nd in turn overriden by the modification of paramB2 at the same level. This looks complicated, but it is much clearer in a typical information file, since each base definition is in a seperate file.:

base:  {$ref: "higher_level_base.yaml#higher_level_base"}
configuration: "CONFIGB"
modifications:
    paramA1:
        configuration: 'CONFIGZ'
        paramB2: 'F'
    paramA2: 'C'

and so we immediately see what is changed from the values in the base specification files

stage_modifications > channel_modifications > modifications

As complicated as it gets

Here should be multi-level example with channel-modifications and response-modifications.

Point out that this is much more complicated than anyone will see because the lower levels are in separate files.