GML files can contain object data (the objects) and configuration
data (their global properties). The
<gml> root element
can thus contain elements describing all the data objects defined
in GAMGI, from
<window>,
<layer>,
<light>,
to
<bond>,
<orbital>,
<text>, plus
the global
<gamgi> element.
As configuration data conceptually belongs to the gamgi object,
it is represented inside
<gamgi></gamgi> blocks.
These blocks can occur in any order and as many times as needed,
can contain elements describing the global properties of all the
GAMGI objects, from
<file>,
<window>,
<layer>, to
<orbital>,
<text>,
<help>. These elements in turn can occur in any order
and as many times as needed, but cannot contain other elements:
Everything outside
<gamgi></gamgi> blocks is
considered as object data. The elements describing data objects,
from
<window>,
<layer>,
<light>,
to
<bond>,
<orbital>,
<text>,
can occur in any order and as many times as needed, can contain
elements describing its child objects, in any order and as many
times as needed, to any nested level of depth.
When importing GML files, objects that belong to layers and appear
directly below
<gml>, in the hierarchy, are attributed to
the current layer. Layers that appear directly below
<gml>,
in the hierarchy, are attributed to the current window.
Good:
<gml>
<group>
<group/> a group can contain another group
</group>
</gml>
<gml>
<window/>
<layer/> layer belongs to current window, not the new window
<atom/> atom belongs to current layer, not the new layer
</gml>
<gml>
<gamgi>
<atom/> update atom configuration data
</gamgi>
</gml>
Bad:
<gml>
<gamgi>
<window>
</gamgi> last element in, must be first element out
</window>
</gml>
<gml>
<molecule>
<molecule/> a molecule cannot contain another molecule
</molecule>
</gml>
<gml>
<gamgi>
<layer>
<atom/> a layer configuration element cannot contain other objects
</layer>
</gamgi>
</gml>