@prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix time: <http://lv2plug.in/ns/ext/time#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .

<http://lv2plug.in/ns/ext/time>
	a owl:Ontology ;
	rdfs:seeAlso <time.h> ,
		<lv2-time.doap.ttl> ;
	lv2:documentation """
<p>This is a vocabulary for precisely describing a position in time and the
passage of time itself, in both real and musical terms.</p>

<p>In addition to real time (e.g. seconds), two units of time are used:
<q>frames</q> and <q>beats</q>.  A frame is a numbered quantum of time.  Frame
time is related to real-time by the <q>frame rate</q> or <q>sample rate</q>,
time:framesPerSecond.  A beat is a single pulse of musical time.  Beat time is
related to real-time by the <q>tempo</q>, time:beatsPerMinute.</p>

<p>Musical time additionally has a <q>meter</q> which describes passage of time
in terms of musical <q>bars</q>.  A bar is a higher level grouping of beats.
The meter describes how many beats are in one bar.</p>
""" .

time:Time
	a rdfs:Class ;
	rdfs:subClassOf time:Position ;
	rdfs:label "Time" ;
	rdfs:comment "A point in time in some unit/dimension." .

time:Position
	a rdfs:Class ;
	rdfs:label "Position" ;
	lv2:documentation """
<p>A point in time and/or the speed at which time is passing.  A position is
both a point and a speed, which precisely defines a time within a timeline.</p>
""" .

time:Rate
	a rdfs:Class ;
	rdfs:subClassOf time:Position ;
	rdfs:label "Rate" ;
	lv2:documentation """
<p>The rate of passage of time in terms of one unit with respect to
another.</p> """ .

time:position
	a rdf:Property ,
		owl:ObjectProperty ,
		owl:FunctionalProperty ;
	rdfs:range time:Position ;
	rdfs:label "position" .

time:barBeat
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Time ;
	rdfs:range xsd:float ;
	rdfs:label "beat within bar" ;
	rdfs:comment "The beat number within the bar, from 0 to beatsPerBar." .

time:bar
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Time ;
	rdfs:range xsd:long ;
	rdfs:label "bar" .

time:beat
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Time ;
	rdfs:range xsd:double ;
	rdfs:label "beat" .

time:beatUnit
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Rate ;
	rdfs:range xsd:nonNegativeInteger ;
	lv2:documentation """
<p>Beat unit, the note value that counts as one beat.  This is the bottom number
in a time signature: 2 for half note, 4 for quarter note, and so on.</p>
""" .

time:beatsPerBar
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Rate ;
	rdfs:range xsd:float ;
	rdfs:label "beats per bar" .

time:beatsPerMinute
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Rate ;
	rdfs:range xsd:float ;
	rdfs:label "beats per minute" ;
	rdfs:comment "Tempo in beats per minute." .

time:frame
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Time ;
	rdfs:range xsd:long ;
	rdfs:label "frame" .

time:framesPerSecond
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Rate ;
	rdfs:range xsd:float ;
	rdfs:label "frames per second" ;
	rdfs:comment "Frame rate in frames per second." .

time:speed
	a rdf:Property ,
		owl:DatatypeProperty ,
		owl:FunctionalProperty ;
	rdfs:domain time:Rate ;
	rdfs:range xsd:float ;
	rdfs:label "speed" ;
	lv2:documentation """
<p>The rate of the progress of time as a fraction of normal speed.  For
example, a rate of 0.0 is stopped, 1.0 is rolling at normal speed, 0.5 is
rolling at half speed, -1.0 is reverse, and so on.
</p>
""" .