@prefix owl: . @prefix rdf: . @prefix rdfs: . @prefix xsd: . @prefix foaf: . @prefix vs: . @prefix tl: . @prefix event: . @prefix mo: . @prefix co: . @prefix : . <> a owl:Ontology; rdfs:comment """ Symbolic notation ontology TODO: * Time signature; * Key signature? * Repetitions """@en; foaf:maker ; . # Concepts # Basic ones :NoteEvent a owl:Class; rdfs:subClassOf event:Event; rdfs:label "note event"@en; owl:disjointWith :RestEvent; rdfs:comment """ Classifying a particular region of a score' timeline (or another concept, depending on the context), as holding a note. Several subclasses are defined, implicitly specifying (through a DL restriction) the duration of the event. """@en; . :Pitch a owl:Class; rdfs:label "pitch"@en; rdfs:comment """ The pitch of a note. A pitch holds information about the modifiers (sharp, flat, natural), the note, and the octave. """@en; . :Note a owl:Class; rdfs:label "note"@en; rdfs:comment """ A note. Either A, B, C, D, E, F or G. """@en; . :RestEvent a owl:Class; rdfs:subClassOf event:Event; rdfs:label "rest event"@en; owl:disjointWith :NoteEvent; rdfs:comment """ Classifying a particular region as holding a rest (an interval of silence). Subclasses of this event are restriced to a particular length, as note events. """@en; . # Key signature - should I get into that? # Time signature # Now, a bunch of specification of the previous concepts # Here, we consider as subclasses of NoteEvent a bunch of # concepts holding restrictions about their respective durations # All these concepts should be mutually disjoint :DoubleWholeNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "double whole"@en-US; rdfs:label "breve"@en-UK; rdfs:label "double ronde"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DoubleWhole; ]; . :WholeNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "whole note"@en-US; rdfs:label "semibreve"@en-UK; rdfs:label "ronde"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Whole; ]; . :HalfNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "half note"@en-US; rdfs:label "minim"@en-UK; rdfs:label "blanche"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Half; ]; . :QuarterNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "quarter note"@en-US; rdfs:label "crotchet"@en-UK; rdfs:label "noire"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Quarter; ]; . :EighthNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "eighth note"@en-US; rdfs:label "quaver"@en-UK; rdfs:label "croche"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Eighth; ]; . :SixteenthNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "sixteenth note"@en-US; rdfs:label "semiquaver"@en-UK; rdfs:label "double croche"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Sixteenth; ]; . :ThirtySecondNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "thirtysecond note"@en-US; rdfs:label "demisemiquaver"@en-UK; rdfs:label "triple croche"@fr; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Thirtysecond; ]; . :DottedDoubleWholeNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted double whole note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedDoubleWhole; ]; . :DottedWholeNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted whole note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedWhole; ]; . :DottedHalfNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted half note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedHalf; ]; . :DottedQuarterNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted quarter note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedQuarter; ]; . :DottedEighthNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted eighth note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedEighth; ]; . :DottedSixteenthNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted sixteenth note"@en-US; owl:equivalentlass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedSixteenth; ]; . :DottedThirtySecondNote a owl:Class; rdfs:subClassOf :NoteEvent; rdfs:label "dotted thirty second note"@en-US; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DottedThirtysecond; ]; . :LongaRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "longa"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Longa; ]; . :DoubleWholeRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "double whole rest"@en-US; rdfs:label "breve rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :DoubleWhole; ]; # do i have to specify the subclassing here? . :WholeRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "whole rest"@en-US; rdfs:label "semibreve rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Whole; ]; . :HalfRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "half rest"@en-US; rdfs:label "minim rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Half; ]; . :QuarterRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "quarter rest"@en-US; rdfs:label "crotchet rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Quarter; ]; . :EighthRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "eighth rest"@en-US; rdfs:label "quaver rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Eighth; ]; . :SixteenthRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "sixteenth rest"@en-US; rdfs:label "semiquaver rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Sixteenth; ]; . :ThirtySecondRest a owl:Class; rdfs:subClassOf :RestEvent; rdfs:label "thirtysecond rest"@en-US; rdfs:label "demisemiquaver rest"@en-UK; owl:equivalentClass [ a owl:Restriction; owl:onProperty event:time; owl:allValuesFrom :Thirtysecond; ]; . # I could partition the note event space # in the pitch domain as well, using a similar # set of restrictions # Timelines :ScoreTimeLine a owl:Class; rdfs:subClassOf tl:AbstractTimeLine; rdfs:label "score timeline"@en; rdfs:comment """ A class of timelines backing scores, or other symbolic representations. """@en; . # Time intervals :ScoreInterval a owl:Class; rdfs:subClassOf tl:AbstractInterval; rdfs:label "score interval"@en; rdfs:comment """ An interval defined on a score time line (defined canonically in number of beats). """@en; . :Longa a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "longa"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "4"^^xsd:float; ]; . :DoubleWhole a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "double whole"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "2"^^xsd:float; ]; . :Whole a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "whole"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "1"^^xsd:float; ]; . :Half a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "half"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "0.5"^^xsd:float; ]; . :Quarter a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "quarter"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "0.25"^^xsd:float; ]; . :Eighth a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "eighth"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "0.125"^^xsd:float; ]; . :Sixteenth a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "sixteenth"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "0.0625"^^xsd:float; ]; . :Thirtysecond a owl:Class; rdfs:subClassOf :ScoreInterval; rdfs:label "thirtysecond"@en; owl:equivalentClass [ a owl:Restriction; owl:onProperty tl:duration; owl:hasValue "0.03125"^^xsd:float; ]; . # Grouping of events :Bar a owl:Class; rdfs:subClassOf event:Event; rdfs:label "bar"@en; rdfs:comment """ A bar is an event, grouping a bunch of sub_event - eg. note events. Relationships such as Allen's meets hold for two consecutive bars. """@en . :Tie a owl:Class; rdfs:subClassOf event:Event; rdfs:label "tie"@en-UK; . :Slur a owl:Class; rdfs:subClassOf event:Event; rdfs:label "slur"@en-UK; . :Voice a owl:Class; rdfs:subClassOf event:Event; rdfs:label "voice"@en; rdfs:comment """ This is stolen from Christophe Rhodes' GSharp. A grouping of events forming a `voice'. """; . :Motif a owl:Class; rdfs:subClassOf event:Event; rdfs:label "motif"@en; rdfs:comment """ A classification of a set of events forming a motif. It can either be several note events, a set of bars, etc. """; . :Octave a owl:Class; # Not sure what it should be . :Timbre a owl:Class; # Not sure what it should be . :Accidental a owl:Class; rdfs:label "accidental"@en; rdfs:comment """ An accidental - eg. flat, sharp, natural """; . # Properties :pitch a owl:ObjectProperty; a owl:FunctionalProperty; rdfs:subPropertyOf event:factor; rdfs:label "pitch"@en; rdfs:domain :NoteEvent; rdfs:range :Pitch; . :timbre a owl:ObjectProperty; rdfs:subPropertyOf event:factor; rdfs:label "timbre"@en; rdfs:domain :NoteEvent; rdfs:range :Timbre; . :note a owl:ObjectProperty; a owl:FunctionalProperty; rdfs:label "note"@en; rdfs:domain :Pitch; rdfs:range :Note; . :accidental a owl:ObjectProperty; a owl:FunctionalProperty; rdfs:label "accidental"@en; rdfs:domain :Note; rdfs:range :Accidental; . :octave a owl:DatatypeProperty; rdfs:label "octave"@en; rdfs:domain :Note; rdfs:range xsd:int; . # Individuals :a a :Note. :b a :Note. :c a :Note. :d a :Note. :e a :Note. :f a :Note. :g a :Note. :sharp a :Accidental. :natural a :Accidental. :flat a :Accidental. :double_sharp a :Accidental. :double_flat a :Accidental. :double_natural a :Accidental. # This is just a joke :-)