
.. index:: path, variable's relative path, variable's full path

.. _variablepath:

Full or relative path
=====================

To access a variable, it is necessary to know which family or subfamily it belongs to.

Let's create some variables to illustrate this point.

.. code-block:: yaml

    %YAML 1.2
    ---
    version: 1.1

    my_family:  # A family

      my_sub_family:  # A family inside an other family

        my_first_variable:  # My first variable

        my_second_variable:  # My second variable

      my_third_variable:  # My third variable

    my_fourth_variable:  # My forth variable
    ...

So we have three variables.

Here the full paths are:

- `my_family.my_sub_family.my_first_variable`
- `my_family.my_sub_family.my_second_variable`
- `my_family.my_third_variable`
- `my_fourth_variable`

But in calculation it's often better to use :term:`relative path`.

.. glossary::

   relative path

        In a calculation definition, a relative path defines the location of a variable relative to the family of the variable where the parameter is calculated.
        Instead of starting from the root, it uses references like `_. (current family)`, `__. (parent family)`, `___. (sub parent family)` and so on.

        Relative paths are shorter and portable across custom type.

Now we can define the :term:`relative path` from the `my_first_variable` variable:

- `_.my_second_variable`
- `__.my_third_variable`
- `___.my_fourth_variable`

From the `my_third_variable`:

- `_.my_sub_family.my_first_variable`
- `_.my_sub_family.my_second_variable`
- `__.my_fourth_variable`

Finally from the `my_fourth_variable`:

- `_.my_family.my_sub_family.my_first_variable`
- `_.my_family.my_sub_family.my_second_variable`
- `_.my_family.my_third_variable`

