@prefix : <https://w3id.org/citydata/part1/v1/> .
@prefix cc: <http://creativecommons.org/ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@base <https://w3id.org/citydata/part1/v1/> .

<https://w3id.org/citydata/part1/v1/RecurringEventPattern> rdf:type owl:Ontology ;
                                                            owl:imports :ActivityPattern ,
                                                                        :GenericPropertiesPattern ;
                                                            cc:license "http://creativecommons.org/licenses/by/4.0/" ;
                                                            dcterms:alternative "CDM Recurring Event Pattern" ;
                                                            dcterms:creator "Kenneth Vaughn" ,
                                                                            "Mark Fox" ,
                                                                            "Megan Katsumi" ;
                                                            dcterms:modified "2026-02-12"^^xsd:date ;
                                                            dcterms:title "Information technology - City data model - Part 1: Foundation level concepts - Recurring Event Pattern" ;
                                                            vann:preferredNamespacePrefix "cdm1" ;
                                                            vann:preferredNamespaceUri "https://w3id.org/citydata/part1/v1/" ;
                                                            rdfs:comment "The prior version of this ontology used a different ontology IRI. This update remains semantically consistent with the version adopted as ISO 5087-1:2023." ;
                                                            owl:priorVersion <https://standards.iso.org/iso-iec/5087/-1/ed-1/en/ontology/RecurringEvent/> ;
                                                            owl:versionIRI <https://w3id.org/citydata/part1/v1/RecurringEventPattern/r3.0/> ;
                                                            owl:versionInfo "1.3.0" ;
                                                            skos:definition "This ontology specifies the foundation-level concepts related to the recurring event pattern of the city data model." .

#################################################################
#    Object Properties
#################################################################

###  https://w3id.org/citydata/part1/v1/RecurringEventObjectProperty
:RecurringEventObjectProperty rdf:type owl:ObjectProperty ;
                              rdfs:subPropertyOf :FoundationalCdmObjectProperty ;
                              skos:definition "Added for organizational purposes, to identify all recurring event object properties defined in the City Data Model." .


###  https://w3id.org/citydata/part1/v1/beginsRecurringState
:beginsRecurringState rdf:type owl:ObjectProperty ;
                      rdfs:subPropertyOf :RecurringEventObjectProperty ;
                      rdfs:domain :RecurringEvent ;
                      rdfs:range :State ;
                      skos:definition "Defines a State that is required to be true in order to initiate the RecurringEvent." .


###  https://w3id.org/citydata/part1/v1/beginsRecurringTime
:beginsRecurringTime rdf:type owl:ObjectProperty ;
                     rdfs:subPropertyOf :RecurringEventObjectProperty ;
                     rdfs:domain :RecurringEvent ;
                     rdfs:range time:TemporalEntity ;
                     skos:definition "Specifies the start time of the RecurringEvent’s activity with a time:TemporalEntity from the Time pattern." .


###  https://w3id.org/citydata/part1/v1/endDayOfWeek
:endDayOfWeek rdf:type owl:ObjectProperty ;
              rdfs:subPropertyOf :RecurringEventObjectProperty .


###  https://w3id.org/citydata/part1/v1/endMonth
:endMonth rdf:type owl:ObjectProperty ;
          rdfs:subPropertyOf :RecurringEventObjectProperty .


###  https://w3id.org/citydata/part1/v1/endsRecurringState
:endsRecurringState rdf:type owl:ObjectProperty ;
                    rdfs:subPropertyOf :RecurringEventObjectProperty ;
                    rdfs:domain :RecurringEvent ;
                    rdfs:range :State ;
                    skos:definition "Defines a State that is required to be true in order terminate the RecurringEvent." .


###  https://w3id.org/citydata/part1/v1/endsRecurringTime
:endsRecurringTime rdf:type owl:ObjectProperty ;
                   rdfs:subPropertyOf :RecurringEventObjectProperty ;
                   rdfs:domain :RecurringEvent ;
                   rdfs:range time:TemporalEntity ;
                   skos:definition "Specifies the end time of the RecurringEvent’s activity with a time:TemporalEntity from the Time pattern" .


###  https://w3id.org/citydata/part1/v1/hasDayOfWeek
:hasDayOfWeek rdf:type owl:ObjectProperty ;
              rdfs:subPropertyOf :RecurringEventObjectProperty ;
              rdfs:domain :WeeklyRecurringEvent ;
              rdfs:range time:DayOfWeek ;
              skos:definition "Specifies the day of the week on which a Weekly RecurringEvent occurs with the time:DayOfWeek class from the Time pattern." .


###  https://w3id.org/citydata/part1/v1/hasMonth
:hasMonth rdf:type owl:ObjectProperty ;
          rdfs:subPropertyOf :RecurringEventObjectProperty .


###  https://w3id.org/citydata/part1/v1/hasOccurrence
:hasOccurrence rdf:type owl:ObjectProperty ;
               rdfs:subPropertyOf :RecurringEventObjectProperty ;
               rdfs:domain :RecurringEvent ;
               rdfs:range :Activity ;
               skos:definition "Identifies the Activities that take place at the time and location." .


###  https://w3id.org/citydata/part1/v1/hasSubRecurringEvent
:hasSubRecurringEvent rdf:type owl:ObjectProperty ;
                      rdfs:subPropertyOf :RecurringEventObjectProperty ;
                      rdfs:domain :RecurringEvent ;
                      rdfs:range :RecurringEvent ;
                      skos:definition "identifies the sub-recurring events that comprise the RecurringEvent. As with an Activity, a RecurringEvent may be decomposed/decomposed into simpler/more complex RecurringEvents to support varying levels of granularity." .


###  https://w3id.org/citydata/part1/v1/onDateTimeDescription
:onDateTimeDescription rdf:type owl:ObjectProperty ;
                       rdfs:subPropertyOf :RecurringEventObjectProperty ;
                       rdfs:domain :RecurringEvent ;
                       rdfs:range time:DateTimeDescription ;
                       skos:definition "Specifies the date-time description (as defined in the Time pattern) on which a recurring event recurs. For example, the day of the month on which a MonthlyRecurringEvent recurs, or the day and month on which a YearlyRecurringEvent recurs." .


###  https://w3id.org/citydata/part1/v1/recursAddition
:recursAddition rdf:type owl:ObjectProperty ;
                rdfs:subPropertyOf :RecurringEventObjectProperty ;
                rdfs:domain :RecurringEvent ;
                rdfs:range [ rdf:type owl:Class ;
                             owl:unionOf ( time:DayOfWeek
                               time:TemporalEntity
                             )
                           ] ;
                skos:definition "Defines a condition when the RecurringEvent should be added to. This can specify a time, day of the week, or specific dates." .


###  https://w3id.org/citydata/part1/v1/recursExcept
:recursExcept rdf:type owl:ObjectProperty ;
              rdfs:subPropertyOf :RecurringEventObjectProperty ;
              rdfs:domain :RecurringEvent ;
              rdfs:range [ rdf:type owl:Class ;
                           owl:unionOf ( time:DayOfWeek
                             time:TemporalEntity
                           )
                         ] ;
              skos:definition "Defines the exceptions for the RecurringEvent, i.e. conditions when it does not occur. This can specify a time, day of the week, or specific dates." .


#################################################################
#    Data properties
#################################################################

###  https://w3id.org/citydata/part1/v1/RecurringEventDataProperty
:RecurringEventDataProperty rdf:type owl:DatatypeProperty ;
                            rdfs:subPropertyOf :FoundationalCdmDataProperty ;
                            skos:definition "Added for organizational purposes, to identify object properties defined in the Recurring Event Properties Pattern of the CDM ontology." .


###  https://w3id.org/citydata/part1/v1/endTime
:endTime rdf:type owl:DatatypeProperty ;
         rdfs:subPropertyOf :RecurringEventDataProperty ;
         rdfs:domain :RecurringEvent ;
         rdfs:range xsd:time ;
         skos:definition "Specifies the end time of the domain object's activity." .


###  https://w3id.org/citydata/part1/v1/startTime
:startTime rdf:type owl:DatatypeProperty ;
           rdfs:subPropertyOf :RecurringEventDataProperty ;
           rdfs:domain :RecurringEvent ;
           rdfs:range xsd:time ;
           skos:definition "Specifies the start time of the RecurringEvent's activity using http://www.w3.org/2001/XMLSchema#time format." .


#################################################################
#    Classes
#################################################################

###  https://w3id.org/citydata/part1/v1/DailyRecurringEvent
:DailyRecurringEvent rdf:type owl:Class ;
                     rdfs:subClassOf :RecurringEvent ,
                                     [ rdf:type owl:Restriction ;
                                       owl:onProperty :startTime ;
                                       owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                       owl:onDataRange xsd:time
                                     ] ;
                     skos:definition "A DailyRecurringEvent is a RecurringEvent that occurs every day. It has a maximum of one associated time, the start time. Typically, a daily recurring event will occur at the same time every day, but it is also possible that no commitment is made to a recurring start time for the event, in which case no start time is specified. A DailyEvent does not necessarily have the same endtime or duration, therefore these are not specified." .


###  https://w3id.org/citydata/part1/v1/ExceptionDay
:ExceptionDay rdf:type owl:Class ;
              rdfs:subClassOf :RecurringEventThing ,
                              [ rdf:type owl:Restriction ;
                                owl:onProperty :hasName ;
                                owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                owl:onDataRange xsd:string
                              ] ,
                              [ rdf:type owl:Restriction ;
                                owl:onProperty :onDateTimeDescription ;
                                owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                owl:onClass time:GeneralDateTimeDescription
                              ] ;
              skos:definition "An ExceptionDay specifies a day or days that recursExcept and recursAddition use to specify unique days that do not recur on the same day each year, for example, holidays. " .


###  https://w3id.org/citydata/part1/v1/MonthlyRecurringEvent
:MonthlyRecurringEvent rdf:type owl:Class ;
                       rdfs:subClassOf :RecurringEvent ,
                                       [ rdf:type owl:Restriction ;
                                         owl:onProperty :onDateTimeDescription ;
                                         owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                         owl:onClass time:GeneralDateTimeDescription
                                       ] ;
                       skos:definition "A MonthlyRecurringEvent recurs regularly on the same day of each month, as specified by the dayOfMonth data property. Note that there is often ambiguity regarding the semantics of a monthly recurring event: in this formalization, a MonthlyRecurringEvent is any event that recurs regularly on the same day of each month; other interpretations sometimes consider events that recur on the same day of week, or first or last day, in which case the day of month will vary." .


###  https://w3id.org/citydata/part1/v1/RecurringEvent
:RecurringEvent rdf:type owl:Class ;
                rdfs:subClassOf :RecurringEventThing ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :associatedLocation ;
                                  owl:allValuesFrom :Location
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :beginsRecurringState ;
                                  owl:allValuesFrom :State
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :beginsRecurringTime ;
                                  owl:allValuesFrom time:TemporalEntity
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :endsRecurringState ;
                                  owl:allValuesFrom :State
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :endsRecurringTime ;
                                  owl:allValuesFrom time:TemporalEntity
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :endTime ;
                                  owl:allValuesFrom xsd:time
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :hasDayOfWeek ;
                                  owl:allValuesFrom time:DayOfWeek
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :hasOccurrence ;
                                  owl:allValuesFrom :Activity
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :hasSubRecurringEvent ;
                                  owl:allValuesFrom :RecurringEvent
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :onDateTimeDescription ;
                                  owl:allValuesFrom time:GeneralDateTimeDescription
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :recursAddition ;
                                  owl:allValuesFrom [ rdf:type owl:Class ;
                                    owl:unionOf ( time:DayOfWeek
                                      time:TemporalEntity
                                    )
                                  ]
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :recursExcept ;
                                  owl:allValuesFrom [ rdf:type owl:Class ;
                                    owl:unionOf ( time:DayOfWeek
                                      time:TemporalEntity
                                    )
                                  ]
                                ] ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty :startTime ;
                                  owl:allValuesFrom xsd:time
                                ] ;
                skos:definition "Recurring events are defined based on the regular interval at which they occur; this is captures using some combination of the hasTime, dayOfWeek, hasMonth, and dayOfMonth properties.  Using these properties, ontology defines the following specializations of the RecurringEvent class. Other subclasses may be defined similarly, as required." .


###  https://w3id.org/citydata/part1/v1/RecurringEventThing
:RecurringEventThing rdf:type owl:Class ;
                     rdfs:subClassOf :FoundationalCdmThing ;
                     rdfs:comment "Class added for organizational purposes only; to group all classes defined in the recurring-event ontology." .


###  https://w3id.org/citydata/part1/v1/WeeklyRecurringEvent
:WeeklyRecurringEvent rdf:type owl:Class ;
                      rdfs:subClassOf :RecurringEvent ,
                                      [ rdf:type owl:Restriction ;
                                        owl:onProperty :hasDayOfWeek ;
                                        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                        owl:onClass time:DayOfWeek
                                      ] ;
                      skos:definition "A WeeklyRecurringEvent recurs on the regularly on the same day of the week, as specified by the schema:dayOfWeek property." .


###  https://w3id.org/citydata/part1/v1/YearlyRecurringEvent
:YearlyRecurringEvent rdf:type owl:Class ;
                      rdfs:subClassOf :RecurringEvent ,
                                      [ rdf:type owl:Restriction ;
                                        owl:onProperty :onDateTimeDescription ;
                                        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                                        owl:onClass time:GeneralDateTimeDescription
                                      ] ;
                      skos:definition "A YearlyRecurringEvent recurs regularly on the same day of the same month, as specified by the hasMonth and dayOfMonth properties. As with MonthlyRecurringEvent, there may be ambiguity regarding the semantics of a yearly recurring event, however this formalization captures only the notion of an event that recurs on the same day of the same month (e.g. a birthday)." .
