aboutsummaryrefslogtreecommitdiffstats
path: root/lv2/lv2plug.in/ns/ext/patch
diff options
context:
space:
mode:
Diffstat (limited to 'lv2/lv2plug.in/ns/ext/patch')
l---------lv2/lv2plug.in/ns/ext/patch/ext.pc.in1
-rw-r--r--lv2/lv2plug.in/ns/ext/patch/manifest.ttl9
-rw-r--r--lv2/lv2plug.in/ns/ext/patch/patch.h47
-rw-r--r--lv2/lv2plug.in/ns/ext/patch/patch.ttl349
l---------lv2/lv2plug.in/ns/ext/patch/waf1
l---------lv2/lv2plug.in/ns/ext/patch/wscript1
6 files changed, 408 insertions, 0 deletions
diff --git a/lv2/lv2plug.in/ns/ext/patch/ext.pc.in b/lv2/lv2plug.in/ns/ext/patch/ext.pc.in
new file mode 120000
index 0000000..03dd044
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/ext.pc.in
@@ -0,0 +1 @@
+../../../../../ext.pc.in \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/ext/patch/manifest.ttl b/lv2/lv2plug.in/ns/ext/patch/manifest.ttl
new file mode 100644
index 0000000..96e89eb
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/manifest.ttl
@@ -0,0 +1,9 @@
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<http://lv2plug.in/ns/ext/patch>
+ a lv2:Specification ;
+ lv2:minorVersion 0 ;
+ lv2:microVersion 1 ;
+ rdfs:seeAlso <patch.ttl> .
+
diff --git a/lv2/lv2plug.in/ns/ext/patch/patch.h b/lv2/lv2plug.in/ns/ext/patch/patch.h
new file mode 100644
index 0000000..f0327f1
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/patch.h
@@ -0,0 +1,47 @@
+/*
+ Copyright 2012 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/**
+ @file patch.h C header for the LV2 Message extension
+ <http://lv2plug.in/ns/ext/patch>.
+
+ The patch extension is purely data, this header merely defines URIs
+ for convenience.
+*/
+
+#ifndef LV2_PATCH_H
+#define LV2_PATCH_H
+
+#define LV2_PATCH_URI "http://lv2plug.in/ns/ext/patch"
+#define LV2_PATCH_PREFIX LV2_PATCH_URI "#"
+
+#define LV2_PATCH__Ack LV2_PATCH_PREFIX "Ack"
+#define LV2_PATCH__Delete LV2_PATCH_PREFIX "Delete"
+#define LV2_PATCH__Error LV2_PATCH_PREFIX "Error"
+#define LV2_PATCH__Get LV2_PATCH_PREFIX "Get"
+#define LV2_PATCH__Message LV2_PATCH_PREFIX "Message"
+#define LV2_PATCH__Move LV2_PATCH_PREFIX "Move"
+#define LV2_PATCH__Patch LV2_PATCH_PREFIX "Patch"
+#define LV2_PATCH__Post LV2_PATCH_PREFIX "Post"
+#define LV2_PATCH__Put LV2_PATCH_PREFIX "Put"
+#define LV2_PATCH__Request LV2_PATCH_PREFIX "Request"
+#define LV2_PATCH__Response LV2_PATCH_PREFIX "Response"
+#define LV2_PATCH__Set LV2_PATCH_PREFIX "Set"
+#define LV2_PATCH__add LV2_PATCH_PREFIX "add"
+#define LV2_PATCH__body LV2_PATCH_PREFIX "body"
+#define LV2_PATCH__request LV2_PATCH_PREFIX "request"
+
+#endif /* LV2_PATCH_H */
diff --git a/lv2/lv2plug.in/ns/ext/patch/patch.ttl b/lv2/lv2plug.in/ns/ext/patch/patch.ttl
new file mode 100644
index 0000000..34954fa
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/patch.ttl
@@ -0,0 +1,349 @@
+# LV2 Patch Extension
+# Copyright 2012 David Robillard <d@drobilla.net>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
+@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/patch>
+ a lv2:Specification ;
+ doap:license <http://opensource.org/licenses/isc> ;
+ doap:maintainer [
+ a foaf:Person ;
+ rdfs:seeAlso <http://drobilla.net/drobilla.rdf> ;
+ foaf:homepage <http://drobilla.net/> ;
+ foaf:name "David Robillard"
+ ] ;
+ doap:name "LV2 Patch" ;
+ doap:release [
+ doap:created "2012-02-08" ;
+ doap:revision "0.1"
+ ] ;
+ doap:shortdesc "Messages for accessing and manipulating properties." ;
+ lv2:documentation """
+<p>This extension defines messages which can be used to access and manipulate
+property-based data. It is designed to provide a powerful dynamic control
+interface for LV2 plugins, but is useful for RDF-like systems in general.</p>
+
+<p>The main feature of this design is that requests and responses are
+themselves completely described in RDF. Thus, the complete <q>protocol</q> can
+be expressed wherever RDF can without imposing additional implementation
+burdens like a new syntax or binary formats. In particular, messages can be
+serialised in Turtle, or as an <a
+href="http://lv2plug.in/ns/ext/atom#Object">LV2 Object</a>.</p>
+
+<p>This set of patch types is deliberately small to avoid an explosion of
+messages that all implementations would have to explicitly support. Instead,
+the idea is to achieve control via manipulating properties rather than defining
+custom commands. However, this is conceptual; there is no requirement that the
+receiver actually implement a store of resources with properties.</p>
+
+<p>For example, consider an object that can blink. Rather than define a
+specific interface to control this (e.g. <code>obj.start_blinking();
+obj.stop_blinking()</code>), set a <q>blinking</q> property to true or false to
+achieve the desired behaviour. One benefit of this approach is that a
+persistent state model is available <q>for free</q>: simply serialise the
+<q>blinking</q> property.</p>
+
+<p>Because changes are described in terms of properties, important
+functionality like undo stacks or revision control are simple to implement
+generically. Accordingly, plugins are strongly encouraged to use these
+property-based messages rather than defining custom methods for every action
+they require (or worse, defining entirely new formats for messages).</p>
+
+<p>These methods are deliberately very similar to HTTP methods, but defined
+specifically for property-based resources. The <q>properties</q> used here are
+RDF properties, thus predicates from any of the countless pre-existing
+vocabularies may be used.</p>
+""" .
+
+patch:Ack
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Response ;
+ rdfs:label "Ack" ;
+ lv2:documentation """
+<p>An acknowledgement that a request has been successfully processed. This is
+returned as a reply when a specific reply type is not necessary or
+appropriate.</p>
+""" .
+
+patch:Delete
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request ;
+ rdfs:label "Delete" ;
+ lv2:documentation """
+<p>Request the subject(s) be deleted.</p>
+""" .
+
+patch:Error
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Response ;
+ rdfs:label "Error" ;
+ lv2:documentation """
+<p>A response indicating an error processing a request.</p>
+""" .
+
+patch:Get
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request ;
+ rdfs:label "Get" ;
+ lv2:documentation """
+<p>Request a description of the subject.</p>
+
+<p>The detail of the response is not specified, it may be a flat description of
+all the properties of the subject, or a more expressive description with
+several subjects. A good choice is a <q><a
+href="http://www.w3.org/Submission/CBD/">concise bounded description</a></q>,
+i.e. a description which recursively includes all properties with blank node
+values.</p>
+
+<p>The response should have the same patch:subject property as the request, and
+a patch:body that is a description of that subject. For example:</p>
+<pre class="turtle-code">
+&lt;get-request&gt;
+ a patch:Get ;
+ patch:subject &lt;something&gt; .
+</pre>
+
+<p>Could result in:</p>
+<pre class="turtle-code">
+[]
+ a patch:Response ;
+ patch:request &lt;get-request&gt; ;
+ patch:subject &lt;something&gt; ;
+ patch:body [
+ eg:name "Something" ;
+ eg:ratio 1.6180339887 ;
+ ] .
+</pre>
+
+<p>Note the use of blank nodes is not required; the value of patch:body may be
+the actual resource node. Depending on the transport and syntax used this may
+be preferable. However, the patch:subject property is required regardless. For
+example, the same response could be written:</p>
+
+<pre class="turtle-code">
+&lt;something&gt;
+ eg:name "Something" ;
+ eg:ratio 1.6180339887 .
+
+[]
+ a patch:Response ;
+ patch:request &lt;get-request&gt; ;
+ patch:subject &lt;something&gt; ;
+ patch:body &lt;something&gt; .
+</pre>
+""" .
+
+patch:Insert
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request ;
+ rdfs:label "Insert" ;
+ rdfs:subClassOf [
+ a owl:Restriction ;
+ owl:maxCardinality 1 ;
+ owl:onProperty patch:subject
+ ] ;
+ lv2:documentation """
+<p>Insert the patch:body at patch:subject. If the subject does not exist, it is
+created. If the subject does already exist, it is added to. This request only
+adds properties, it never removes them. The user must take care that multiple
+values are not set for properties which should only have one value.</p>
+""" .
+
+patch:Patch
+ a rdfs:Class ;
+ rdfs:label "Patch" .
+
+patch:Move
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request ;
+ rdfs:label "Move" ;
+ rdfs:subClassOf [
+ a owl:Restriction ;
+ owl:maxCardinality 1 ;
+ owl:onProperty patch:subject ;
+ ] , [
+ a owl:Restriction ;
+ owl:cardinality 1 ;
+ owl:onProperty patch:destination ;
+ ] ;
+ lv2:documentation """
+<p>Move the patch:subject to patch:destination. After this, patch:destination has
+the description patch:subject had prior to this request's execution, and
+patch:subject does not exist any more.It is an error if the subject does not
+exist or the destination already exists.</p>
+""" .
+
+patch:Patch
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request , [
+ a owl:Restriction ;
+ owl:minCardinality 1 ;
+ owl:onProperty patch:subject
+ ] , [
+ a owl:Restriction ;
+ owl:maxCardinality 1 ;
+ owl:onProperty patch:add
+ ] , [
+ a owl:Restriction ;
+ owl:maxCardinality 1 ;
+ owl:onProperty patch:remove
+ ] ;
+ lv2:documentation """
+<p>A method for modifying the properties of an object.</p>
+
+<p>This method always has at least one patch:subject, and exactly one patch:add
+and patch:remove property. The value of patch:add and patch:remove are nodes
+which have the properties to add or remove from the subject(s), respectively.
+The special value patch:wildcard may be used as the value of a remove property
+to remove all properties with the given predicate. For example:</p>
+
+<pre class="turtle-code">
+[]
+ a patch:Patch ;
+ patch:subject &lt;something&gt; ;
+ patch:add [
+ eg:name "New name" ;
+ eg:age 42 ;
+ ] ;
+ patch:remove [
+ eg:name "Old name" ;
+ eg:age patch:wildcard ; # Remove all old eg:age properties
+ ] .
+</pre>
+""" .
+
+patch:Put
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request ;
+ rdfs:label "Put" ;
+ rdfs:subClassOf [
+ a owl:Restriction ;
+ owl:maxCardinality 1 ;
+ owl:onProperty patch:subject
+ ] ;
+ lv2:documentation """
+<p>Put the patch:body as the patch:subject. If the subject does not already exist,
+it is created. If the subject does already exist, the patch:body is considered
+an updated version of it, and the previous version is replaced.</p>
+""" .
+
+patch:Request
+ a rdfs:Class ;
+ rdfs:label "Request" ;
+ rdfs:subClassOf patch:Patch ;
+ lv2:documentation """
+<p>A request. A request may have a patch:subject property, which indicates which
+resource the request applies to. The subject may be omitted in contexts where
+it is implicit (e.g. the recipient is the subject).</p>
+""" .
+
+patch:Response
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Patch ;
+ rdfs:label "Response" ;
+ lv2:documentation """
+<p>A response to a method.</p>
+""" .
+
+patch:Set
+ a rdfs:Class ;
+ rdfs:subClassOf patch:Request , [
+ a owl:Restriction ;
+ owl:cardinality 1 ;
+ owl:onProperty patch:body
+ ] ;
+ lv2:documentation """
+<p>A method for setting properties of an object to unique values.</p>
+
+<p>This is a simplified version of patch:Patch which only makes sense for
+properties which have at most one value. This method always has at least one
+patch:subject, and exactly one patch:add property. All the properties of the
+value of patch:add are set on the subject, with all old values for those
+properties removed. For example:</p>
+
+<pre class="turtle-code">
+[]
+ a patch:Set ;
+ patch:subject &lt;something&gt; ;
+ patch:body [
+ eg:name "New name" ;
+ eg:age 42 ;
+ ] .
+</pre>
+
+<p>This method is equivalent to a patch:Patch where the patch:remove value has
+every property of patch:add but with wildcard values. For example, the above
+patch is equivalent to:</p>
+<pre class="turtle-code">
+[]
+ a patch:Patch ;
+ patch:subject &lt;something&gt; ;
+ patch:add [
+ eg:name "New name" ;
+ eg:age 42 ;
+ ] ;
+ patch:remove [
+ eg:name patch:wildcare ;
+ eg:age patch:wildcard ;
+ ] ;
+</pre>
+""" .
+
+patch:subject
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Patch .
+
+patch:add
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Patch .
+
+patch:remove
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Patch .
+
+patch:destination
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Patch .
+
+patch:body
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Patch ;
+ lv2:documentation """
+<p>The body of a patch.</p>
+
+<p>The details of this property's value depend on the type of patch it is a
+part of.</p>
+""" .
+
+patch:request
+ a rdf:Property ,
+ owl:ObjectProperty ;
+ rdfs:domain patch:Response ;
+ rdfs:range patch:Request ;
+ lv2:documentation """
+<p>The request this is a response to.</p>
+""" . \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/ext/patch/waf b/lv2/lv2plug.in/ns/ext/patch/waf
new file mode 120000
index 0000000..5235032
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/waf
@@ -0,0 +1 @@
+../../../../../waf \ No newline at end of file
diff --git a/lv2/lv2plug.in/ns/ext/patch/wscript b/lv2/lv2plug.in/ns/ext/patch/wscript
new file mode 120000
index 0000000..7e2c01b
--- /dev/null
+++ b/lv2/lv2plug.in/ns/ext/patch/wscript
@@ -0,0 +1 @@
+../../../../../ext.wscript \ No newline at end of file