Contains interfaces and classes to create an attribute hierarchy.

An attribute hierarchy is composed of base attributes (all data types present in programming languages) and user defined composite attributes (which have to be mapped to attribute hierarchies composed of base attributes).

Each attribute is a parameterized data type (pascal like notation):

type Attribute(Type) = record
    key: java.lang.String;
    value: Type;
end;
In the following, we will use the types Attribute(IntegerAttribute), Attribute(DoubleAttribute), Attribute(StringAttribute) and Attribute(CompositeAttribibute). We will also assume, that the type of an Attribute is available at runtime, as in the following example:
case type(a) of
  Attribute(IntegerAttribute):              Action for type Integer;
  Attribute(DoubleAttribute):               Action for type Double;
  Attribute(StringAttribute):               Action for type String;
  Attribute(CompositeAttribute(Attribute)): Action for type CompositeAttribute(Attribute);
end;

A path ".k1.k2.....kn" denotes all sequences of attributes a1,a2,...,an where

Examples of paths are ".id", ".graph.label", ".node.label" and ".node.graphics". A path describes a class of sequences of attributes which can start anywhere in the attribute hierarchy. We can also define paths that start at a specific attribute:

Let "k1.k2.....kn", n >= 1 be a path and a be an attribute. Then "a.k1.k2.....kn" denotes the path starting at a, that is all sequences of attributes a1,a2,...,an where

Finally, we omit the leading point on a path iff it starts at the root attribute.

A path starting at the root is defined as follows: Let k1,k2,...,kn, n >= 1 be keys. "k1.k2.....kn" denotes the path "R.k1.k2.....kn" where R is the root object of the attribute hierarchy.

Note: these notations are similar to the one found in the graphlet handbook.