Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add gUFO section of page for intervals of existence #148

Merged
merged 9 commits into from
Jul 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions examples/illustrations/existence_intervals/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,105 @@ Some of the examples in the OWL-TIME specification include demonstrations of `ti
* [5.4, "iCalendar"](https://www.w3.org/TR/owl-time/#iCal) instantiates the endurant "Abraham Lincoln" (node `_:TE-2`).
* [5.6, "A Use Case for Scheduling"](https://www.w3.org/TR/owl-time/#scheduling) instantiates perdurants some teleconference and some meeting (nodes `ex:telecon` and `ex:meeting`, respectively).
* [5.7, "Alignment of PROV-O with OWL-Time"](https://www.w3.org/TR/owl-time/#time-prov) states that `prov:Activity` and `prov:InstantaneousEvent` can be subclasses of `time:TemporalEntity` and `time:Instant`, respectively.


## gUFO

(gUFO version: [1.0.0](https://github.com/nemo-ufes/gufo/releases/tag/v1.0.0).)

gUFO's topmost class that describes an object that exists in a period of time is "Concrete Individual" (`gufo:ConcreteIndividual`), defined as the disjoint union of "Endurants," "Events," and "Situations."

* `gufo:Endurant` corresponds with UCO Issue 535's "Endurant".
* `gufo:Event` corresponds with UCO Issue 535's "Perdurant".
* `gufo:Situation` is mostly out of scope of this discussion, though the interested can review a footnote about temporary `@type` applicability[^1].

Concrete individuals have first and last instants in which they exist. These instants are represented as `time:Instant` objects or as datatype literals (typed `xsd:date` or `xsd:dateTimeStamp`---and, pertinent to UCO, not `xsd:dateTime`). Two properties, "has begin point" and "has end point," assign the first and last instants that any concrete individual exists as objects. The properties have range `time:Instant`, inheriting the vocabulary and entailing the structures of OWL-Time as described above.
None of the three subclasses of `gufo:ConcreteIndividual` specialize restrictions on those existence-bounding properties. Hence, without loss of generality, we can review a `gufo:Endurant` and see the same time-related applicability for `gufo:Event`.

This is an endurant (more specifically, a `gufo:Object`) with literal-valued instants describing the creation and termination timestamps TS0 and TS1:

```json
[
{
"@id": "kb:Object-bee97e78-8e5e-4ffe-9c2b-28e960f84bbc",
"@type": "gufo:Object",
"rdfs:label": "T",
"rdfs:comment": "A thing with a time-bounded existence.",
"gufo:hasBeginPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2020-01-02T03:04:05.6789Z"
},
"gufo:hasEndPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2021-02-03T04:05:06.7890Z"
}
}
]
```

plbt5 marked this conversation as resolved.
Show resolved Hide resolved
The literal-valued timestamps can also use `gufo:hasBeginPointInXSDDate` when only `xsd:date` is to be used.

This is the same endurant with reified instants housing the beginning and end:

```json
[
{
"@id": "kb:Object-bee97e78-8e5e-4ffe-9c2b-28e960f84bbc",
"@type": "gufo:Object",
"rdfs:label": "T",
ajnelson-nist marked this conversation as resolved.
Show resolved Hide resolved
"gufo:hasBeginPoint": {
"@id": "kb:Instant-1a250c7b-19c5-4ec4-bed2-d05c9d438e9d",
"@type": "time:Instant",
"rdfs:label": "T0",
"time:inXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2020-01-02T03:04:05.6789Z"
}
},
"gufo:hasEndPoint": {
"@id": "kb:Instant-bbd8741a-4af8-4358-802b-a6fb8a4cf7dc",
"@type": "time:Instant",
"rdfs:label": "T1",
"time:inXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2021-02-03T04:05:06.7890Z"
}
}
}
]
```

Intervals of existence do not appear to be defined directly in gUFO. Also, since only the first and last instant of a concrete individual are specified, it is also not explicit in gUFO whether an individual's interval of existence needs to be continuous. For instance, a `gufo:Situation` may be seen to hold for a period of time, such as a person temporarily being a student in a `gufo:TemporaryInstantiationSituation`[^1], then not hold (e.g., when the person graduates from a school), then hold again (e.g., when the person later enrolls in another school).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is correct in terms of its classification. There are two individuals involved, though, regarding the gufo:TemporaryInstantiationSituation. Leaving this out of the text might create confusion with the readers to understand there is only one single situation that is spread over two distinct enrollments.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll make a footnote of this. I think explaining the other individual gets a little too big for a parenthetical remark.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Footnote added. Please let me know if you think it needs further adjusting, or if it's better to just omit Situation discussion entirely.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit-picking here would be that it is, imo, not necessary to elaborate on how it is done, just the essentials that each distinct enrollment is represented as distinct gufo:TemporaryInstantiationSituations. As in: don't make it more complicated than it needs to be. But again, this is nit-picking because the purpose has been achieved already.

Timestamps are constrained to `xsd:dateTimeStamp`, not `xsd:dateTime`, which is consistent with OWL-Time's deprecation of `time:inXSDDateTime`. For UCO, this would necessitate transcoding `xsd:dateTime` timestamps with a non-OWL, and likely non-SPARQL, mechanism.

The following figure shows the time coverage for `gufo:ConcreteIndividual`, re-using covering vocabulary from OWL-Time above:

![Abstraction - gUFO Concrete Individual](figures/abstraction_gufo.svg)

The mapping for `gufo:ConcreteIndividual` would be as follows:

| Example class or triple | Corresponding class or triple |
| --- | --- |
| `ex:TimeBoundedThing` | `gufo:ConcreteIndividual` |
| `ex:ExistenceInterval` | N/A |
| `ex:Instant` | `time:Instant` |
| `kb:T ex:hasExistenceInterval kb:E` | N/A |
| `kb:T ex:existsAtAndSince kb:T0` | `gufo:hasBeginPoint` |
| `kb:T ex:existsUntil kb:T1` | `gufo:hasEndPoint` |
| `kb:T ex:hasCreationTimestamp "2020-..."^^xsd:dateTime` | `kb:t gufo:hasBeginPointInXSDDateTimeStamp "2020-..."^^xsd:dateTimeStamp` |
| `kb:T ex:hasTerminationTimestamp "2021-..."^^xsd:dateTime` | `kb:t gufo:hasEndPointInXSDDateTimeStamp "2021-..."^^xsd:dateTimeStamp` |
| `kb:E ex:hasStart kb:T0` | N/A |
| `kb:E ex:hasEnd kb:T1` | N/A |
| `kb:E ex:hasBeginningTimestamp "2020-..."^^xsd:dateTime` | N/A |
| `kb:E ex:hasEndingTimestamp "2021-..."^^xsd:dateTime` | N/A |
| `kb:T0 ex:hasTimestamp "2020-..."^^xsd:dateTime` | `kb:T0 time:inXSDDateTimeStamp "2020-..."^^xsd:dateTimeStamp` |
| `kb:T1 ex:hasTimestamp "2021-..."^^xsd:dateTime` | `kb:T1 time:inXSDDateTimeStamp "2021-..."^^xsd:dateTimeStamp` |

_Aside_: A side-by-side view of the gUFO and OWL-Time coverage show that an ontology importing gUFO and OWL-Time has complete coverage of the existence-intervals concepts suggested on this page.

| OWL-Time | gUFO |
| --- | --- |
| ![Abstraction - OWL-Time Temporal Entity](figures/abstraction_time.svg) | ![Abstraction - gUFO Concrete Individual](figures/abstraction_gufo.svg) |

[^1]: gUFO represents instantations that are not always true with `gufo:TemporaryInstantiationSituation`. In the case where a person is temporarily a student, "student" is taken to be some subclass of "person" - e.g., `ex:Student rdfs:subClassOf ex:Person`. For some time, it holds that `kb:person-3393... a ex:Student`, but this is not always true. To hold this situationally-true statement in a knowledge graph, a `gufo:TemporaryInstantiationSituation` is included to note the conditions when `kb:person-3393...` is a `ex:Student`, instead of encoding the unqualified triple `kb:person-3393... a ex:Student`. See `kb:TemporaryInstantiationSituation-da1aa582-1358-49bb-b058-4c33990fb9e8` in [`existence_intervals.json`](existence_intervals.json) for a demonstration of this representation.
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,26 @@
"rdfs:comment": "The instant that is the end of E.",
"rdfs:label": "T1"
},
{
"@id": "ex:Person",
"@type": [
"owl:Class",
"gufo:Kind"
],
"rdfs:subClassOf": {
"@id": "gufo:Object"
}
},
{
"@id": "ex:Student",
"@type": [
"owl:Class",
"gufo:Role"
],
"rdfs:subClassOf": {
"@id": "ex:Person"
}
},
{
"@id": "kb:ExistenceInterval-27802c47-1c75-43fa-ab4b-fc01aa6c2c92",
"@type": "time:Interval",
Expand Down Expand Up @@ -108,6 +128,44 @@
"@value": "2020-01-02T03:04:05.6789Z"
}
},
{
"@id": "kb:Object-bee97e78-8e5e-4ffe-9c2b-28e960f84bbc",
"@type": "gufo:Object",
"gufo:hasBeginPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2020-01-02T03:04:05.6789Z"
},
"gufo:hasEndPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2021-02-03T04:05:06.7890Z"
},
"rdfs:comment": "A thing with a time-bounded existence.",
"rdfs:label": "T"
},
{
"@id": "kb:Person-3393dfc0-c765-4710-86db-8182c34de806",
"@type": "ex:Person",
"gufo:standsInQualifiedInstantiation": {
"@id": "kb:TemporaryInstantiationSituation-da1aa582-1358-49bb-b058-4c33990fb9e8"
},
"rdfs:label": "J. Doe"
},
{
"@id": "kb:TemporaryInstantiationSituation-da1aa582-1358-49bb-b058-4c33990fb9e8",
"@type": "gufo:TemporaryInstantiationSituation",
"gufo:concernsNonRigidType": {
"@id": "ex:Student"
},
"gufo:hasBeginPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2018-09-01T00:00Z"
},
"gufo:hasEndPointInXSDDateTimeStamp": {
"@type": "xsd:dateTimeStamp",
"@value": "2022-06-16T00:00:00Z"
},
"rdfs:comment": "This is the situation where J. Doe is a student, which started to hold Sep 1 2018, and no longer held on Jun 16, 2022."
},
{
"@id": "kb:TimeBoundThing-b1fd892f-f190-4e15-a928-6c949867c59d",
"@type": "owl:Thing",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ top_srcdir := $(shell cd ../../../.. ; pwd)

all: \
abstraction_all.svg \
abstraction_gufo.svg \
abstraction_time.svg \
abstraction_uco_1_3_0_action.svg \
abstraction_uco_1_3_0_event.svg \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
digraph "abstraction" {
n_t [label="T (object):\nA gufo:ConcreteIndividual." color=blue fontcolor=blue] ;

n_e [label="E (object):\nThe existence interval of T." color=silver fontcolor=silver] ;

n_t0 [label="T0 (object):\nThe instant that is the beginning of E.\ntime:Instant" color=blue fontcolor=blue];
n_t1 [label="T1 (object):\nThe instant that is the end of E.\ntime:Instant" color=blue fontcolor=blue];

l_ts0 [label="ts0 (literal):\n2020-01-02T03:04:05.6789Z\nxsd:dateTimeStamp" shape="box" color=blue fontcolor=blue];
l_ts1 [label="ts1 (literal):\n2021-02-03T04:05:06.7890Z\nxsd:dateTimeStamp" shape="box" color=blue fontcolor=blue];

n_t -> n_e [label="T hasExistenceInterval E" color=silver fontcolor=silver] ;
n_t -> n_t0 [label="T existsAtAndSince T0\ngufo:hasBeginPoint" color=blue fontcolor=blue] ;
n_t -> n_t1 [label="T existsUntil T1\ngufo:hasEndPoint" color=blue fontcolor=blue] ;
n_t -> l_ts0 [label="T hasCreationTimestamp ts0\ngufo:hasBeginPointInXSDDateTimeStamp" color=blue fontcolor=blue];
n_t -> l_ts1 [label="T hasTerminationTimestamp ts1\ngufo:hasEndPointInXSDDateTimeStamp" color=blue fontcolor=blue];

n_e -> n_t0 [label="E hasStart T0" color=silver fontcolor=silver];
n_e -> n_t1 [label="E hasEnd T1" color=silver fontcolor=silver];
n_e -> l_ts0 [label="E hasBeginningTimestamp ts0" color=silver fontcolor=silver] ;
n_e -> l_ts1 [label="E hasEndingTimestamp ts1" color=silver fontcolor=silver] ;

n_t0 -> l_ts0 [label="T0 hasTimestamp ts0\ntime:inXSDDateTimeStamp" color=blue fontcolor=blue];
n_t1 -> l_ts1 [label="T1 hasTimestamp ts1\ntime:inXSDDateTimeStamp" color=blue fontcolor=blue];
}
Loading
Loading