Hello, I am trying to:
Set up Fuseki2 with inference and a TDB2 dataset in which can be persisted named graphs created with SPARQL Update. This is in order to: - maintain a set of ontologies in a named graph - maintain datasets in a number of named graphs - perform reasoning in the union graphs The assumption is that all data is persisted in a given TDB2 database. The higher purpose is to use reasoning over ontologies when querying over instance data located in named graphs. I think this is conceptually what is discussed here: Subject Re: Ontologies and model data Date Mon, 03 Jun 2013 20:26:18 GMT http://mail-archives.apache.org/mod_mbox/jena-users/201306.mbox/%[email protected]%3E The set up above is what comes across as a way of achieving this higher goal but I am not sure either that it is the best set up. Everything I have tried to do allows me to either perform inferences in <urn:x-arq:UnionGraph> or to persist triples in named graphs in a TDB2 database, but not both. My problem is: I cannot find a correct configuration that allows me to persist named graphs added to a TDB2 dataset and have inference at the same time. Some attempts are documented below. I have done most of my test in apache-jena-fuseki-3.8.0, my last tries were in apache-jena-fuseki-3.10.0. Would somebody be in a position to advise or provide a minimal working example? With many thanks and best regards, Pierre ### Attempt 1: # Example of a data service with SPARQL query abnd update on an # inference model. Data is taken from TDB. https://github.com/apache/jena/blob/master/jena-fuseki2/examples/service-inference-2.ttl which I have adapted to use TDB2 (which basically meant updating the namespace and the references to classes). Outcome: This allows me to load data into named graphs and to perform inferemce. However, it does not persist upon restarting the server. ### Attempt 2: Define two services pointing to different graphs as advised in Subject Re: Persisting named graphs in TDB with jena-fuseki Date Thu, 10 Mar 2016 14:47:10 GMT http://mail-archives.apache.org/mod_mbox/jena-users/201603.mbox/%3cd30738c0.64a6f%[email protected]%3E Outcome: I could only manage de3fining two independent services on two independent datasets and couldn't figure out how to link the TDB2 and the Inference graphs. A reference to https://issues.apache.org/jira/browse/JENA-1122 is made in http://mail-archives.apache.org/mod_mbox/jena-users/201603.mbox/%[email protected]%3E But I do not understand what is said here. ### Attempt 3: I have found a config that seemed t make the link that was needed between graphs in Attempt 2 in: https://stackoverflow.com/questions/47568703/named-graphs-v-default-graph-behaviour-in-apache-jena-fuseki which I have adapted to TDB2. However, this gives me: ERROR Exception in initialization: caught: Not in tramsaction This also seems to have been a cut off point in the thread mentioned above Subject Re: Configuring fuseki with TDB2 and OWL reasoning Date Tue, 20 Feb 2018 10:55:13 GMT http://mail-archives.apache.org/mod_mbox/jena-users/201802.mbox/%3C6d37a8c7-aca1-4c1c-0cd3-fa041ecc07eb%40apache.org%3E This message refers to https://issues.apache.org/jira/browse/JENA-1492 which I do not understand but that comes across as having been resolved. Indeed, I tested the config attached to it (probably as minimal example for that issue) and it worked, but I don't think this is the config I need. #### ATTEMPT 3 Config @prefix : <http://base/#> . @prefix tdb2: <http://jena.apache.org/2016/tdb#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix fuseki: <http://jena.apache.org/fuseki#> . # TDB2 #tdb2:DatasetTDB2 rdfs:subClassOf ja:RDFDataset . #tdb2:GraphTDB rdfs:subClassOf ja:Model . # Service 1: Dataset endpoint (no reasoning) :dataService a fuseki:Service ; fuseki:name "tdbEnpoint" ; fuseki:serviceQuery "sparql", "query" ; fuseki:serviceUpdate "update" ; fuseki:dataset :tdbDataset ; . # Service 2: Reasoning endpoint :reasoningService a fuseki:Service ; fuseki:dataset :infDataset ; fuseki:name "reasoningEndpoint" ; fuseki:serviceQuery "query", "sparql" ; fuseki:serviceReadGraphStore "get" ; . # Inference dataset :infDataset rdf:type ja:RDFDataset ; ja:defaultGraph :infModel ; . # Inference model :infModel a ja:InfModel ; ja:baseModel :g ; ja:reasoner [ ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner> ; ] ; . # Intermediate graph referencing the default union graph :g rdf:type tdb2:GraphTDB ; tdb2:dataset :tdbDataset ; tdb2:graphName <urn:x-arq:UnionGraph> ; . # The location of the TDB dataset :tdbDataset rdf:type tdb2:DatasetTDB2 ; tdb2:location "C:\\dev\\apache-jena-fuseki-3.8.0\\run/databases/weird7" ; tdb2:unionDefaultGraph true ; . #### SERVER ... [2019-01-31 13:54:58] Config INFO Load configuration: file:///C:/dev/apache-jena-fuseki-3.10.0/run/configuration/weird7.ttl [2019-01-31 13:54:58] Server ERROR Exception in initialization: caught: Not in a transaction [2019-01-31 13:54:58] WebAppContext WARN Failed startup of context o.e.j.w.WebAppContext@6edc4161{Apache Jena Fuseki Server,/,file:///C:/dev/apache-jena-fuseki-3.10.0/webapp/,UNAVAILABLE} org.apache.jena.assembler.exceptions.AssemblerException: caught: Not in a transaction doing: root: file:///C:/dev/apache-jena-fuseki-3.10.0/run/configuration/weird7.ttl#model_inf with type: http://jena.hpl.hp.com/2005/11/Assembler#InfModel assembler class: class org.apache.jena.assembler.assemblers.InfModelAssembler root: http://base/#dataset with type: http://jena.hpl.hp.com/2005/11/Assembler#RDFDataset assembler class: class org.apache.jena.sparql.core.assembler.DatasetAssembler at org.apache.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.openBySpecificType(AssemblerGroup.java:165) at org.apache.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.open(AssemblerGroup.java:144) at org.apache.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:93) at org.apache.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:39) at org.apache.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:35) at org.apache.jena.assembler.assemblers.AssemblerGroup.openModel(AssemblerGroup.java:47) at org.apache.jena.sparql.core.assembler.DatasetAssembler.createDataset(DatasetAssembler.java:56) at org.apache.jena.sparql.core.assembler.DatasetAssembler.open(DatasetAssembler.java:43) at org.apache.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.openBySpecificType(AssemblerGroup.java:157) at org.apache.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.open(AssemblerGroup.java:144) at org.apache.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:93) at org.apache.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:39) at org.apache.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:35) at org.apache.jena.fuseki.build.FusekiConfig.getDataset(FusekiConfig.java:345) at org.apache.jena.fuseki.build.FusekiConfig.buildDataService(FusekiConfig.java:299) at org.apache.jena.fuseki.build.FusekiConfig.buildDataAccessPoint(FusekiConfig.java:289) at org.apache.jena.fuseki.build.FusekiConfig.readConfiguration(FusekiConfig.java:272) at org.apache.jena.fuseki.build.FusekiConfig.readConfigurationDirectory(FusekiConfig.java:251) at org.apache.jena.fuseki.webapp.FusekiWebapp.initializeDataAccessPoints(FusekiWebapp.java:226) at org.apache.jena.fuseki.webapp.FusekiServerListener.serverInitialization(FusekiServerListener.java:98) at org.apache.jena.fuseki.webapp.FusekiServerListener.contextInitialized(FusekiServerListener.java:56) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:952) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:558) at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:917) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:370) at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1497) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1459) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:847) at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:287) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:545) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:138) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:108) at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) at org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:410) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:138) at org.eclipse.jetty.server.Server.start(Server.java:416) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:108) at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113) at org.eclipse.jetty.server.Server.doStart(Server.java:383) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.apache.jena.fuseki.cmd.JettyFusekiWebapp.start(JettyFusekiWebapp.java:138) at org.apache.jena.fuseki.cmd.FusekiCmd.runFuseki(FusekiCmd.java:372) at org.apache.jena.fuseki.cmd.FusekiCmd$FusekiCmdInner.exec(FusekiCmd.java:356) at jena.cmd.CmdMain.mainMethod(CmdMain.java:93) at jena.cmd.CmdMain.mainRun(CmdMain.java:58) at jena.cmd.CmdMain.mainRun(CmdMain.java:45) at org.apache.jena.fuseki.cmd.FusekiCmd$FusekiCmdInner.innerMain(FusekiCmd.java:104) at org.apache.jena.fuseki.cmd.FusekiCmd.main(FusekiCmd.java:67) Caused by: org.apache.jena.dboe.transaction.txn.TransactionException: Not in a transaction at org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle.checkTxn(TransactionalComponentLifecycle.java:417) at org.apache.jena.dboe.trans.bplustree.BPlusTree.getRootRead(BPlusTree.java:159) at org.apache.jena.dboe.trans.bplustree.BPlusTree.find(BPlusTree.java:239) at org.apache.jena.tdb2.store.nodetable.NodeTableNative.accessIndex(NodeTableNative.java:133) at org.apache.jena.tdb2.store.nodetable.NodeTableNative._idForNode(NodeTableNative.java:118) at org.apache.jena.tdb2.store.nodetable.NodeTableNative.getNodeIdForNode(NodeTableNative.java:57) at org.apache.jena.tdb2.store.nodetable.NodeTableCache._idForNode(NodeTableCache.java:222) at org.apache.jena.tdb2.store.nodetable.NodeTableCache.getNodeIdForNode(NodeTableCache.java:114) at org.apache.jena.tdb2.store.nodetable.NodeTableWrapper.getNodeIdForNode(NodeTableWrapper.java:47) at org.apache.jena.tdb2.store.nodetable.NodeTableInline.getNodeIdForNode(NodeTableInline.java:58) at org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.idForNode(NodeTupleTableConcrete.java:182) at org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.findAsNodeIds(NodeTupleTableConcrete.java:136) at org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.find(NodeTupleTableConcrete.java:114) at org.apache.jena.tdb2.store.DatasetPrefixesTDB.readPrefixMap(DatasetPrefixesTDB.java:111) at org.apache.jena.sparql.graph.GraphPrefixesProjection.getNsPrefixMap(GraphPrefixesProjection.java:94) at org.apache.jena.tdb2.store.GraphViewSwitchable$PrefixMappingImplTDB2.getNsPrefixMap(GraphViewSwitchable.java:159) at org.apache.jena.shared.impl.PrefixMappingImpl.setNsPrefixes(PrefixMappingImpl.java:138) at org.apache.jena.tdb2.store.GraphViewSwitchable.createPrefixMapping(GraphViewSwitchable.java:68) at org.apache.jena.graph.impl.GraphBase.getPrefixMapping(GraphBase.java:165) at org.apache.jena.reasoner.BaseInfGraph.getPrefixMapping(BaseInfGraph.java:55) at org.apache.jena.rdf.model.impl.ModelCom.getPrefixMapping(ModelCom.java:1018) at org.apache.jena.rdf.model.impl.ModelCom.setNsPrefixes(ModelCom.java:1055) at org.apache.jena.assembler.assemblers.ModelAssembler.open(ModelAssembler.java:45) at org.apache.jena.assembler.assemblers.AssemblerGroup$PlainAssemblerGroup.openBySpecificType(AssemblerGroup.java:157) ... 49 more [2019-01-31 13:54:58] Server INFO Started 2019/01/31 13:54:58 GMT on port 3030 THIS E-MAIL MAY CONTAIN CONFIDENTIAL AND/OR PRIVILEGED INFORMATION. IF YOU ARE NOT THE INTENDED RECIPIENT (OR HAVE RECEIVED THIS E-MAIL IN ERROR) PLEASE NOTIFY THE SENDER IMMEDIATELY AND DESTROY THIS E-MAIL. ANY UNAUTHORISED COPYING, DISCLOSURE OR DISTRIBUTION OF THE MATERIAL IN THIS E-MAIL IS STRICTLY FORBIDDEN. IN ACCORDANCE WITH MIFID II RULES ON INDUCEMENTS, THE FIRM'S EMPLOYEES MAY ATTEND CORPORATE ACCESS EVENTS (DEFINED IN THE FCA HANDBOOK AS "THE SERVICE OF ARRANGING OR BRINGING ABOUT CONTACT BETWEEN AN INVESTMENT MANAGER AND AN ISSUER OR POTENTIAL ISSUER"). DURING SUCH MEETINGS, THE FIRM'S EMPLOYEES MAY ON NO ACCOUNT BE IN RECEIPT OF INSIDE INFORMATION (AS DESCRIBED IN ARTICLE 7 OF THE MARKET ABUSE REGULATION (EU) NO 596/2014). (https://www.handbook.fca.org.uk/handbook/glossary/G3532m.html) COMPANIES WHO DISCLOSE INSIDE INFORMATION ARE IN BREACH OF REGULATION AND MUST IMMEDIATELY AND CLEARLY NOTIFY ALL ATTENDEES. FOR INFORMATION ON THE FIRM'S POLICY IN RELATION TO ITS PARTICIPATION IN MARKET SOUNDINGS, PLEASE SEE https://www.horizon-asset.co.uk/market-soundings/. HORIZON ASSET LLP IS AUTHORISED AND REGULATED BY THE FINANCIAL CONDUCT AUTHORITY.
