@prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
@prefix opts: <http://lv2plug.in/ns/ext/options#> .
@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 xsd:  <http://www.w3.org/2001/XMLSchema#> .

<http://lv2plug.in/ns/ext/options>
	a owl:Ontology ;
	rdfs:seeAlso <options.h> ,
		<../../meta/meta.ttl> ,
		<lv2-options.doap.ttl> ;
	lv2:documentation """

<p>This extension defines a facility for <q>options</q>, which are dynamic
properties that may be changed at run time.</p>

<p>There are two facilities for passing options to an instance: opts:options
allows passing options at instantiation time, and the opts:interface interface
allows options to be dynamically set and retrieved after instantiation.</p>

<p>Note that this extension is only for allowing hosts to configure plugins,
and is not a <q>live</q> control mechanism.  For real-time control, use
event-based control via an atom:AtomPort with an atom:Sequence buffer.</p>

<p>Instances may indicate they <q>require</q> an option with the
opts:requiredOption property, or that they optionally <q>support</q> an option
with the opts:supportedOption property.</p>
""" .

opts:Option
	a rdfs:Class ;
	rdfs:label "Option" ;
	rdfs:subClassOf rdf:Property ;
	lv2:documentation """
<p>A property intended to be used as a static option for an instance.</p>

<p>It is not required for a property to explicitly be an Option in order to be
used as such.  However, properties which are primarily intended for use as
options, or are at least particularly useful as options, should be explicitly
given this type for documentation purposes, and to assist hosts in discovering
option definitions.</p>
""" .

opts:interface
	a lv2:ExtensionData ;
	lv2:documentation """
<p>An interface (LV2_Options_Interface) for dynamically setting and getting
options.  Note this is intended for use by the host for configuring plugins
only, and and is <em>not</em> a <q>live</q> plugin control mechanism.</p>

<p>The plugin data file should describe this like so:</p>
<pre class="turtle-code">
@prefix opts: &lt;http://lv2plug.in/ns/ext/options#&gt; .

&lt;plugin&gt;
    a lv2:Plugin ;
    lv2:extensionData opts:interface .
</pre>
""" .

opts:options
	a lv2:Feature ;
	rdfs:label "options" ;
	lv2:documentation """
<p>The feature used to provide options to an instance.</p>

<p>To implement this feature, hosts MUST pass an LV2_Feature to the appropriate
instantiate method with this URI and data pointed to an array of
LV2_Options_Option terminated by an element with both key and value set to
zero.  The instance should cast this data pointer to <code>const
LV2_Options_Option*</code> and scan the array for any options of interest.  The
instance MUST NOT modify the options array in any way.</p>

<p>Note that requiring this feature may reduce the number of compatible hosts.
Unless some options are strictly required by the instance, this feature SHOULD
be listed as a lv2:optionalFeature.</p>
""" .

opts:requiredOption
	a rdf:Property ,
		owl:ObjectProperty ;
	rdfs:range opts:Option ;
	rdfs:label "required option" ;
	lv2:documentation """
<p>An option required by the instance to function at all.  The host MUST pass a
value for the specified option via opts:options in order to create an
instance.</p>

<p>Note that use of this property may reduce the number of compatible hosts.
Wherever possible, it is better to list options with opts:supportedOption and
fall back to a reasonable default value if it is not provided.</p>
""" .

opts:supportedOption
	a rdf:Property ,
		owl:ObjectProperty ;
	rdfs:range opts:Option ;
	rdfs:label "supported option" ;
	lv2:documentation """
<p>An option supported or <q>understood</q> by the instance.  The host SHOULD
provide a value for the specified option if one is known, or provide the user
an opportunity to specify one if one is Indicates that the instance host MUST
pass a value for the specified option in order to instantiate the instance.</p>
""" .
