ISSUE-180: Integer time quantities and positions

Integer time quantities and positions

State:
CLOSED
Product:
Time ontology in OWL
Raised by:
Simon Cox
Opened on:
2017-04-21
Description:
Mark Hedley (UK Met Office) raised this issue in a email on 2017-03-23:

The issue we are working towards for ISO19111 is enabling the use of either TemporalMeasure (continuous, decimal) and TemporalCount (integer
only)
We are aiming to differentiate between these, and limit scope by enforcing a choice of one or other for an individual Coordinate Reference System instance.

In order to share terminology with OWL:Time, I would like to define a time duration constrained to an integer quantity

At present, the
https://www.w3.org/TR/owl-time/#time:hour
is described as
'Hour position in a calendar-clock system'
and is constrained to
https://www.w3.org/TR/xmlschema11-2/#nonNegativeInteger

whilst
https://www.w3.org/TR/owl-time/#time:hours
is described as
'length of a temporal extent expressed in hours'
and is constrained to
https://www.w3.org/TR/owl-time/#time:Number
providing
'Equivalent class: xsd:double or xsd:float or xsd:decimal'

My use case is:

define a temporal count quanity such that my coordinates are offsets
of this quantity from a defined temporalDatum

I think this is a 'length extent expressed in ...' in owl:time speak However, I cannot store an integer in this.

I wonder whether it would be possible to add a new type, a sub-type of https://www.w3.org/TR/owl-time/#time:Number

Count
RDFS Class: time:Count
Definition: Generalized integer number
Instance of: time:Number
Equivalent class: xsd:integer


Obviously I'm happy to discuss any options.
I do wonder whether this represents a small additive change that might neatly allow my use case I would really value your thoughts on this.
Related Actions Items:
No related actions
Related emails:
No related emails

Related notes:

Simon responded on 2017-03-27

1. Be careful. OWL-Time has a lot of rdfs:domain axioms on the properties, so the entailments are pretty strong any time you use them.

2. time:hours is for amounts or temporal extents (i.e. durations), while time:hour is for temporal position, offset from an origin within a TRS.
These are globally constrained to be associated with an instance of time:GeneralDurationDescription or time:GeneralDateTimeDescription, respectively.
Of course time:hour(s) sits alongside year(s), month(s), week(s), day(s), minute(s) and second(s) for when you choose to express the duration or position using a clock/calendar, instead of a single unit-of-measure*.
If you want a class that is limited to integer values of just one of these quanta then you have to suppress the other quantizations.
You can do that by defining a sub-class of either time:DateTImeDescription (for positions) or time:DurationDescription (for extents).

First you force the :hours property to be an integer (note different namespace "itime:") -

itime:hours
rdf:type owl:DatatypeProperty ;
rdfs:range xsd:integer ;
rdfs:subPropertyOf time:hours ;
.

Then you restrict the cardinalities of the properties of the class, so that only the (restricted version of ) :hours is expected -

itime:Hours
rdf:type owl:Class ;
rdfs:subClassOf time:DurationDescription ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:cardinality "1"^^xsd:nonNegativeInteger ;
owl:onProperty itime:hours ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:days ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:minutes ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:months ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:seconds ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:weeks ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:maxCardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty time:years ;
] ;
.

This option (only allowing one of the ticks) is close to the model for time:Year from the original OWL-Time (should have been time:Years since it is a duration not position :-( ), but we decided to deprecate that in the new version. Rinse and repeat for itime:Hour, as a subclass of time:DateTimeDescription.

Alternatively, and probably easier, you can start with time:Duration (which is just a number with a single scale) or time:TimePosition (ditto) and restrict the value of time:unitType instead, like this.


itime:HoursDuration
rdf:type owl:Class ;
rdfs:subClassOf time:Duration ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:allValuesFrom xsd:integer ;
owl:onProperty time:numericDuration ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:hasValue time:unitHour ;
owl:onProperty time:unitType ;
] ;
.

itime:HourPosition
rdf:type owl:Class ;
rdfs:subClassOf time:TimePosition ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:allValuesFrom xsd:integer ;
owl:onProperty time:numericPosition ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:hasValue time:unitHour ;
owl:onProperty time:unitType ;
] ;
.

OK?

Simon

Simon Cox, 21 Apr 2017, 02:51:50

Mark seemed happy with the response - email 2017-04-07

Hello Simon

thanks again for the insights

my interpretation is that I do not need to request any changes to OWL time and that for my use cases the use of time:hour to describe a position as described by a temporal count coordinate

I think the constraint mechanism makes sense, if i think about it carefully

many thanks for the input and insight

mark

Simon Cox, 21 Apr 2017, 02:52:23

Display change log ATOM feed


Chair, Staff Contact
Tracker: documentation, (configuration for this group), originally developed by Dean Jackson, is developed and maintained by the Systems Team <w3t-sys@w3.org>.
$Id: 180.html,v 1.1 2018/10/09 10:07:59 carine Exp $