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
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
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.