Jitse De Smet
Jitse De Smet
SELECT * where
{
?picture a ex:picture ;
ex:contains ex:Alice, ex:Bob ;
ex:taken-by ex:Bob .
}
INSERT DATA
{
# a ex:picture ;
ex:contains ex:Alice, ex:Bob ;
ex:taken-by ex:Bob .
}
"How to abstract data updates in a permissioned decentralized environment behind a query abstraction layer ?"
Data consumers don't interact with the interfaces directly.
Data stores can reject the actions of data consumers.
Data stores are small, distributed, and the owner is in control.
We use a query language (think SPARQL, SQL, ...) to add the abstraction.
<http://example.org/c1/>
a ldp:BasicContainer;
dcterms:title "A very simple container";
ldp:contains <r1>, <r2>, <r3>.
pictures/ |- Valencia/ | |- one.ttl | |- two.ttl |- Ghent/ | |- one.ttl | |- two.ttl |- Paris/ | |- one.ttl | |- two.ttl | |- three.ttl |- missing.ttl
pictures/ |- 30-01-2024/ | |- one.ttl | |- two.ttl |- 14-02-2024/ | |- one.ttl | |- two.ttl |- 17-05-2023/ | |- one.ttl | |- two.ttl | |- three.ttl | |- four.ttl
ex:PictureShape
a sh:NodeShape;
sh:targetClass ex:Picture ;
sh:property [
sh:path ex:depicts ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:datatype xsd:string ;
] ;
sh:property [
sh:path ex:contains ;
sh:nodeKind sh:IRI ;
] .
<#PicturesTree>
a st:ShapeTree ;
st:expectsType st:Container ;
st:shape ex:PicturesShape ;
st:contains <#PicturesByCityTree> .
<#PicturesByCityTree>
a st:ShapeTree ;
st:expectsType st:Container ;
st:shape ex:PicturesByCityShape ;
st:contains <#PictureTree> .
<#PictureTree>
a st:ShapeTree ;
st:expectsType st:Resource ;
st:shape ex:PictureShape .