Re: Safe manipulation of RDF data (from semantic-web)

Hi Martynas,

thank you for the examples, GET seems clear now.

Good point about the person / document. We probably end up with three 
kind of resources: actual object, admin record (who last modified etc), 
and web page or another document about the object.

Just one question: what did you mean by

"If you cannot distinguish "basic person" from "admin person" by their
URIs"?


We are not quite there yet with updates, so we might have questions 
later about those.

Br,
Mikael

On 11/09/2019 18:45, Martynas Jusevičius wrote:
> Hi Mikael,
>
> thanks for reaching out.
>
> There is more information on LDT in the AtomGraph Processor wiki, more
> specifically: https://github.com/AtomGraph/Processor/wiki/Linked-Data-Templates
>
> The matching is based on URIs: relative request URI is being matched
> against the ldt:match values of templates in the ontology.
>
> Then, from the matching template (if there is any), the SPARQL command
> is retrieved using either ldt:query or ldt:update (depending on the
> HTTP request method).
>
> To address your example, templates and queries could look like this:
>
> :BasicPersonItem a ldt:Template ;
>      ldt:match "/person/basic/{id}" ;
>      ldt:query :ConstructBasicPerson ;
>      rdfs:isDefinedBy : .
>
> :ConstructBasicPerson a sp:Construct ;
>      sp:text """
>      PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
>
>      CONSTRUCT
>      {
>          ?this a foaf:Person ;
>              foaf:name ?name .
>      }
>      {
>          ?this a foaf:Person ;
>              foaf:name ?name .
>      }
>      """ ;
>      rdfs:isDefinedBy : .
>
> :AdminPersonItem a ldt:Template ;
>      ldt:match "/person/admin/{id}" ;
>      ldt:query :ConstructAdminPerson ;
>      rdfs:isDefinedBy : .
>
> :ConstructAdminPerson a sp:Construct ;
>      sp:text """
>      CONSTRUCT WHERE
>      {
>          ?this ?p ?o
>      }
>      """ ;
>      rdfs:isDefinedBy : .
>
> "Basic person" query retrieves only name and type, "admin person"
> query retrieves all properties.
> This example requires that basic and admin person resources can be
> differentiated by their URIs, i.e. "/person/basic/{id}" vs
> "/person/admin/{id}".
>
> It also assumes that persons are documents (since they can be
> dereferenced over HTTP), which is not kosher re. httpRange-14 [1]. A
> better solution would have separate resources for persons e.g. using
> hash URIs such as #this) and explicitly connect them to documents
> using an RDF property. We use foaf:primaryTopic/foaf:isPrimaryTopicOf.
> But this is a whole topic on its own.
>
> If you cannot distinguish "basic person" from "admin person" by their
> URIs, you could also have a template that matches both and maps to a
> single query. The question is then whether you can differentiate which
> properties to return using a single query.
>
> Does this help?
>
>
> [1] https://www.w3.org/2001/tag/group/track/issues/14
>
> Martynas
> atomgraph.com
>
> On Wed, Sep 11, 2019 at 11:21 AM Mikael Pesonen
> <mikael.pesonen@lingsoft.fi> wrote:
>>
>> Hi Martynas,
>>
>> we have a proprietary implementation now:
>>
>> js/React app generates a custom json out of form data. That is sent
>> (with a template id) to also custom proxy, which converts the json into
>> SPARQL using pre made templates. SPARQL is then queried on Apache Jena.
>>
>> Now we would like to replace all custom bits with one ore more standards.
>>
>> Is it possible to have any kind of templates with LDT? For example
>> "person_basic" and "person_admin",
>> where admin contains more properties of a person?
>>
>> I'm still having trouble to understand how the SPARQL template is
>> selected with LDT.
>>
>> Br,
>> Mikael
>>
>> On 10/09/2019 15:50, Martynas Jusevičius wrote:
>>> Hey Mikael,
>>>
>>> we have a simple example here: https://github.com/AtomGraph/Processor#example
>>>
>>> Do you have some specific use case in mind? If you can share it, I can
>>> probably look into it.
>>>
>>> There is a Community Group for Linked Data Templates which includes a
>>> mailing list: https://www.w3.org/community/declarative-apps/
>>>
>>> Martynas
>>> atomgraph.com
>>>
>>> On Tue, Sep 10, 2019 at 1:27 PM Mikael Pesonen
>>> <mikael.pesonen@lingsoft.fi> wrote:
>>>> In the example there is the GET request
>>>>
>>>> GET /people/Berners-Lee?g=http%3A%2F%2Flinkeddatahub.com%2Fgraphs%2Fc5f34fe9-0456-48e8-a371-04be71529762 HTTP/1.1
>>>>
>>>>
>>>> Often you want to query different amounts of data depending of the case. Sometimes for example, person name is enough, other time you want all the triples (DESCRIBE).
>>>> How do you specify here the context?
>>>>
>>>> BTW is there a dedicated forum for discussing Linked Data Templates?
>> --
>> Lingsoft - 30 years of Leading Language Management
>>
>> www.lingsoft.fi
>>
>> Speech Applications - Language Management - Translation - Reader's and Writer's Tools - Text Tools - E-books and M-books
>>
>> Mikael Pesonen
>> System Engineer
>>
>> e-mail: mikael.pesonen@lingsoft.fi
>> Tel. +358 2 279 3300
>>
>> Time zone: GMT+2
>>
>> Helsinki Office
>> Eteläranta 10
>> FI-00130 Helsinki
>> FINLAND
>>
>> Turku Office
>> Kauppiaskatu 5 A
>> FI-20100 Turku
>> FINLAND
>>

-- 
Lingsoft - 30 years of Leading Language Management

www.lingsoft.fi

Speech Applications - Language Management - Translation - Reader's and Writer's Tools - Text Tools - E-books and M-books

Mikael Pesonen
System Engineer

e-mail: mikael.pesonen@lingsoft.fi
Tel. +358 2 279 3300

Time zone: GMT+2

Helsinki Office
Eteläranta 10
FI-00130 Helsinki
FINLAND

Turku Office
Kauppiaskatu 5 A
FI-20100 Turku
FINLAND

Received on Friday, 13 September 2019 12:08:59 UTC