A :term:`structure file` is a YAML file whose structure is described in this documentation page.
A structure file contains a set of variables, usable in your application, for example in a template
to generate configuration files.
:term:`Families <family>` and :term:`variables <variable>` can be defined in several structure files. These structure files are then aggregated.
Separation of structures into namespaces
----------------------------------------
A namespace is a way to organize and group related variables under a unique name.
It:
- to avoid naming conflicts
- permet logical grouping: related variables can be grouped together
- scope control: namespaces limit the visibility of variable to the namespace itself
By default there is no namespace.
The default namespace
~~~~~~~~~~~~~~~~~~~~~
The families and variables contained in these structure files are ordered, by default, in the `rougail` namespace. It is possible to change the name of this namespace with the :term:`variable namespace <variable_namespace>` parameter of the :doc:`configuration <configuration>`.
This namespace (the default namespace) is a bit special, it can access variables in another namespace.
The extra structure files
~~~~~~~~~~~~~~~~~~~~~~~~~~~
An extra is a different namespace. The idea is to be able to classify the variables by theme.
Extra namespaces must be declared :doc:`when configuring Rougail <configuration>`.
In this namespace we cannot access variables from another `extra` namespace.
On the other hand, it is possible to access the variable of the default namespace.
A DSL stands for **Domain-Specific Language**, it is a programming or markup language designed for a specific application domain.
Unlike general-purpose languages (like Python or Java), DSLs are optimized for a narrow set of problems, offering concise syntax and specialized features tailored to their domain.