- From: Mikael Pesonen <mikael.pesonen@lingsoft.fi>
- Date: Wed, 18 Sep 2019 15:18:37 +0300
- To: Martynas Jusevičius <martynas@atomgraph.com>
- Cc: public-declarative-apps@w3.org
Port mapping made sense. So now it responds for curl -v http://localhost:8090/birthdays < HTTP/1.1 500 Internal Server Error < Server: Apache-Coyote/1.1 < Content-Type: text/html;charset=utf-8 < Content-Language: en < Content-Length: 4952 < Date: Wed, 18 Sep 2019 12:13:43 GMT < Connection: close < <!DOCTYPE html><html><head><title>Apache Tomcat/8.0.52 - Error report</title><style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> </head><body><h1>HTTP Status 500 - Servlet.init() for servlet processor threw exception</h1><div class="line"></div><p><b>type</b> Exception report</p><p><b>message</b> <u>Servlet.init() for servlet processor threw exception</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b></p><pre>javax.servlet.ServletException: Servlet.init() for servlet processor threw exception org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1156) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2464) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748) </pre><p><b>root cause</b></p><pre>com.sun.jersey.api.container.ContainerException: The Application class com.atomgraph.server.Application could not be instantiated com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:88) com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:79) com.sun.jersey.server.impl.application.DeferredResourceConfig.getApplication(DeferredResourceConfig.java:76) com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1164) com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795) com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1156) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2464) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748) * Closing connection 0 </pre><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/8.0.52 logs.</u></p><hr class="line"><h3>Apache Tomcat/8.0.52</h3></body></html> At docker side (some kind of typo in location-mapping.n3?) : 18-Sep-2019 12:13:21.308 INFO [http-apr-8080-exec-1] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM' 12:13:21,470 DEBUG Jena:189 - Jena initialization 12:13:21,659 DEBUG FileManager:157 - Add location: LocatorFile 12:13:21,661 DEBUG FileManager:157 - Add location: ClassLoaderLocator 12:13:21,664 DEBUG LocationMapper:152 - Failed to find configuration: file:location-mapping.rdf;file:location-mapping.n3;file:location-mapping.ttl;file:etc/location-mapping.rdf;file:etc/location-mapping.n3;file:etc/location-mapping.ttl 12:13:21,665 DEBUG FileManager:157 - Add location: LocatorFile 12:13:21,669 DEBUG FileManager:157 - Add location: LocatorURL 12:13:21,669 DEBUG FileManager:157 - Add location: ClassLoaderLocator 12:13:21,676 DEBUG StreamManager:142 - Found: location-mapping.n3 (ClassLoaderLocator) 12:13:22,074 WARN LocationMapper:188 - Error in configuration file: Lexical error at line 31, column 10. Encountered: " " (32), after : "<!DOCTYPE" 12:13:22,145 DEBUG info:334 - System architecture: 64 bit 12:13:22,221 DEBUG FileManager:157 - Add location: LocatorFile 12:13:22,221 DEBUG FileManager:157 - Add location: LocatorURL 12:13:22,221 DEBUG FileManager:157 - Add location: ClassLoaderLocator 12:13:22,223 DEBUG FileManager:527 - Found: ont-policy.rdf (ClassLoaderLocator) 12:13:22,465 DEBUG FileManager:157 - Add location: LocatorFile 12:13:22,466 DEBUG FileManager:157 - Add location: ClassLoaderLocator 12:13:22,467 DEBUG FileManager:527 - Found: location-mapping.n3 (ClassLoaderLocator) 12:13:22,498 ERROR riot:84 - [line: 31, col: 11] Bad character in IRI (space): <!DOCTYPE[space]...> 12:13:22,499 WARN LocationMapper:161 - Error in configuration file: [line: 31, col: 11] Bad character in IRI (space): <!DOCTYPE[space]...> 12:13:23,111 DEBUG FileManager:157 - Add location: LocatorFile 12:13:23,112 DEBUG FileManager:157 - Add location: LocatorURL 12:13:23,112 DEBUG FileManager:157 - Add location: ClassLoaderLocator 12:13:23,115 DEBUG Application:179 - FileManager.get(): com.atomgraph.core.util.jena.DataManager@2ee93fd1 12:13:23,115 DEBUG Application:182 - OntDocumentManager.getInstance().getFileManager(): com.atomgraph.core.util.jena.DataManager@2ee93fd1 12:13:23,120 DEBUG OntologyProvider:183 - Loading sitemap ontology from URI: https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata# 12:13:23,142 DEBUG FileManager:466 - Not mapped: https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata# 1 * Client out-bound request 1 > GET https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata 1 > Accept: application/rdf+xml,text/rdf+n3,application/n-triples,text/csv,application/rdf+xml,application/rdf+thrift,text/turtle,application/rdf+json 12:13:43,285 WARN OntDocumentManager:1076 - An error occurred while attempting to read from https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata#. Msg was 'java.net.UnknownHostException: github.com'. com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: github.com at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155) at com.sun.jersey.api.client.filter.LoggingFilter.handle(LoggingFilter.java:217) at com.sun.jersey.api.client.Client.handle(Client.java:652) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) at com.atomgraph.core.client.LinkedDataClient.get(LinkedDataClient.java:91) at com.atomgraph.core.client.LinkedDataClient.get(LinkedDataClient.java:80) at com.atomgraph.core.client.LinkedDataClient.get(LinkedDataClient.java:99) at com.atomgraph.core.util.jena.DataManager.readModel(DataManager.java:150) at org.apache.jena.ontology.OntDocumentManager.read(OntDocumentManager.java:1062) at org.apache.jena.ontology.OntDocumentManager.getOntology(OntDocumentManager.java:584) at com.atomgraph.server.provider.OntologyProvider.getOntModel(OntologyProvider.java:187) at com.atomgraph.server.provider.OntologyProvider.<init>(OntologyProvider.java:72) at com.atomgraph.server.Application.init(Application.java:197) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:183) at com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider(ProviderFactory.java:166) at com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider(ProviderFactory.java:159) at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:153) at com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:86) at com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:79) at com.sun.jersey.server.impl.application.DeferredResourceConfig.getApplication(DeferredResourceConfig.java:76) at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1164) at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1188) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1132) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:811) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1156) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2464) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.UnknownHostException: github.com at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673) at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347) at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:253) at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153) ... 57 more 18-Sep-2019 12:13:43.307 SEVERE [http-apr-8080-exec-1] com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider The provider class, class com.atomgraph.server.Application, could not be instantiated. Processing will continue but the class will not be utilized java.lang.IllegalArgumentException: Ontology cannot be null at com.atomgraph.server.provider.OntologyProvider$ImportCycleChecker.check(OntologyProvider.java:96) at com.atomgraph.server.provider.OntologyProvider.<init>(OntologyProvider.java:76) at com.atomgraph.server.Application.init(Application.java:197) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:183) at com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider(ProviderFactory.java:166) at com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider(ProviderFactory.java:159) at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:153) at com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:86) at com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init>(DeferredResourceConfig.java:79) at com.sun.jersey.server.impl.application.DeferredResourceConfig.getApplication(DeferredResourceConfig.java:76) at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1164) at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790) at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509) at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339) at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1188) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1132) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:811) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1156) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2464) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) On 18/09/2019 15:10, Martynas Jusevičius wrote: > Mikael, > > The port mapping might be the issue. You can change the port on the > host side, but not on the container side - the Processor is using 8080 > internally. So you should be using -p 8090:8080 I think. > https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose > > When the example runs successfully, there will be nothing on > http://localhost:8090/ because no template matches "/" - but there > will be something on http://localhost:8090/birthdays. Maybe I should > improve the example to avoid this pitfall. > Mind that Wikidata's SPARQL endpoint can fail, for some reason > unrelated to the Processor. > > Stick with me, I think you're very close :) > > On Wed, Sep 18, 2019 at 2:00 PM Mikael Pesonen > <mikael.pesonen@lingsoft.fi> wrote: >> >> Trying to connect to 8080, I get this output for curl: >> < HTTP/1.1 404 Not Found >> < Server: Apache-Coyote/1.1 >> < Content-Type: text/html;charset=utf-8 >> < Content-Language: en >> < Content-Length: 987 >> < Date: Wed, 18 Sep 2019 11:56:53 GMT >> < >> * Connection #0 to host localhost left intact >> <html><head><title>Apache Tomcat/7.0.68 (Ubuntu) - Error >> report</title><style><!--H1 >> {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} >> H2 >> {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} >> H3 >> {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} >> BODY >> {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} >> B >> {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} >> P >> {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A >> {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> >> </head><body><h1>HTTP Status 404 - /birthdays</h1><HR size="1" >> noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> >> <u>/birthdays</u></p><p><b>description</b> <u>The requested resource is >> not available.</u></p><HR size="1" noshade="noshade"><h3>Apache >> Tomcat/7.0.68 (Ubuntu)</h3></body></html> >> >> >> And for port 8090 I get the connection reset. >> >> Heres the docker command: >> >> 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/log4j.properties":"/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.properties" >> -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 >> >> On 18/09/2019 14:57, Martynas Jusevičius wrote: >>> Can you post the full docker run command you are using? >>> >>> On Wed, Sep 18, 2019 at 1:57 PM Mikael Pesonen >>> <mikael.pesonen@lingsoft.fi> wrote: >>>> Ok, I'm not getting any output then, so it could se some kind of >>>> connection issue. The output I sent is all there is, >>>> last line being >>>> >>>> 18-Sep-2019 11:45:44.880 INFO [main] >>>> org.apache.catalina.startup.Catalina.start Server startup in 343896 ms >>>> >>>> >>>> >>>> On 18/09/2019 14:54, Martynas Jusevičius wrote: >>>>> The logger is configured to write to stdout, so you should be able to >>>>> see the logs in container output when log4j.properties are mounted. Is >>>>> that not the case? >>>>> >>>>> If you docker run with -d, then I think you can use docker logs >>>>> container.name to see the stdout log. >>>>> https://docs.docker.com/engine/reference/commandline/logs/ >>>>> >>>>> This is some of the log that I see when I run the Wikidata example: >>>>> >>>>> 1 * Client out-bound request >>>>> 1 > GET https://query.wikidata.org/bigdata/namespace/wdq/sparql?query=BASE%20%20%20%20%3Chttp%3A%2F%2Flocalhost%3A8080%2F%3E%0APREFIX%20%20bd%3A%20%20%20%3Chttp%3A%2F%2Fwww.bigdata.com%2Frdf%23%3E%0APREFIX%20%20wdt%3A%20%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0APREFIX%20%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0A%0ACONSTRUCT%20%0A%20%20%7B%20%0A%20%20%20%20%3Fentity%20%3Chttps%3A%2F%2Fgithub.com%2FAtomGraph%2FProcessor%2Fblob%2Fdevelop%2Fexamples%2Fwikidata%23year%3E%20%3Fyear%20.%0A%20%20%7D%0AWHERE%0A%20%20%7B%20SELECT%20%20%3Fentity%20%3Fyear%0A%20%20%20%20WHERE%0A%20%20%20%20%20%20%7B%20BIND%28month%28now%28%29%29%20AS%20%3FnowMonth%29%0A%20%20%20%20%20%20%20%20BIND%28day%28now%28%29%29%20AS%20%3FnowDay%29%0A%20%20%20%20%20%20%20%20%3Fentity%20%20wdt%3AP569%20%20%3Fdate%0A%20%20%20%20%20%20%20%20FILTER%20%28%20%28%20month%28%3Fdate%29%20%3D%20%3FnowMonth%20%29%20%26%26%20%28%20day%28%3Fdate%29%20%3D%20%3FnowDay%20%29%20%29%0A%20%20%20%20%20%20%20%20SERVICE%20wikibase%3Alabel%0A%20%20%20%20%20%20%20%20%20%20%7B%20bd%3AserviceParam%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20wikibase%3Alanguage%20%20%22en%22%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20BIND%28year%28%3Fdate%29%20AS%20%3Fyear%29%0A%20%20%20%20%20%20%7D%0A%20%20%20%20LIMIT%20%20%20100%0A%20%20%7D%0A >>>>> 1 > Accept: application/n-quads,application/rdf+thrift,text/trig >>>>> 1 * Client in-bound response >>>>> 1 < 403 >>>>> 1 < Transfer-Encoding: chunked >>>>> 1 < X-Cache: cp3033 int, cp3030 pass >>>>> 1 < Server: Varnish >>>>> 1 < Server-Timing: cache;desc="int-local" >>>>> 1 < Connection: keep-alive >>>>> 1 < X-Client-IP: 87.72.251.196 >>>>> 1 < Date: Wed, 18 Sep 2019 11:48:33 GMT >>>>> 1 < X-Varnish: 308872225, 719836281 >>>>> 1 < Strict-Transport-Security: max-age=106384710; includeSubDomains; preload >>>>> 1 < X-Cache-Status: int-local >>>>> 1 < Set-Cookie: >>>>> WMF-Last-Access-Global=18-Sep-2019;Path=/;Domain=.wikidata.org;HttpOnly;secure;Expires=Sun, >>>>> 20 Oct 2019 00:00:00 GMT >>>>> 1 < Set-Cookie: >>>>> WMF-Last-Access=18-Sep-2019;Path=/;HttpOnly;secure;Expires=Sun, 20 Oct >>>>> 2019 00:00:00 GMT >>>>> 1 < Vary: Accept-Encoding >>>>> 1 < X-Analytics: https=1;nocookies=1 >>>>> 1 < Age: 0 >>>>> 1 < Content-Type: text/html; charset=utf-8 >>>>> 1 < >>>>> <!DOCTYPE html> >>>>> <html lang="en"> >>>>> <meta charset="utf-8"> >>>>> <title>Wikimedia Error</title> >>>>> <style> >>>>> * { margin: 0; padding: 0; } >>>>> body { background: #fff; font: 15px/1.6 sans-serif; color: #333; } >>>>> .content { margin: 7% auto 0; padding: 2em 1em 1em; max-width: 640px; } >>>>> .footer { clear: both; margin-top: 14%; border-top: 1px solid #e5e5e5; >>>>> background: #f9f9f9; padding: 2em 0; font-size: 0.8em; text-align: >>>>> center; } >>>>> img { float: left; margin: 0 2em 2em 0; } >>>>> a img { border: 0; } >>>>> h1 { margin-top: 1em; font-size: 1.2em; } >>>>> .content-text { overflow: hidden; overflow-wrap: break-word; word-wrap: bre >>>>> 11:48:33,899 ERROR SPARQLClient:177 - Query request to endpoint: >>>>> https://query.wikidata.org/bigdata/namespace/wdq/sparql unsuccessful. >>>>> Reason: Forbidden >>>>> 11:48:33,948 DEBUG OntologyProvider:183 - Loading sitemap ontology >>>>> from URI: https://github.com/AtomGraph/Processor/blob/develop/examples/wikidata# >>>>> >>>>> Which suggests that Wikidata's SPARQL endpoint responds with an error >>>>> -- this has been on and off today. Although the LDT is processed >>>>> correctly. >>>>> >>>>> On Wed, Sep 18, 2019 at 1:40 PM Mikael Pesonen >>>>> <mikael.pesonen@lingsoft.fi> wrote: >>>>>> Sorry how do I access the log file? I'm not able to find it with docker cp. >>>>>> >>>>>> Mikael >>>>>> >>>>>> >>>>>> On 18/09/2019 13:27, Martynas Jusevičius wrote: >>>>>>> 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 >>>>>>>> >>>>>> -- >>>>>> 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 12:19:09 UTC