# LV2 Message Extension
# Copyright (C) 2007-2010 David Robillard <d@drobilla.net>
# 
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

@prefix msg:  <http://lv2plug.in/ns/ext/message#> .
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
@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/message>
	a lv2:Specification ;
    doap:name "LV2 Message" ;
    doap:maintainer [
        a foaf:Person ;
        foaf:name     "David Robillard" ;
        foaf:homepage <http://drobilla.net/> ;
        rdfs:seeAlso  <http://drobilla.net/drobilla.rdf>
    ] ;
	rdfs:comment """
This extension defines a standard for LV2 "messages" which allow dynamic
control and investigation of plugin instances, by both hosts and other
plugins.

This extension requires the host to support the <a
href="http://lv2plug.in/ns/ext/uri-map">LV2 URI Map</a> extension, and the
<a href="http://lv2plug.in/ns/ext/atom">LV2 Atom</a> extension.
""" .


msg:MessageType a rdfs:Class ;
	rdfs:label   "LV2 Message Type" ;
	rdfs:comment """
Base class for all types of LV2 Message.

A type of message, which must be a resource (i.e. have a URI).  This URI
is used as the selector component of a Message and is used by receivers to
interpret the meaning of messages (e.g. which components are present).

A message in memory is simply an <a href="http://lv2plug.in/ns/ext/atom#Dict"
>atom:Dict</a> with at least one rdf:type that is a rdfs:subClassOf
msg:MessageType.  The definitions of various message types define what
other key/value pairs can be expected in the message.
""" .

msg:ControlPort a rdfs:Class ;
    rdfs:label      "Control Port" ;
    rdfs:subClassOf lv2:Port ;
    rdfs:comment    """
An input port used to control a plugin instance.  A plugin has
at most 1 msg:ControlPort.  A ControlPort is always an lv2:InputPort.  Hosts
can send messages to the control port in order to investigate or manipulate
a plugin instance (possibly on behalf of a UI or another plugin instance).

This is an abstract port class, the actual format and semantics
of the port buffer (and messages) are defined by some other port type, i.e.
a cmdControlPort MUST have another type which defines the format and semantics
of the port buffer contents (likely candidates are
<a href="http://lv2plug.in/ns/ext/atom#MessagePort">atom:MessagePort</a>
or <a href="http://lv2plug.in/ns/ext/event#EventPort">ev:EventPort</a>).
""" .

msg:ResponsePort a rdfs:Class ;
    rdfs:label      "Response Port" ;
    rdfs:subClassOf lv2:Port ;
    rdfs:comment    """
An output port used to notify the host about changes to a plugin instance
or respond to messages send to its msg:ControlPort.  A plugin has at most
1 StatusPort.  A StatusPort is always an lv2:OutputPort.  Any response to a
command sent to the CommandPort of the plugin will appear in the StatusPort
output.  The plugin may also emit other messages (i.e. the contents of a
StatusPort are not necessarily responses to commands).

This is an abstract port class, the actual format and semantics
of the port buffer (and messages) are defined by some other port type, i.e.
a cmdControlPort MUST have another type which defines the format and semantics
of the port buffer contents (likely candidates are
<a href="http://lv2plug.in/ns/ext/atom#MessagePort">atom:MessagePort</a>
or <a href="http://lv2plug.in/ns/ext/event#EventPort">ev:EventPort</a>).
""" .