<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/transform"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
      xmlns:owl="http://www.w3.org/2002/07/owl#"
      xmlns:sh="http://www.w3.org/ns/shacl#"
      xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#"
      xmlns:ht="http://www.w3.org/2011/http#"
      xmlns:dct="http://purl.org/dc/terms/"
      xmlns:skos="http://www.w3.org/2004/02/skos/core#"
      xmlns:prov="http://www.w3.org/ns/prov#"
      xmlns:dcat="http://www.w3.org/ns/dcat#"
      xmlns:bibo="http://purl.org/ontology/bibo/"
      xmlns:foaf="http://xmlns.com/foaf/0.1/"
      xmlns:vann="http://purl.org/vocab/vann/"
      xmlns:ci="https://vocab.methodandstructure.com/content-inventory#"
      xmlns:tfo="https://vocab.methodandstructure.com/transformation#"
      prefix="rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema# xsd: http://www.w3.org/2001/XMLSchema# owl: http://www.w3.org/2002/07/owl# sh: http://www.w3.org/ns/shacl# xhv: http://www.w3.org/1999/xhtml/vocab# ht: http://www.w3.org/2011/http# dct: http://purl.org/dc/terms/ skos: http://www.w3.org/2004/02/skos/core# prov: http://www.w3.org/ns/prov# dcat: http://www.w3.org/ns/dcat# bibo: http://purl.org/ontology/bibo/ foaf: http://xmlns.com/foaf/0.1/ vann: http://purl.org/vocab/vann/ ci: https://vocab.methodandstructure.com/content-inventory# tfo: https://vocab.methodandstructure.com/transformation#"
      vocab="http://www.w3.org/1999/xhtml/vocab#" xml:lang="en">
  <head>
    <title about="#" property="dct:title">Transformation Functions Ontology</title>
    <base href="https://vocab.methodandstructure.com/transformation"/>
    <meta about="#" property="vann:preferredNamespacePrefix" datatype="xsd:token" content="tfo"/>
    <link about="#" rel="rdfs:isDefinedBy bibo:uri" href="#"/>
    <link about="#" rel="owl:sameAs" rev="ci:canonical" href="https://privatealpha.com/ontology/permutation/1#"/>
    <link about="#" rel="owl:sameAs" rev="ci:canonical" href="https://privatealpha.com/ontology/transformation/1#"/>
    <link rel="owl:sameAs" rev="ci:canonical" href="https://privatealpha.com/ontology/permutation/1"/>
    <link rel="owl:sameAs" rev="ci:canonical" href="https://privatealpha.com/ontology/transformation/1"/>
    <link rel="dct:subject foaf:primaryTopic" href="#"/>
    <link rel="up top contents index" href="/"/>
  </head>
  <body about="" typeof="bibo:Specification">
    <div about="#" typeof="owl:Ontology">
      <dl>
        <dt>Author</dt>
        <dd><a rel="dct:creator" href="https://doriantaylor.com/person/dorian-taylor#me" typeof="foaf:Person"><span property="foaf:name">Dorian Taylor</span></a></dd>
        <dt>Created</dt>
        <dd property="dct:created" datatype="xsd:dateTime" content="2014-06-05T03:06:58Z">June 4, 2014</dd>
        <dt>Updated</dt>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2020-01-20T06:05:13Z">January 20, 2020</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2020-04-11T02:51:52Z">April 10, 2020</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2020-06-10T18:27:35Z">June 10, 2020</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2020-07-03T04:49:40Z">July 2, 2020</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2023-08-27T00:30:09Z">August 27, 2023</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2023-09-06T20:54:02Z">September 6, 2023</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2023-10-09T19:04:07Z">October 9, 2023</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2024-01-31T03:26:41Z">January 30, 2024</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2024-10-16T02:03:59Z">October 16, 2024</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2024-11-26T04:18:22Z">November 25, 2024</dd>
        <dd property="dct:modified" datatype="xsd:dateTime" content="2024-12-04T00:09:05Z">December 3, 2024</dd>
        <dt>Namespace URI</dt>
        <dd><a href="#"><code>https://vocab.methodandstructure.com/transformation#</code></a></dd>
        <dt>Preferred Namespace Prefix</dt>
        <dd><code about="#" property="vann:preferredNamespacePrefix" datatype="xsd:token">tfo</code></dd>
        <dt>Imported Vocabularies</dt>
        <dd><a about="#" rel="owl:imports" resource="http://www.w3.org/2001/XMLSchema#" href="https://www.w3.org/TR/xmlschema11-2/">W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes</a></dd>
        <dd><a about="#" rel="owl:imports" resource="http://www.w3.org/ns/prov#" href="https://www.w3.org/TR/prov-o/"><span property="rdfs:label">W3C PROVenance Interchange Ontology (PROV-O)</span></a></dd>
      </dl>
      <p property="rdfs:comment dct:description">This document defines a vocabulary for representing the description and application of <dfn>pure functions</dfn> that transform byte segments. It is intended primarily for functions over <abbr>HTTP</abbr> <dfn>representations</dfn>&#x2014;i.e., the actual literal payloads of <abbr>HTTP</abbr> messages&#x2014;but can be used to represent other such functions.</p>
      <p>Many, if not most Web content manipulation tasks are concerned exclusively with <em>representations</em>: the literal <em>contents</em> of <abbr>HTTP</abbr> <em>messages</em>, rather than abstract or internal representations. Such manipulations may include excerpting and rearranging files, compressing and decompressing, cropping and resizing images, and converting between data formats. If we separate these operations from other <em>development</em> tasks, we can reuse them.</p>
      <p>The purpose of this vocabulary is to provide a mechanism for identifying <dfn>pure functions</dfn> that transform opaque data segments (like <abbr>HTTP</abbr> response bodies) and perhaps take additional scalar parameters (and specify both <em>named</em> and <em>sequential</em> calling conventions), and relate a function definition to a concrete implementation. The vocabulary also provides terms to represent <a href="https://en.wikipedia.org/wiki/Memoization"><dfn>memoizing</dfn></a> the application of a function to a particular data object, i.e., relating a particular input (plus any additional parameters) to a particular output.</p>
      <p>Consider the following example:</p>
      <pre>@prefix tfo:  &lt;https://vocab.methodandstructure.com/transformation#&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix owl:  &lt;http://www.w3.org/2002/07/owl#&gt; .
@prefix xsd:  &lt;http://www.w3.org/2001/XMLSchema#&gt; .
@prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; .
@prefix dct:  &lt;http://purl.org/dc/terms/&gt; .
@prefix prov: &lt;http://www.w3.org/ns/prov#&gt; .
@prefix ex:   &lt;https://example.club/#&gt; .

ex:range a tfo:Function ;
  skos:prefLabel "Byte Range"@en ;
  skos:description "Select a subset of bytes from a given segment."@en ;
  tfo:accepts "*/*"^^tfo:content-type ;
  tfo:returns "*/*"^^tfo:content-type ;
  tfo:parameter ex:start, ex:end ;
  tfo:parameter-list ( ex:start ex:end ) ;
  tfo:implementation &lt;jar:functions.jar!org/foobar/textproc/ByteRange.class&gt; .

ex:start a tfo:Parameter ;
  dct:identifier "start"^^xsd:token ;
  rdfs:comment "The beginning offset (omission interpreted as zero)."@en ;
  owl:maxCardinality 1 ;
  rdfs:range xsd:nonNegativeInteger .

ex:end a tfo:Parameter ;
  dct:identifier "end"^^xsd:token ;
  rdfs:comment "The ending offset (omission interpreted as the end of the input)."@en ;
  owl:maxCardinality 1 ;
  rdfs:range xsd:nonNegativeInteger .

&lt;urn:uuid:1d85f168-1710-4bc8-b68b-c7513483c228&gt; a tfo:Invocation ;
  prov:startedAtTime "2020-01-20T16:46:27.043Z"^^xsd:dateTime ;
  prov:endedAtTime "2020-01-20T16:46:27.051Z"^^xsd:dateTime ;
  tfo:transform ex:range ;
  tfo:input &lt;ni:///sha-256;fzhKzqnfAxmB9ICBwe00Dq3smuo43J2K-58uL_62t6Q&gt; ;
  ex:start 1234 ;
  ex:end 31337 ;
  tfo:output &lt;ni:///sha-256;QqNiOgLJk13nOs8Mn4prYtEIZZfwuiju2y4cT_YCOlI&gt; .</pre>
      <p>The preceding example defines a transformation function, along with its parameters, and relates it to a fictional implementation embedded in a <abbr>JAR</abbr> somewhere (the exact way an implementation is resolved is out of scope for this vocabulary). At the bottom is an imaginary application of the transformation function, along with values for supplied parameters. The input and output are designated by <a rel="dct:references" href="https://datatracker.ietf.org/doc/html/rfc6920">digest <abbr>URIs</abbr></a>, which can be resolved to their corresponding representations.</p>
      <p>This vocabulary extends the <a about="#" rel="owl:imports" resource="dcat:" href="https://www.w3.org/TR/vocab-dcat-2/">Data Catalog Vocabulary</a> by making <code>tfo:Function</code> a subclass of <a href="https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service"><code>dcat:DataService</code></a> and <a about="#" resource="prov:" href="https://www.w3.org/TR/prov-o/">the Provenance Ontology</a>, by way of refining the <a href="https://www.w3.org/TR/prov-o/#Activity"><code>prov:Activity</code></a> class and related properties. For instance, a record can use its inherited <abbr>PROV</abbr> properties to store metrics on the time it took to execute the function over the input.</p>
    </div>
    <section id="ch-classes">
      <h2>Classes</h2>
      <figure>
        <object data="transformation-classes.svg"><img src="transformation-classes" alt=""/></object>
      </figure>
      <section id="sec-bundles">
        <h3>Bundles</h3>
        <p>The Transformation Functions Ontology includes a basic bundling class that affords the reuse of parameters, e.g. for configuration.</p>
        <section id="Bundle" about="[tfo:Bundle]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Bundle</code></h4>
          <p property="rdfs:comment">This class provides a basic mechanism to yoke a set of transformation functions together.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="dcat:Catalog" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Catalog"><code>dcat:Catalog</code></a></dd>
            <dd><a rel="rdfs:subClassOf" resource="prov:SoftwareAgent" href="https://www.w3.org/TR/prov-o/#SoftwareAgent"><code>prov:SoftwareAgent</code></a></dd>
            <dt>Properties:</dt>
            <dd rev="rdfs:domain"><a href="#implementation"><code>tfo:implementation</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-transforms">
        <h3>Transforms</h3>
        <p>A <code>tfo:Function</code> is essentially a function definition, specifying input and output constraints, and parameters in both named and positional representations.</p>
        <section id="Function" about="[tfo:Function]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Function</code></h4>
          <p property="rdfs:comment">This class provides a specification for a transformation function.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="dcat:DataService" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service"><code>dcat:DataService</code></a></dd>
            <dd><a rel="rdfs:subClassOf" resource="prov:Entity" href="https://www.w3.org/TR/prov-o/#Entity"><code>prov:Entity</code></a></dd>
            <dt>Properties:</dt>
            <!-- WTF HTML5 -->
            <dd about="dcat:DataService" rev="rdfs:domain"><a href="#parameter"><em><code>tfo:parameter</code></em></a></dd>
            <dd about="dcat:DataService" rev="rdfs:domain"><a href="#parameter-list"><em><code>tfo:parameter-list</code></em></a></dd>
            <dd about="dcat:DataService" rev="rdfs:domain"><a href="#accepts"><em><code>tfo:accepts</code></em></a></dd>
            <dd about="dcat:DataService" rev="rdfs:domain"><a href="#returns"><em><code>tfo:returns</code></em></a></dd>
            <dd rev="rdfs:domain"><a href="#prefers"><code>tfo:prefers</code></a></dd>
            <dd rev="rdfs:domain"><a href="#precedes"><code>tfo:precedes</code></a></dd>
            <dd rev="rdfs:domain"><a href="#follows"><code>tfo:follows</code></a></dd>
            <dd rev="rdfs:domain"><a href="#triggers"><code>tfo:triggers</code></a></dd>
            <dd rev="rdfs:domain"><a href="#by-uri"><code>tfo:by-uri</code></a></dd>
            <dd rev="rdfs:domain"><a href="#not-by-uri"><code>tfo:not-by-uri</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="MarkupTransform" about="[tfo:MarkupTransform]" typeof="owl:Class">
          <h4><del property="owl:deprecated" datatype="xsd:boolean" content="true"><code property="rdfs:label">MarkupTransform</code></del></h4>
          <p property="rdfs:comment">This class represents the set of transformation functions that operate exclusively over (HTML/XML) markup.</p>
          <aside role="note" property="skos:note">
            <p>This class has been deprecated since it only made sense in 2020 when this vocabulary was being used in a different context.</p>
          </aside>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Properties:</dt>
            <dd rev="rdfs:domain"><a href="#by-xpath"><del><code>tfo:by-xpath</code></del></a></dd>
            <dd rev="rdfs:domain"><a href="#not-by-xpath"><del><code>tfo:not-by-xpath</code></del></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-paramaters">
        <h3>Parameters</h3>
        <p><code>tfo:Parameter</code> entities encapsulate name, type, and cardinality of a given function parameter, while <code>tfo:ParameterList</code> entities specify position.</p>
        <section id="Parameter" about="[tfo:Parameter]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Parameter</code></h4>
          <p property="rdfs:comment">This class provides a specification for a parameter in a given function.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="rdf:Property" href="https://www.w3.org/TR/rdf11-schema/#ch_property"><code>rdf:Property</code></a></dd>
            <dt>Property restrictions:</dt>
            <dd rel="rdfs:subClassOf" resource="_:op1">
              <a rel="owl:onProperty" resource="rdfs:domain" href="https://www.w3.org/TR/rdf11-schema/#ch_domain"><code>rdfs:domain</code></a> &#x2208;
              <span rel="owl:allValuesFrom" resource="_:E0U5-E-2m20e9akyFS7CJK">
                <span rel="owl:unionOf" resource="_:ERYaN15IEBIX5V9Qjn1gSJ">(<a rel="rdf:first" href="#Partial"><code>tfo:Partial</code></a> <span about="_:ERYaN15IEBIX5V9Qjn1gSJ" rel="rdf:rest" resource="_:Elw4xkTlnNqDG4rt5jhIUJ">&#x222a;</span> <a about="_:Elw4xkTlnNqDG4rt5jhIUJ" rel="rdf:first" href="#Bundle"><code>tfo:Bundle</code></a><span about="_:Elw4xkTlnNqDG4rt5jhIUJ" rel="rdf:rest" resource="rdf:nil">)</span>
              </span>
              </span></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#default"><code>tfo:default</code></a></dd>
            <dd><a rev="rdfs:domain" href="#empty"><code>tfo:empty</code></a></dd>
            <dd><a rev="rdfs:domain" href="#shift"><code>tfo:shift</code></a></dd>
            <dd><a rev="rdfs:domain" href="#universe"><code>tfo:universe</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="Composite" about="[tfo:Composite]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Composite</code></h4>
          <p property="rdfs:comment">A composite parameter has a multi-valued value like a list, tuple, set or range.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#Parameter"><code>tfo:Parameter</code></a></dd>
	    <dt>Properties:</dt>
	    <dd><a rev="rdfs:domain" href="#element"><code>tfo:element</code></a></dd>
	    <dt>See also:</dt>
	    <dd><a rel="rdfs:seeAlso" resource="rdf:Bag" href="https://www.w3.org/TR/rdf11-schema/#ch_bag"><code>rdf:Bag</code></a></dd>
	    <dd><a rel="rdfs:seeAlso" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a></dd>
	    <dd><a rel="rdfs:seeAlso" href="#Range"><code>tfo:Range</code></a></dd>
	  </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
	</section>
        <section id="ParameterList" about="[tfo:ParameterList]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>ParameterList</code></h4>
          <p property="rdfs:comment">This class represents a list with the restriction that its members be tfo:Parameter nodes.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a></dd>
            <dt>Property restrictions:</dt>
            <dd rel="rdfs:subClassOf" resource="_:op2">
              <a rel="owl:onProperty" resource="rdf:first" href="https://www.w3.org/TR/rdf11-schema/#ch_first"><code>rdf:first</code></a> &#x2208; <a rel="owl:allValuesFrom" href="#Parameter"><code>tfo:Parameter</code></a>
            </dd>
            <dd rel="rdfs:subClassOf" resource="_:op3">
              <a rel="owl:onProperty" resource="rdf:rest" href="https://www.w3.org/TR/rdf11-schema/#ch_rest"><code>rdf:rest</code></a> &#x2208; <a rel="owl:allValuesFrom" href="#ParameterList"><code>tfo:ParameterList</code></a>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="Range" about="[tfo:Range]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Range</code></h4>
	  <p property="rdfs:comment">A span of numbers or sequence-able objects, like dates.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="rdfs:Container" href="https://www.w3.org/TR/rdf11-schema/#ch_container"><code>rdfs:Container</code></a></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#low"><code>tfo:low</code></a></dd>
            <dd><a rev="rdfs:domain" href="#high"><code>tfo:high</code></a></dd>
            <dd><a rev="rdfs:domain" href="#infimum"><code>tfo:infimum</code></a></dd>
            <dd><a rev="rdfs:domain" href="#supremum"><code>tfo:supremum</code></a></dd>
	  </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
	</section>
      </section>
      <section id="sec-queues">
        <h3>Queues</h3>
        <p>Queues are how we bundle sequences of <code>tfo:Function</code> (or <code>tfo:Partial</code>) for execution. <q>Queue</q> is something of a misnomer, as the sequence of transforms need not be explicitly asserted, but rather negotiated on the fly. </p>
        <section id="Queue" about="[tfo:Queue]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Queue</code></h4>
          <p property="rdfs:comment">A queue is a collection of <code>tfo:Function</code> (and/or <code>tfo:Partial</code>) elements, organized either by explicit sequence (via <code>tfo:member-list</code>), or by dynamic sorting at runtime.</p>
          <aside role="note" property="skos:note">
            <p>An inference rule that cannot be described in RDFS or OWL is that <code>?q tfo:member-list ( ?a ?b ) .</code> implies  <code>?q tfo:member ?a, ?b .</code></p>
          </aside>
          <aside role="note" property="skos:note">
            <p>Given that <code>tfo:Invocation</code> is a subclass of <code>tfo:Partial</code>, there is nothing <em>in principle</em> preventing the former from being introduced into a queue. If this happens, we ignore any <code>tfo:input</code> or <code>tfo:output</code> statemments associated with the application of the function.</p>
          </aside>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="prov:Activity" href="https://www.w3.org/TR/prov-o/#Activity"><code>prov:Activity</code></a></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#member"><code>tfo:member</code></a></dd>
            <dd><a rev="rdfs:domain" href="#member-list"><code>tfo:member-list</code></a></dd>
            <dd><a rev="rdfs:domain" href="#first"><code>tfo:first</code></a></dd>
            <dd><a rev="rdfs:domain" href="#last"><code>tfo:last</code></a></dd>
            <dd><a rev="rdfs:domain" href="#next"><code>tfo:next</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="StrictQueue" about="[tfo:StrictQueue]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>StrictQueue</code></h4>
          <p property="rdfs:comment">A <em>strict</em> queue is one for which <em>all</em> its elements <em>must</em> be executed, unlike an ordinary queue which only has to <em>attempt</em> to run its contents.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#Queue"><code>tfo:Queue</code></a></dd>
          </dl>
        </section>
        <section id="AddressableQueue" about="[tfo:AddressableQueue]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>AddressableQueue</code></h4>
          <p property="rdfs:comment">An <em>addressable</em> queue is a strict queue intended to hold transforms that have been invoked through the <abbr>URL</abbr>.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#StrictQueue"><code>tfo:StrictQueue</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="FunctionList" about="[tfo:FunctionList]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>FunctionList</code></h4>
          <p property="rdfs:comment">A function list is a list that only holds <code>tfo:Function</code> or <code>tfo:Partial</code> entities.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a></dd>
            <dt>Property restrictions:</dt>
            <dd rel="rdfs:subClassOf" resource="_:op4">
              <a rel="owl:onProperty" resource="rdf:first" href="https://www.w3.org/TR/rdf11-schema/#ch_first"><code>rdf:first</code></a> &#x2208; <span rel="owl:allValuesFrom"><span about="_:uo40" rel="owl:unionOf" resource="_:q40">
              <a about="_:q40" rel="rdf:first" href="#Function"><code>tfo:Function</code></a>
              <span about="_:q40" rel="rdf:rest" resource="_:q41">&#x222a;</span> <a about="_:q41" rel="rdf:first" href="#Partial"><code>tfo:Partial</code></a>
              <span about="_:q41" rel="rdf:rest" resource="rdf:nil"></span></span>
            </span>
            </dd>
            <dd rel="rdfs:subClassOf" resource="_:op5">
              <a rel="owl:onProperty" resource="rdf:rest" href="https://www.w3.org/TR/rdf11-schema/#ch_rest"><code>rdf:rest</code></a> &#x2208; <a rel="owl:allValuesFrom" href="#FunctionList"><code>tfo:FunctionList</code></a>
            </dd>
          </dl>
        </section>
        <section id="Insertion" about="[tfo:Insertion]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Insertion</code></h4>
          <p property="rdfs:comment">An insertion is a pre-packaged event that manipulates a per-request instance of a transformation queue. When the result of the transform being run matches the condition, the contents of the <code>tfo:Insertion</code> are inserted into the target queue.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#target"><code>tfo:condition</code></a></dd>
            <dd><a rev="rdfs:domain" href="#target"><code>tfo:target</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-invocation">
        <h3>Function Invocation</h3>
        <p>Recording partial and full function invocations is important for <em>memoizing</em> computations.</p>
        <section id="Invocation" about="[tfo:Invocation]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Invocation</code></h4>
          <p property="rdfs:comment">This class represents an invocation of a transformation function, connecting a specific input and scalar parameters with its output.</p>
          <aside role="note" property="skos:note">
            <p>This class supersedes <code>tfo:Application</code>, which has been deprecated due to being too easily confused with a software application versus the application of a function.</p>
          </aside>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" href="#Partial"><code>tfo:Partial</code></a></dd>
            <dt>Equivalent to:</dt>
            <dd><code rel="owl:equivalentClass" resource="#Application" typeof="owl:Class"><del property="owl:deprecated" datatype="xsd:boolean" content="true">tfo:Application</del></code></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#completes"><code>tfo:completes</code></a></dd>
            <dd><a rev="rdfs:domain" href="#input"><code>tfo:input</code></a></dd>
            <dd><a rev="rdfs:domain" href="#output"><code>tfo:output</code></a></dd>
          </dl>
        </section>
        <section id="Partial" about="[tfo:Partial]" typeof="owl:Class">
          <h4 property="rdfs:label"><code>Partial</code></h4>
          <p property="rdfs:comment">This class represents a <em>partial</em> application of a transformation function, affording the encapsulation and re-use of existing parameters.</p>
          <dl>
            <dt>Subclass of:</dt>
            <dd><a rel="rdfs:subClassOf" resource="prov:Activity" href="https://www.w3.org/TR/prov-o/#Activity"><code>prov:Activity</code></a></dd>
            <dt>Properties:</dt>
            <dd><a rev="rdfs:domain" href="#transform"><code>tfo:transform</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
    </section>
    <section id="ch-properties">
      <h2>Properties</h2>
      <figure>
        <object data="transformation-properties.svg"><img src="transformation-properties" alt=""/></object>
      </figure>
      <section id="sec-specifying-transforms">
        <h3>Specifying Transforms</h3>
        <p>These properties have to do with specifying <code>tfo:Function</code> entities and their parameters.</p>
        <section id="accepts" about="[tfo:accepts]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>accepts</code></h4>
          <p property="rdfs:comment">Specifies the list of content-types, in order of preference, that the function can process.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" resource="dcat:DataService" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service"><code>dcat:DataService</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo1" rel="owl:unionOf" resource="_:q1">
                <a about="_:q1" rel="rdf:first" href="#content-type"><code>tfo:content-type</code></a> <span about="_:q1" rel="rdf:rest" resource="_:q2">&#x222a;</span> <a about="_:q2" rel="rdf:first" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a>
                <span about="_:q2" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="returns" about="[tfo:returns]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>returns</code></h4>
          <p property="rdfs:comment">Specifies the list of content-types, in order of preference, that the function is capable of returning.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" resource="dcat:DataService" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service"><code>dcat:DataService</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo2" rel="owl:unionOf" resource="_:q3">
                <a about="_:q3" rel="rdf:first" href="#content-type"><code>tfo:content-type</code></a> <span about="_:q3" rel="rdf:rest" resource="_:q4">&#x222a;</span> <a about="_:q4" rel="rdf:first" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a>
                <span about="_:q4" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="prefers" about="[tfo:prefers]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>prefers</code></h4>
          <p property="rdfs:comment">Specifies the <code>tfo:content-type</code> the transform <em>prefers</em> to emit in lieu of a preference specified by the request. May be a list.</p>
          <dl>
            <dt>Subproperty of:</dt>
            <dd><a rel="rdfs:subPropertyOf" href="#returns"><code>tfo:returns</code></a></dd>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo3" rel="owl:unionOf" resource="_:q5">
                <a about="_:q5" rel="rdf:first" href="#content-type"><code>tfo:content-type</code></a> <span about="_:q5" rel="rdf:rest" resource="_:q6">&#x222a;</span> <a about="_:q6" rel="rdf:first" resource="rdf:List" href="https://www.w3.org/TR/rdf11-schema/#ch_list"><code>rdf:List</code></a>
                <span about="_:q6" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="implementation" about="[tfo:implementation]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>implementation</code></h4>
          <p property="rdfs:comment">URI to the implementation of the function.</p>
          <aside role="note">
            <p property="skos:usageNote">The URI is meant to be dereferenced by an internal implementation, e.g. <code>file:</code>, <code>jar:</code>, or an idiosyncratic scheme like <code>urn:x-python:</code>.</p>
          </aside>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Bundle"><code>tfo:Bundle</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/rdf11-schema/#ch_resource" resource="rdfs:Resource"><code>rdfs:Resource</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="parameter" about="[tfo:parameter]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>parameter</code></h4>
          <p property="rdfs:comment">Binds a parameter object to its function.</p>
          <aside role="note">
            <p property="skos:usageNote">Parameters can either be supplied to the function as key-value pairs or sequentially.</p>
          </aside>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" resource="dcat:Resource" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Resource"><code>dcat:Resource</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Parameter"><code>tfo:Parameter</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="parameter-list" about="[tfo:parameter-list]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>parameter-list</code></h4>
          <p property="rdfs:comment">Specifies the sequence of parameters when the invocation method of the function is sequential.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" resource="dcat:Resource" href="https://www.w3.org/TR/vocab-dcat-2/#Class:Resource"><code>dcat:Resource</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#ParameterList"><code>tfo:ParameterList</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="element" about="[tfo:element]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>element</code></h4>
          <p property="rdfs:comment">This property designates an elementary type to go into the composite type.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Composite"><code>tfo:Composite</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="rdfs:Datatype" href="https://www.w3.org/TR/rdf11-schema/#ch_datatype"><code>rdfs:Datatype</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="default" about="[tfo:default]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>default</code></h4>
          <p property="rdfs:comment">Specifies one or more default values for a parameter.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Parameter"><code>tfo:Parameter</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="universe" about="[tfo:universe]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>universe</code></h4>
          <p property="rdfs:comment">Specifies the container that contains the <q>universe</q> of values that a paramter can take.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Parameter"><code>tfo:Parameter</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="rdfs:Container" href="https://www.w3.org/TR/rdf11-schema/#ch_container"><code>rdfs:Container</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="empty" about="[tfo:empty]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>empty</code></h4>
          <p property="rdfs:comment">Flags whether an empty parameter value should be treated as input rather than ignored.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Parameter"><code>tfo:Parameter</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="xsd:boolean" href="https://www.w3.org/TR/xmlschema11-2/#boolean"><code>xsd:boolean</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="shift" about="[tfo:shift]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>shift</code></h4>
          <p property="rdfs:comment">Flags whether a parameter with multiple values but a fixed cardinality shift off the front of the list rather than truncate off the back.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Parameter"><code>tfo:Parameter</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="xsd:boolean" href="https://www.w3.org/TR/xmlschema11-2/#boolean"><code>xsd:boolean</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="low" about="[tfo:low]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>low</code></h4>
          <p property="rdfs:comment">Specifies the <em>lower</em> bound of a <code>tfo:Range</code>.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Range"><code>tfo:Range</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/rdf11-schema/#ch_resource" resource="rdfs:Literal"><code>rdfs:Literal</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="high" about="[tfo:high]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>high</code></h4>
          <p property="rdfs:comment">Specifies the <em>upper</em> bound of a <code>tfo:Range</code>.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Range"><code>tfo:Range</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/rdf11-schema/#ch_resource" resource="rdfs:Literal"><code>rdfs:Literal</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="infimum" about="[tfo:infimum]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>infimum</code></h4>
          <p property="rdfs:comment">Flags whether a <code>tfo:Range</code> will be open on the <em>low</em> side.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Range"><code>tfo:Range</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="xsd:boolean" href="https://www.w3.org/TR/xmlschema11-2/#boolean"><code>xsd:boolean</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="supremum" about="[tfo:supremum]" typeof="owl:DatatypeProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>supremum</code></h4>
          <p property="rdfs:comment">Flags whether a <code>tfo:Range</code> will be open on the <em>high</em> side.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Range"><code>tfo:Range</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="xsd:boolean" href="https://www.w3.org/TR/xmlschema11-2/#boolean"><code>xsd:boolean</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-specifying-queues">
        <h3>Specifying Queues</h3>
        <p>These properties all have to do with providing hints to topological sorts of transforms within queues, or otherwise explicit sequences.</p>
        <section id="member" about="[tfo:member]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>member</code></h4>
          <p property="rdfs:comment">Denotes a member of a queue.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo4" rel="owl:unionOf" resource="_:q7">
                <a about="_:q7" rel="rdf:first" href="#Function"><code>tfo:Function</code></a> <span about="_:q7" rel="rdf:rest" resource="_:q8">&#x222a;</span> <a about="_:q8" rel="rdf:first" href="#Partial"><code>tfo:Partial</code></a>
                <span about="_:q8" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="member-list" about="[tfo:member-list]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>member-list</code></h4>
          <p property="rdfs:comment">Denotes an explicit member list for a queue.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#FunctionList"><code>tfo:FunctionList</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="precedes" about="[tfo:precedes]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>precedes</code></h4>
          <p property="rdfs:comment">Specifies one or more <code>tfo:Function</code> that the subject must <em>precede</em> in a queue.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Inverse of:</dt>
            <dd><a rel="owl:inverseOf" href="#follows"><code>tfo:follows</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="follows" about="[tfo:follows]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>follows</code></h4>
          <p property="rdfs:comment">Specifies one or more <code>tfo:Function</code> that the subject must <em>follow</em> in a queue.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Inverse of:</dt>
            <dd><a rel="owl:inverseOf" href="#precedes"><code>tfo:precedes</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="next" about="[tfo:next]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>next</code></h4>
          <p property="rdfs:comment">Specifies the next queue to run after this one.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Queue"><code>tfo:Queue</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="first" about="[tfo:first]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>first</code></h4>
          <p property="rdfs:comment">Explicitly specifies a transform that must go <em>first</em>.</p>
          <dl>
            <dt>Sub-property of:</dt>
            <dd><a rel="rdfs:subPropertyOf" href="#member"><code>tfo:member</code></a></dd>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo41" rel="owl:unionOf" resource="_:q42">
                <a about="_:q42" rel="rdf:first" href="#Function"><code>tfo:Function</code></a>
                <span about="_:q42" rel="rdf:rest" resource="_:q43">&#x222a;</span> <a about="_:q43" rel="rdf:first" href="#Partial"><code>tfo:Partial</code></a>
                <span about="_:q43" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="last" about="[tfo:last]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>last</code></h4>
          <p property="rdfs:comment">Explicitly specifies a transform that must go <em>last</em>.</p>
          <dl>
            <dt>Sub-property of:</dt>
            <dd><a rel="rdfs:subPropertyOf" href="#member"><code>tfo:member</code></a></dd>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Queue"><code>tfo:Queue</code></a></dd>
            <dt>Range:</dt>
            <dd rel="rdfs:range">
              <span about="_:uo42" rel="owl:unionOf" resource="_:q44">
                <a about="_:q44" rel="rdf:first" href="#Function"><code>tfo:Function</code></a>
                <span about="_:q44" rel="rdf:rest" resource="_:q45">&#x222a;</span> <a about="_:q45" rel="rdf:first" href="#Partial"><code>tfo:Partial</code></a>
                <span about="_:q45" rel="rdf:rest" resource="rdf:nil"></span>
              </span>
            </dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-manipulating-queues">
        <h3>Manipulating Queues at Runtime</h3>
        <p>These properties relate trnasforms to queue insertion events.</p>
        <section id="triggers" about="[tfo:triggers]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>triggers</code></h4>
          <p property="rdfs:comment">A <code>tfo:Function</code> can trigger an <code>tfo:Insertion</code> event on a certain condition (e.g., successful completion).</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Insertion"><code>tfo:Insertion</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="target" about="[tfo:target]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>target</code></h4>
          <p property="rdfs:comment">A target queue for the insertion.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Insertion"><code>tfo:Insertion</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Queue"><code>tfo:Queue</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="condition" about="[tfo:condition]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>condition</code></h4>
          <p property="rdfs:comment">An <abbr>HTTP</abbr> status code for which the insertion is triggered.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Insertion"><code>tfo:Insertion</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" resource="ht:StatusCode" href="https://www.w3.org/TR/HTTP-in-RDF10/#StatusCodeClass"><code>ht:StatusCode</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-applying-transformations">
        <h3>Applying Transformations</h3>
        <p>This group of properties is responsible for relating <code>tfo:Function</code> to the actual data objects they transform.</p>
        <section id="completes" about="[tfo:completes]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>completes</code></h4>
          <p property="rdfs:comment">Identifies a <code>tfo:Partial</code> function that this <code>tfo:Invocation</code> completes.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Invocation"><code>tfo:Invocation</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Partial"><code>tfo:Partial</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="transform" about="[tfo:transform]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>transform</code></h4>
          <p property="rdfs:comment">Specifies the transform associated with this particular invocation.</p>
          <dl>
            <dt>Subproperty of:</dt>
            <dd><a rel="rdfs:PropertyOf" resource="prov:used" href="https://www.w3.org/TR/prov-o/#used"><code>prov:used</code></a></dd>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Partial"><code>tfo:Partial</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#Function"><code>tfo:Function</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="input" about="[tfo:input]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>input</code></h4>
          <p property="rdfs:comment">Specifies the resource that was the input of the transformation function.</p>
          <dl>
            <dt>Subproperty of:</dt>
            <dd><a rel="rdfs:PropertyOf" resource="prov:used" href="https://www.w3.org/TR/prov-o/#used"><code>prov:used</code></a></dd>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Invocation"><code>tfo:Invocation</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/rdf11-schema/#ch_resource" resource="rdfs:Resource"><code>rdfs:Resource</code></a></dd>
            <dt>See also:</dt>
            <dd><a rel="rdfs:seeAlso" href="https://datatracker.ietf.org/doc/html/rfc6920">RFC 6920 &#x2014; Naming Things with Hashes</a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="output" about="[tfo:output]" typeof="owl:ObjectProperty owl:FunctionalProperty">
          <h4 property="rdfs:label"><code>output</code></h4>
          <p property="rdfs:comment">Specifies the resource that was the output of the transformation function.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Invocation"><code>tfo:Invocation</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/rdf11-schema/#ch_resource" resource="rdfs:Resource"><code>rdfs:Resource</code></a></dd>
            <dt>See also:</dt>
            <dd><a rel="rdfs:seeAlso" href="https://datatracker.ietf.org/doc/html/rfc6920">RFC 6920 &#x2014; Naming Things with Hashes</a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
      <section id="sec-constraints">
        <h3>Constraints</h3>
        <p>In certain contexts it is useful to pre-declare constraints on what constitutes valid input for a transform. We can do this either by URI or by XPath.</p>
        <section id="by-uri" about="[tfo:by-uri]" typeof="owl:DatatypeProperty">
          <h4 property="rdfs:label"><code>by-uri</code></h4>
          <p property="rdfs:comment">Specifies a regular expression for matching against URIs.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#regexp"><code>tfo:regexp</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="not-by-uri" about="[tfo:not-by-uri]" typeof="owl:DatatypeProperty">
          <h4 property="rdfs:label"><code>not-by-uri</code></h4>
          <p property="rdfs:comment">Specifies a regular expression for <em>anti</em>-matching against URIs.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#Function"><code>tfo:Function</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#regexp"><code>tfo:regexp</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="prefix" about="[tfo:prefix]" typeof="owl:ObjectProperty">
          <h4 property="rdfs:label"><code>prefix</code></h4>
          <p property="rdfs:comment">Specifies a SHACL prefix declaration for complementing any associated XPath expression.</p>
          <aside role="note" property="skos:note">
            <p>Note that the existing <code>sh:declare</code> property has a domain of <code>owl:Ontology</code> so we can't use it for this.</p>
          </aside>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#MarkupTransform"><code>tfo:MarkupTransform</code></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="https://www.w3.org/TR/shacl/#sparql-prefixes" resource="sh:PrefixDeclaration"><code>sh:PrefixDeclaration</code></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="by-xpath" about="[tfo:by-xpath]" typeof="owl:DatatypeProperty">
          <h4><del property="owl:deprecated" datatype="xsd:boolean" content="true"><code property="rdfs:label">by-xpath</code></del></h4>
          <p property="rdfs:comment">Specifies an XPath expression for matching against markup (HTML/XML) content.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#MarkupTransform"><del><code>tfo:MarkupTransform</code></del></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#xpath"><del><code>tfo:xpath</code></del></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
        <section id="not-by-xpath" about="[tfo:not-by-xpath]" typeof="owl:DatatypeProperty">
          <h4><del property="owl:deprecated" datatype="xsd:boolean" content="true"><code property="rdfs:label">not-by-xpath</code></del></h4>
          <p property="rdfs:comment">Specifies an XPath expression for <em>anti</em>-matching against markup (HTML/XML) content.</p>
          <dl>
            <dt>Domain:</dt>
            <dd><a rel="rdfs:domain" href="#MarkupTransform"><del><code>tfo:MarkupTransform</code></del></a></dd>
            <dt>Range:</dt>
            <dd><a rel="rdfs:range" href="#xpath"><del><code>tfo:xpath</code></del></a></dd>
          </dl>
          <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
        </section>
      </section>
    </section>
    <section id="ch-datatypes">
      <h2>Datatypes</h2>
      <p>Currently there is only the datatype for designating <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">content types</a>, and those for regular expressions and XPath.</p>
      <section id="content-type" about="[tfo:content-type]" typeof="rdfs:Datatype">
        <h3 property="rdfs:label"><code>content-type</code></h3>
        <p property="rdfs:comment">A literal that represents a content-type such as that which is found in the HTTP <code>Accept:</code> or <code>Content-Type:</code> header.</p>
        <dl>
          <dt>Restriction of:</dt>
          <dd style="text-align: start"><a rel="owl:onDatatype" resource="xsd:token" href="https://www.w3.org/TR/xmlschema11-2/#token"><code>xsd:token</code></a> <span rel="owl:withRestrictions" resource="_:rl1">matching</span> <span about="_:rl1" rel="rdf:first"><code about="_:rp1" property="xsd:pattern" datatype="xsd:string">^([!#$%&amp;'\*\+\-.^_`|~0-9-A-Za-z]+)(?:/[!#$%&amp;'\*\+\-.^_`|~0-9-A-Za-z]+)?)$</code></span> <span about="_:rl1" rel="rdf:rest" resource="rdf:nil"></span></dd>
          <dt>See also:</dt>
          <dd><a rel="rdfs:seeAlso" href="https://datatracker.ietf.org/doc/html/rfc9110#section-5.6.2">RFC 9110 &#x2014; HTTP Semantics &#xa7; 5.6.2: Tokens</a></dd>
          <dd><a rel="rdfs:seeAlso" href="https://datatracker.ietf.org/doc/html/rfc9110#field.accept">RFC 9110 &#x2014; HTTP Semantics &#xa7; 12.5.1: Accept</a></dd>
        </dl>
        <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
      </section>
      <section id="regexp" about="[tfo:regexp]" typeof="rdfs:Datatype">
        <h3 property="rdfs:label"><code>regexp</code></h3>
        <p property="rdfs:comment">A regular expression.</p>
        <aside role="note" property="skos:usageNote">
          <p>We do not specify a flavour, but in practice we should assume <abbr title="Perl-compatible regular expression">PCRE</abbr> or ECMA-262.</p>
        </aside>
        <dl>
          <dt>Restriction of:</dt>
          <dd><a rel="owl:onDatatype" resource="xsd:string" href="https://www.w3.org/TR/xmlschema11-2/#string"><code>xsd:string</code></a></dd>
        </dl>
        <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
      </section>
      <section id="iregexp" about="[tfo:iregexp]" typeof="rdfs:Datatype">
        <h3 property="rdfs:label"><code>iregexp</code></h3>
        <p property="rdfs:comment">A case-insensitive regular expression.</p>
        <aside role="note" property="skos:note">
          <p>Note that we do not intend to provide the full complement of flags for regular expressions like <code>m</code>, <code>s</code>, or <code>x</code>.</p>
        </aside>
        <dl>
          <dt>Subclass of:</dt>
          <dd><a rel="rdfs:subClassOf" href="#regexp"><code>tfo:regexp</code></a></dd>
          <dt>Restriction of:</dt>
          <dd><a rel="owl:onDatatype" resource="xsd:string" href="https://www.w3.org/TR/xmlschema11-2/#string"><code>xsd:string</code></a></dd>
        </dl>
        <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
      </section>
      <section id="term" about="[tfo:term]" typeof="rdfs:Datatype">
        <h3 property="rdfs:label"><code>term</code></h3>
        <p property="rdfs:comment">An RDF term represented as either a CURIE (prefixed term) or IRI.</p>
        <dl>
	  <dt>Union of:</dt>
	  <dd rel="owl:unionOf" resource="_:EhqnOGqdpRyTaU1V4IOG9J">(<a rel="rdf:first" href="https://www.w3.org/TR/xmlschema11-2/#QName" resource="xsd:QName"><code>xsd:QName</code></a> <span rel="rdf:rest" resource="_:E0hqEbAJ28y0otPLbGJzOI">&#x222a; <a rel="rdf:first" resource="xsd:anyURI" href="https://www.w3.org/TR/xmlschema11-2/#anyURI"><code>xsd:anyURI</code></a><span rel="rdf:rest" resource="rdf:nil">)</span></span></dd>
        </dl>
        <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
      </section>
      <section id="xpath" about="[tfo:xpath]" typeof="rdfs:Datatype">
        <h3><del property="owl:deprecated" datatype="xsd:boolean" content="true"><code property="rdfs:label">xpath</code></del></h3>
        <p property="rdfs:comment">An XPath expression.</p>
        <dl>
          <dt>Restriction of:</dt>
          <dd><a rel="owl:onDatatype" resource="xsd:string" href="https://www.w3.org/TR/xmlschema11-2/#string"><code>xsd:string</code></a></dd>
        </dl>
        <p><a rel="rdfs:isDefinedBy" href="#">Back to Top</a></p>
      </section>
    </section>
    <section id="ch-references">
      <h2>References</h2>
      <ul>
        <li><a rel="dct:references" href="https://www.w3.org/TR/prov-o/">PROV-O: The Provenance Ontology</a></li>
        <li><a rel="dct:references" href="https://www.w3.org/TR/rdf-schema/">RDF Schema 1.1</a></li>
        <li><a rel="dct:references" href="https://www.w3.org/TR/xmlschema11-2/">W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes</a></li>
        <li><a rel="dct:references" href="https://www.iana.org/assignments/media-types/media-types.xhtml">Media Types (<abbr>IANA</abbr>)</a></li>
      </ul>
      </section>
    </body>
  </html>
