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.
Data Object Block Diagrams
The block diagram below illustrates the data objects comprising the generic association shown on the space-time diagram above.
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.
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
@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
andending
relationships for eachassociation
as they can be queried from theparticipant
states that itconsists_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 ofassociation
and map it to a storage schema that includes theparticipant
states and theirrole
s. This would be a mapping that could be mapped back to a full HQDM schema if/when required. -
Sometimes the
beginning
orending
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 thebeginning
orending
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