Hello everyone, I've been trying to integrate Apache Stanbol and Relfinder[1] (my two favorite demos to show people who have never heard of the semantic web). I ran into some problems with Relfinder that I think I fixed. It was using a different parameter name to specify the graph to use in the SPARQL query. After recompiling Relfinder to work with Stanbol, I've run into some other errors which may be Stanbol related.
Relfinder tries to find paths through a dataset that link two nodes. I've uploaded an rdf data set to a clerezza managed site. The data consists of documents, their authors, and then some other information (such as an author's department, or a document's publish date). I've got about 500k triples. My version of Relfinder will find some links between nodes. Like if the two input nodes are people, it will find documents they both authored, or departments they both belong to. However, the more impressive searches result in an "Error 500 cannot convert {one of my URIs} to NonLiteral" (see end of email for full error message). Using firebug to monitor the network requests shows that this error occurs for all the searches that are supposed to return the more complicated results (Target Person 1 authored document X, also authored by person B, that authored document Y, that was also authored by Target Person 2) I spent some time playing with Stanbol's SPARQL endpoint, and the simplest example that reproduces the error is: SELECT * WHERE { <Target Person 1 URI> ?pf1 ?middle . <Target Person 2 URI> ?ps1 ?os1 . ?os1 ?ps2 ?middle . } LIMIT 10 However, the following query works fine: SELECT * WHERE { <Target Person 1 URI> ?pf1 ?middle . <Target Person 2 URI> ?ps1 ?os1 . } LIMIT 10 Note that these are simplified searches, the actual Relfinder queries are more complicated, and attempt to filter out literal values. See the very, very end of this email for the original query. Relfinder works fine on other SPARQL endpoints, like dbpedia's. Thanks for any insights you can offer on this problem. The help is much appreciated. -- Steven Isley Ph.D. Candidate Pardee RAND Graduate School RAND Corporation ph: (310)393-0411 x6643 -Steve Isley [1] http://www.visualdataweb.org/relfinder.php p.s. - if anyone else is trying to use RelFinder, I also ran into issues with CPU usage. Sometimes Stanbol would overrun the cpu limit on my server and would be silently killed. Took me a while to figure that one out! I managed to get around this using "unlimit cpu" - but the IT folks at my workplace will probably come down on me for that :) Error Output: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> <title>Error 500 cannot convert "{the rdfs:label for Person 1}" to NonLiteral</title> </head> <body><h2>HTTP ERROR 500</h2> <p>Problem accessing /sparql. Reason: <pre> cannot convert "{the rdfs:label for Person 1}" to NonLiteral</pre></p><h3>Caused by:</h3><pre>java.lang.RuntimeException: cannot convert "{the rdfs:label for Person 1}"to NonLiteral at org.apache.clerezza.rdf.jena.commons.Jena2TriaUtil.convertNonLiteral(Jena2TriaUtil.java:127) at org.apache.clerezza.rdf.jena.facade.JenaGraph.filter(JenaGraph.java:123) at org.apache.clerezza.rdf.jena.facade.JenaGraph.graphBaseFind(JenaGraph.java:151) at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java:240) at com.hp.hpl.jena.graph.impl.GraphBase.graphBaseFind(GraphBase.java:260) at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java:257) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterTriplePattern$TripleMapper.<init>(QueryIterTriplePattern.java:67) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterTriplePattern.nextStage(QueryIterTriplePattern.java:41) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:91) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:52) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:66) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterBlockTriples.hasNextBinding(QueryIterBlockTriples.java:53) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:66) at com.hp.hpl.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:64) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:66) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:28) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:66) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:28) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:66) at com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:57) at org.apache.clerezza.rdf.jena.sparql.ResultSetWrapper.<init>(ResultSetWrapper.java:39) at org.apache.clerezza.rdf.jena.sparql.JenaSparqlEngine.execute(JenaSparqlEngine.java:68) at org.apache.clerezza.rdf.core.access.TcManager.executeSparqlQuery(TcManager.java:272) at org.apache.stanbol.commons.web.sparql.resource.SparqlEndpointResource.sparql(SparqlEndpointResource.java:162) at org.apache.stanbol.commons.web.sparql.resource.SparqlEndpointResource.postSparql(SparqlEndpointResource.java:182) at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:96) at org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:79) at org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:42) at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:49) at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:78) at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) at org.apache.stanbol.commons.httpqueryheaders.impl.QueryHeadersFilter.doFilter(QueryHeadersFilter.java:75) at org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) at org.apache.stanbol.commons.web.resources.ResourceServingFilter.doFilterHttp(ResourceServingFilter.java:148) at org.apache.stanbol.commons.web.resources.ResourceServingFilter.doFilter(ResourceServingFilter.java:91) at org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) at org.apache.stanbol.commons.security.auth.AuthenticatingFilter$1.run(AuthenticatingFilter.java:163) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:537) at org.apache.stanbol.commons.security.auth.AuthenticatingFilter.doFilter(AuthenticatingFilter.java:159) at org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) at org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48) at org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39) at org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) </pre> <hr /><i><small>Powered by Jetty://</small></i><br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> </body> </html> RelFinder Query: SELECT * WHERE { <http://dopma-ropma.rand.org/people/{Target Person 1}> ?pf1 ?middle . <http://dopma-ropma.rand.org/people/{Target Person 2}> ?ps1 ?os1 . ?os1 ?ps2 ?middle . FILTER ( (?pf1 != <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ) && (?pf1 != <http://www.w3.org/2004/02/skos/core#subject> ) && (?pf1 != <http://www.w3.org/2002/07/owl#sameAs> ) && (?pf1 != <http://purl.org/dc/terms/subject> ) && (?pf1 != <http://purl.org/dc/terms/dateCopyrighted> ) && (?pf1 != <http://purl.org/dc/terms/title> ) && (?pf1 != <http://dopma-ropma.rand.org/people/employeeID2> ) && (?pf1 != <http://xmlns.com/foaf/0.1/mbox> ) && (?ps1 != <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ) && (?ps1 != <http://www.w3.org/2004/02/skos/core#subject> ) && (?ps1 != <http://www.w3.org/2002/07/owl#sameAs> ) && (?ps1 != <http://purl.org/dc/terms/subject> ) && (?ps1 != <http://purl.org/dc/terms/dateCopyrighted> ) && (?ps1 != <http://purl.org/dc/terms/title> ) && (?ps1 != <http://dopma-ropma.rand.org/people/employeeID2> ) && (?ps1 != <http://xmlns.com/foaf/0.1/mbox> ) && (?ps2 != <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ) && (?ps2 != <http://www.w3.org/2004/02/skos/core#subject> ) && (?ps2 != <http://www.w3.org/2002/07/owl#sameAs> ) && (?ps2 != <http://purl.org/dc/terms/subject> ) && (?ps2 != <http://purl.org/dc/terms/dateCopyrighted> ) && (?ps2 != <http://purl.org/dc/terms/title> ) && (?ps2 != <http://dopma-ropma.rand.org/people/employeeID2> ) && (?ps2 != <http://xmlns.com/foaf/0.1/mbox> ) && (!isLiteral(?middle)) && (?middle != <http://dopma-ropma.rand.org/people/{Target Person 1}> ) && (?middle != <http://dopma-ropma.rand.org/people/{Target Person 2}> ) && (?middle != ?os1 ) && (!isLiteral(?os1)) && (?os1 != <http://dopma-ropma.rand.org/people/{Target Person 1}> ) && (?os1 != <http://dopma-ropma.rand.org/people/{Target Person 2}> ) && (?os1 != ?middle ) ). } LIMIT 10 __________________________________________________________________________ This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.