### 11.1 Block Name Resolution ¶

Blocks may have a name, which is useful if you want to later refer to them (to align other blocks or to specify arrows). Several blocks may have the same name, but if you refer to them the reference must be unambiguous. Using a (full) block name twice is not good practice.

You can refer to a block using its full name, which is the dot-separated list of its parents and its name. So if block `C` is inside block `B`, which is inside block `A`, then the full name of `C` is `A.B.C`. (See the red block in the example below.)

You can also omit the common prefix of the place of reference and the block. For example, the black arrows in the above example are inside the blocks `A.B` and `A` and they refer to blocks `C`/`D` with the same prefixes, that is to blocks `A.B.C`/`A.B.D` and `A.C`/`A.D`, respectively.

Similar, the blue arrow, refers to blocks `B` and `B.D`, which have the full name `A.B` and `A.B.D`, respectively. Using the full name is not needed because we refer to them from within block `A`. In contrast, the green arrow must use the full name of block `A.D`, in order to avoid confusion with block `A.B.D`, which is within the same block as the green arrow.

In short, name resolution is local and I think fairly intuitive. If you do not give a block a name, all its content will have the same name prefix as their parent. In other words, one level of naming is skipped.

Note that the special block names `prev`, `next`, `first` and `last` cannot be given to a block. (See more on them later.) They always refer to a block within the same parent. Also names including dots cannot be assigned to blocks for now, to avoid introducing an extra level in the name hierarchy.