Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Purpose

Test the ability to consistently use https://www.w3.org/TR/owl-time/ time description class and properties in conjunction with IOF-Core constructs

Scope

Calendar and clock

Conducted by

Arkopaul Sarkar

IOF Core version

IOF Core spring release candidate available at https://github.com/iofoundry/ontology/tree/core_allen_interval_algebra

Date of testing

User story

Test scenarios are derived from the examples given in https://www.w3.org/TR/owl-time/#examples.

Data

Test data are derived from the examples given in https://www.w3.org/TR/owl-time/#examples.

Examples covered:

  1. DateTimeDescription vs dateTime (https://www.w3.org/TR/owl-time/#dtd-vs-dt )

  2. Use of temporal reference systems (https://www.w3.org/TR/owl-time/#different-TRS)

  3. Temporal precision (https://www.w3.org/TR/owl-time/#temporal-precision )

  4. A Use Case for Scheduling (https://www.w3.org/TR/owl-time/#scheduling )

Test criteria

  1. Examples in OWL-Time should be reproduced without loss of data.

  2. The data model is consistent.

Pre-process steps

  1. The data is manually modeled in Protege (https://protege.stanford.edu/ v 5.5.0) using IOF Core (spring release candidate) and https://www.w3.org/TR/2022/CRD-owl-time-20221115/ (Source file available at https://raw.githubusercontent.com/w3c/sdw/gh-pages/time/rdf/time.ttl).

  2. The mapping file is imported from https://spec.industrialontologies.org/ontology/core/commonstocoremapping/MappingOWLTimeToIOF .

  3. Reasoning is completed using Hermit reasoner (http://www.hermit-reasoner.com/ v 1.4.3.456).

System configuration

Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz 2.59 GHz with 32.0 GB RAM

Methodology

The assertions in the following file are compared with the assertions given in https://www.w3.org/TR/owl-time/#examples in Turtle format as well as reasoned for checking consistency.

View file
nametime-example1.ttl

Result

All tests are passed as shown in the following table. The ontology was processed without issues by Hermit reasoner in 5651 ms.

#

Example modeled

Model using OWL-Time

Model using IOF Core and OWL-Time

Result

1

DateTimeDescription vs dateTime

Code Block
ex:meetingStart
  a                    :Instant ;
  :inDateTime          ex:meetingStartDescription ;
  :inXSDDateTimeStamp  2017-04-12T10:30:00+10:00 .

ex:meetingStartDescription
  a             :DateTimeDescription ;
  :unitType     :unitMinute ;
  :minute       30 ;
  :hour         10 ;
  :day          "---12"^^xsd:gDay ;
  :dayOfWeek    :Wednesday ;
  :dayOfYear    102 ;
  :week         15 ;
  :month        "--04"^^xsd:gMonth ;
  :monthOfYear  greg:April ;
  :timeZone     <https://www.timeanddate.com/time/zones/aest> ;
  :year         "2017"^^xsd:gYear .
Code Block
:meetingStart rdf:type owl:NamedIndividual ,
                       obo:BFO_0000203 ;
              Core:hasValueExpressionAtAllTimes :meetingStartDescription .

:meetingStartDescription rdf:type owl:NamedIndividual ,
                                  time:DateTimeDescription ;
                         intervals:monthOfYear intervals:April ;
                         time:dayOfWeek time:Wednesday ;
                         time:timeZone <https://www.timeanddate.com/time/zones/aest> ;
                         time:unitType time:unitMinute ;
                         time:day "---12"^^xsd:gDay ;
                         time:dayOfYear 102 ;
                         time:hour 10 ;
                         time:minute 30 ;
                         time:month "--04"^^xsd:gMonth ;
                         time:week 15 ;
                         time:year "2017"^^xsd:gYear ;
                         Core:hasDateTimeValue "2017-04-12T10:30:00+10:00"^^xsd:dateTime .
  •  Passed

2

Use of temporal reference systems

Code Block
ex:AbbyBirthday
  a               :Instant ;
  :inDateTime     ex:AbbyBirthdayHebrew ;
  :inTimePosition ex:AbbyBirthdayUnix ;
  rdfs:label      "Abby's birthdate"^^xsd:string ;
  :inDateTime     ex:AbbyBirthdayGregorian ;
  :inXSDDateTimeStamp  "2001-05-23T08:20:00+08:00"^^xsd:dateTimeStamp ;
.
ex:AbbyBirthdayGregorian
  a           	:DateTimeDescription ;
  :day        	"---23"^^xsd:gDay ;
  :dayOfWeek  	:Wednesday ;
  :dayOfYear 	"143"^^xsd:nonNegativeInteger ;
  :hour       	"8"^^xsd:nonNegativeInteger ;
  :minute     	"20"^^xsd:nonNegativeInteger ;
  :month      	"--05"^^xsd:gMonth ;
  :monthOfYear 	greg:May ;
  :timeZone   	<https://www.timeanddate.com/time/zones/awst> ;
  :unitType   	:unitMinute ;
  :year       	"2001"^^xsd:gYear ;
.
ex:AbbyBirthdayUnix
  a                 :TimePosition ;
  :hasTRS           <http://dbpedia.org/resource/Unix_time> ;
  :numericPosition  990577200 ;
  rdfs:label        "Abby's birthdate in Unix time"^^xsd:string ;
.
ex:UnixTime
  rdfs:subClassOf time:TimePosition ;
  rdfs:subClassOf [
      rdf:type owl:Restriction ;
      owl:hasValue <http://dbpedia.org/resource/Unix_time> ;
      owl:onProperty time:hasTRS ;
    ] ;
.
Code Block
:AbbyBirthday rdf:type owl:NamedIndividual ,
                       obo:BFO_0000203 ;
              Core:hasValueExpressionAtAllTimes :AbbyBirthdayDateTime ,
                                                :AbbyBirthdayGregorian ,
                                                :AbbyBirthdayUnix .
:AbbyBirthdayDateTime rdf:type owl:NamedIndividual ,
                               Core:TemporalInstantValueExpression ;
                      Core:hasDateTimeValue "2001-05-23T08:20:00+08:00"^^xsd:dateTime .
:AbbyBirthdayGregorian rdf:type owl:NamedIndividual ,
                                time:DateTimeDescription ;
                       intervals:dayOfWeek time:Wednesday ;
                       intervals:monthOfYear intervals:May ;
                       time:timeZone <https://www.timeanddate.com/time/zones/awst> ;
                       time:unitType time:unitMinute ;
                       time:day "---23"^^xsd:gDay ;
                       time:dayOfYear "143"^^xsd:nonNegativeInteger ;
                       time:hour "8"^^xsd:nonNegativeInteger ;
                       time:minute "20"^^xsd:nonNegativeInteger ;
                       time:month "--05"^^xsd:gMonth ;
                       time:year "2001"^^xsd:gYear .
                       
:AbbyBirthdayUnix rdf:type owl:NamedIndividual ,
                           time:TimePosition ;
                  time:hasTRS <http://dbpedia.org/resource/Unix_time> ;
                  time:numericPosition 990577200 .
  •  Passed

3

Temporal precision

Code Block
geol:Present
  a :Instant ;
  :inDateTime [
    a :DateTimeDescription ;
    :unitType :unitYear ;
    :year "1950"^^xsd:gYear ;
  ] ;
  :inTimePosition [
    a :TimePosition ;
    :hasTRS <http://www.opengis.net/def/crs/OGC/0/ChronometricGeologicTime> ;
    :numericPosition 0.0 ;
  ] ;
  :inXSDDateTimeStamp "1950-01-01T00:00:00Z"^^xsd:dateTimeStamp ;
  rdfs:label "The present"^^xsd:string ;
.


ex:DatabaseTimeStamp
  a :Instant ;
  :inXSDDateTimeStamp "2015-11-01T17:58:16.102Z"^^xsd:dateTimeStamp ;
  :inDateTime [
      a :DateTimeDescription ;
      :day "---01"^^xsd:gDay ;
      :hour "17"^^xsd:nonNegativeInteger ;
      :minute "58"^^xsd:nonNegativeInteger ;
      :month "--11"^^xsd:gMonth ;
      :second 16.102 ;
      :timeZone <http://dbpedia.org/page/Coordinated_Universal_Time> ;
      :year "2015"^^xsd:gYear ;
    ] ;
  :inDateTime [
      a ex:GPSTime ;
      :second 64696.102 ;
      :week "1834"^^xsd:nonNegativeInteger ;
    ] ;
.
ex:GPSTime
  rdf:type owl:Class ;
  rdfs:comment "GPS Time is the number of seconds since an epoch in 1980, encoded as the number of weeks + seconds into the week" ;
  rdfs:subClassOf time:GeneralDateTimeDescription ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :day ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :dayOfWeek ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :dayOfYear ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :hour ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :minute ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :month ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :monthOfYear ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :timeZone ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "0"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :year ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "1"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :second ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:cardinality "1"^^xsd:nonNegativeInteger ; 
 	owl:onProperty :week ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:hasValue :unitSecond ; 
 	owl:onProperty :unitType ; ] ;
  rdfs:subClassOf [ a owl:Restriction ; 
 	owl:hasValue <https://en.wikipedia.org/wiki/Global_Positioning_System#Timekeeping> ; 
 	owl:onProperty :hasTRS ; ] ;
.
Code Block
:present rdf:type owl:NamedIndividual ,
                  obo:BFO_0000203 ;
         Core:hasValueExpressionAtAllTimes :presentInDateTime ,
                                           :presentInGeologicTime ,
                                           :presentInYear .
:presentInYear rdf:type owl:NamedIndividual ,
                        time:DateTimeDescription ;
               time:unitType time:unitYear ;
               time:year "1950"^^xsd:gYear .
:presentInGeologicTime rdf:type owl:NamedIndividual ,
                                time:TimePosition ;
                       time:hasTRS <http://www.opengis.net/def/crs/OGC/0/ChronometricGeologicTime> ;
                       time:numericPosition 0.0 .
:presentInDateTime rdf:type owl:NamedIndividual ,
                            Core:TemporalInstantValueExpression ;
                   Core:hasDateTimeValue "1950-01-01T00:00:00Z"^^xsd:dateTime .

:DatabaseTimeStamp rdf:type owl:NamedIndividual ,
                            obo:BFO_0000203 ;
                   Core:hasValueExpressionAtAllTimes :DatabaseTimeStampGPSTime ,
                                                     :DatabaseTimeStampUniversalTime ,
                                                     :DatabaseTimeStampinDateTime .
:DatabaseTimeStampGPSTime rdf:type owl:NamedIndividual ,
                                   <http://example.org/time/GPSTime> ;
                          time:second 64696.102 ;
                          time:week "1834"^^xsd:nonNegativeInteger .                                                     
:DatabaseTimeStampUniversalTime rdf:type owl:NamedIndividual ,
                                         time:DateTimeDescription ;
                                time:timeZone <http://dbpedia.org/page/Coordinated_Universal_Time> ;
                                time:day "---01"^^xsd:gDay ;
                                time:hour "17"^^xsd:nonNegativeInteger ;
                                time:minute "58"^^xsd:nonNegativeInteger ;
                                time:month "--11"^^xsd:gMonth ;
                                time:second 16.102 ;
                                time:year "2015"^^xsd:gYear .
:DatabaseTimeStampinDateTime rdf:type owl:NamedIndividual ,
                                      Core:TemporalInstantValueExpression ;
                             Core:hasDateTimeValue "2015-11-01T17:58:16.102Z"^^xsd:dateTime .
  •  Passed

4

A Use Case for Scheduling

Code Block
ex:meeting
  a                       :Interval ;
  :hasBeginning           ex:meetingStart ;
  :hasDurationDescription ex:meetingDuration .
ex:meetingDuration
  a         :DurationDescription ;
  :minutes  45 .
Code Block
:meeting rdf:type owl:NamedIndividual ,
                  obo:BFO_0000202 ;
         obo:BFO_0000222 :meetingStart ;
         time:hasDurationDescription :meetingDurationDescription .
:meetingDurationDescription rdf:type owl:NamedIndividual ,
                                     time:DurationDescription ;
                            time:minutes 45 .
  •  Passed