- From: Martynas Jusevičius <martynas@atomgraph.com>
- Date: Wed, 18 Sep 2019 12:27:54 +0200
- To: Mikael Pesonen <mikael.pesonen@lingsoft.fi>
- Cc: public-declarative-apps@w3.org
This is the file: https://raw.githubusercontent.com/AtomGraph/Processor/master/src/main/resources/log4j.properties On Wed, Sep 18, 2019 at 12:26 PM Mikael Pesonen <mikael.pesonen@lingsoft.fi> wrote: > > > Could I please have a log4j.properties file too. I have no experience in > java logging... > > Mikael > > On 18/09/2019 13:20, Martynas Jusevičius wrote: > > Oops, I'll CC the list again :) > > > > Could you try mounting log4j.properties as well, like in the example? > > That should give you debug output in the container. > > > > Also a good idea to validate the ontology's Turtle syntax (or any RDF > > config really) after any changes, just to be sure. There's a handy > > online tool: http://ttl.summerofcode.be > > > > BTW you can also do docker pull atomgraph/processor, I just released > > an updated version that allows killing the container gracefully with > > Ctrl+C. > > > > On Wed, Sep 18, 2019 at 12:12 PM Mikael Pesonen > > <mikael.pesonen@lingsoft.fi> wrote: > >> > >> Thanks! Now I think I have the correct command line > >> > >> sudo docker run --rm -p 8090:8090 -e > >> ENDPOINT="https://query.wikidata.org/bigdata/namespace/wdq/sparql" -e > >> GRAPH_STORE="https://query.wikidata.org/bigdata/namespace/wdq/service" > >> -e > >> ONTOLOGY="https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata#" > >> -v > >> "/home/text/cases/nimisampo/proxy/wikidata.ttl":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/org/wikidata/ldt.ttl" > >> -v > >> "/home/text/cases/nimisampo/proxy/location-mapping.n3":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/custom-mapping.n3" > >> atomgraph/processor > >> > >> When testing I get > >> > >> >> curl -v http://localhost:8090/birthdays > >> > >> * Trying ::1... > >> * Connected to localhost (::1) port 8090 (#0) > >> > GET /birthdays HTTP/1.1 > >> > Host: localhost:8090 > >> > User-Agent: curl/7.47.0 > >> > Accept: */* > >> > > >> * Recv failure: Connection reset by peer > >> * Closing connection 0 > >> curl: (56) Recv failure: Connection reset by peer > >> > >> > >> Do you have and idea what could be the issue? In docker output there > >> seems to be no errors: > >> > >> @prefix lm: <http://jena.hpl.hp.com/2004/08/location-mapping#> . > >> > >> [] lm:mapping > >> > >> [ lm:name "https://www.w3.org/ns/ldt#" > >> ; lm:altName > >> "com/atomgraph/processor/ldt.ttl" ] , > >> [ lm:name "https://www.w3.org/ns/ldt/core/domain#" > >> ; lm:altName "com/atomgraph/processor/c.ttl" ] , > >> [ lm:name "https://www.w3.org/ns/ldt/core/templates#" > >> ; lm:altName "com/atomgraph/processor/ct.ttl" ] , > >> [ lm:name "https://www.w3.org/ns/ldt/named-graphs/templates#" > >> ; lm:altName "com/atomgraph/processor/ngt.ttl" ] , > >> [ lm:name "https://www.w3.org/ns/ldt/document-hierarchy/domain#" > >> ; lm:altName "com/atomgraph/processor/dh.ttl" ] , > >> [ lm:name "https://www.w3.org/ns/ldt/topic-hierarchy/templates#" > >> ; lm:altName "com/atomgraph/processor/tht.ttl" ] , > >> [ lm:name "http://rdfs.org/sioc/ns#" > >> ; lm:altName > >> "com/atomgraph/processor/sioc.owl" ] , > >> [ lm:name "http://rdfs.org/ns/void#" > >> ; lm:altName > >> "com/atomgraph/processor/void.owl" ] , > >> [ lm:name "http://www.w3.org/2011/http#" > >> ; lm:altName > >> "com/atomgraph/processor/http.owl" ] , > >> [ lm:name "http://www.w3.org/2011/http" > >> ; lm:altName > >> "com/atomgraph/processor/http.owl" ] , > >> [ lm:name "http://www.w3.org/2011/http-statusCodes#" > >> ; lm:altName > >> "com/atomgraph/processor/http-statusCodes.rdf" ] , > >> [ lm:name "http://www.w3.org/2011/http-statusCodes" > >> ; lm:altName > >> "com/atomgraph/processor/http-statusCodes.rdf" ] , > >> [ lm:name "http://www.w3.org/ns/sparql-service-description#" > >> ; lm:altName "com/atomgraph/processor/sparql-service.owl" ] , > >> [ lm:name "http://xmlns.com/foaf/0.1/" > >> ; lm:altName > >> "com/atomgraph/processor/foaf.owl" ] , > >> [ lm:name "http://spinrdf.org/sp#" > >> ; lm:altName "etc/sp.ttl" ] , > >> [ lm:name "http://spinrdf.org/sp" > >> ; lm:altName "etc/sp.ttl" ] , > >> [ lm:name "http://spinrdf.org/spin#" > >> ; lm:altName "etc/spin.ttl" ] , > >> [ lm:name "http://spinrdf.org/spin" > >> ; lm:altName "etc/spin.ttl" ] , > >> [ lm:name "http://spinrdf.org/spl#" > >> ; lm:altName "etc/spl.spin.ttl" ] , > >> [ lm:name "http://spinrdf.org/spl" > >> ; lm:altName "etc/spl.spin.ttl" ] > >> . > >> > >> ... html for a github page ... > >> > >> 18-Sep-2019 09:57:42.303 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Server > >> version: Apache Tomcat/8.0.52 > >> 18-Sep-2019 09:57:42.305 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Server > >> built: Apr 28 2018 16:24:29 UTC > >> 18-Sep-2019 09:57:42.306 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Server > >> number: 8.0.52.0 > >> 18-Sep-2019 09:57:42.306 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log OS > >> Name: Linux > >> 18-Sep-2019 09:57:42.306 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log OS > >> Version: 4.4.0-148-generic > >> 18-Sep-2019 09:57:42.306 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log > >> Architecture: amd64 > >> 18-Sep-2019 09:57:42.307 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Java > >> Home: /usr/lib/jvm/java-8-openjdk-amd64/jre > >> 18-Sep-2019 09:57:42.307 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log JVM > >> Version: 1.8.0_171-8u171-b11-1~deb9u1-b11 > >> 18-Sep-2019 09:57:42.307 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log JVM > >> Vendor: Oracle Corporation > >> 18-Sep-2019 09:57:42.307 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log > >> CATALINA_BASE: /usr/local/tomcat > >> 18-Sep-2019 09:57:42.308 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log > >> CATALINA_HOME: /usr/local/tomcat > >> 18-Sep-2019 09:57:42.308 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: > >> -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties > >> 18-Sep-2019 09:57:42.308 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager > >> 18-Sep-2019 09:57:42.308 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Djdk.tls.ephemeralDHKeySize=2048 > >> 18-Sep-2019 09:57:42.309 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources > >> 18-Sep-2019 09:57:42.309 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Dignore.endorsed.dirs= > >> 18-Sep-2019 09:57:42.309 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Dcatalina.base=/usr/local/tomcat > >> 18-Sep-2019 09:57:42.309 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Dcatalina.home=/usr/local/tomcat > >> 18-Sep-2019 09:57:42.310 INFO [main] > >> org.apache.catalina.startup.VersionLoggerListener.log Command line > >> argument: -Djava.io.tmpdir=/usr/local/tomcat/temp > >> 18-Sep-2019 09:57:42.310 INFO [main] > >> org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR > >> based Apache Tomcat Native library 1.2.16 using APR version 1.5.2. > >> 18-Sep-2019 09:57:42.310 INFO [main] > >> org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR > >> capabilities: IPv6 [true], sendfile [true], accept filters [false], > >> random [true]. > >> 18-Sep-2019 09:57:42.314 INFO [main] > >> org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL > >> successfully initialized (OpenSSL 1.1.0f 25 May 2017) > >> 18-Sep-2019 09:57:42.387 INFO [main] > >> org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler > >> ["http-apr-8080"] > >> 18-Sep-2019 09:57:42.394 INFO [main] > >> org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler > >> ["ajp-apr-8009"] > >> 18-Sep-2019 09:57:42.398 INFO [main] > >> org.apache.catalina.startup.Catalina.load Initialization processed in 451 ms > >> 18-Sep-2019 09:57:42.432 INFO [main] > >> org.apache.catalina.core.StandardService.startInternal Starting service > >> Catalina > >> 18-Sep-2019 09:57:42.432 INFO [main] > >> org.apache.catalina.core.StandardEngine.startInternal Starting Servlet > >> Engine: Apache Tomcat/8.0.52 > >> 18-Sep-2019 09:57:42.446 INFO [localhost-startStop-1] > >> org.apache.catalina.startup.HostConfig.deployDescriptor Deploying > >> configuration descriptor /usr/local/tomcat/conf/Catalina/localhost/ROOT.xml > >> 18-Sep-2019 09:57:43.893 INFO [localhost-startStop-1] > >> org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was > >> scanned for TLDs yet contained no TLDs. Enable debug logging for this > >> logger for a complete list of JARs that were scanned but no TLDs were > >> found in them. Skipping unneeded JARs during scanning can improve > >> startup time and JSP compilation time. > >> 18-Sep-2019 09:57:43.915 INFO [localhost-startStop-1] > >> org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of > >> configuration descriptor > >> /usr/local/tomcat/conf/Catalina/localhost/ROOT.xml has finished in 1,469 ms > >> 18-Sep-2019 09:57:43.917 INFO [main] > >> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler > >> ["http-apr-8080"] > >> 18-Sep-2019 09:57:43.925 INFO [main] > >> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler > >> ["ajp-apr-8009"] > >> 18-Sep-2019 09:57:43.927 INFO [main] > >> org.apache.catalina.startup.Catalina.start Server startup in 1528 ms > >> > >> > >> Mikael > >> > >> > >> On 18/09/2019 10:58, Martynas Jusevičius wrote: > >>> Hi :) > >>> > >>> thanks for reporting, I've now fixed the links. Docker Hub reuses > >>> README from GitHub, so GitHub-relative URLs don't work. > >>> > >>> I also added a link to the Wikidata example: > >>> https://github.com/AtomGraph/Processor/tree/master/examples > >>> It contains these two files: > >>> > >>> - wikidata.ttl is the LDT ontology of the example application. It > >>> contains LDT templates, in your case :PersonItem for example. > >>> The base URI (i.e. the namespace) is totally up to you, but keep in > >>> mind the URI of the ldt:Ontology resource, because that is what > >>> specified as -e ONTOLOGY. > >>> In the Wikidata example, the ontology URI is > >>> https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata# > >>> (with the trailing hash). > >>> > >>> - location-mapping.n3 - this is a config file for Jena: > >>> https://jena.apache.org/documentation/notes/file-manager.html#the-locationmapper-configuration-file > >>> In RDF we want to use URIs namespaces and not file paths. This file > >>> provides a mapping between the two, and when an application attempts > >>> to read a mapped URI, Jena actually reads it from the file it is > >>> mapped to. > >>> In the example, > >>> https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata# > >>> is mapped to org/wikidata/ldt.ttl - and that is the file we mount > >>> under /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/ in the > >>> container. > >>> > >>> So you do need location-mapping.n3 as well, unless your LDT ontology > >>> is resolvable from its URI. In the example the ontology URI is made up > >>> and there is no document behind it, so Jena would fail reading it if > >>> there would be no mapping. > >>> > >>> I think it would be easiest for you to reuse the example as it is, > >>> having copies of wikidata.ttl and location-mapping.n3 on your machine > >>> (you can probably skip log4j.properties) that you mount using -v. > >>> Then you can make changes in wikidata.ttl. Try to replace the > >>> :BirthdaysTemplate and query with your own and see if it works. Worry > >>> about namespaces and filenames later :) > >>> > >>> Well and -e ENDPOINT and -e GRAPH_STORE values have to be replaced > >>> with your URLs of course. > >>> > >>> Martynas > >>> > >>> On Tue, Sep 17, 2019 at 3:24 PM Mikael Pesonen > >>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> Hi again! > >>>> > >>>> Im reading instructions at https://hub.docker.com/r/atomgraph/processor. There are some broken links at top. > >>>> > >>>> docker run --rm \ > >>>> -p 8080:8080 \ > >>>> -e ENDPOINT="https://query.wikidata.org/bigdata/namespace/wdq/sparql" \ > >>>> -e GRAPH_STORE="https://query.wikidata.org/bigdata/namespace/wdq/service" \ > >>>> -e ONTOLOGY="https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata#" \ > >>>> -v "/c/Users/namedgraph/WebRoot/Processor/src/main/resources/log4j.properties":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.properties" \ > >>>> -v "/c/Users/namedgraph/WebRoot/Processor/examples/wikidata.ttl":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/org/wikidata/ldt.ttl" \ > >>>> -v "/c/Users/namedgraph/WebRoot/Processor/examples/location-mapping.n3":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/custom-mapping.n3" \ > >>>> atomgraph/processor > >>>> > >>>> What is the puspose of wikidata.ttl and where can I find it? location_mapping.n3 can be left out if its non custom? > >>>> > >>>> So this would work? > >>>> > >>>> docker run --rm \ > >>>> -p 8080:8080 \ > >>>> -e ENDPOINT="https://query.wikidata.org/bigdata/namespace/wdq/sparql" \ > >>>> -e GRAPH_STORE="https://query.wikidata.org/bigdata/namespace/wdq/service" \ > >>>> -e ONTOLOGY="https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata#" \ > >>>> -v "/c/Users/namedgraph/WebRoot/Processor/examples/wikidata.ttl":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/org/wikidata/ldt.ttl" \ > >>>> atomgraph/processor > >>>> > >>>> > >>>> Mikael > >>>> > >>>> > >>>> > >>>> On 17/09/2019 14:57, Martynas Jusevičius wrote: > >>>> > >>>> Hi Mikael, > >>>> > >>>> the template URI on its own is irrelevant here, it could be a blank > >>>> node resource. It becomes important when one intends to reuse > >>>> templates, e.g. extend them or reference them, possibly from another > >>>> LDT ontology. > >>>> > >>>> Yes it is the ldt:match that holds the URI template that request URI > >>>> is matched against. I have expanded the explanation here: > >>>> https://github.com/AtomGraph/Processor/wiki/Linked-Data-Templates#templates > >>>> > >>>> As for the agent ID, one option to pass a value to the LDT template is > >>>> using template parameters: > >>>> https://github.com/AtomGraph/Processor/wiki/Linked-Data-Templates#parameters > >>>> > >>>> Then if a request URI is > >>>> https://resource.lingsoft.fi/286c384d-cd5c-4887-9b85-94c0c147f709?agent=123456, > >>>> a variable binding (?agent, "123456") is applied to the query string > >>>> from ldt:query, before it is executed. > >>>> This might or might not work for your use case. > >>>> > >>>> Martynas > >>>> > >>>> On Tue, Sep 17, 2019 at 1:43 PM Mikael Pesonen > >>>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> > >>>> Hmm, still mixing up things. So ldt:match has to match the resource URI. > >>>> > >>>> On 17/09/2019 12:13, Mikael Pesonen wrote: > >>>> > >>>> Ok now I got it, the template address has to be the same as resource URI. > >>>> Just one question, in our case, https://base/{uuid}, how should we > >>>> forward the agent id (access level) to the template for utilizing ACL? > >>>> > >>>> > >>>> > >>>> On 17/09/2019 11:40, Martynas Jusevičius wrote: > >>>> > >>>> Thanks Mikael, > >>>> > >>>> the example makes it clearer. > >>>> > >>>> So the URI template for all persons (and I guess all resources in > >>>> general?) is "/{uuid}", if we take https://resource.lingsoft.fi as the > >>>> base URI. Which means that you could not match two different LDT > >>>> templates for different types of persons. > >>>> > >>>> Then my suggestion with using a single template with a query that > >>>> references the ACL graph still stands. Let me know if you need help > >>>> setting it up in Processor. > >>>> > >>>> Martynas > >>>> > >>>> On Mon, Sep 16, 2019 at 11:27 AM Mikael Pesonen > >>>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> > >>>> Here is a sample data: > >>>> > >>>> <https://resource.lingsoft.fi/286c384d-cd5c-4887-9b85-94c0c147f709> > >>>> a foaf:Person ; > >>>> vcard:family-name "Pesonen" ; > >>>> vcard:fn "Mikael Pesonen" ; > >>>> vcard:given-name "Mikael" ; > >>>> vcard:hasEmail > >>>> <https://resource.lingsoft.fi/cf9b02b7-bd0d-486e-b0d9-da1464e27d2e> , > >>>> <https://resource.lingsoft.fi/5c04aa23-6c42-44a1-9ac9-69ee255ac170> ; > >>>> vcard:hasGender vcard:Male ; > >>>> vcard:hasInstantMessage > >>>> <https://resource.lingsoft.fi/4aa01d37-744c-4964-a794-d997aa376584> ; > >>>> vcard:hasPhoto > >>>> <https://resource.lingsoft.fi/8f4a4ddd-43c2-4e27-8ed7-996dd00e939c> ; > >>>> vcard:hasTelephone > >>>> <https://resource.lingsoft.fi/3755ed0c-81b7-430e-92a0-16fc80ba41b4> ; > >>>> org:basedAt > >>>> <https://resource.lingsoft.fi/b48a0820-6921-43fc-a346-e72397265bbe> ; > >>>> org:memberOf > >>>> <https://resource.lingsoft.fi/810dfbff-e6fb-458a-b27d-3726a27e5109> ; > >>>> foaf:account > >>>> <https://resource.lingsoft.fi/2f0aa772-f845-4f43-b607-dc65ff66b9aa> ; > >>>> <https://resource.lingsoft.fi/cf9b02b7-bd0d-486e-b0d9-da1464e27d2e> > >>>> a vcard:Email , vcard:Work ; > >>>> rdfs:label "***@lingsoft.fi" ; > >>>> vcard:hasValue <mailto:***@lingsoft.fi> . > >>>> > >>>> > >>>> So most of the person's values are resources and every resource has id > >>>> of type https://resource.lingsoft.fi/<UUID>. > >>>> > >>>> > >>>> Mikael > >>>> > >>>> > >>>> On 15/09/2019 01:02, Martynas Jusevičius wrote: > >>>> > >>>> I meant the first and the ACL examples as alternatives, but yes you > >>>> can combine the approaches as well. Again, depends mostly on your URIs > >>>> - and are able to change their pattern? > >>>> > >>>> I think it would help if you could show some RDF data that represents > >>>> your case (does not have to be the actual person data :)) Either paste > >>>> inline or as a Gist if it's larger. > >>>> > >>>> Re. ACL, we use a filter in our LinkedDataHub platform that checks ACL > >>>> access before the actual LDT request is invoked. And if query results > >>>> need to depend on the access level, we reference the ACL dataset as I > >>>> showed in the example. > >>>> > >>>> Martynas > >>>> > >>>> On Fri, Sep 13, 2019 at 3:55 PM Mikael Pesonen > >>>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> > >>>> Looking at your first example, looks like that and this acl > >>>> version work > >>>> both? > >>>> > >>>> So as with your first example: > >>>> > >>>> /person/basic_access/{id} > >>>> -- > >>>> > >>>> :BasicPersonAccessItem a ldt:Template ; > >>>> ldt:match "/person/basic_access/{id}" ; > >>>> ldt:query :ConstructBasicPerson ; > >>>> > >>>> ---- > >>>> /person/admin_access/{id} > >>>> -- > >>>> :AdminPersonAccessItem a ldt:Template ; > >>>> ldt:match "/person/admin_access/{id}" ; > >>>> ldt:query :ConstructFullPerson ; > >>>> > >>>> > >>>> > >>>> And this acl example > >>>> > >>>> /person/{agent}/{id} > >>>> -- > >>>> :PersonAccessItem a ldt:Template ; > >>>> ldt:match "/person/{agent}/{id}" ; > >>>> ldt:query :ConstructPerson ; > >>>> ... > >>>> > >>>> > >>>> ACL example sure is more refined since you can define the access > >>>> levels > >>>> in the ACL data. > >>>> > >>>> > >>>> On 13/09/2019 16:25, Martynas Jusevičius wrote: > >>>> > >>>> Well if you only have one kind of person resources with a single URI > >>>> pattern, then you cannot select (match) different LDT templates. > >>>> That is because an LDT template maps one URI pattern to one SPARQL > >>>> command. The matching process is not looking into the SPARQL query > >>>> results at all, only at the request URI and the application's LDT > >>>> ontology. > >>>> > >>>> I think you can solve this with a single query though. What we do is > >>>> provide the URI of the requesting agent as a query binding, e.g. > >>>> ?agent variable. Something like > >>>> > >>>> :ConstructPerson a sp:Construct ; > >>>> sp:text """ > >>>> PREFIX foaf: <http://xmlns.com/foaf/0.1/> > >>>> PREFIX acl: <http://www.w3.org/ns/auth/acl#> > >>>> > >>>> CONSTRUCT > >>>> { > >>>> ?this a foaf:Person . > >>>> ?this foaf:name ?name . > >>>> ?this ?p ?o . > >>>> } > >>>> WHERE > >>>> { { ?this a foaf:Person ; > >>>> foaf:name ?name > >>>> } > >>>> UNION > >>>> { GRAPH <acl> > >>>> { ?auth acl:accessTo ?this ; > >>>> acl:agent ?agent . > >>>> } > >>>> ?this ?p ?o > >>>> } > >>>> } > >>>> """ ; > >>>> rdfs:isDefinedBy : . > >>>> > >>>> The idea is that the person query always returns "basic" properties, > >>>> and adds all properties *only* if the agent ?agent has an > >>>> authorization to access the requested resource ?this. > >>>> This approach requires that the query has access to the ACL data, > >>>> which I have indicated here as GRAPH <acl>. The actual pattern for > >>>> authorization check will probably be more complex of course. > >>>> It also requires that the authentication mechanism can provide > >>>> the URI > >>>> of the agent. > >>>> > >>>> I hope I got what you meant :) > >>>> > >>>> On Fri, Sep 13, 2019 at 2:58 PM Mikael Pesonen > >>>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> > >>>> Ah, I might have explained our case bit vaguely. So I just meant > >>>> that we > >>>> have in RDF data one kind of person resources, and > >>>> depending on the access rights in the application, you are > >>>> allowed to > >>>> see different portions of that person's data. > >>>> Basic user sees only the name, for example, and admin user is > >>>> allowed to > >>>> see all data. This is handled by selecting different template > >>>> for basic > >>>> user and admin, right? > >>>> > >>>> > >>>> > >>>> On 13/09/2019 15:52, Martynas Jusevičius wrote: > >>>> > >>>> Mikael, > >>>> > >>>> this is related to hierarchical URIs: > >>>> http://patterns.dataincubator.org/book/hierarchical-uris.html > >>>> > >>>> In your case, the question is how you have organized the > >>>> collections/items of basic and admin persons in your dataset. > >>>> > >>>> One option is that both "basic persons" and "admin persons" > >>>> belong to > >>>> the same collection and have a single URI pattern: /persons/{id} > >>>> In this case you cannot tell if resource /persons/12345 is a > >>>> "basic > >>>> person" or "admin person" just from its URI. You need to > >>>> dereference > >>>> it and the look into RDF types and properties. > >>>> > >>>> Another option is that you treat them as belonging to separate > >>>> collections, for example: /persons/{id} and /admins/{id} > >>>> In this case you can easily tell if a resource is a "basic > >>>> person" or > >>>> an "admin person" already from its URIs. > >>>> > >>>> Linked Data Templates are best suited for this second case, > >>>> where URI > >>>> space is subdivided into hierarchies based on entity types. > >>>> That makes > >>>> it easy to define URI templates that match precisely the set of > >>>> resources that you want. > >>>> > >>>> Does it make it clearer? > >>>> > >>>> On Fri, Sep 13, 2019 at 2:08 PM Mikael Pesonen > >>>> <mikael.pesonen@lingsoft.fi> wrote: > >>>> > >>>> 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 > >>>> > >>>> -- > >>>> 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 > >>>> > >>>> -- > >>>> 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 > >>>> > >>>> > >>>> -- > >>>> 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 > >> > > -- > 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 Wednesday, 18 September 2019 10:34:07 UTC