How to use a MultidimensionalObject

19 March 2011, 1 Feb. 2015


In ISO 15926-5 you can find two rather esoteric entity types, the ClassOfMultidimensionalObject and the MultidimensionalObject. In this topic I'll try to give an explanation of what they are and how to use them.

For Relationship Part 2 gives the note: Only classes of binary relationship are supported. More complex objects can be supported using Multidimensional Object and ClassOfMultidimensionalObject.

For MultidimensionalObject gives the note: A MultidimensionalObject is an AbstractObject that is an ordered list of Thing.

You can model an n-ary relationship with a MultidimensionalObject. That doesn't mean that all multidimensional objects are n-ary relationships, but "ordered lists".


Let's first look at the diagram:

Let us first focus on the class, attribute by attribute.

"roles" attribute

The rdf:object of this attribute is a set of instances of RoleAndDomain that indicate what the role actually is and what subtype of Thing is the object. If the multidimensional object is the input in a function (so a ClassOfFunctional Mapping), then each role is the same as its parameter name in that function.

"cardinalities" attribute

If any of the Roles could exist 0, 1, or more times for an instance of MultidimensionalObject, then that shall be expressed by a list of instances of Cardinality. If one or more such cardinalities apply, all cardinalities shall be defined (see an example here).


If a Role is optional, fill in TRUE, if mandatory fill in FALSE. For this attribute always a full list of these Booleans shall be given (which is a nuisance). This is a candidate for correction in any next version of Part 2.

"parameters" attribute and "parameter_position" attribute

IMHO these attributes are meaningless and should not have been here. These are parameters in some function that actually is defined for each instance of ClassOfFunctionalMapping (see diagram below). Ignore them, they are 'optional' anyway.


Part 2 gives an example in its Figure 165.


The diagram for that is:



Please note that the lists ( L[1:?] ) have been replaced with separate attributes. The 'optional_element' attribute is never used by us, but the attribute is not optional, which, as said, is a nuisance.

In case the function is actually used, the numerical values will have to be fetched, thereby observing that the proper instances of Scale are being taken into account. Note that this is so, because an instance of PRESSURE can be quantified against more than one scale. Such instance is, to paraphrase Matthew's expression for an instance of TEMPERATURE as being "a degree of hotness" that still needs quantification against one or more applicable scales, a degree of "pressureness".

The above diagram looks in template format as follows:

Another example

The 'signature' of one of the 'lowered' (formerly: 'shorthand') templates, the template IndividualHasPropertyWithValue is:

    1 hasPossessor PossibleIndividual

    2 hasPropertyType ClassOfProperty

    3 valPropertyValue ExpressReal

    4 hasScale Scale

We see here four instances of RoleAndDomain:

  1. the instance of Role "hasPossessor" and the domain "PossibleIndividual"
  2. the instance of Role "hasPropertyType" and the domain "ClassOfProperty"
  3. the instance of Role "hasPropertyValue" and the domain "ExpressReal"
  4. the instance of Role "hasScale" and the domain "Scale"

This is covered by the "roles"attribute.


There are, as can been seen on the diagram above, five subtypes of MultidimensionalObject, that will be dealt with in separate topics (later):