Skip to content

Eagle Lunar Lander 'Association' with its crew

Example

For periods of time the Eagle lander module was occupied by astronauts that were from the Apollo-11 crew. Of the three Apollo-11 crew, two individuals, Neil Armstrong (Mission Commander) and Buzz Aldrin (Lunar Module Pilot), made the visit to the lunar surface in the Eagle.

What information requirement does this meet?

Operational questions like:

  • Who is/was in a particular Lunar Lander while it was in descent?

  • When did any of the occupants of a Lunar Lander leave/enter it?

  • What was the duration of the crew's descent to the Lunar Surface?

  • What Lunar Lander(s) did Buzz Aldrin crew?

  • ...

The association pattern can be crucial in addressing these sorts of questions. These sorts of questions can be common for associations in any setting.(ADD HINTS)

This association pattern involves one functional_object (in this example, the LM-5 Lander called Eagle) involved in being occupied by one or more crew member for a period of time. The crew are participant in the association as being occupiers of the Eagle. Therefore, this association consists_of these participants. The role of the crew participant(s) is different from the role of the Eagle in this association.

Why don't we use some concept of the crew being 'in' the Eagle

When we speak about the crew who were in the Eagle as it was landing we are exchanging some semantic information about how some people were situated 'in' the LM-5 Lander. However, what is actually going on? The crew are not part of the functional_object that is the Eagle itself. While there is a volume of air at a temperature, pressure and oxygen content to sustain the crew these are merely due to the arrangement of the parts of the Eagle. Therefore the minimum we can say is that the crew have an association with the Eagle for a period of time, and that association is of a specific kind that maps to our short-hand term "in".

If we want to support the implementation of a short-hand for what is going on we could refer to this kind_of_association as being represented by an "in" name. This is a naming convention and is beyond the scope of this example. A related strategy may be to reify the association as an 'in' relationship. This will be the subject of another page [TBD] but understanding the underlying association pattern is necessary before making implementation compromises like this.

Types-Supertype Hierarchy

The Entity Type association is a subtype of individual and state_of_association. An association can be a member_of_kind one or more kind_of_association. An association consists_of two or more participant states, each of which will be a member_of_kind of one or more role. The association and the participant states that it consists_of all share the same period of time (the same temporal extent).

graph TD
  abstract_object(abstract_object)-->|supertype_of|Class(Class);
  Class(Class)-->|supertype_of|class_of_spatio_temporal_extent(class_of_spatio <br> _temporal_extent);
  thing(thing)-->|supertype_of|spatio_temporal_extent(spatio_temporal <br> _extent);
  state_of_physical_object(state_of_physical <br> _object)-->|supertype_of|state_of_ordinary_physical_object(state_of_ordinary <br> _physical_object);
  state_of_physical_object(state_of_physical <br> _object)-->|supertype_of|state_of_biological_object(state_of_biological <br> _object);
  class_of_spatio_temporal_extent(class_of_spatio <br> _temporal_extent)-->|supertype_of|class_of_state(class_of_state);
  spatio_temporal_extent(spatio_temporal <br> _extent)-->|supertype_of|state(state);
  state_of_ordinary_physical_object(state_of_ordinary <br> _physical_object)-->|supertype_of|state_of_ordinary_biological_object(state_of_ordinary <br> _biological_object);
  state_of_biological_object(state_of_biological <br> _object)-->|supertype_of|state_of_ordinary_biological_object(state_of_ordinary <br> _biological_object);
  state_of_ordinary_physical_object(state_of_ordinary <br> _physical_object)-->|supertype_of|state_of_system(state_of_system);
  class_of_state(class_of_state)-->|supertype_of|class_of_state_of_association(class_of_state_of <br> _association);
  class_of_state(class_of_state)-->|supertype_of|class_of_individual(class_of_individual);
  class_of_state(class_of_state)-->|supertype_of|class_of_state_of_physical_object(class_of_state_of <br> _physical_object);
  state(state)-->|supertype_of|state_of_association(state_of_association);
  state(state)-->|supertype_of|individual(individual);
  state(state)-->|supertype_of|state_of_physical_object(state_of_physical <br> _object);
  state_of_ordinary_biological_object(state_of_ordinary <br> _biological_object)-->|supertype_of|state_of_biological_system(state_of_biological <br> _system);
  state_of_system(state_of_system)-->|supertype_of|state_of_biological_system(state_of_biological <br> _system);
  state_of_system(state_of_system)-->|supertype_of|state_of_party(state_of_party);
  state(state)-->|supertype_of|state_of_intentionally_constructed_object(state_of_intentionally <br> _constructed_object);
  class_of_state_of_association(class_of_state_of <br> _association)-->|supertype_of|class_of_association(class_of_association);
  class_of_individual(class_of_individual)-->|supertype_of|class_of_association(class_of_association);
  class_of_state_of_physical_object(class_of_state_of <br> _physical_object)-->|supertype_of|class_of_participant(class_of_participant);
  state_of_association(state_of_association)-->|supertype_of|association(association);
  individual(individual)-->|supertype_of|association(association);
  state_of_physical_object(state_of_physical <br> _object)-->|supertype_of|participant(participant);
  state_of_biological_system(state_of_biological <br> _system)-->|supertype_of|state_of_person(state_of_person);
  state_of_party(state_of_party)-->|supertype_of|state_of_person(state_of_person);
  state_of_physical_object(state_of_physical <br> _object)-->|supertype_of|state_of_functional_object(state_of_functional <br> _object);
  state_of_intentionally_constructed_object(state_of_intentionally <br> _constructed_object)-->|supertype_of|state_of_functional_object(state_of_functional <br> _object);
  class_of_association(class_of_association)-->|supertype_of|kind_of_association(kind_of_association);
  class_of_participant(class_of_participant)-->|supertype_of|role(role);
  style association stroke-width:4px;
  style participant stroke-width:4px;
  style state_of_person stroke-width:4px;
  style state_of_functional_object stroke-width:4px;
  style kind_of_association stroke-width:4px;
  style role stroke-width:4px;
  thing-->|supertype_of|abstract_object;

Spacetime Diagram

The following diagram illustrates the association of two states, each state being a temporal_part_of an individual X and Y respectively. The constituent states in this association all share the same temporal bounds. This example will be implemented below to illustrate the general entity-relationship and data patterns resulting from it.

An association between *Eagle* and its crew during descent

Data Object Block Diagrams

The block diagram below illustrates the data objects comprising the generic association shown on the space-time diagram above.

Data object block diagram of association between a state of X and a state of Y

Full data object block diagram

The diagram below shows additional data objects required to populate the generic association pattern in full. This illustrates that there is only ever a need to represent any concrete state (or HQDM class) once - providing these data objects can be accessed and shared.

Full association between a state of X and a state of Y

Implementation

The data objects shown in the diagram above have been implemented using MagmaCore in AssociationExample.java. The filtered node-edge graphs below correspond to the data objects and their relationships with each other to implement the association pattern. The Example_association_between_X_and_Y and the participant objects named Example_participant_state_of_X and Example_participant_state_of_Y are shown as the bold nodes in the first node-edge graph.

graph LR
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"member_of_kind"|0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"consists_of_participant"|81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"consists_of_participant"|a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"data_EntityName"|Association_of_Buzz_in_LM5_during_descent["Association_of_Buzz <br> _in_LM5_during_descent"];
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"type"|association(["hqdm <br> association"]);
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"member_of_kind"|6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"participant_in"|3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"temporal_part_of"|2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"member_of"|0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"data_EntityName"|Example_participant_state_of_Buzz_Aldrin_in_LM5["Example_participant <br> _state_of_Buzz_Aldrin_in_LM5"];
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"type"|participant(["hqdm <br> participant"]);
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"member_of_kind"|d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"part_of_possible_world"|aa4f2ebf-e408-4702-be85-bc7dc44fb60e(("patterns <br> aa4f2ebf-e408-4702 <br> -be85-bc7dc44fb60e"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"participant_in"|3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"temporal_part_of"|a5a6ba71-b2bb-4ed5-b079-e7cab5dac94f(("patterns <br> a5a6ba71-b2bb-4ed5 <br> -b079-e7cab5dac94f"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"member_of"|4ff87a8e-5670-4a18-8cf1-514489c3861a(("patterns-rdl <br> 4ff87a8e-5670-4a18 <br> -8cf1-514489c3861a"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"data_EntityName"|Example_participant_state_of_Eagle_Lunar_Lander_in_descent["Example_participant <br> _state_of_Eagle_Lunar_Lander_in_descent"];
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"type"|participant(["hqdm <br> participant"]);
Extended node-edge graph

An extended node-edge graph showing some of the additional dependencies is shown next.

graph LR
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"member_of_kind"|0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"consists_of_participant"|81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"consists_of_participant"|a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"data_EntityName"|Association_of_Buzz_in_LM5_during_descent["Association_of_Buzz <br> _in_LM5_during_descent"];
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"))--->|"type"|association(["hqdm <br> association"]);
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"member_of_kind"|6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"participant_in"|3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"temporal_part_of"|2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"member_of"|0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"data_EntityName"|Example_participant_state_of_Buzz_Aldrin_in_LM5["Example_participant <br> _state_of_Buzz_Aldrin_in_LM5"];
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  81a9d319-f37d-4db2-aed3-cab3956564e2(("<b> patterns <br> 81a9d319-f37d-4db2 <br> -aed3-cab3956564e2"))--->|"type"|participant(["hqdm <br> participant"]);
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"beginning"|60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"member_of_kind"|d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"part_of_possible_world"|aa4f2ebf-e408-4702-be85-bc7dc44fb60e(("patterns <br> aa4f2ebf-e408-4702 <br> -be85-bc7dc44fb60e"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"participant_in"|3fef33e3-86c7-4d51-803f-36437e4bf6ac(("<b> patterns <br> 3fef33e3-86c7-4d51 <br> -803f-36437e4bf6ac"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"temporal_part_of"|a5a6ba71-b2bb-4ed5-b079-e7cab5dac94f(("patterns <br> a5a6ba71-b2bb-4ed5 <br> -b079-e7cab5dac94f"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"member_of"|4ff87a8e-5670-4a18-8cf1-514489c3861a(("patterns-rdl <br> 4ff87a8e-5670-4a18 <br> -8cf1-514489c3861a"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"data_EntityName"|Example_participant_state_of_Eagle_Lunar_Lander_in_descent["Example_participant <br> _state_of_Eagle_Lunar_Lander_in_descent"];
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"ending"|9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"));
  a42cb13b-fc4d-4334-a2bb-31b91df7a3bc(("<b> patterns <br> a42cb13b-fc4d-4334 <br> -a2bb-31b91df7a3bc"))--->|"type"|participant(["hqdm <br> participant"]);
  0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"))--->|"data_EntityName"|ClassOfStateOfPerson["ClassOfStateOfPerson"];
  0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"))--->|"part__of_by_class"|407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b(("patterns-rdl <br> 407f51e4-0bbd-47b5 <br> -b2d0-0e62fbed2a5b"));
  0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"))--->|"type"|class_of_state_of_person(["hqdm <br> class_of_state_of_ <br> person"]);
  407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b(("patterns-rdl <br> 407f51e4-0bbd-47b5 <br> -b2d0-0e62fbed2a5b"))--->|"data_EntityName"|KindOfPerson["KindOfPerson"];
  407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b(("patterns-rdl <br> 407f51e4-0bbd-47b5 <br> -b2d0-0e62fbed2a5b"))--->|"type"|kind_of_person(["hqdm <br> kind_of_person"]);
  2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"))--->|"member_of_kind"|407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b(("patterns-rdl <br> 407f51e4-0bbd-47b5 <br> -b2d0-0e62fbed2a5b"));
  2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"))--->|"data_EntityName"|Buzz_Aldrin["Buzz_Aldrin"];
  2f78193a-ff8a-4203-92cd-a31a56ea18b6(("patterns <br> 2f78193a-ff8a-4203 <br> -92cd-a31a56ea18b6"))--->|"type"|person(["hqdm <br> person"]);
  60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"))--->|"member_of"|585c2993-cb10-49de-b336-41d5da2718dd(("patterns-rdl <br> 585c2993-cb10-49de <br> -b336-41d5da2718dd"));
  60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"))--->|"data_EntityName"|1969-07-20T20:12:52["1969-07-20T20:12:52"];
  60dfc6df-a05b-47f9-b027-dc65a1deb0e7(("patterns <br> 60dfc6df-a05b-47f9 <br> -b027-dc65a1deb0e7"))--->|"type"|point_in_time(["hqdm <br> point_in_time"]);
  9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"))--->|"part_of_possible_world"|bb4dcf61-3ea6-48fa-820e-4eb739ae6671(("patterns <br> bb4dcf61-3ea6-48fa <br> -820e-4eb739ae6671"));
  9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"))--->|"member_of"|585c2993-cb10-49de-b336-41d5da2718dd(("patterns-rdl <br> 585c2993-cb10-49de <br> -b336-41d5da2718dd"));
  9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"))--->|"data_EntityName"|1969-07-21T02:51:16["1969-07-21T02:51:16"];
  9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f(("patterns <br> 9b22ebc1-cbe1-4601 <br> -88f5-cd7f53aaa12f"))--->|"type"|point_in_time(["hqdm <br> point_in_time"]);
  0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"))--->|"consists_of_by_class"|d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"));
  0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"))--->|"consists_of_by_class"|6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"));
  0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"))--->|"data_EntityName"|KindOfAssociation__CrewInLunarLanderKindOfAssociation["KindOfAssociation <br> __CrewInLunarLanderKindOfAssociation"];
  0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"))--->|"type"|kind_of_association(["hqdm <br> kind_of_associatio <br> n"]);
  6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"))--->|"has_superclass"|0302247a-f8ab-409f-9634-ce3e99b6f00c(("patterns-rdl <br> 0302247a-f8ab-409f <br> -9634-ce3e99b6f00c"));
  6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"))--->|"data_EntityName"|RoleOfPersonAsOccupierOfLunarLander["RoleOfPersonAsO <br> ccupierOfLunarLander"];
  6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"))--->|"part_of_by_class_"|0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"));
  6340b207-0d9d-4b77-b589-6dc2fef9021b(("patterns-rdl <br> 6340b207-0d9d-4b77 <br> -b589-6dc2fef9021b"))--->|"type"|role(["hqdm <br> role"]);
  d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"))--->|"has_superclass"|e42236eb-5602-4897-a2e3-a373944e3de9(("patterns-rdl <br> e42236eb-5602-4897 <br> -a2e3-a373944e3de9"));
  d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"))--->|"data_EntityName"|RoleOfLunarLanderAsOccupiedByCrew["RoleOfLunarLand <br> erAsOccupiedByCrew"];
  d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"))--->|"part_of_by_class_"|0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0(("patterns-rdl <br> 0c0fb20c-1fb7-4cf9 <br> -9d33-05f26ebc67b0"));
  d0a167f1-e47f-4322-b89b-f0f81dd6851e(("patterns-rdl <br> d0a167f1-e47f-4322 <br> -b89b-f0f81dd6851e"))--->|"type"|role(["hqdm <br> role"]);

These examples of association also build on the individual examples data object examples, showing how data can be added to existing data that has been consistently generated using HQDM (with MagmaCore, in this case). The TURTLE dataset showing the data used to generate these node-edge graphs is shown in the tab below.

TURTLE
Association objects example in TURTLE
@prefix diag:         <https://apollo-protocol.github.io/ns/2023/diagram-editor/diagram#> .
@prefix hqdm:         <https://hqdmtop.github.io/hqdm#> .
@prefix patterns:     <https://github.com/ClimbingAl/code-for-hqdm-patterns/patterns#> .
@prefix patterns-rdl: <https://github.com/ClimbingAl/code-for-hqdm-patterns/patterns-rdl#> .

patterns:9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f
        a                            hqdm:point_in_time ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.856691681Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "1969-07-21T02:51:16" ;
        hqdm:member_of               patterns-rdl:585c2993-cb10-49de-b336-41d5da2718dd ;
        hqdm:part_of_possible_world  patterns:bb4dcf61-3ea6-48fa-820e-4eb739ae6671 .

patterns-rdl:407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b
        a                            hqdm:kind_of_person ;
        patterns-rdl:comment         "Kind_of_person_as_a_referenceable_data_object." ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.815914773Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "KindOfPerson" .

patterns:a42cb13b-fc4d-4334-a2bb-31b91df7a3bc
        a                            hqdm:participant ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.868134259Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:beginning               patterns:60dfc6df-a05b-47f9-b027-dc65a1deb0e7 ;
        hqdm:data_EntityName         "Example_participant_state_of_Eagle_Lunar_Lander_in_descent" ;
        hqdm:ending                  patterns:9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f ;
        hqdm:member_of               patterns-rdl:4ff87a8e-5670-4a18-8cf1-514489c3861a ;
        hqdm:member_of_kind          patterns-rdl:d0a167f1-e47f-4322-b89b-f0f81dd6851e ;
        hqdm:part_of_possible_world  patterns:aa4f2ebf-e408-4702-be85-bc7dc44fb60e ;
        hqdm:participant_in          patterns:3fef33e3-86c7-4d51-803f-36437e4bf6ac ;
        hqdm:temporal_part_of        patterns:a5a6ba71-b2bb-4ed5-b079-e7cab5dac94f .

patterns-rdl:d0a167f1-e47f-4322-b89b-f0f81dd6851e
        a                            hqdm:role ;
        patterns-rdl:comment         "Role_of_Lunar_Lander_Module_in_association_as_occupied_by_its_human_crew." ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.836141380Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "RoleOfLunarLanderAsOccupiedByCrew" ;
        hqdm:has_superclass          patterns-rdl:e42236eb-5602-4897-a2e3-a373944e3de9 ;
        hqdm:part_of_by_class_       patterns-rdl:0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0 .

patterns:3fef33e3-86c7-4d51-803f-36437e4bf6ac
        a                             hqdm:association ;
        patterns-rdl:record_created   "2024-01-20T19:00:12.901827404Z" ;
        patterns-rdl:record_creator   "HqdmPatternProject_User1" ;
        hqdm:beginning                patterns:60dfc6df-a05b-47f9-b027-dc65a1deb0e7 ;
        hqdm:consists_of_participant  patterns:a42cb13b-fc4d-4334-a2bb-31b91df7a3bc , patterns:81a9d319-f37d-4db2-aed3-cab3956564e2 ;
        hqdm:data_EntityName          "Association_of_Buzz_in_LM5_during_descent" ;
        hqdm:ending                   patterns:9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f ;
        hqdm:member_of_kind           patterns-rdl:0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0 ;
        hqdm:part_of_possible_world   patterns:bb4dcf61-3ea6-48fa-820e-4eb739ae6671 .

patterns:60dfc6df-a05b-47f9-b027-dc65a1deb0e7
        a                            hqdm:point_in_time ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.846695875Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "1969-07-20T20:12:52" ;
        hqdm:member_of               patterns-rdl:585c2993-cb10-49de-b336-41d5da2718dd ;
        hqdm:part_of_possible_world  patterns:bb4dcf61-3ea6-48fa-820e-4eb739ae6671 .

patterns-rdl:0302247a-f8ab-409f-9634-ce3e99b6f00c
        a                            hqdm:class_of_state_of_person ;
        patterns-rdl:comment         "Class_of_state_of_person_as_a_referenceable_data_object." ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.817089851Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "ClassOfStateOfPerson" ;
        hqdm:part__of_by_class       patterns-rdl:407f51e4-0bbd-47b5-b2d0-0e62fbed2a5b .

patterns-rdl:6340b207-0d9d-4b77-b589-6dc2fef9021b
        a                            hqdm:role ;
        patterns-rdl:comment         "Role_of_Person_as_crew_in_association_as_occupier_of_Lunar_Lander_Module." ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.846243684Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:data_EntityName         "RoleOfPersonAsOccupierOfLunarLander" ;
        hqdm:has_superclass          patterns-rdl:0302247a-f8ab-409f-9634-ce3e99b6f00c ;
        hqdm:part_of_by_class_       patterns-rdl:0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0 .

patterns-rdl:0c0fb20c-1fb7-4cf9-9d33-05f26ebc67b0
        a                            hqdm:kind_of_association ;
        patterns-rdl:comment         "Kind_of_association_for_human_crew_in_a_particular_Lunar_Lander_Module." ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.836046882Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:consists_of_by_class    patterns-rdl:d0a167f1-e47f-4322-b89b-f0f81dd6851e , patterns-rdl:6340b207-0d9d-4b77-b589-6dc2fef9021b ;
        hqdm:data_EntityName         "KindOfAssociation__CrewInLunarLanderKindOfAssociation" .

patterns:81a9d319-f37d-4db2-aed3-cab3956564e2
        a                            hqdm:participant ;
        patterns-rdl:record_created  "2024-01-20T19:00:12.901663107Z" ;
        patterns-rdl:record_creator  "HqdmPatternProject_User1" ;
        hqdm:beginning               patterns:60dfc6df-a05b-47f9-b027-dc65a1deb0e7 ;
        hqdm:data_EntityName         "Example_participant_state_of_Buzz_Aldrin_in_LM5" ;
        hqdm:ending                  patterns:9b22ebc1-cbe1-4601-88f5-cd7f53aaa12f ;
        hqdm:member_of               patterns-rdl:0302247a-f8ab-409f-9634-ce3e99b6f00c ;
        hqdm:member_of_kind          patterns-rdl:6340b207-0d9d-4b77-b589-6dc2fef9021b ;
        hqdm:part_of_possible_world  patterns:bb4dcf61-3ea6-48fa-820e-4eb739ae6671 ;
        hqdm:participant_in          patterns:3fef33e3-86c7-4d51-803f-36437e4bf6ac ;
        hqdm:temporal_part_of        patterns:2f78193a-ff8a-4203-92cd-a31a56ea18b6 .
Strategies for implementation of this association pattern

While HQDM is parsimonious with its entities and relationships there are some implementation choices that may make implementation easier depending on the application, its architecture and data storage facilities. Here are some suggestions:

  • Don't store the beginning and ending relationships for each association as they can be queried from the participant states that it consists_of.

  • If lots of a particular association sub-type need to be created and the set membership of each is the same, consider creating a subtype of association and map it to a storage schema that includes the participant states and their roles. This would be a mapping that could be mapped back to a full HQDM schema if/when required.

  • Sometimes the beginning or ending of an association isn't completely known (for example, it may still be in-place and the possible ending may be in the future). In this case only store the beginning or ending that is known (as long as one of them is known).

References

HQDM book references: 11.8, 17.13, 17.15, 17.16

Entity Types: association, participant

MagmaCore (Java) reference: association, participant

Source code for this example is available here