diff options
-rw-r--r-- | core.lv2/ChangeLog | 3 | ||||
-rw-r--r-- | core.lv2/lv2.ttl | 200 | ||||
-rw-r--r-- | 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 <d@drobilla.net> 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: <http://www.w3.org/2002/07/owl#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix doap: <http://usefulinc.com/ns/doap#> . -@prefix foaf: <http://xmlns.com/foaf/0.1/> . #################### ## 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. ####################### <http://lv2plug.in/ns/lv2core> - a doap:Project , lv2:Specification ; - doap:license <http://usefulinc.com/doap/licenses/mit> ; - doap:name "LV2" ; - doap:homepage <http://lv2plug.in> ; - 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 <http://plugin.org.uk/> ; - rdfs:seeAlso <http://plugin.org.uk/swh.xrdf> - ] , [ - a foaf:Person ; - foaf:name "David Robillard" ; - foaf:homepage <http://drobilla.net/> ; - rdfs:seeAlso <http://drobilla.net/drobilla.rdf> - ] ; + a lv2:Specification ; lv2:documentation """ <h4>Overview</h4> @@ -174,7 +152,7 @@ plugin instances simultaneously.</p> ## 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,17 +161,11 @@ 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 ; rdfs:comment """ @@ -203,6 +175,12 @@ with no language tag. lv2:documentation """ <p>The class which represents an LV2 plugin.</p> +<p>To be discovered by hosts, plugins MUST explicitly have rdf:type lv2:Plugin +listed in their bundle's manifest, e.g.:</p> +<pre> +<http://example.org/my-plugin> a lv2:Plugin . +</pre> + <p>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. <q>Tape Delay Unit</q>. Use doap:shortdesc or doap:description for more @@ -214,31 +192,13 @@ detailed descriptions.</p> ## 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).</p> """ . -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 <code>float</code>.</p> """ . -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 <code>float</code>.</p> ## 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</a>, the property which describes the other half.</p> """ . -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 <a href="http://lv2plug.in/ns/lv2core#minorVersion">lv2:minorVersion</a>.</p> """ . -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 """ - <p>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).</p> @@ -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.</p> """ . -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.</p> ## Documentation ## #################################### -lv2:documentation a rdf:Property ; +lv2:documentation a rdf:Property , owl:DatatypeProperty ; rdfs:range rdfs:Literal ; rdfs:label "documentation" ; rdfs:seeAlso <http://www.w3.org/TR/xhtml-basic/> ; @@ -486,7 +445,7 @@ devices). See <a href="http://www.w3.org/TR/xhtml-basic/#s_xhtmlmodules" ## Mandatory Port RDF Properties ## ################################### -lv2:index a rdf:Property ; +lv2:index a rdf:Property , owl:DatatypeProperty ; rdfs:domain lv2:Port ; rdfs:range xsd:nonNegativeInteger ; rdfs:label "index" ; @@ -495,8 +454,7 @@ Specifies the index of the port, passed as an argument to the connect port function. The index uniqely identifies the port on an instance of the plugin. """ . -lv2:symbol a rdf:Property ; - rdfs:domain lv2:Resource ; +lv2:symbol a rdf:Property , owl:DatatypeProperty ; rdfs:label "symbol" ; rdfs:comment """ A short name used as a machine and human readable identifier. @@ -509,7 +467,7 @@ identifies the port on a plugin with a given URI (i.e. the plugin author MUST change the plugin URI if a port symbol is changed or removed). """ . -lv2:name a rdf:Property ; +lv2:name a rdf:Property , owl:DatatypeProperty ; rdfs:domain lv2:Port ; rdfs:label "name" ; rdfs:comment """ @@ -525,7 +483,7 @@ property without changing the Plugin URI. ## Optional Port RDF Properties ## ################################## -lv2:Point a rdfs:Class ; +lv2:Point a rdfs:Class , owl:Class ; rdfs:label "Port value point" ; rdfs:comment """ Used to describe interesting values in a Port's range. To be valid it @@ -535,26 +493,26 @@ There are 3 specially defined Points in the LV2 specification (default, minimum, and maximum), though future extensions may define more. """ . -lv2:ScalePoint a rdfs:Class ; +lv2:ScalePoint a rdfs:Class , owl:Class ; rdfs:subClassOf lv2:Point ; rdfs:comment "A single float Point (for control inputs)." . -lv2:scalePoint a rdf:Property ; +lv2:scalePoint a rdf:Property , owl:ObjectProperty ; rdfs:domain lv2:Port ; rdfs:range lv2:ScalePoint ; rdfs:label "Scale point" ; rdfs:comment "Relates a Port to its ScalePoints." . -lv2:default a rdf:Property ; - rdfs:subPropertyOf lv2:scalePoint ; +lv2:default a rdf:Property , owl:DatatypeProperty ; + rdfs:domain lv2:Port ; rdfs:label "Default value" ; rdfs:comment """ The default value that the host SHOULD set this port to when there is no other information available. """ . -lv2:minimum a rdf:Property ; - rdfs:subPropertyOf lv2:scalePoint ; +lv2:minimum a rdf:Property , owl:DatatypeProperty ; + rdfs:domain lv2:Port ; rdfs:label "Minimum value" ; lv2:documentation """ A hint to the host for the minimum useful value that the port will use. This @@ -562,8 +520,8 @@ is a <q>soft</q> 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 """ <p>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.</p> ## 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.</p> """ . -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).</p> ## 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: <http://lv2plug.in/ns/lv2core#>. -@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. +@prefix doap: <http://usefulinc.com/ns/doap#> . +@prefix foaf: <http://xmlns.com/foaf/0.1/> . +@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . <http://lv2plug.in/ns/lv2core> - a lv2:Specification ; + a doap:Project , lv2:Specification ; lv2:minorVersion 3 ; lv2:microVersion 2 ; - rdfs:seeAlso <lv2.ttl> . + rdfs:seeAlso <lv2.ttl> ; + doap:license <http://usefulinc.com/doap/licenses/mit> ; + doap:name "LV2" ; + doap:homepage <http://lv2plug.in> ; + 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 <http://plugin.org.uk/> ; + rdfs:seeAlso <http://plugin.org.uk/swh.xrdf> + ] , [ + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:homepage <http://drobilla.net/> ; + rdfs:seeAlso <http://drobilla.net/drobilla.rdf> + ] . + |