Skip to content

Commit

Permalink
Merge pull request #145 from casework/existence_intervals
Browse files Browse the repository at this point in the history
Start coverage-illustration page for intervals of existence
  • Loading branch information
plbt5 authored Jul 1, 2024
2 parents ff586cf + 1bc8f38 commit ddd38de
Show file tree
Hide file tree
Showing 24 changed files with 1,410 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Mapping notes & respective JSON-LD output:
- [Device](examples/illustrations/device/device.json)
- [EXIF Data](examples/illustrations/exif_data/exif_data.json)
- [Event](examples/illustrations/event/event.json)
- [Existence intervals](examples/illustrations/existence_intervals/existence_intervals.json) ([*info*](examples/illustrations/existence_intervals/))
- [Files](examples/illustrations/file/file.json) (*[info](examples/illustrations/file/)*)
- [Forensic Lifecycle](examples/illustrations/forensic_lifecycle/forensic_lifecycle.json) ([*info*](examples/illustrations/forensic_lifecycle/))
- [Location](examples/illustrations/location/location.json)
Expand Down
17 changes: 17 additions & 0 deletions examples/illustrations/existence_intervals/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/make -f

# Portions of this file contributed by NIST are governed by the
# following statement:
#
# This software was developed at the National Institute of Standards
# and Technology by employees of the Federal Government in the course
# of their official duties. Pursuant to Title 17 Section 105 of the
# United States Code, this software is not subject to copyright
# protection within the United States. NIST assumes no responsibility
# whatsoever for its use by other parties, and makes no guarantees,
# expressed or implied, about its quality, reliability, or any other
# characteristic.
#
# We would appreciate acknowledgement if the software is used.

include ../src/illustration-basedir.mk
117 changes: 117 additions & 0 deletions examples/illustrations/existence_intervals/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<!-- Look for TODOs. -->

# Existence Intervals

This example demonstrates various ontologies' representations of the period of time in which a thing exists. Some effort is put into describing differences in representing the existence of endurants vs. perdurants.

Take as an example a thing---and the thing might be endurant, perdurant, physical, cyber, thought, event, etc.---that exists starting at a time `t0` and ceases to exist at a time `t1`. In the illustrations below, the start will be labeled `t0`, the end `t1`, the interval bounded by start and end `i`, the thing `t`.

The starting time of this thing is `2020-01-02T03:04:05.6789Z`. The ending time of this thing is `2021-02-03T04:05:06.7890Z`. Each illustration goes as far as it can with concepts in the referenced ontology to eventually tie the thing `t` to these timestamp-literals. Where available, reified "instant" objects will be favored over literal-valued properties.

![Abstraction - all](figures/abstraction_all.svg)

This suggests a mapping table:

| Example class or triple | Corresponding class or triple |
| --- | --- |
| `ex:TimeBoundedThing` | ... |
| `ex:ExistenceInterval` | ... |
| `ex:Instant` | ... |
| `kb:T ex:hasExistenceInterval kb:E` | ... |
| `kb:T ex:existsAtAndSince kb:T0` | ... |
| `kb:T ex:existsUntil kb:T1` | ... |
| `kb:T ex:hasCreationTimestamp "2020-..."^^xsd:dateTime` | ... |
| `kb:T ex:hasTerminationTimestamp "2021-..."^^xsd:dateTime` | ... |
| `kb:E ex:hasStart kb:T0` | ... |
| `kb:E ex:hasEnd kb:T1` | ... |
| `kb:E ex:hasBeginningTimestamp "2020-..."^^xsd:dateTime` | ... |
| `kb:E ex:hasEndingTimestamp "2021-..."^^xsd:dateTime` | ... |
| `kb:T0 ex:hasTimestamp "2020-..."^^xsd:dateTime` | ... |
| `kb:T1 ex:hasTimestamp "2021-..."^^xsd:dateTime` | ... |

The mapping table is filled in for the various ontologies below with:

* Corresponding statements (class IRIs or full triples);
* "N/A", for not-**available** when a concept is known to not be mappable now, typically because no corresponding class or property is currently defined; and
* "TBD", when a design decision can be taken, typically because of a potential class- or property-equality declaration.

Note that "N/A" does not mean that a mapping is not possible. It only means that classes and properties are not defined at the present moment.

<!--
TODO - Also review whether each ontology states, or otherwise constrains, that an existence interval is unique. E.g. denote whether an object can recur, such as with some models of relationships.
-->


## UCO 1.3.0

UCO declares two property-pairs setting time boundaries:

* `core:startTime` and `core:endTime`, used to bound `core:Event`s and `core:Relationship`s.
* `action:startTime` and `action:endTime`, used to bound `action:Action`s.

The following table shows the time coverage for the three UCO classes that currently encode constraints on time properties:

| UCO Class | Figure |
| --- | --- |
| `uco-action:Action` | ![Abstraction - UCO Action](figures/abstraction_uco_1_3_0_action.svg) |
| `uco-core:Event` | ![Abstraction - UCO Event](figures/abstraction_uco_1_3_0_event.svg) |
| `uco-core:Relationship` | ![Abstraction - UCO Relationship](figures/abstraction_uco_1_3_0_relationship.svg) |

The mapping for `uco-action:Action` would be as follows.

| Example class or triple | Corresponding class or triple |
| --- | --- |
| `ex:TimeBoundedThing` | `uco-action:Action` |
| `ex:ExistenceInterval` | TBD |
| `ex:Instant` | N/A |
| `kb:T ex:hasExistenceInterval kb:E` | TBD |
| `kb:T ex:existsAtAndSince kb:T0` | N/A |
| `kb:T ex:existsUntil kb:T1` | N/A |
| `kb:T ex:hasCreationTimestamp "2020-..."^^xsd:dateTime` | `kb:T uco-action:startTime "2020-..."^^xsd:dateTime` |
| `kb:T ex:hasTerminationTimestamp "2021-..."^^xsd:dateTime` | `kb:T uco-action:endTime "2021-..."^^xsd:dateTime` |
| `kb:E ex:hasStart kb:T0` | N/A |
| `kb:E ex:hasEnd kb:T1` | N/A |
| `kb:E ex:hasBeginningTimestamp "2020-..."^^xsd:dateTime` | TBD |
| `kb:E ex:hasEndingTimestamp "2021-..."^^xsd:dateTime` | TBD |
| `kb:T0 ex:hasTimestamp "2020-..."^^xsd:dateTime` | N/A |
| `kb:T1 ex:hasTimestamp "2021-..."^^xsd:dateTime` | N/A |

`uco-core:Event` and `uco-core:Relationship` will look similar.

The "TBD"s above pertain to a decision UCO can make on how endurants and perdurants relate to time, under discussion [UCO Issue 544](https://github.com/ucoProject/UCO/issues/544).


## OWL-Time

OWL-Time provides the class `time:TemporalEntity`. Guidance offers options on how to relate time-things (`time:TemporalEntity`) to things that exist in time (like an activity or an object), drawn from [Section 3.1](https://www.w3.org/TR/owl-time/#topology).

> The properties `:hasTemporalDuration`, `:hasBeginning` and `:hasEnd`, together with a fourth generic property `:hasTime`, support the association of temporal information with any temporal entity, such as an activity or event, or other entity. These provide a standard way to attach time information to things, which may be used directly in applications if suitable, or specialized if needed.
The following figure shows the time coverage for the general usage of `time:TemporalEntity`:

![Abstraction - OWL-Time Temporal Entity](figures/abstraction_time.svg)

The mapping for `time:TemporalEntity` would be as follows.

| Example class or triple | Corresponding class or triple |
| --- | --- |
| `ex:TimeBoundedThing` | `owl:Thing` |
| `ex:ExistenceInterval` | `time:TemporalEntity` |
| `ex:Instant` | `time:Instant` |
| `kb:T ex:hasExistenceInterval kb:E` | `kb:T time:hasTime kb:E` |
| `kb:T ex:existsAtAndSince kb:T0` | N/A |
| `kb:T ex:existsUntil kb:T1` | N/A |
| `kb:T ex:hasCreationTimestamp "2020-..."^^xsd:dateTime` | N/A |
| `kb:T ex:hasTerminationTimestamp "2021-..."^^xsd:dateTime` | N/A |
| `kb:E ex:hasStart kb:T0` | `kb:E time:hasBeginning kb:T0` |
| `kb:E ex:hasEnd kb:T1` | `kb:E time:hasEnd kb:T1` |
| `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:inXSDDateTime "2020-..."^^xsd:dateTime` |
| `kb:T1 ex:hasTimestamp "2021-..."^^xsd:dateTime` | `kb:T1 time:inXSDDateTime "2021-..."^^xsd:dateTime` |

Some of the examples in the OWL-TIME specification include demonstrations of `time:TemporalEntity` that allow for endurants and perdurants as direct subclasses. Note that the examples section is non-normative.

* [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.
86 changes: 86 additions & 0 deletions examples/illustrations/existence_intervals/drafting.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
@prefix drafting: <http://example.org/ontology/drafting/> .
@prefix ex: <http://example.org/ontology/example/> .
@prefix gufo: <http://purl.org/nemo/gufo#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:ExistenceInterval
a owl:Class ;
rdfs:subClassOf owl:Thing ;
.

ex:Instant
a owl:Class ;
rdfs:subClassOf owl:Thing ;
.

ex:TimeBoundedThing
a owl:Class ;
rdfs:subClassOf owl:Thing ;
rdfs:comment "A thing with a time-bounded existence."@en ;
.

ex:existsAtAndSince
a owl:ObjectProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range ex:Instant ;
.

ex:existsUntil
a owl:ObjectProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range ex:Instant ;
.

ex:hasBeginningTimestamp
a owl:DatatypeProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range xsd:dateTime ;
.

ex:hasCreationTimestamp
a owl:DatatypeProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range xsd:dateTime ;
.

ex:hasEnd
a owl:ObjectProperty ;
rdfs:domain ex:ExistenceInterval ;
rdfs:range ex:Instant ;
.

ex:hasEndingTimestamp
a owl:DatatypeProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range xsd:dateTime ;
.

ex:hasExistenceInterval
a owl:ObjectProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range ex:ExistenceInterval ;
.

ex:hasStart
a owl:ObjectProperty ;
rdfs:domain ex:ExistenceInterval ;
rdfs:range ex:Instant ;
.

ex:hasTerminationTimestamp
a owl:DatatypeProperty ;
rdfs:domain ex:TimeBoundedThing ;
rdfs:range xsd:dateTime ;
.

ex:hasTimestamp
a owl:DatatypeProperty ;
rdfs:domain ex:Instant ;
rdfs:range xsd:dateTime ;
.

Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{
"@context": {
"drafting": "http://example.org/ontology/drafting/",
"ex": "http://example.org/ontology/example/",
"gufo": "http://purl.org/nemo/gufo#",
"kb": "http://example.org/kb/",
"obo": "http://purl.obolibrary.org/obo/",
"owl": "http://www.w3.org/2002/07/owl#",
"prov": "http://www.w3.org/ns/prov#",
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
"time": "http://www.w3.org/2006/time#",
"xsd": "http://www.w3.org/2001/XMLSchema#"
},
"@graph": [
{
"@id": "kb:TimeBoundThing-bbd18617-4118-4376-ad0c-19fb729a9b54",
"@type": "ex:TimeBoundedThing",
"ex:existsAtAndSince": {
"@id": "kb:Instant-ef0da4b8-d014-4142-b9f5-b0a0091965b8"
},
"ex:existsUntil": {
"@id": "kb:Instant-a9dd29d9-c854-4cdd-917a-7de5226b389b"
},
"ex:hasCreationTimestamp": {
"@type": "xsd:dateTime",
"@value": "2020-01-02T03:04:05.6789Z"
},
"ex:hasExistenceInterval": {
"@id": "kb:ExistenceInterval-03c8fef4-dac9-4f17-bc98-2ef468390daa"
},
"ex:hasTerminationTimestamp": {
"@type": "xsd:dateTime",
"@value": "2021-02-03T04:05:06.7890Z"
},
"rdfs:comment": "A thing with a time-bounded existence.",
"rdfs:label": "T"
},
{
"@id": "kb:ExistenceInterval-03c8fef4-dac9-4f17-bc98-2ef468390daa",
"@type": "ex:ExistenceInterval",
"ex:hasBeginningTimestamp": {
"@type": "xsd:dateTime",
"@value": "2020-01-02T03:04:05.6789Z"
},
"ex:hasEnd": {
"@id": "kb:Instant-a9dd29d9-c854-4cdd-917a-7de5226b389b"
},
"ex:hasEndingTimestamp": {
"@type": "xsd:dateTime",
"@value": "2021-02-03T04:05:06.7890Z"
},
"ex:hasStart": {
"@id": "kb:Instant-ef0da4b8-d014-4142-b9f5-b0a0091965b8"
},
"rdfs:comment": "The existence interval of T.",
"rdfs:label": "E"
},
{
"@id": "kb:Instant-ef0da4b8-d014-4142-b9f5-b0a0091965b8",
"@type": "ex:Instant",
"ex:hasTimestamp": {
"@type": "xsd:dateTime",
"@value": "2020-01-02T03:04:05.6789Z"
},
"rdfs:comment": "The instant that is the beginning of E.",
"rdfs:label": "T0"
},
{
"@id": "kb:Instant-a9dd29d9-c854-4cdd-917a-7de5226b389b",
"@type": "ex:Instant",
"ex:hasTimestamp": {
"@type": "xsd:dateTime",
"@value": "2021-02-03T04:05:06.7890Z"
},
"rdfs:comment": "The instant that is the end of E.",
"rdfs:label": "T1"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[]
a sh:ValidationReport ;
sh:conforms "true"^^xsd:boolean ;
.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[]
a sh:ValidationReport ;
sh:conforms "true"^^xsd:boolean ;
.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[]
a sh:ValidationReport ;
sh:conforms "true"^^xsd:boolean ;
.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[]
a sh:ValidationReport ;
sh:conforms "true"^^xsd:boolean ;
.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[]
a sh:ValidationReport ;
sh:conforms "true"^^xsd:boolean ;
.

Loading

0 comments on commit ddd38de

Please sign in to comment.