<?xml version="1.0"?><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr"><head><title>EER - ERIS Cache RDF Vocabulary</title><style type="text/css">body {max-width: 900px; margin-top: 3em; margin-bottom: 2em; margin-left: auto; margin-right: auto; text-align: left; line-height: 1.6; font-family: sans-serif; font-size: 12pt;}
#logo {margin: auto; width: 70px; display: block;}
figure {width: 80%; display: block; margin: auto; padding: 2.0rem;}
h1 {text-align: center;}
h2 {margin-top: 3em;}
table {border-collapse: collapse; width: 100%; margin: 1.5rem 0;}
td, th {border: 1px solid black; text-align: left; padding: 0.5rem;}
th {background: goldenrod; font-weight: bold;}
pre { max-width: 100%; overflow: auto; background:#f0f0f0; padding: 10px;}
img { margin: auto; max-width: 70%; }
footer { text-align: right; font-weight: 200; padding-top: 5em; }
footer span { padding: 0 0.5em 0 0.5em; }
</style></head><body><svg id="logo" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 32 32"><defs><clipPath id="inside"><circle cx="16" cy="16" r="12" /></clipPath></defs><circle cx="16" cy="16" r="14" fill="goldenrod" stroke="black" stroke-width="2" /><path id="symbol" d="M 6,6 A 8,8 0 0,1 6,26 M 16,1 V 31 M 26,6 A 8,8 0 0,0 26,26" fill="none" stroke="black" stroke-width="2" clip-path="url(#inside)" /></svg><nav><a href="index.html">back to index</a></nav><article><h1>ERIS Cache RDF Vocabulary</h1><p>Most content on the Internet is published using location-addressed identifiers (URLs). Such content can be made content-addressable with ERIS to improve availability. However, the ERIS encoded content has an identifier that is not linked with the original identifier of the content (e.g. the URL). For many applications knowning the original identifier is important. The ERIS Cache RDF vocabulary allows the ERIS encoded content to be annotated with the original identifier as well as other infromation describing the circumstances in which the cache was created.</p><h2>Vocabulary</h2><p>ERIS Cache is an extension of the <a href="https://www.w3.org/TR/prov-o/">W3C PROV Ontology</a>. The PROV Ontology provides terms for describing the provenance of content - the origin and history of some content. The PROV Ontology is quite abstract and complex to read (in the good old style of the W3C bureaucrats). Luckily, it is not as complex as it seems. The ontology is based on two basic classes (that we care about):</p><ul><li>Entity (<code>prov:Entity</code>): Some content or artefact (digital or physical)</li><li>Activity (<code>prov:Activity</code>): A process that acts upon entitites by transforming them or generating them.</li></ul><p>ERIS Cache defines a new type of activity - the activity of caching some content with ERIS:</p><pre><code class="language-turtle">ec:CreateCache
    a rdfs:Class ;
    rdfs:label &quot;CreateCache&quot; ;
    rdfs:comment &quot;The activity of creating an ERIS encoded, content-addressed cache of some content.&quot;;
    rdfs:subClassOf prov:Activity .</code></pre><p>See below for the complete RDF/Turtle serialization of the vocabulary.</p><p>The act of creating a cache is reified in an <code>ec:CreateCache</code> object. The activity is itself RDF and should be content-addressed and encoded with ERIS (see <a href="../eer-002">ERIS and RDF</a>).</p><p>Further terms and properties are used from the PROV ontology. A minimal eample uses the terms <code>prov:used</code> and <code>prov:generated</code>:</p><ol><li>Encode the orignal content with ERIS. The encoded content now has a new identifier (a read capability).</li><li>Create an <code>ec:CreateCache</code> object referencing the original content with <code>prov:used</code> and the ERIS encoded content with <code>prov:generated</code>.</li></ol><p><figure><svg xmlns="http://www.w3.org/2000/svg" alt="Diagram with three nodes: orignal content, ERIS encoded content and ec:CreateCache activity. An arrow from ec:CreateCache labeled prov:used goes to original content and another arrow ffrom ec:CreateCache labeled prov:generated goes to ERIS encoded content." viewBox="0 0 896.026 106.56" class="pikchr"><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M2,32L147,32L147,2L2,2Z" /><text y="17" x="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">original content</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M343,104L525,104A15 15 0 0 0 541 89A15 15 0 0 0 525 74L343,74A15 15 0 0 0 328 89A15 15 0 0 0 343 104Z" /><text y="89" x="434" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ec:CreateCache activity</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M711,32L878,32A15 15 0 0 0 893 17A15 15 0 0 0 878 2L711,2A15 15 0 0 0 695 17A15 15 0 0 0 711 32Z" /><text y="17" x="794" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ERIS encoded content</text><polygon style="fill:rgb(0,0,0)" points="147,17 159,17 156,25" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M153,19L328,89" /><text y="41" x="238" transform="rotate(21.67565763 238,53)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:used</text><polygon style="fill:rgb(0,0,0)" points="695,17 687,26 683,18" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M541,89L690,19" /><text y="41" x="618" transform="rotate(-24.92353995 618,53)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:generated</text></svg></figure></p><p>Note that there is no link from the encoded content directly to the orignal content. Instead the <code>ec:CreateCache</code> activity links to both original content and ERIS encoded content.</p><p>The example can be described in RDF/Turtle:</p><pre><code class="language-turtle">&lt;urn:eris:XXXXXXXXX&gt; a ec:CreateCache ;
          prov:used &lt;http://example.org/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-12&quot;^^xsd:dateTime .</code></pre><p>Note that we also used the <code>prov:endedAtTime</code> to describe the time when the cache was created (or the process of caching ended).</p><p>Other PROV terms may be used. For example <code>prov:agent</code> may be used to describe the agent that performed the caching activity:</p><pre><code class="language-turtle">&lt;urn:eris:XXXXXXXXX&gt; a ec:CreateCache ;
          prov:used &lt;http://example.org/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-12&quot;^^xsd:dateTime ;
          prov:actor &lt;xmpp:pukkamustard@jblis.xyz&gt; .</code></pre><h2>Examples</h2><h3>Multiple caches of the same content</h3><p>If multiple caches are created at different times but the original content does not change then the identifier of the ERIS encoded content will remain the same. The only thing that changes is the identifier of the <code>ec:CreateCache</code> activity as we have embedded a time stamp in it:</p><p><figure><svg xmlns="http://www.w3.org/2000/svg" alt="multiple-caches" viewBox="0 0 896.026 178.56" class="pikchr"><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M2,104L147,104L147,74L2,74Z" /><text y="89" x="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">original content</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M329,32L540,32A15 15 0 0 0 555 17A15 15 0 0 0 540 2L329,2A15 15 0 0 0 314 17A15 15 0 0 0 329 32Z" /><text y="17" x="434" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ec:CreateCache activity (1)</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M329,176L540,176A15 15 0 0 0 555 161A15 15 0 0 0 540 146L329,146A15 15 0 0 0 314 161A15 15 0 0 0 329 176Z" /><text y="161" x="434" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ec:CreateCache activity (2)</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M711,104L878,104A15 15 0 0 0 893 89A15 15 0 0 0 878 74L711,74A15 15 0 0 0 695 89A15 15 0 0 0 711 104Z" /><text y="89" x="794" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ERIS encoded content</text><polygon style="fill:rgb(0,0,0)" points="147,89 156,80 159,88" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M152,86L314,17" /><text y="41" x="231" transform="rotate(-23.3248922 231,53)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:used</text><polygon style="fill:rgb(0,0,0)" points="695,89 683,87 687,80" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M555,17L690,86" /><text y="41" x="625" transform="rotate(27.08777432 625,53)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:generated</text><polygon style="fill:rgb(0,0,0)" points="147,89 159,89 156,97" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M152,91L314,161" /><text y="113" x="231" transform="rotate(23.3248922 231,125)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:used</text><polygon style="fill:rgb(0,0,0)" points="695,89 687,98 683,90" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M555,161L690,91" /><text y="113" x="625" transform="rotate(-27.08777432 625,125)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:generated</text></svg></figure></p><p>As RDF/Turtle:</p><pre><code class="language-turtle">&lt;urn:eris:XXXXXXX&gt; a ec:CreateCache ;
          prov:used &lt;http://example.org/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-11&quot;^^xsd:dateTime .

&lt;urn:eris:ZZZZZZZZ&gt; a ec:CreateCache ;
          prov:used &lt;http://example.org/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-12&quot;^^xsd:dateTime .</code></pre><p>We have made explicit the fact that the content at the orignal location was same when cached at two different times while only storing one cached, ERIS encoded version.</p><h3>Cacheing same content from multiple locations</h3><p>If some content is hosted on multiple locations and we cache from both, both processes will result in the same identifier for the ERIS encoded content. However we get different <code>ec:CreateCache</code> activities describing the fact that the content was cached from two different locations:</p><p><figure><svg xmlns="http://www.w3.org/2000/svg" alt="Cacheing the same content from two different locations." viewBox="0 0 962.381 188.64" class="pikchr"><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M68,32L214,32L214,2L68,2Z" /><text y="17" x="141" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">original content</text><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M2,186L280,186L280,136L2,136Z" /><text y="151" x="141" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">original content</text><text y="171" x="141" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">(hosted at an different locaiton)</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M396,32L606,32A15 15 0 0 0 621 17A15 15 0 0 0 606 2L396,2A15 15 0 0 0 380 17A15 15 0 0 0 396 32Z" /><text y="17" x="501" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ec:CreateCache activity (1)</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M396,176L606,176A15 15 0 0 0 621 161A15 15 0 0 0 606 146L396,146A15 15 0 0 0 380 161A15 15 0 0 0 396 176Z" /><text y="161" x="501" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ec:CreateCache activity (2)</text><path style="fill:rgb(218,165,32);stroke-width:2.16;stroke:rgb(0,0,0);" d="M777,104L945,104A15 15 0 0 0 960 89A15 15 0 0 0 945 74L777,74A15 15 0 0 0 762 89A15 15 0 0 0 777 104Z" /><text y="89" x="861" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ERIS encoded content</text><polygon style="fill:rgb(0,0,0)" points="214,17 225,12 225,21" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M219,17L380,17" /><text y="5" x="297" transform="rotate(-0 297,17)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:used</text><polygon style="fill:rgb(0,0,0)" points="762,89 750,87 754,80" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M621,17L757,86" /><text y="41" x="691" transform="rotate(27.08777432 691,53)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:generated</text><polygon style="fill:rgb(0,0,0)" points="280,161 291,156 291,165" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M286,161L380,161" /><text y="149" x="330" transform="rotate(-0 330,161)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:used</text><polygon style="fill:rgb(0,0,0)" points="762,89 754,98 750,90" /><path style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" d="M621,161L757,91" /><text y="113" x="691" transform="rotate(-27.08777432 691,125)" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">prov:generated</text></svg></figure></p><p>As RDF/Turtle:</p><pre><code class="language-turtle">&lt;urn:eris:XXXXXXX&gt; a ec:CreateCache ;
          prov:used &lt;http://example.org/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-12&quot;^^xsd:dateTime .

&lt;urn:eris:ZZZZZZZZ&gt; a ec:CreateCache ;
          prov:used &lt;http://somewhere.else/some-document.html&gt; ;
          prov:generated &lt;urn:eris:YYYYYYYY&gt; ;
          prov:endedAtTime &quot;2022-05-12&quot;^^xsd:dateTime .</code></pre><h2>RDF Turtle</h2><p>The RDF/Turtle vocabulary is also available at <a href="http://purl.org/eris/cache">http://purl.org/eris/cache</a>.</p><pre><code class="language-turtle">@prefix ec: &lt;http://purl.org/eris/cache#&gt; .
@prefix prov: &lt;http://www.w3.org/ns/prov#&gt; .
@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; .

&lt;http://purl.org/eris/cache#&gt;
    a owl:Ontology ;
    rdfs:label &quot;ERIS Cache Vocabulary&quot;@en ;
    rdfs:comment &quot;An extension to the W3C PROVenance Interchange Ontology to describe the Activity of content-addressed caching with the ERIS encoding.&quot;@en .

ec:CreateCache
    a rdfs:Class ;
    rdfs:label &quot;CreateCache&quot; ;
    rdfs:comment &quot;The activity of creating an ERIS encoded, content-addressed cache of some content.&quot;;
    rdfs:subClassOf prov:Activity .</code></pre></article><footer><span><a href="https://codeberg.org/eris/eer/" title="Git repository from which this site is generated">Git</a></span><span><a href="https://creativecommons.org/licenses/by-sa/4.0/" title="Content licensed as CC-BY-SA-4.0">CC-BY-SA-4.0</a></span></footer></body></html>