Skip to content

Commit

Permalink
Merge pull request #148 from casework/existence_intervals
Browse files Browse the repository at this point in the history
Add gUFO section of page for intervals of existence
  • Loading branch information
plbt5 authored Jul 11, 2024
2 parents 675b89b + a29fc4e commit 478e4cf
Show file tree
Hide file tree
Showing 9 changed files with 478 additions and 0 deletions.
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"
}
}
]
```

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",
"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).

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

0 comments on commit 478e4cf

Please sign in to comment.