6. Structure

Often the possibility to identify items by their unique IDs simply is not enough to keep an overview over all the items in a library. Imagine the prospect of having to deal with configuration, resource and executable files all packed together in one scope. To controll this mess other more abstract ways of structuring items are necessary.

It is crucial to the concept of ARX to allow items to be structured. It allows for better overview and better management of th items. This is why you are given the possibility to relate items to one another.

6.1. Relations

A relation basically is a container for references to items. As you should know there is only one reliable way to uniquely refer to an item: the unique ID. So in the end relations are only containers for unique item IDs. It is impotant to note that relations are not to be thought of as sets. It is absolutely possible to have the same unique ID in the relation more than once.

Additionally every relation has a name so that you can refer to them. The names of relations are free to choose. In fact the name of a relation is only restricted by the possibility to encode the name in a std::string class.

Also note that relations offer no guarantees about the order of the contained items.

6.2. Structure to the items

With this concept of relations in mind you can now begin to think of items as being comtainers for relations. Every item can host an arbitrary amount of uniquely named relations each containing an arbitrary amount of not necessarily unique items' unique IDs. In that way you can structure your libraries in very complex ways if you want.

It is important to note that relations have near to no meaning inside of any ARX part. There is one difference namely the relation "reference".