From 673c2fa8e710c94b1ce250ec7b01d183d2bf91a0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 18 Mar 2011 06:20:40 +0000 Subject: Add OWL types. Fix lv2:minimum, lv2:maximum, and lv2:minimum (definition did not match the reality of their usage) (Spec bug found with Pellet). Move project description metadata to manifest. Remove invalid (non-DL) OWL restrictions, and use of Turtle collection syntax (there is at least one broken implementation in the wild that fails to parse this). LV2 is now almost, but not quite, a valid OWL DL Ontology. --- core.lv2/ChangeLog | 3 + core.lv2/lv2.ttl | 200 ++++++++++++++++++++------------------------------ core.lv2/manifest.ttl | 32 +++++++- 3 files changed, 110 insertions(+), 125 deletions(-) diff --git a/core.lv2/ChangeLog b/core.lv2/ChangeLog index 5043095..0d7db59 100644 --- a/core.lv2/ChangeLog +++ b/core.lv2/ChangeLog @@ -7,6 +7,9 @@ lv2core (UNRELEASED) unstable; urgency=low * Move lv2:AmplifierPlugin under lv2:DynamicsPlugin * Loosen domain restriction of lv2:optionalFeature and lv2:requiredFeature (to allow re-use in extensions) + * Fix definition of lv2:minimum etc. (used for values, not scale points) + * More precisely define properties with OWL + * Move project metadata to manifest -- David Robillard UNRELEASED diff --git a/core.lv2/lv2.ttl b/core.lv2/lv2.ttl index 5b93418..4350f8b 100644 --- a/core.lv2/lv2.ttl +++ b/core.lv2/lv2.ttl @@ -27,15 +27,14 @@ @prefix owl: . @prefix xsd: . @prefix doap: . -@prefix foaf: . #################### ## Resource Class ## #################### -lv2:Resource a rdfs:Class ; +lv2:Resource a rdfs:Class , owl:Class ; rdfs:comment """ -An LV2 Resource (e.g. plugin, specification, or any other LV2 related thing) +An LV2 Resource (e.g. plugin, specification, or any other LV2 related thing). """ . @@ -43,7 +42,7 @@ An LV2 Resource (e.g. plugin, specification, or any other LV2 related thing) ## Specification Class ## ######################### -lv2:Specification a rdfs:Class ; +lv2:Specification a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Resource ; rdfs:comment """ An LV2 specification (i.e. this specification, or an LV2 extension). @@ -59,28 +58,7 @@ more details. ####################### - a doap:Project , lv2:Specification ; - doap:license ; - doap:name "LV2" ; - doap:homepage ; - doap:created "2004-04-21" ; - doap:shortdesc "An audio plugin interface specification" ; - doap:programming-language "C" ; - doap:release [ - doap:revision "3.2" ; - doap:created "2011-03-17" - ] ; - doap:maintainer [ - a foaf:Person ; - foaf:name "Steve Harris" ; - foaf:homepage ; - rdfs:seeAlso - ] , [ - a foaf:Person ; - foaf:name "David Robillard" ; - foaf:homepage ; - rdfs:seeAlso - ] ; + a lv2:Specification ; lv2:documentation """

Overview

@@ -174,7 +152,7 @@ plugin instances simultaneously.

## Template/Plugin Classes ## ############################# -lv2:Template a rdfs:Class ; +lv2:Template a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Resource ; rdfs:comment """ An abstract plugin-like resource that may not actually be an LV2 plugin @@ -183,16 +161,10 @@ may have ports, and otherwise mimic the structure of a plugin. This should be subclassed by extensions that define such things. """ . -lv2:Plugin a rdfs:Class ; +lv2:Plugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Template ; rdfs:label "Plugin" ; rdfs:subClassOf [ - a owl:Restriction ; - owl:onProperty rdf:type ; - owl:hasValue lv2:Plugin ; - rdfs:comment """ -A Plugin MUST have at least one rdf:type that is lv2:Plugin. -""" ] , [ a owl:Restriction ; owl:onProperty doap:name ; owl:someValuesFrom xsd:string ; @@ -203,6 +175,12 @@ with no language tag. lv2:documentation """

The class which represents an LV2 plugin.

+

To be discovered by hosts, plugins MUST explicitly have rdf:type lv2:Plugin +listed in their bundle's manifest, e.g.:

+
+<http://example.org/my-plugin> a lv2:Plugin .
+
+

Plugins SHOULD have a doap:license property whenever possible. The doap:name property should be at most a few words in length using title capitalization, e.g. Tape Delay Unit. Use doap:shortdesc or doap:description for more @@ -214,31 +192,13 @@ detailed descriptions.

## Port Classes ## ################## -lv2:Port a rdfs:Class ; +lv2:Port a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Resource ; rdfs:label "Port" ; rdfs:subClassOf [ - a owl:Restriction ; - owl:onProperty rdf:type ; - owl:someValuesFrom [ - a owl:DataRange ; - owl:oneOf ( lv2:Port lv2:InputPort lv2:OutputPort ) - ] ; - rdfs:comment """ -A Port MUST have at least one rdf:type property that is one of lv2:Port, -lv2:InputPort, or lv2:OutputPort. -""" ] , [ - a owl:Restriction ; - owl:onProperty rdf:type ; - owl:minCardinality 2 ; - rdfs:comment """ -A Port MUST have at least two rdf:type properties that are some -subclass of lv2:Port (one for lv2:Port, lv2:InputPort, or lv2:OutputPort, -and another to describe the specific data type, e.g. lv2:AudioPort). -""" ] , [ a owl:Restriction ; owl:onProperty lv2:index ; - owl:someValuesFrom xsd:nonNegativeInteger ; + owl:allValuesFrom xsd:nonNegativeInteger ; owl:cardinality 1 ; rdfs:comment """ A port MUST have a single lv2:index which is of type xsd:nonNegativeInteger @@ -283,7 +243,7 @@ necessarily refer to the same port on all plugins with a given URI (i.e. the index for a port may differ between plugin binaries).

""" . -lv2:InputPort a rdfs:Class ; +lv2:InputPort a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Port ; rdfs:label "Input port" ; rdfs:comment """ @@ -291,7 +251,7 @@ Ports of this type will be connected to a pointer to some value, which will be read by the plugin during their run method. """ . -lv2:OutputPort a rdfs:Class ; +lv2:OutputPort a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Port ; rdfs:label "Output port" ; rdfs:comment """ @@ -299,7 +259,7 @@ Ports of this type will be connected to a pointer to some value, which will be written to by the plugin during their run method. """ . -lv2:ControlPort a rdfs:Class ; +lv2:ControlPort a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Port ; rdfs:label "Control port" ; lv2:documentation """ @@ -308,7 +268,7 @@ type float.

""" . -lv2:AudioPort a rdfs:Class ; +lv2:AudioPort a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Port ; rdfs:label "Audio port" ; lv2:documentation """ @@ -321,13 +281,13 @@ with elements of C type float.

## Mandatory Plugin RDF Properties ## ##################################### -lv2:port a rdf:Property ; +lv2:port a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Template ; rdfs:range lv2:Port ; rdfs:label "port" ; rdfs:comment "Relates a Template or Plugin to the Ports it contains" . -lv2:minorVersion a rdf:Property ; +lv2:minorVersion a rdf:Property , owl:DatatypeProperty ; rdfs:domain lv2:Resource ; rdfs:range xsd:nonNegativeInteger ; rdfs:label "minor version" ; @@ -401,7 +361,7 @@ href="http://lv2plug.in/ns/lv2core#minorVersion">lv2:minorVersion, the property which describes the other half.

""" . -lv2:microVersion a rdf:Property ; +lv2:microVersion a rdf:Property , owl:DatatypeProperty ; rdfs:domain lv2:Resource ; rdfs:range xsd:nonNegativeInteger ; rdfs:label "micro version" ; @@ -419,12 +379,11 @@ documentation on LV2 resource versioning, see lv2:minorVersion.

""" . -lv2:binary a rdf:Property ; +lv2:binary a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Resource ; - rdfs:range rdfs:Resource ; + rdfs:range owl:Thing ; rdfs:label "binary" ; lv2:documentation """ -

The binary of an LV2 resource. The value of this property must be a URI that resolves to a shared library object (the actual type of this library is system specific).

@@ -436,8 +395,8 @@ be used to access the descriptor for that plugin. This property may be used similarly by extensions to relate other resources to their implementations.

""" . -lv2:appliesTo a rdf:Property ; - rdfs:domain rdfs:Resource ; +lv2:appliesTo a rdf:Property , owl:ObjectProperty ; + rdfs:domain lv2:Resource ; rdfs:range lv2:Plugin ; rdfs:label "Applies to" ; lv2:documentation """ @@ -464,7 +423,7 @@ not the plugin itself.

## Documentation ## #################################### -lv2:documentation a rdf:Property ; +lv2:documentation a rdf:Property , owl:DatatypeProperty ; rdfs:range rdfs:Literal ; rdfs:label "documentation" ; rdfs:seeAlso ; @@ -486,7 +445,7 @@ devices). See soft limit; the plugin is required to gracefully accept all values in the range of a port's data type. """ . -lv2:maximum a rdf:Property ; - rdfs:subPropertyOf lv2:scalePoint ; +lv2:maximum a rdf:Property , owl:DatatypeProperty ; + rdfs:domain lv2:Port ; rdfs:label "Maximum value" ; lv2:documentation """

A hint to the host for the maximum useful value that the port will use. @@ -576,14 +534,14 @@ values in the range of a port's data type.

## Features ## ############## -lv2:Feature a rdfs:Class ; +lv2:Feature a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Resource ; rdfs:label "Feature" ; rdfs:comment """ An additional feature which a plugin or other resource may use or require. """. -lv2:optionalFeature a rdf:Property ; +lv2:optionalFeature a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Resource ; rdfs:range lv2:Feature ; rdfs:label "Optional feature" ; @@ -594,7 +552,7 @@ the plugin in LV2_Descriptor::instantiate(). The plugin MUST NOT fail to instantiate if an optional feature is not supported by the host.

""" . -lv2:requiredFeature a rdf:Property ; +lv2:requiredFeature a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Resource ; rdfs:range lv2:Feature ; rdfs:label "Required feature" ; @@ -612,14 +570,14 @@ instantiate is strongly discouraged).

## PortProperties ## #################### -lv2:PortProperty a rdfs:Class ; +lv2:PortProperty a rdfs:Class , owl:Class ; rdfs:label "Port property" ; rdfs:comment """ A port property - a useful piece of information that allows a host to make more sensible decisions (e.g. to provide a better interface). """ . -lv2:portProperty a rdf:Property ; +lv2:portProperty a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Port ; rdfs:range lv2:PortProperty ; rdfs:label "Port property" ; @@ -753,53 +711,53 @@ input value (i.e. round the input value down). ## Plugin Classes ## #################### -lv2:GeneratorPlugin a rdfs:Class ; +lv2:GeneratorPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Generator" ; rdfs:comment """ Any plugin that generates sound internally, rather than processing its input. """ . -lv2:InstrumentPlugin a rdfs:Class ; +lv2:InstrumentPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:GeneratorPlugin ; rdfs:label "Instrument" ; rdfs:comment """ Any plugin that is intended to be played as a musical instrument. """ . -lv2:OscillatorPlugin a rdfs:Class ; +lv2:OscillatorPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:GeneratorPlugin ; rdfs:label "Oscillator" . -lv2:UtilityPlugin a rdfs:Class ; +lv2:UtilityPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Utility" ; rdfs:comment """ Includes things like mathematical functions and non-musical delays. """ . -lv2:ConverterPlugin a rdfs:Class ; +lv2:ConverterPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:UtilityPlugin ; rdfs:label "Converter" ; rdfs:comment """ Any plugin that converts some form of input into a different form of output. """ . -lv2:AnalyserPlugin a rdfs:Class ; +lv2:AnalyserPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:UtilityPlugin ; rdfs:label "Analyser" ; rdfs:comment """ Any plugin that analyses input to output some useful information. """ . -lv2:MixerPlugin a rdfs:Class ; +lv2:MixerPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:UtilityPlugin ; rdfs:label "Mixer" ; rdfs:comment """ A plugin which mixes some number of inputs into some number of outputs. """ . -lv2:SimulatorPlugin a rdfs:Class ; +lv2:SimulatorPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Simulator" ; rdfs:comment """ @@ -807,72 +765,72 @@ Plugins that aim to duplicate the effect of some environmental effect or musical equipment. """ . -lv2:DelayPlugin a rdfs:Class ; +lv2:DelayPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Delay" ; rdfs:comment """ Plugins that intentionally delay their input signal as an effect. """ . -lv2:ModulatorPlugin a rdfs:Class ; +lv2:ModulatorPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Modulator" . -lv2:ReverbPlugin a rdfs:Class ; +lv2:ReverbPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:subClassOf lv2:SimulatorPlugin ; rdfs:subClassOf lv2:DelayPlugin ; rdfs:label "Reverb" . -lv2:PhaserPlugin a rdfs:Class ; +lv2:PhaserPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:ModulatorPlugin ; rdfs:label "Phaser" . -lv2:FlangerPlugin a rdfs:Class ; +lv2:FlangerPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:ModulatorPlugin ; rdfs:label "Flanger" . -lv2:ChorusPlugin a rdfs:Class ; +lv2:ChorusPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:ModulatorPlugin ; rdfs:label "Chorus" . -lv2:FilterPlugin a rdfs:Class ; +lv2:FilterPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Filter" . -lv2:LowpassPlugin a rdfs:Class ; +lv2:LowpassPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Lowpass" . -lv2:BandpassPlugin a rdfs:Class ; +lv2:BandpassPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Bandpass" . -lv2:HighpassPlugin a rdfs:Class ; +lv2:HighpassPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Highpass" . -lv2:CombPlugin a rdfs:Class ; +lv2:CombPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Comb" . -lv2:AllpassPlugin a rdfs:Class ; +lv2:AllpassPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Allpass" . -lv2:EQPlugin a rdfs:Class ; +lv2:EQPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:FilterPlugin ; rdfs:label "Equaliser" . -lv2:ParaEQPlugin a rdfs:Class ; +lv2:ParaEQPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:EQPlugin ; rdfs:label "Parametric" . -lv2:MultiEQPlugin a rdfs:Class ; +lv2:MultiEQPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:EQPlugin ; rdfs:label "Multiband" . -lv2:SpatialPlugin a rdfs:Class ; +lv2:SpatialPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Spatial" ; rdfs:comment """ @@ -880,56 +838,56 @@ Plugins that manipulate the position of audio in space (e.g. panning, stereo width, surround encoding, etc.). """ . -lv2:SpectralPlugin a rdfs:Class ; +lv2:SpectralPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Spectral" ; rdfs:comment """ Plugins that alter the spectral properties (e.g. frequency) of audio. """ . -lv2:PitchPlugin a rdfs:Class ; +lv2:PitchPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:SpectralPlugin ; rdfs:label "Pitch Shifter" . -lv2:AmplifierPlugin a rdfs:Class ; +lv2:AmplifierPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DynamicsPlugin ; rdfs:label "Amplifier" . -lv2:DistortionPlugin a rdfs:Class ; +lv2:DistortionPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Distortion" . -lv2:WaveshaperPlugin a rdfs:Class ; +lv2:WaveshaperPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DistortionPlugin ; rdfs:label "Waveshaper" . -lv2:DynamicsPlugin a rdfs:Class ; +lv2:DynamicsPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Plugin ; rdfs:label "Dynamics" ; rdfs:comment """ Plugins that alter the envelope or dynamic range of audio. """ . -lv2:CompressorPlugin a rdfs:Class ; +lv2:CompressorPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DynamicsPlugin ; rdfs:label "Compressor" . -lv2:ExpanderPlugin a rdfs:Class ; +lv2:ExpanderPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DynamicsPlugin ; rdfs:label "Expander" . -lv2:LimiterPlugin a rdfs:Class ; +lv2:LimiterPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DynamicsPlugin ; rdfs:label "Limiter" . -lv2:GatePlugin a rdfs:Class ; +lv2:GatePlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:DynamicsPlugin ; rdfs:label "Gate" . -lv2:FunctionPlugin a rdfs:Class ; +lv2:FunctionPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:UtilityPlugin ; rdfs:label "Function" . -lv2:ConstantPlugin a rdfs:Class ; +lv2:ConstantPlugin a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:GeneratorPlugin ; rdfs:label "Constant" . diff --git a/core.lv2/manifest.ttl b/core.lv2/manifest.ttl index 454a0c5..c4f134d 100644 --- a/core.lv2/manifest.ttl +++ b/core.lv2/manifest.ttl @@ -1,8 +1,32 @@ -@prefix lv2: . -@prefix rdfs: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix rdfs: . - a lv2:Specification ; + a doap:Project , lv2:Specification ; lv2:minorVersion 3 ; lv2:microVersion 2 ; - rdfs:seeAlso . + rdfs:seeAlso ; + doap:license ; + doap:name "LV2" ; + doap:homepage ; + doap:created "2004-04-21" ; + doap:shortdesc "An audio plugin interface specification" ; + doap:programming-language "C" ; + doap:release [ + doap:revision "3.2" ; + doap:created "2011-03-17" + ] ; + doap:maintainer [ + a foaf:Person ; + foaf:name "Steve Harris" ; + foaf:homepage ; + rdfs:seeAlso + ] , [ + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:homepage ; + rdfs:seeAlso + ] . + -- cgit v1.2.1