> 2/ It is not possible in an assembler/Fuseki configuration file, to create a 
> new named graph and have a another inference graph put around that new graph 
> at runtime.

Just to pull on one of these threads, my understanding is that this essentially 
because the assembler system works only by names. IOW, there's no such thing as 
a "variable", and a blank node doesn't function as a slot (as it might in a 
SPARQL query), just as an nameless node. So you have to know the specific name 
of any specific named graph to which you want to refer. A named graph that 
doesn't yet exist and may have any name at all when it does obviously doesn't 
fit into that.

Andy and other more knowledgeable people: is that correct?

If so, we might want to think about changing that as a _very long-term_ goal. 
Having the ability to refer to resources in assembler RDF by triple pattern or 
property matching or by some other means like that could be astoundingly 
powerful for a lot of these use cases that we see involving complex setups with 
multiple sources of data and inference. Yes, I realize that it would also be 
pretty gosh dang difficult (how do you know when to apply or re-apply the 
filtering/matching?) and might not be worth doing on those grounds alone, but I 
might file a ticket just to not forget the possibility.

ajs6f

> On Jan 31, 2019, at 12:41 PM, Andy Seaborne <[email protected]> wrote:
> 
> Hi Pierre,
> 
> A few points to start with:
> 
> 1/ For my general understanding of how we might take the inferene provision 
> further in jena, what inferences are you particularly interested in?
> 
> 2/ It is not possible in an assembler/Fuseki configuration file, to create a 
> new named graph and have a another inference graph put around that new graph 
> at runtime.
> 
> 3/ The union graph can't be updated.  It's a read-only union.
> 
> 4/ "ERROR Exception in initialization: caught: Not in tramsaction"
> Do you have the stacktrace for this?
> 
> Inline questions about attempt 1.
> 
>    Andy
> 
> 
> 
> On 31/01/2019 15:00, Pierre Grenon wrote:
>> 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.
> 
> Did you enable tdb:unionDefaultGraph as well, load the named graph and the 
> access the union?
> 
> What isn't persisted? Inferences or base data?
>> ###
>> 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.

Reply via email to