# LV2 Reference Extension
# Copyright 2007-2011 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 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 reference: <http://lv2plug.in/ns/ext/reference#> .

<http://lv2plug.in/ns/ext/reference>
	a lv2:Specification ;
	doap:name "LV2 Reference" ;
    doap:release [
        doap:revision "0.1" ;
        doap:created "2011-07-22"
    ] ;
	doap:maintainer [
		a foaf:Person ;
		foaf:name	 "David Robillard" ;
		foaf:homepage <http://drobilla.net/> ;
		rdfs:seeAlso  <http://drobilla.net/drobilla.rdf>
	] ;
	lv2:documentation """
<p>This extension defines a mechanism for working with generic/opaque
dynamically allocated memory, called a <a href="#Blob">"Blob"</a>, which is
(unlike an Atom) not necessarily POD.  Blobs are accessed via a <a
href="#Reference">Reference</a>, which is a special case of Atom that always
has <code>type = 0</code>, is not POD, and can only be copied using host
provided functions.  This allows plugins and hosts to work with data of any
type at all.</p>
""" .

reference:Reference a rdfs:Class ;
	rdfs:subClassOf atom:Atom ;
	rdfs:label      "Reference" ;
	lv2:documentation """
<p>Reference to a <a href="#Blob">Blob</a>.  The actual contents of a Reference
are opaque and host specific, and must not be copied, serialized, or otherwise
interpreted by a plugin, except via functions provided by the host in
<a href="urn:struct:LV2_Blob_Support">LV2_Blob_Support</a>.</p>

<p>A Reference is a special case of Atom with <code>type = 0</code>.
"Null" is the unique Atom with <code>type = 0</code> and
<code>size = 0</code>.</p>
""" .

reference:blobSupport a lv2:Feature ;
	rdfs:label "Blob support" ;
	lv2:documentation """
Support for dynamically allocated blobs.  If a host supports this feature, it
MUST pass a <a href="urn:struct:LV2_Feature">LV2_Feature</a> with
<code>URI</code> http://lv2plug.in/ns/ext/atom#blobSupport
and <code>data</code> pointing to a <a href="urn:struct:LV2_Blob_Support"
>LV2_Blob_Support</a>.
""" .

reference:Blob a rdfs:Class ;
	rdfs:label      "Blob" ;
	lv2:documentation """
<p>Base class for all dynamically allocated blobs.  An <a
href="urn:struct:LV2_Blob" >LV2_Blob</a> ia an opaque pointer to host
data.  The type and data of a blob can be accessed via host-provided
functions in <a href="urn:struct:LV2_Blob_Support">LV2_Blob_Support</a>.
The type of a blob can be any URI that describes a data format.  Blobs are
always allocated by the host, and unlike atoms are not necessarily POD.</p>

<p>Blob data MUST NOT be used in any way by an implementation that does not
understand that blob type (unlike Atoms, meaningful type-oblivious use
of a Blob is impossible).</p>
""" .