You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Lorenz Bühmann <bu...@informatik.uni-leipzig.de> on 2015/03/24 09:00:16 UTC
Graph Entailment
Hello,
I'm using latest Apache JENA 2.13.0 and I'm wondering if it contains
algorithms for RDFS or even pD* entailment of graphs (aka. models)? I
couldn't find anything in the documentation
(https://jena.apache.org/documentation/inference/), that's why I'm
asking before I start to implement it by myself.
By the way, I know the problem is NP-complete, but as far as I read in
several papers there are algorithms which should at least work for
relatively small graphs - which is basically my use-case.
Kind regards,
Lorenz
--
Lorenz Bühmann
AKSW group, University of Leipzig
Group: http://aksw.org - semantic web research center
Re: Graph Entailment
Posted by Lorenz Bühmann <bu...@informatik.uni-leipzig.de>.
Hello Dave,
great, thank you very much!
Kind regards,
Lorenz
> Hi Lorenz,
>
> Ah, no there is no equivalent of isEntailedBy in Jena.
>
> If your graphs don't have bNodes then it would be easy: check if each
> statement in m1 is contained in the RDFS closure of m2.
>
> If you have bNodes then you may be able to finesse it. You can check
> if m1 and m2 have the same closure:
>
> Model m1closure = ModelFactory.createDefaultModel();
> m1closure.add( ModelFactory.createInfModel(fullRDFSReasoner, m1) );
> Model m2closure = ModelFactory.createDefaultModel();
> m2closure.add( ModelFactory.createInfModel(fullRDFSReasoner, m2) );
> boolean sameClosure = m1closure.isIsomorphicWith(m2closure);
>
> Then you just need to test if m2 is a subset of m1, which you could do
> statement by statement by replacing bNodes with wildcards.
>
> Without having thought about it deeply that might work. The
> isIsomorphicsWith handles the GI-COMPLETE step of comparing graphs
> with bNodes. Will still be limited that the lack of absolute
> completeness of the provided RDFS rules.
>
> Dave
>
> On 24/03/15 08:57, Lorenz Bühmann wrote:
>> Hello Dave,
>>
>> thnaks for the quick reply. I'm aware of the different RDFS entailment
>> implementations, but I was more wondering how to check the entailment
>> between 2 graphs. My question was probably not specific enough, so
>> consider for instance 2 JENA models
>>
>> Model m1
>> Model m2
>>
>> What would be the way to go to check if for instance m1 is RDFS entailed
>> by m2? I know I can create an InfModel by assigning a reasoner, but I'm
>> more looking for something like
>>
>> m1.isEntailedBy(m2):boolean
>>
>> or
>>
>> m2.entails(m1):boolean
>>
>> Sorry if my first question wasn't clear enough.
>>
>> Kind regards,
>> Lorenz
>>
>>> On 24/03/15 08:00, Lorenz Bühmann wrote:
>>>> Hello,
>>>>
>>>> I'm using latest Apache JENA 2.13.0 and I'm wondering if it contains
>>>> algorithms for RDFS or even pD* entailment of graphs (aka. models)? I
>>>> couldn't find anything in the documentation
>>>> (https://jena.apache.org/documentation/inference/), that's why I'm
>>>> asking before I start to implement it by myself.
>>>
>>> As it says in that documentation there is the RDFS rule reasoner which
>>> implements different subsets of the RDFS entailment rules but, as it
>>> says there, even the FULL mode omits the bNode datatype entailments.
>>>
>>> If you need absolute and guaranteed completeness then indeed building
>>> your own would be the way to go.
>>>
>>> Dave
>>>
>>>
>
>
--
Lorenz Bühmann
AKSW group, University of Leipzig
Group: http://aksw.org - semantic web research center
Re: Graph Entailment
Posted by Dave Reynolds <da...@gmail.com>.
Hi Lorenz,
Ah, no there is no equivalent of isEntailedBy in Jena.
If your graphs don't have bNodes then it would be easy: check if each
statement in m1 is contained in the RDFS closure of m2.
If you have bNodes then you may be able to finesse it. You can check if
m1 and m2 have the same closure:
Model m1closure = ModelFactory.createDefaultModel();
m1closure.add( ModelFactory.createInfModel(fullRDFSReasoner, m1) );
Model m2closure = ModelFactory.createDefaultModel();
m2closure.add( ModelFactory.createInfModel(fullRDFSReasoner, m2) );
boolean sameClosure = m1closure.isIsomorphicWith(m2closure);
Then you just need to test if m2 is a subset of m1, which you could do
statement by statement by replacing bNodes with wildcards.
Without having thought about it deeply that might work. The
isIsomorphicsWith handles the GI-COMPLETE step of comparing graphs with
bNodes. Will still be limited that the lack of absolute completeness of
the provided RDFS rules.
Dave
On 24/03/15 08:57, Lorenz Bühmann wrote:
> Hello Dave,
>
> thnaks for the quick reply. I'm aware of the different RDFS entailment
> implementations, but I was more wondering how to check the entailment
> between 2 graphs. My question was probably not specific enough, so
> consider for instance 2 JENA models
>
> Model m1
> Model m2
>
> What would be the way to go to check if for instance m1 is RDFS entailed
> by m2? I know I can create an InfModel by assigning a reasoner, but I'm
> more looking for something like
>
> m1.isEntailedBy(m2):boolean
>
> or
>
> m2.entails(m1):boolean
>
> Sorry if my first question wasn't clear enough.
>
> Kind regards,
> Lorenz
>
>> On 24/03/15 08:00, Lorenz Bühmann wrote:
>>> Hello,
>>>
>>> I'm using latest Apache JENA 2.13.0 and I'm wondering if it contains
>>> algorithms for RDFS or even pD* entailment of graphs (aka. models)? I
>>> couldn't find anything in the documentation
>>> (https://jena.apache.org/documentation/inference/), that's why I'm
>>> asking before I start to implement it by myself.
>>
>> As it says in that documentation there is the RDFS rule reasoner which
>> implements different subsets of the RDFS entailment rules but, as it
>> says there, even the FULL mode omits the bNode datatype entailments.
>>
>> If you need absolute and guaranteed completeness then indeed building
>> your own would be the way to go.
>>
>> Dave
>>
>>
Re: Graph Entailment
Posted by Lorenz Bühmann <bu...@informatik.uni-leipzig.de>.
Hello Dave,
thnaks for the quick reply. I'm aware of the different RDFS entailment
implementations, but I was more wondering how to check the entailment
between 2 graphs. My question was probably not specific enough, so
consider for instance 2 JENA models
Model m1
Model m2
What would be the way to go to check if for instance m1 is RDFS entailed
by m2? I know I can create an InfModel by assigning a reasoner, but I'm
more looking for something like
m1.isEntailedBy(m2):boolean
or
m2.entails(m1):boolean
Sorry if my first question wasn't clear enough.
Kind regards,
Lorenz
> On 24/03/15 08:00, Lorenz Bühmann wrote:
>> Hello,
>>
>> I'm using latest Apache JENA 2.13.0 and I'm wondering if it contains
>> algorithms for RDFS or even pD* entailment of graphs (aka. models)? I
>> couldn't find anything in the documentation
>> (https://jena.apache.org/documentation/inference/), that's why I'm
>> asking before I start to implement it by myself.
>
> As it says in that documentation there is the RDFS rule reasoner which
> implements different subsets of the RDFS entailment rules but, as it
> says there, even the FULL mode omits the bNode datatype entailments.
>
> If you need absolute and guaranteed completeness then indeed building
> your own would be the way to go.
>
> Dave
>
>
--
Lorenz Bühmann
AKSW group, University of Leipzig
Group: http://aksw.org - semantic web research center
Re: Graph Entailment
Posted by Dave Reynolds <da...@gmail.com>.
On 24/03/15 08:00, Lorenz Bühmann wrote:
> Hello,
>
> I'm using latest Apache JENA 2.13.0 and I'm wondering if it contains
> algorithms for RDFS or even pD* entailment of graphs (aka. models)? I
> couldn't find anything in the documentation
> (https://jena.apache.org/documentation/inference/), that's why I'm
> asking before I start to implement it by myself.
As it says in that documentation there is the RDFS rule reasoner which
implements different subsets of the RDFS entailment rules but, as it
says there, even the FULL mode omits the bNode datatype entailments.
If you need absolute and guaranteed completeness then indeed building
your own would be the way to go.
Dave