@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix morph: <http://lv2plug.in/ns/ext/morph#> .
@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/morph>
	a owl:Ontology ,
		lv2:Specification ;
	rdfs:seeAlso <morph.h> ,
		<morph.meta.ttl> ;
	lv2:documentation """
<p>This extension defines two port types: morph:MorphPort, which has a
host-configurable type, and morph:AutoMorphPort, which may automatically change
type when a MorphPort's type is changed.  These ports always have a default
type and work normally work in hosts that are unaware of this extension.  Thus,
this extension provides a backwards compatibility mechanism which allows
plugins to use new port types but gracefully fall back to a default type in
hosts that do not support them.</p>

<p>This extension only defines port types and properties for describing morph
ports.  The actual run-time switching is done via the opts:interface API.</p>
""" .

morph:MorphPort
	a rdfs:Class ,
		owl:Class ;
	rdfs:subClassOf lv2:Port ;
	rdfs:label "Morph Port" ;
	lv2:documentation """
<p>Ports of this type MUST have another type which defines the default buffer
format (e.g. lv2:ControlPort) but can be dynamically changed to a different
type in hosts that support opts:interface.</p>

<p>The host may change the type of a MorphPort by setting its morph:currentType
with LV2_Options_Interface::set().  If the plugin has any morph:AutoMorphPort
ports, the host MUST check their types after changing any port type since they
may have changed.</p> """ .

morph:AutoMorphPort
	a rdfs:Class ,
		owl:Class ;
	rdfs:subClassOf lv2:Port ;
	rdfs:label "Auto Morph Port" ;
	lv2:documentation """
<p>Ports of this type MUST have another type which defines the default buffer
format (e.g. lv2:ControlPort) but may dynamically change types based on the
configured types of any morph:MorphPort ports on the same plugin instance.</p>

<p>The type of a port may only change in response to a host call to
LV2_Options_Interface::set().  Whenever any port type on the instance changes,
the host MUST check the type of all morph:AutoMorphPort ports with
LV2_Options_Interface::get() before calling run() again, since they may have
changed.  If the type of any port is zero, it means the current configuration
is invalid and the plugin may not be run (unless that port is
lv2:connectionOptional and connected to NULL).</p>

<p>This is mainly useful for outputs whose type depends on the type of
corresponding inputs.</p>
""" .

morph:supportsType
	a rdf:Property ,
		owl:ObjectProperty ;
	rdfs:domain morph:MorphPort ;
	rdfs:label "supports type" ;
	lv2:documentation """
<p>Indicates that a port supports being switched to a certain type.  A
MorphPort MUST list each type it supports being switched to in the plugin data
using this property.</p>
""" .

morph:currentType
	a rdf:Property ,
		opts:Option ,
		owl:ObjectProperty ;
	rdfs:domain morph:MorphPort ;
	rdfs:label "current type" ;
	lv2:documentation """
<p>The currently active type of the port.  This is for dynamic use as an option
and SHOULD NOT be listed in the static plugin data.</p>
""" .