You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by abdullah ibrahim <ab...@gmail.com> on 2020/11/11 15:55:03 UTC
Two named graphs with the same inference model and the same dataset
mixed up in the query
Hello everyone,
i was facing a problem in supporting inference for all named graphs within
the same dataset, my up-to-now fix is creating inference mode per named
graph, but that raise a new problem which:
the inference is working for named graphs but when query named graphs seem
that both shared the same data, even if i ingest different data on each
graph.
what i have done in more details:
*1. config.ttl*
> PREFIX : <#>
> PREFIX fuseki: <http://jena.apache.org/fuseki#>
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
> PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
>
> [] rdf:type fuseki:Server ;
> fuseki:services (
> :service
> ) .
>
> # Service description for "/dataset" with all endpoints.
> :service rdf:type fuseki:Service ;
> fuseki:name "dataset" ;
> fuseki:endpoint [
> fuseki:operation fuseki:query ;
> fuseki:name "query"
> ] ;
> fuseki:endpoint [
> fuseki:operation fuseki:update ;
> fuseki:name "update"
> ] ;
> fuseki:dataset :dataset ;
> .
>
> ## ---------------------------------------------------------------
>
> :dataset rdf:type ja:RDFDataset ;
> #ja:defaultGraph :model_inf ;
>
> ja:namedGraph [
> ja:graphName <http://www.example.com/ontology> ;
> ja:graph :model_ontology ;
> ] ;
>
> ja:namedGraph [
> ja:graphName <http://www.example.com/hello> ;
> ja:graph :model_inf
> ] ;
>
> ja:namedGraph [
> ja:graphName <http://www.example.com/world> ;
> ja:graph :model_inf
> ] ;
> .
>
> :model_ontology a ja:InfModel ;
> ja:baseModel :tdbGraph1 ;
>
> #Reference to model.ttl file
> ja:content [ja:externalContent "model.ttl" ] ;
>
> #Enable Jena Rules-based reasoner and we point the location of
> myrules.rules file
> ja:reasoner [
> ja:reasonerURL <
> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
> ja:rulesFrom <file:////myrules.rules> ] ;
> .
>
> :model_inf a ja:InfModel ;
> ja:baseModel :tdbGraph2 ;
>
> #Reference to model.ttl file
> #ja:content [ja:externalContent "model.ttl" ] ;
>
> #Enable Jena Rules-based reasoner and we point the location of
> myrules.rules file
> ja:reasoner [
> ja:reasonerURL <
> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
> ja:rulesFrom <file:////myrules.rules> ] ;
> .
>
> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
> tdb2:dataset :tdbDataset .
>
> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
> tdb2:dataset :tdbDataset .
>
> ## Base data in TDB.
> :tdbDataset rdf:type tdb2:DatasetTDB2 ;
> tdb2:location "DB" ;
> # If the unionDefaultGraph is used, then the "update" service should
> be removed.
> #tdb2:unionDefaultGraph true ;
> .
>
2. *Ingest data into hello graph:*
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> PREFIX owl: <http://www.w3.org/2002/07/owl#>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> PREFIX hello: <http://www.example.com/hello>
> PREFIX world: <http://www.example.com/world>
> PREFIX ns: <http://www.example.org/ns#>
>
INSERT DATA
> {
> GRAPH hello: {
> ns:P1 rdf:type ns:Man.
> ns:P2 rdf:type ns:Man.
> ns:P1 ns:knows ns:P2.
> }
> }
3. *Ingest data into world graph:*
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>> PREFIX hello: <http://www.example.com/hello>
>> PREFIX world: <http://www.example.com/world>
>> PREFIX ns: <http://www.example.org/ns#>
>>
> INSERT DATA
>> {
>> GRAPH world: {
>> ns:P3 rdf:type ns:Man.
>> ns:P4 rdf:type ns:Man.
>> ns:P3 ns:knows ns:P4.
>> }
>> }
>
>
4. *Query*
> SELECT *
> WHERE
> {
> GRAPH hello: {
> ?s ?p ?o.
> }
> }
The results are combinations of all data from hello graph + world graph +
model graph, and the same if i do the query for world graph too.
Why are the graphs combined?, how can i fix that while keeping the
inference in separate per graph making each named graph use the ontology
model independent from other named graphs.
Thanks
--
abdullah
Re: Two named graphs with the same inference model and the same dataset mixed up in the query
Posted by Abdullah Ibrahim <ab...@gmail.com>.
Well, my objective is :
I should have 2 Named graphs each with own data, and one ontology file.
i want ontology file working with each Named graph, so when i do query for graph#1 i got inference from that graph#1 data independently from graph#2 data, the current i got the inference working but the problem the data are combined so the query get all data from graph#1 and graph#2,
i have tried what did you say about adding tdb2:graphName for both tdbGraph1 and tdbGraph2 if i choose names different from graph names defined at ja:namedGraph i got no inference, if i choose the graph names as in ja:namedGraph i got inference but mixed graphs data.
what do you think?
On 2020/11/11 17:47:11, Andy Seaborne <an...@apache.org> wrote:
> >> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
> >> tdb2:dataset :tdbDataset .
> >>
> >> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
> >> tdb2:dataset :tdbDataset .
>
> Those are the same base graph for the inference engine (the default
> graph - left over from using tdb2:unionDefaultGraph?).
>
> Is that what you intended or did you want to have different base graphs
> in which case you need "tdb2:graphName" with the appropriate names.
>
>
> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
> tdb2:dataset :tdbDataset ;
> tdb2:graphName <http://example/aGraph> .
>
> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
> tdb2:dataset :tdbDataset ;
> tdb2:graphName <http://example/OtherGraph> .
>
> Andy
>
> On 11/11/2020 15:55, abdullah ibrahim wrote:
> > Hello everyone,
> > i was facing a problem in supporting inference for all named graphs within
> > the same dataset, my up-to-now fix is creating inference mode per named
> > graph, but that raise a new problem which:
> > the inference is working for named graphs but when query named graphs seem
> > that both shared the same data, even if i ingest different data on each
> > graph.
> > what i have done in more details:
> > *1. config.ttl*
> >
> >> PREFIX : <#>
> >> PREFIX fuseki: <http://jena.apache.org/fuseki#>
> >> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> >> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> >> PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
> >> PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
> >>
> >> [] rdf:type fuseki:Server ;
> >> fuseki:services (
> >> :service
> >> ) .
> >>
> >> # Service description for "/dataset" with all endpoints.
> >> :service rdf:type fuseki:Service ;
> >> fuseki:name "dataset" ;
> >> fuseki:endpoint [
> >> fuseki:operation fuseki:query ;
> >> fuseki:name "query"
> >> ] ;
> >> fuseki:endpoint [
> >> fuseki:operation fuseki:update ;
> >> fuseki:name "update"
> >> ] ;
> >> fuseki:dataset :dataset ;
> >> .
> >>
> >> ## ---------------------------------------------------------------
> >>
> >> :dataset rdf:type ja:RDFDataset ;
> >> #ja:defaultGraph :model_inf ;
> >>
> >> ja:namedGraph [
> >> ja:graphName <http://www.example.com/ontology> ;
> >> ja:graph :model_ontology ;
> >> ] ;
> >>
> >> ja:namedGraph [
> >> ja:graphName <http://www.example.com/hello> ;
> >> ja:graph :model_inf
> >> ] ;
> >>
> >> ja:namedGraph [
> >> ja:graphName <http://www.example.com/world> ;
> >> ja:graph :model_inf
> >> ] ;
> >> .
> >>
> >> :model_ontology a ja:InfModel ;
> >> ja:baseModel :tdbGraph1 ;
> >>
> >> #Reference to model.ttl file
> >> ja:content [ja:externalContent "model.ttl" ] ;
> >>
> >> #Enable Jena Rules-based reasoner and we point the location of
> >> myrules.rules file
> >> ja:reasoner [
> >> ja:reasonerURL <
> >> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
> >> ja:rulesFrom <file:////myrules.rules> ] ;
> >> .
> >>
> >> :model_inf a ja:InfModel ;
> >> ja:baseModel :tdbGraph2 ;
> >>
> >> #Reference to model.ttl file
> >> #ja:content [ja:externalContent "model.ttl" ] ;
> >>
> >> #Enable Jena Rules-based reasoner and we point the location of
> >> myrules.rules file
> >> ja:reasoner [
> >> ja:reasonerURL <
> >> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
> >> ja:rulesFrom <file:////myrules.rules> ] ;
> >> .
> >>
> >
> >
> >> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
> >> tdb2:dataset :tdbDataset .
> >>
> >> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
> >> tdb2:dataset :tdbDataset .
> >>
> >> ## Base data in TDB.
> >> :tdbDataset rdf:type tdb2:DatasetTDB2 ;
> >> tdb2:location "DB" ;
> >> # If the unionDefaultGraph is used, then the "update" service should
> >> be removed.
> >> #tdb2:unionDefaultGraph true ;
> >> .
> >>
> >
> > 2. *Ingest data into hello graph:*
> >
> >> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> >> PREFIX owl: <http://www.w3.org/2002/07/owl#>
> >> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> >> PREFIX hello: <http://www.example.com/hello>
> >> PREFIX world: <http://www.example.com/world>
> >> PREFIX ns: <http://www.example.org/ns#>
> >>
> > INSERT DATA
> >> {
> >> GRAPH hello: {
> >> ns:P1 rdf:type ns:Man.
> >> ns:P2 rdf:type ns:Man.
> >> ns:P1 ns:knows ns:P2.
> >> }
> >> }
> >
> >
> > 3. *Ingest data into world graph:*
> >
> >> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> >>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
> >>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> >>> PREFIX hello: <http://www.example.com/hello>
> >>> PREFIX world: <http://www.example.com/world>
> >>> PREFIX ns: <http://www.example.org/ns#>
> >>>
> >> INSERT DATA
> >>> {
> >>> GRAPH world: {
> >>> ns:P3 rdf:type ns:Man.
> >>> ns:P4 rdf:type ns:Man.
> >>> ns:P3 ns:knows ns:P4.
> >>> }
> >>> }
> >>
> >>
> > 4. *Query*
> >
> >> SELECT *
> >> WHERE
> >> {
> >> GRAPH hello: {
> >> ?s ?p ?o.
> >> }
> >> }
> >
> >
> > The results are combinations of all data from hello graph + world graph +
> > model graph, and the same if i do the query for world graph too.
> >
> > Why are the graphs combined?, how can i fix that while keeping the
> > inference in separate per graph making each named graph use the ontology
> > model independent from other named graphs.
> >
> > Thanks
> >
> >
> >
> >
>
Re: Two named graphs with the same inference model and the same
dataset mixed up in the query
Posted by Andy Seaborne <an...@apache.org>.
>> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
>> tdb2:dataset :tdbDataset .
>>
>> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
>> tdb2:dataset :tdbDataset .
Those are the same base graph for the inference engine (the default
graph - left over from using tdb2:unionDefaultGraph?).
Is that what you intended or did you want to have different base graphs
in which case you need "tdb2:graphName" with the appropriate names.
:tdbGraph1 rdf:type tdb2:GraphTDB2 ;
tdb2:dataset :tdbDataset ;
tdb2:graphName <http://example/aGraph> .
:tdbGraph2 rdf:type tdb2:GraphTDB2 ;
tdb2:dataset :tdbDataset ;
tdb2:graphName <http://example/OtherGraph> .
Andy
On 11/11/2020 15:55, abdullah ibrahim wrote:
> Hello everyone,
> i was facing a problem in supporting inference for all named graphs within
> the same dataset, my up-to-now fix is creating inference mode per named
> graph, but that raise a new problem which:
> the inference is working for named graphs but when query named graphs seem
> that both shared the same data, even if i ingest different data on each
> graph.
> what i have done in more details:
> *1. config.ttl*
>
>> PREFIX : <#>
>> PREFIX fuseki: <http://jena.apache.org/fuseki#>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>> PREFIX ja: <http://jena.hpl.hp.com/2005/11/Assembler#>
>> PREFIX tdb2: <http://jena.apache.org/2016/tdb#>
>>
>> [] rdf:type fuseki:Server ;
>> fuseki:services (
>> :service
>> ) .
>>
>> # Service description for "/dataset" with all endpoints.
>> :service rdf:type fuseki:Service ;
>> fuseki:name "dataset" ;
>> fuseki:endpoint [
>> fuseki:operation fuseki:query ;
>> fuseki:name "query"
>> ] ;
>> fuseki:endpoint [
>> fuseki:operation fuseki:update ;
>> fuseki:name "update"
>> ] ;
>> fuseki:dataset :dataset ;
>> .
>>
>> ## ---------------------------------------------------------------
>>
>> :dataset rdf:type ja:RDFDataset ;
>> #ja:defaultGraph :model_inf ;
>>
>> ja:namedGraph [
>> ja:graphName <http://www.example.com/ontology> ;
>> ja:graph :model_ontology ;
>> ] ;
>>
>> ja:namedGraph [
>> ja:graphName <http://www.example.com/hello> ;
>> ja:graph :model_inf
>> ] ;
>>
>> ja:namedGraph [
>> ja:graphName <http://www.example.com/world> ;
>> ja:graph :model_inf
>> ] ;
>> .
>>
>> :model_ontology a ja:InfModel ;
>> ja:baseModel :tdbGraph1 ;
>>
>> #Reference to model.ttl file
>> ja:content [ja:externalContent "model.ttl" ] ;
>>
>> #Enable Jena Rules-based reasoner and we point the location of
>> myrules.rules file
>> ja:reasoner [
>> ja:reasonerURL <
>> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
>> ja:rulesFrom <file:////myrules.rules> ] ;
>> .
>>
>> :model_inf a ja:InfModel ;
>> ja:baseModel :tdbGraph2 ;
>>
>> #Reference to model.ttl file
>> #ja:content [ja:externalContent "model.ttl" ] ;
>>
>> #Enable Jena Rules-based reasoner and we point the location of
>> myrules.rules file
>> ja:reasoner [
>> ja:reasonerURL <
>> http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
>> ja:rulesFrom <file:////myrules.rules> ] ;
>> .
>>
>
>
>> :tdbGraph1 rdf:type tdb2:GraphTDB2 ;
>> tdb2:dataset :tdbDataset .
>>
>> :tdbGraph2 rdf:type tdb2:GraphTDB2 ;
>> tdb2:dataset :tdbDataset .
>>
>> ## Base data in TDB.
>> :tdbDataset rdf:type tdb2:DatasetTDB2 ;
>> tdb2:location "DB" ;
>> # If the unionDefaultGraph is used, then the "update" service should
>> be removed.
>> #tdb2:unionDefaultGraph true ;
>> .
>>
>
> 2. *Ingest data into hello graph:*
>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>> PREFIX hello: <http://www.example.com/hello>
>> PREFIX world: <http://www.example.com/world>
>> PREFIX ns: <http://www.example.org/ns#>
>>
> INSERT DATA
>> {
>> GRAPH hello: {
>> ns:P1 rdf:type ns:Man.
>> ns:P2 rdf:type ns:Man.
>> ns:P1 ns:knows ns:P2.
>> }
>> }
>
>
> 3. *Ingest data into world graph:*
>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>>> PREFIX hello: <http://www.example.com/hello>
>>> PREFIX world: <http://www.example.com/world>
>>> PREFIX ns: <http://www.example.org/ns#>
>>>
>> INSERT DATA
>>> {
>>> GRAPH world: {
>>> ns:P3 rdf:type ns:Man.
>>> ns:P4 rdf:type ns:Man.
>>> ns:P3 ns:knows ns:P4.
>>> }
>>> }
>>
>>
> 4. *Query*
>
>> SELECT *
>> WHERE
>> {
>> GRAPH hello: {
>> ?s ?p ?o.
>> }
>> }
>
>
> The results are combinations of all data from hello graph + world graph +
> model graph, and the same if i do the query for world graph too.
>
> Why are the graphs combined?, how can i fix that while keeping the
> inference in separate per graph making each named graph use the ontology
> model independent from other named graphs.
>
> Thanks
>
>
>
>