Summary
time:DateTimeDescription restricts the :day, :month, and :year properties using owl:allValuesFrom with xsd:gDay, xsd:gMonth, and xsd:gYear, respectively. These three XML Schema types are not part of the OWL 2 datatype map (OWL 2 Syntax §4), which means OWL 2 DL reasoners, e.g. HermiT, reject the ontology.
OWL-Time already defines OWL 2-compatible alternatives for exactly this purpose — time:generalDay, time:generalMonth, and time:generalYear — and uses them in the parent class time:GeneralDateTimeDescription. However, DateTimeDescription still uses the non-OWL 2 XSD types. So if they were swapped with their respective OWL 2-compatibles ones, the issue is addressed.
Affected Axioms
In time.ttl, DateTimeDescription is defined as:
# time.ttl lines 43-67
:DateTimeDescription
rdf:type owl:Class ;
rdfs:comment "Description of date and time structured with separate values for the various elements of a calendar-clock system. The temporal reference system is fixed to Gregorian Calendar, and the range of year, month, day properties restricted to corresponding XML Schema types `xsd:gYear`, `xsd:gMonth` and `xsd:gDay`, respectively."@en ;
rdfs:label "Date-Time description"@en ;
rdfs:subClassOf :GeneralDateTimeDescription ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:allValuesFrom xsd:gDay ; # ← line 49: not in OWL 2 datatype map
owl:onProperty :day ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:allValuesFrom xsd:gMonth ; # ← line 54: not in OWL 2 datatype map
owl:onProperty :month ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
owl:allValuesFrom xsd:gYear ; # ← line 59: not in OWL 2 datatype map
owl:onProperty :year ;
] ;
Why It Matters
The OWL 2 Datatype Map
The OWL 2 specification (§4 Datatype Maps) enumerates exactly which XSD types a conformant OWL 2 DL reasoner must support:
xsd:string, xsd:boolean, xsd:decimal, xsd:integer, xsd:double, xsd:float, xsd:dateTime, xsd:dateTimeStamp, xsd:anyURI, xsd:base64Binary, xsd:hexBinary, xsd:byte, xsd:short, xsd:int, xsd:long, xsd:unsignedByte, xsd:unsignedShort, xsd:unsignedInt, xsd:unsignedLong, xsd:positiveInteger, xsd:nonNegativeInteger, xsd:negativeInteger, xsd:nonPositiveInteger, xsd:normalizedString, xsd:token, xsd:language, xsd:Name, xsd:NCName, xsd:NMTOKEN
xsd:gDay, xsd:gMonth, and xsd:gYear are absent from this list.
When a reasoner operates in OWL 2 DL mode, it may:
- Silently ignore the restrictions (lenient mode) — losing intended semantics
- Reject the ontology outright (strict mode) — blocking all reasoning
How This Breaks in Practice
In isolation, many reasoners tolerate these types because they never need to evaluate the restrictions. However, when OWL-Time is imported alongside ontologies that define custom datatype restrictions (using owl:onDatatype / owl:withRestrictions on OWL 2-supported types like xsd:decimal), reasoners like HermiT switch into strict datatype validation mode. In strict mode, HermiT validates all types in the import closure and rejects xsd:gDay/gMonth/gYear:
HermiT supports all and only the datatypes of the OWL 2 datatype map, see
http://www.w3.org/TR/owl2-syntax/#Datatype_Maps.
The datatype 'http://www.w3.org/2001/XMLSchema#gDay' is not part of the OWL 2 datatype map
and no custom datatype definition is given;
therefore, HermiT cannot handle this datatype.
This means any ontology that:
- imports OWL-Time (directly or transitively), and
- defines custom datatype restrictions on OWL 2-supported types (e.g.,
owl:onDatatype xsd:decimal with owl:withRestrictions)
...will fail consistency and satisfiability checking under HermiT, even though its own datatype definitions are perfectly valid OWL 2 DL.
Reproduction
- Create an ontology that imports OWL-Time and defines any custom datatype restriction:
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://example.org/test> a owl:Ontology ;
owl:imports <http://www.w3.org/2006/time> .
## A perfectly valid OWL 2 DL custom datatype
<http://example.org/test#PercentageValue> a rdfs:Datatype ;
owl:equivalentClass [ a rdfs:Datatype ;
owl:onDatatype xsd:decimal ;
owl:withRestrictions ( [ xsd:minInclusive "0.0"^^xsd:decimal ]
[ xsd:maxInclusive "100.0"^^xsd:decimal ] ) ] .
- Run HermiT via ROBOT:
robot reason --reasoner HermiT --input test.ttl
- HermiT fails with the
xsd:gDay error, even though the test ontology's own datatype is valid.
Proposed Fix
OWL-Time already provides the solution. The ontology defines three OWL 2-compatible alternatives — time:generalDay, time:generalMonth, time:generalYear — as custom types built on xsd:string with pattern restrictions. They are designed to "reproduce the same lexical form as gDay" while staying within OWL 2 DL, and are already used by GeneralDateTimeDescription.
-
So, replace the three non-OWL 2 restrictions in DateTimeDescription (lines 49, 54, 59) with the OWL 2-compatible alternatives:
# time.ttl lines 43–62
:DateTimeDescription
rdf:type owl:Class ;
- rdfs:comment "...restricted to corresponding XML Schema types xsd:gYear, xsd:gMonth and xsd:gDay, respectively."@en ;
+ rdfs:comment "...restricted to corresponding OWL 2-compatible types time:generalYear, time:generalMonth and time:generalDay, respectively."@en ;
rdfs:label "Date-Time description"@en ;
rdfs:subClassOf :GeneralDateTimeDescription ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
- owl:allValuesFrom xsd:gDay ; # line 49
+ owl:allValuesFrom :generalDay ;
owl:onProperty :day ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
- owl:allValuesFrom xsd:gMonth ; # line 54
+ owl:allValuesFrom :generalMonth ;
owl:onProperty :month ;
] ;
rdfs:subClassOf [
rdf:type owl:Restriction ;
- owl:allValuesFrom xsd:gYear ; # line 59
+ owl:allValuesFrom :generalYear ;
owl:onProperty :year ;
] ;
addresses the problem.
-
DateTimeDescription's skos:definition annotation should also be updated to match.
- The Spanish-language annotations (lines 1460–1461) should be updated similarly.
-
similar updates to time.rdf, time.jsonld, and the other formats.
-
Updates to documentation
Why This Fix Is Correct
-
OWL-Time's own design intent: GeneralDateTimeDescription (line 175) was specifically created to use OWL 2-compatible types. DateTimeDescription is a subclass that narrows to the Gregorian calendar. The generalized types reproduce the same lexical form — generalDay even says so in its rdfs:comment (line 695): "formulated as a text string with a pattern constraint to reproduce the same lexical form as gDay".
-
Semantic preservation: generalDay accepts the same lexical values as xsd:gDay (and more — values up to 99 for non-Gregorian calendars). For DateTimeDescription, which is fixed to the Gregorian calendar, the valid values are identical.
-
OWL 2 DL compliance: xsd:string and owl:withRestrictions with xsd:pattern are fully supported by the OWL 2 datatype map. This is the mechanism OWL-Time itself already uses for GeneralDateTimeDescription.
-
No impact on existing data: Any valid xsd:gDay literal (e.g., "---15") matches the generalDay pattern. Existing example instance data remains valid as-is.
-
No impacts to extensions: Temporal Aggregates and Time Entity Relations extensions are OK as-is
Environment and versions tested
- Reasoner: HermiT 1.4.x (via ROBOT v1.9.8,
obolibrary/robot Docker image)
- OWL-Time version:
http://www.w3.org/2006/time#2016 latest
Summary
time:DateTimeDescriptionrestricts the:day,:month, and:yearproperties usingowl:allValuesFromwithxsd:gDay,xsd:gMonth, andxsd:gYear, respectively. These three XML Schema types are not part of the OWL 2 datatype map (OWL 2 Syntax §4), which means OWL 2 DL reasoners, e.g. HermiT, reject the ontology.OWL-Time already defines OWL 2-compatible alternatives for exactly this purpose —
time:generalDay,time:generalMonth, andtime:generalYear— and uses them in the parent classtime:GeneralDateTimeDescription. However,DateTimeDescriptionstill uses the non-OWL 2 XSD types. So if they were swapped with their respective OWL 2-compatibles ones, the issue is addressed.Affected Axioms
In time.ttl,
DateTimeDescriptionis defined as:Why It Matters
The OWL 2 Datatype Map
The OWL 2 specification (§4 Datatype Maps) enumerates exactly which XSD types a conformant OWL 2 DL reasoner must support:
xsd:gDay,xsd:gMonth, andxsd:gYearare absent from this list.When a reasoner operates in OWL 2 DL mode, it may:
How This Breaks in Practice
In isolation, many reasoners tolerate these types because they never need to evaluate the restrictions. However, when OWL-Time is imported alongside ontologies that define custom datatype restrictions (using
owl:onDatatype/owl:withRestrictionson OWL 2-supported types likexsd:decimal), reasoners like HermiT switch into strict datatype validation mode. In strict mode, HermiT validates all types in the import closure and rejectsxsd:gDay/gMonth/gYear:This means any ontology that:
owl:onDatatype xsd:decimalwithowl:withRestrictions)...will fail consistency and satisfiability checking under HermiT, even though its own datatype definitions are perfectly valid OWL 2 DL.
Reproduction
xsd:gDayerror, even though the test ontology's own datatype is valid.Proposed Fix
OWL-Time already provides the solution. The ontology defines three OWL 2-compatible alternatives — time:generalDay, time:generalMonth, time:generalYear — as custom types built on
xsd:stringwith pattern restrictions. They are designed to "reproduce the same lexical form as gDay" while staying within OWL 2 DL, and are already used by GeneralDateTimeDescription.So, replace the three non-OWL 2 restrictions in
DateTimeDescription(lines 49, 54, 59) with the OWL 2-compatible alternatives:addresses the problem.
DateTimeDescription's skos:definition annotation should also be updated to match.similar updates to
time.rdf,time.jsonld, and the other formats.Updates to documentation
Why This Fix Is Correct
OWL-Time's own design intent:
GeneralDateTimeDescription(line 175) was specifically created to use OWL 2-compatible types.DateTimeDescriptionis a subclass that narrows to the Gregorian calendar. The generalized types reproduce the same lexical form —generalDayeven says so in itsrdfs:comment(line 695): "formulated as a text string with a pattern constraint to reproduce the same lexical form as gDay".Semantic preservation:
generalDayaccepts the same lexical values asxsd:gDay(and more — values up to 99 for non-Gregorian calendars). ForDateTimeDescription, which is fixed to the Gregorian calendar, the valid values are identical.OWL 2 DL compliance:
xsd:stringandowl:withRestrictionswithxsd:patternare fully supported by the OWL 2 datatype map. This is the mechanism OWL-Time itself already uses forGeneralDateTimeDescription.No impact on existing data: Any valid
xsd:gDayliteral (e.g.,"---15") matches thegeneralDaypattern. Existing example instance data remains valid as-is.No impacts to extensions: Temporal Aggregates and Time Entity Relations extensions are OK as-is
Environment and versions tested
obolibrary/robotDocker image)http://www.w3.org/2006/time#2016latest