# The pattern's own scenario: Umbria Jazz, the festival held every July in the Italian region of
# Umbria, is a series whose member events recur at a regular period of one year and share the
# musical genre jazz as their unifying factor. The 2023 edition was the 50th, and the 2024
# edition is the one that immediately follows it.

@prefix d0: <http://www.ontologydesignpatterns.org/ont/d0.owl#> .
@prefix dul: <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#> .
@prefix recurrenteventseries: <http://www.ontologydesignpatterns.org/cp/owl/recurrenteventseries.owl#> .
@prefix ex: <https://w3id.org/ontoboard/example/recurrenteventseries#> .
@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#> .

ex:UmbriaJazz a owl:NamedIndividual , recurrenteventseries:RecurrentEventSeries ;
    rdfs:label "Umbria Jazz, the annual festival in Perugia and across Umbria" ;
    recurrenteventseries:hasMemberEvent ex:UmbriaJazz2023 ;
    recurrenteventseries:hasTimePeriod ex:OneYear ;
    recurrenteventseries:hasUnifyingFactor ex:JazzAsTopic .

ex:UmbriaJazz2023 a owl:NamedIndividual , recurrenteventseries:Event ;
    rdfs:label "Umbria Jazz 2023, the 50th edition, 7-16 July in Perugia" ;
    recurrenteventseries:eventNumber "50"^^xsd:integer ;
    recurrenteventseries:hasImmediateNextEvent ex:UmbriaJazz2024 ;
    recurrenteventseries:hasNextEvent ex:UmbriaJazz2024 ;
    recurrenteventseries:hasTimePeriodBeforeNextEvent ex:OneYear ;
    recurrenteventseries:isTheLastEvent "false"^^xsd:boolean .

ex:UmbriaJazz2024 a owl:NamedIndividual , recurrenteventseries:Event ;
    rdfs:label "Umbria Jazz 2024, 12-21 July in Perugia" .

ex:OneYear a owl:NamedIndividual , recurrenteventseries:TimePeriod ;
    rdfs:label "one year, July to July" .

ex:JazzAsTopic a owl:NamedIndividual , recurrenteventseries:UnifyingFactor ;
    rdfs:label "jazz as the musical genre of every edition" .

# Only one direction of each inverse pair is asserted: hasImmediateNextEvent/hasImmediatePreviousEvent, hasMemberEvent/isEventMemberOf, hasNextEvent/hasPreviousEvent, hasTimePeriod/isTimePeriodOf, hasTimePeriodBeforeNextEvent/isTimePeriodBeforeNextEventOf, hasUnifyingFactor/isUnifyingFactorOf. A reasoner adds the other.
