You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by lookman sanni <lo...@gmail.com> on 2016/08/21 11:37:12 UTC

Jena Rules Definition

Hi all,

I am struggling with the definition of jena rules. I have an RDF file where
I am defining:

   - a "folder" class with a property "createdBy"
   - a "file" class with a property "processedIn" of type "folder"

My RDF file contains resources from the two classes. I am trying to define
a Jena rule for querying files appearing in more than a folder, having
different authors.

To that end, I added to my RDF the specification of a class
"fileRequiringConflictCheck" a subclass of the class "file" and then
specified the following jena rule:

[ruleX:
(?file1 aa:processedIn ?fld2)
(?file1 aa:processedIn ?fld1)
notEqual(?fld1, ?fld2)
(?fld1 aa:createdBy ?auth1)
(?fld2 aa:createdBy ?auth2)
notEqual(?auth1, ?auth2)
->
(?file1 rdf:type aa:fileRequiringConflictCheck)
]

Outcome is that the rule is likely never met whenever expected as per my
sample dataset. Any idea what I might be missing ?

Thank you.


-- 
Best Regards

Lookman SANNI

Re: Jena Rules Definition

Posted by "A. Soroka" <aj...@virginia.edu>.
The fact that one can use Jena's command line tool 'riot' to convert formats is perfectly true. A separate question was asked.

---
A. Soroka
The University of Virginia Library

> On Aug 23, 2016, at 3:34 AM, Lorenz Buehmann <bu...@informatik.uni-leipzig.de> wrote:
> 
> That does not solve the issue, the values are still string, not URIs resp. RDF resources. The whole XSLT transformation has to be done again.
> 
> 
> On 22.08.2016 13:36, A. Soroka wrote:
>> You can use Jena's command line tool 'riot' to convert:
>> 
>> https://jena.apache.org/documentation/io/#command-line-tools
>> 
>> ---
>> A. Soroka
>> The University of Virginia Library
>> 
>>> On Aug 22, 2016, at 4:54 AM, lookman sanni <lo...@gmail.com> wrote:
>>> 
>>> Awesome !
>>> 
>>> The reason why I am using XML/RDF is that I have an input of
>>> thousands/millions of lines in either CSV or XML. I chose XML, and
>>> converted the XML to RDF/XML through XSLT. I can after that read the
>>> RDF/XML either in memory or via TDB. Any chance I could be using TTL ? If
>>> yes, I would be interested in learning how.
>>> 
>>> Thank you.
>>> 
>>> 
>>> 
>>> On Mon, Aug 22, 2016 at 10:20 AM, Dave Reynolds <da...@gmail.com>
>>> wrote:
>>> 
>>>> Hi,
>>>> 
>>>> The problem is with your RDF file. You have given the values of the
>>>> aa:processedIn properties as strings instead of resources. To see this
>>>> serialize as ttl. Better still, only use ttl and ignore rdf/xml!
>>>> 
>>>> Using a corrected RDF file:
>>>> 
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>>>> xmlns:aa="http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2
>>>> 002/07/owl#" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>>>> http://www.w3.org/2000/01/rdf-schema#">
>>>>  <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>>>  </owl:Class>
>>>>  <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>>>  </owl:Class>
>>>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>>>    <aa:createdBy>MisterX</aa:createdBy>
>>>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>>   </rdf:Description>
>>>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>>    <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/001" />
>>>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>  </rdf:Description>
>>>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>>>    <aa:createdBy>MisterY</aa:createdBy>
>>>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>>  </rdf:Description>
>>>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>>    <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/002" />
>>>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>  </rdf:Description>
>>>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>>>    <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>  </rdf:Description>
>>>> </rdf:RDF>
>>>> 
>>>> and using your rule definitions then the ruleX fires fine and the
>>>> resulting InfModel is:
>>>> 
>>>> @prefix aa:    <http://www.abcd.org/ofdf#> .
>>>> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>>> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>>>> @prefix html:  <http://www.w3.org/1999/xhtml> .
>>>> @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
>>>> 
>>>> <http://www.abcd.org/ofdf#file/AAA>
>>>>        a               aa:fileRequiringConflictCheck ,
>>>> aa:fileInManyFolders , aa:file ;
>>>>        aa:processedIn  <http://www.abcd.org/ofdf#folder/002> , <
>>>> http://www.abcd.org/ofdf#folder/001> .
>>>> 
>>>> aa:file  a      owl:Class .
>>>> 
>>>> <http://www.abcd.org/ofdf#file/BBB>
>>>>        a               aa:file ;
>>>>        aa:processedIn  "http://www.abcd.org/ofdf#folder/002" .
>>>> 
>>>> <http://www.abcd.org/ofdf#folder/002>
>>>>        a             aa:folder ;
>>>>        aa:createdBy  "MisterY" .
>>>> 
>>>> aa:folder  a    owl:Class .
>>>> 
>>>> <http://www.abcd.org/ofdf#folder/001>
>>>>        a             aa:folder ;
>>>>        aa:createdBy  "MisterX" .
>>>> 
>>>> 
>>>> Dave
>>>> 
>>>> 
>>>> On 21/08/16 19:34, lookman sanni wrote:
>>>> 
>>>>> Ok Dave. Here is a minimal example:
>>>>> 
>>>>> 
>>>>> *Java Code*
>>>>>                       String rdfPath = "dataset/rdf/sample.rdf";
>>>>>                 String inRuleBase = "rules/sampleRule.txt";
>>>>>                 Model model = ModelFactory.createDefaultModel();
>>>>> FileInputStream fis = new FileInputStream(rdfPath);
>>>>> model.read(fis,"ticket");
>>>>> Reasoner reasoner = new GenericRuleReasoner(
>>>>> Rule.rulesFromURL(inRuleBase));
>>>>> InfModel infModel = ModelFactory.createInfModel( reasoner, model );
>>>>> StmtIterator si = infModel.listStatements();
>>>>> while ( si.hasNext() )
>>>>> {
>>>>> Statement stmt = si.nextStatement();
>>>>> Resource subject = stmt.getSubject();
>>>>> Property predicate = stmt.getPredicate();
>>>>> RDFNode object = stmt.getObject();
>>>>> System.out.println(subject.toString() + " " + predicate.toString() + " "
>>>>> +
>>>>> object.toString());
>>>>> }
>>>>> 
>>>>> *RDF File** (sample.rdf)*
>>>>> 
>>>>> 
>>>>>         <?xml version="1.0" encoding="UTF-8"?>
>>>>> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>>>>> xmlns:aa="
>>>>> http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
>>>>> xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>>>>> http://www.w3.org/2000/01/rdf-schema#">
>>>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>>>> </owl:Class>
>>>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>>>> </owl:Class>
>>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>>>> <aa:createdBy>MisterX</aa:createdBy>
>>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>>> </rdf:Description>
>>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
>>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>> </rdf:Description>
>>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>>>> <aa:createdBy>MisterY</aa:createdBy>
>>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>>> </rdf:Description>
>>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>> </rdf:Description>
>>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>>> </rdf:Description>
>>>>> </rdf:RDF>
>>>>> 
>>>>> 
>>>>> *Rule** (**sampleRule.txt)*
>>>>> 
>>>>> @prefix aa: <http://www.abcd.org/ofdf#>.
>>>>> 
>>>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
>>>>> 
>>>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>>>> 
>>>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>>>>> 
>>>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>>>> 
>>>>> 
>>>>> [ruleX:
>>>>> 
>>>>> (?file1 aa:processedIn ?fld1)
>>>>> 
>>>>> (?file1 aa:processedIn ?fld2)
>>>>> 
>>>>> notEqual(?fld1, ?fld2)
>>>>> 
>>>>> (?fld1 aa:createdBy ?auth1)
>>>>> 
>>>>> (?fld2 aa:createdBy ?auth2)
>>>>> 
>>>>> notEqual(?auth1, ?auth2)
>>>>> 
>>>>> ->
>>>>> 
>>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>>> 
>>>>> ]
>>>>> 
>>>>> [ruleY:
>>>>> (?file1 aa:processedIn ?fld1)
>>>>> (?file1 aa:processedIn ?fld2)
>>>>> notEqual(?fld1, ?fld2)
>>>>> ->
>>>>> (?file1 rdf:type aa:fileInManyFolders)
>>>>> ]
>>>>> 
>>>>> 
>>>>> RuleY is properly recognized and I can see the following statement added
>>>>> to
>>>>> the Inference model:
>>>>> *http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type
>>>>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>>>> http://www.abcd.org/ofdf#fileInManyFolders
>>>>> <http://www.abcd.org/ofdf#fileInManyFolders>*
>>>>> 
>>>>> 
>>>>> Nothing however for ruleX and this is what I struggle with. Thanks in
>>>>> advance for the help.
>>>>> 
>>>>> On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <dave.e.reynolds@gmail.com
>>>>> wrote:
>>>>> 
>>>>> On 21/08/16 12:37, lookman sanni wrote:
>>>>>> Hi all,
>>>>>>> I am struggling with the definition of jena rules. I have an RDF file
>>>>>>> where
>>>>>>> I am defining:
>>>>>>> 
>>>>>>>    - a "folder" class with a property "createdBy"
>>>>>>>    - a "file" class with a property "processedIn" of type "folder"
>>>>>>> 
>>>>>>> My RDF file contains resources from the two classes. I am trying to
>>>>>>> define
>>>>>>> a Jena rule for querying files appearing in more than a folder, having
>>>>>>> different authors.
>>>>>>> 
>>>>>>> To that end, I added to my RDF the specification of a class
>>>>>>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>>>>>>> specified the following jena rule:
>>>>>>> 
>>>>>>> [ruleX:
>>>>>>> (?file1 aa:processedIn ?fld2)
>>>>>>> (?file1 aa:processedIn ?fld1)
>>>>>>> notEqual(?fld1, ?fld2)
>>>>>>> (?fld1 aa:createdBy ?auth1)
>>>>>>> (?fld2 aa:createdBy ?auth2)
>>>>>>> notEqual(?auth1, ?auth2)
>>>>>>> ->
>>>>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>>>>> ]
>>>>>>> 
>>>>>>> Outcome is that the rule is likely never met whenever expected as per my
>>>>>>> sample dataset. Any idea what I might be missing ?
>>>>>>> 
>>>>>>> 
>>>>>> Looks reasonable, check your namespaces are correct. If you can't get it
>>>>>> working then post a minimal example of the data and someone might be able
>>>>>> to spot the problem.
>>>>>> 
>>>>>> Dave
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>>> -- 
>>> Best Regards
>>> 
>>> Lookman SANNI
>> 
> 


Re: Jena Rules Definition

Posted by Lorenz Buehmann <bu...@informatik.uni-leipzig.de>.
That does not solve the issue, the values are still string, not URIs 
resp. RDF resources. The whole XSLT transformation has to be done again.


On 22.08.2016 13:36, A. Soroka wrote:
> You can use Jena's command line tool 'riot' to convert:
>
> https://jena.apache.org/documentation/io/#command-line-tools
>
> ---
> A. Soroka
> The University of Virginia Library
>
>> On Aug 22, 2016, at 4:54 AM, lookman sanni <lo...@gmail.com> wrote:
>>
>> Awesome !
>>
>> The reason why I am using XML/RDF is that I have an input of
>> thousands/millions of lines in either CSV or XML. I chose XML, and
>> converted the XML to RDF/XML through XSLT. I can after that read the
>> RDF/XML either in memory or via TDB. Any chance I could be using TTL ? If
>> yes, I would be interested in learning how.
>>
>> Thank you.
>>
>>
>>
>> On Mon, Aug 22, 2016 at 10:20 AM, Dave Reynolds <da...@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> The problem is with your RDF file. You have given the values of the
>>> aa:processedIn properties as strings instead of resources. To see this
>>> serialize as ttl. Better still, only use ttl and ignore rdf/xml!
>>>
>>> Using a corrected RDF file:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>>> xmlns:aa="http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2
>>> 002/07/owl#" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>>> http://www.w3.org/2000/01/rdf-schema#">
>>>   <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>>   </owl:Class>
>>>   <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>>   </owl:Class>
>>>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>>     <aa:createdBy>MisterX</aa:createdBy>
>>>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>    </rdf:Description>
>>>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/001" />
>>>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>   </rdf:Description>
>>>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>>     <aa:createdBy>MisterY</aa:createdBy>
>>>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>   </rdf:Description>
>>>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/002" />
>>>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>   </rdf:Description>
>>>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>>     <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>   </rdf:Description>
>>> </rdf:RDF>
>>>
>>> and using your rule definitions then the ruleX fires fine and the
>>> resulting InfModel is:
>>>
>>> @prefix aa:    <http://www.abcd.org/ofdf#> .
>>> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>>> @prefix html:  <http://www.w3.org/1999/xhtml> .
>>> @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
>>>
>>> <http://www.abcd.org/ofdf#file/AAA>
>>>         a               aa:fileRequiringConflictCheck ,
>>> aa:fileInManyFolders , aa:file ;
>>>         aa:processedIn  <http://www.abcd.org/ofdf#folder/002> , <
>>> http://www.abcd.org/ofdf#folder/001> .
>>>
>>> aa:file  a      owl:Class .
>>>
>>> <http://www.abcd.org/ofdf#file/BBB>
>>>         a               aa:file ;
>>>         aa:processedIn  "http://www.abcd.org/ofdf#folder/002" .
>>>
>>> <http://www.abcd.org/ofdf#folder/002>
>>>         a             aa:folder ;
>>>         aa:createdBy  "MisterY" .
>>>
>>> aa:folder  a    owl:Class .
>>>
>>> <http://www.abcd.org/ofdf#folder/001>
>>>         a             aa:folder ;
>>>         aa:createdBy  "MisterX" .
>>>
>>>
>>> Dave
>>>
>>>
>>> On 21/08/16 19:34, lookman sanni wrote:
>>>
>>>> Ok Dave. Here is a minimal example:
>>>>
>>>>
>>>> *Java Code*
>>>>                        String rdfPath = "dataset/rdf/sample.rdf";
>>>>                  String inRuleBase = "rules/sampleRule.txt";
>>>>                  Model model = ModelFactory.createDefaultModel();
>>>> FileInputStream fis = new FileInputStream(rdfPath);
>>>> model.read(fis,"ticket");
>>>> Reasoner reasoner = new GenericRuleReasoner(
>>>> Rule.rulesFromURL(inRuleBase));
>>>> InfModel infModel = ModelFactory.createInfModel( reasoner, model );
>>>> StmtIterator si = infModel.listStatements();
>>>> while ( si.hasNext() )
>>>> {
>>>> Statement stmt = si.nextStatement();
>>>> Resource subject = stmt.getSubject();
>>>> Property predicate = stmt.getPredicate();
>>>> RDFNode object = stmt.getObject();
>>>> System.out.println(subject.toString() + " " + predicate.toString() + " "
>>>> +
>>>> object.toString());
>>>> }
>>>>
>>>> *RDF File** (sample.rdf)*
>>>>
>>>>
>>>>          <?xml version="1.0" encoding="UTF-8"?>
>>>> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>>>> xmlns:aa="
>>>> http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
>>>> xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>>>> http://www.w3.org/2000/01/rdf-schema#">
>>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>>> </owl:Class>
>>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>>> </owl:Class>
>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>>> <aa:createdBy>MisterX</aa:createdBy>
>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>> </rdf:Description>
>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>> </rdf:Description>
>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>>> <aa:createdBy>MisterY</aa:createdBy>
>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>>> </rdf:Description>
>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>> </rdf:Description>
>>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>>> </rdf:Description>
>>>> </rdf:RDF>
>>>>
>>>>
>>>> *Rule** (**sampleRule.txt)*
>>>>
>>>> @prefix aa: <http://www.abcd.org/ofdf#>.
>>>>
>>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
>>>>
>>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>>>
>>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>>>>
>>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>>>
>>>>
>>>> [ruleX:
>>>>
>>>> (?file1 aa:processedIn ?fld1)
>>>>
>>>> (?file1 aa:processedIn ?fld2)
>>>>
>>>> notEqual(?fld1, ?fld2)
>>>>
>>>> (?fld1 aa:createdBy ?auth1)
>>>>
>>>> (?fld2 aa:createdBy ?auth2)
>>>>
>>>> notEqual(?auth1, ?auth2)
>>>>
>>>> ->
>>>>
>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>>
>>>> ]
>>>>
>>>> [ruleY:
>>>> (?file1 aa:processedIn ?fld1)
>>>> (?file1 aa:processedIn ?fld2)
>>>> notEqual(?fld1, ?fld2)
>>>> ->
>>>> (?file1 rdf:type aa:fileInManyFolders)
>>>> ]
>>>>
>>>>
>>>> RuleY is properly recognized and I can see the following statement added
>>>> to
>>>> the Inference model:
>>>> *http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type
>>>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>>> http://www.abcd.org/ofdf#fileInManyFolders
>>>> <http://www.abcd.org/ofdf#fileInManyFolders>*
>>>>
>>>>
>>>> Nothing however for ruleX and this is what I struggle with. Thanks in
>>>> advance for the help.
>>>>
>>>> On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <dave.e.reynolds@gmail.com
>>>> wrote:
>>>>
>>>> On 21/08/16 12:37, lookman sanni wrote:
>>>>> Hi all,
>>>>>> I am struggling with the definition of jena rules. I have an RDF file
>>>>>> where
>>>>>> I am defining:
>>>>>>
>>>>>>     - a "folder" class with a property "createdBy"
>>>>>>     - a "file" class with a property "processedIn" of type "folder"
>>>>>>
>>>>>> My RDF file contains resources from the two classes. I am trying to
>>>>>> define
>>>>>> a Jena rule for querying files appearing in more than a folder, having
>>>>>> different authors.
>>>>>>
>>>>>> To that end, I added to my RDF the specification of a class
>>>>>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>>>>>> specified the following jena rule:
>>>>>>
>>>>>> [ruleX:
>>>>>> (?file1 aa:processedIn ?fld2)
>>>>>> (?file1 aa:processedIn ?fld1)
>>>>>> notEqual(?fld1, ?fld2)
>>>>>> (?fld1 aa:createdBy ?auth1)
>>>>>> (?fld2 aa:createdBy ?auth2)
>>>>>> notEqual(?auth1, ?auth2)
>>>>>> ->
>>>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>>>> ]
>>>>>>
>>>>>> Outcome is that the rule is likely never met whenever expected as per my
>>>>>> sample dataset. Any idea what I might be missing ?
>>>>>>
>>>>>>
>>>>> Looks reasonable, check your namespaces are correct. If you can't get it
>>>>> working then post a minimal example of the data and someone might be able
>>>>> to spot the problem.
>>>>>
>>>>> Dave
>>>>>
>>>>>
>>>>>
>>>>
>>
>> -- 
>> Best Regards
>>
>> Lookman SANNI
>


Re: Jena Rules Definition

Posted by "A. Soroka" <aj...@virginia.edu>.
You can use Jena's command line tool 'riot' to convert:

https://jena.apache.org/documentation/io/#command-line-tools

---
A. Soroka
The University of Virginia Library

> On Aug 22, 2016, at 4:54 AM, lookman sanni <lo...@gmail.com> wrote:
> 
> Awesome !
> 
> The reason why I am using XML/RDF is that I have an input of
> thousands/millions of lines in either CSV or XML. I chose XML, and
> converted the XML to RDF/XML through XSLT. I can after that read the
> RDF/XML either in memory or via TDB. Any chance I could be using TTL ? If
> yes, I would be interested in learning how.
> 
> Thank you.
> 
> 
> 
> On Mon, Aug 22, 2016 at 10:20 AM, Dave Reynolds <da...@gmail.com>
> wrote:
> 
>> Hi,
>> 
>> The problem is with your RDF file. You have given the values of the
>> aa:processedIn properties as strings instead of resources. To see this
>> serialize as ttl. Better still, only use ttl and ignore rdf/xml!
>> 
>> Using a corrected RDF file:
>> 
>> <?xml version="1.0" encoding="UTF-8"?>
>>  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>> xmlns:aa="http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2
>> 002/07/owl#" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>> http://www.w3.org/2000/01/rdf-schema#">
>>  <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>  </owl:Class>
>>  <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>  </owl:Class>
>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>    <aa:createdBy>MisterX</aa:createdBy>
>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>   </rdf:Description>
>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>    <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/001" />
>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>  </rdf:Description>
>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>    <aa:createdBy>MisterY</aa:createdBy>
>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>  </rdf:Description>
>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>    <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/002" />
>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>  </rdf:Description>
>>  <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>    <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>    <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>  </rdf:Description>
>> </rdf:RDF>
>> 
>> and using your rule definitions then the ruleX fires fine and the
>> resulting InfModel is:
>> 
>> @prefix aa:    <http://www.abcd.org/ofdf#> .
>> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
>> @prefix html:  <http://www.w3.org/1999/xhtml> .
>> @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
>> 
>> <http://www.abcd.org/ofdf#file/AAA>
>>        a               aa:fileRequiringConflictCheck ,
>> aa:fileInManyFolders , aa:file ;
>>        aa:processedIn  <http://www.abcd.org/ofdf#folder/002> , <
>> http://www.abcd.org/ofdf#folder/001> .
>> 
>> aa:file  a      owl:Class .
>> 
>> <http://www.abcd.org/ofdf#file/BBB>
>>        a               aa:file ;
>>        aa:processedIn  "http://www.abcd.org/ofdf#folder/002" .
>> 
>> <http://www.abcd.org/ofdf#folder/002>
>>        a             aa:folder ;
>>        aa:createdBy  "MisterY" .
>> 
>> aa:folder  a    owl:Class .
>> 
>> <http://www.abcd.org/ofdf#folder/001>
>>        a             aa:folder ;
>>        aa:createdBy  "MisterX" .
>> 
>> 
>> Dave
>> 
>> 
>> On 21/08/16 19:34, lookman sanni wrote:
>> 
>>> Ok Dave. Here is a minimal example:
>>> 
>>> 
>>> *Java Code*
>>>                       String rdfPath = "dataset/rdf/sample.rdf";
>>>                 String inRuleBase = "rules/sampleRule.txt";
>>>                 Model model = ModelFactory.createDefaultModel();
>>> FileInputStream fis = new FileInputStream(rdfPath);
>>> model.read(fis,"ticket");
>>> Reasoner reasoner = new GenericRuleReasoner(
>>> Rule.rulesFromURL(inRuleBase));
>>> InfModel infModel = ModelFactory.createInfModel( reasoner, model );
>>> StmtIterator si = infModel.listStatements();
>>> while ( si.hasNext() )
>>> {
>>> Statement stmt = si.nextStatement();
>>> Resource subject = stmt.getSubject();
>>> Property predicate = stmt.getPredicate();
>>> RDFNode object = stmt.getObject();
>>> System.out.println(subject.toString() + " " + predicate.toString() + " "
>>> +
>>> object.toString());
>>> }
>>> 
>>> *RDF File** (sample.rdf)*
>>> 
>>> 
>>>         <?xml version="1.0" encoding="UTF-8"?>
>>> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>>> xmlns:aa="
>>> http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
>>> xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>>> http://www.w3.org/2000/01/rdf-schema#">
>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>>> </owl:Class>
>>> <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>>> </owl:Class>
>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>>> <aa:createdBy>MisterX</aa:createdBy>
>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>> </rdf:Description>
>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>> </rdf:Description>
>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>>> <aa:createdBy>MisterY</aa:createdBy>
>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>>> </rdf:Description>
>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>> </rdf:Description>
>>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>>> </rdf:Description>
>>> </rdf:RDF>
>>> 
>>> 
>>> *Rule** (**sampleRule.txt)*
>>> 
>>> @prefix aa: <http://www.abcd.org/ofdf#>.
>>> 
>>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
>>> 
>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>> 
>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>>> 
>>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>> 
>>> 
>>> [ruleX:
>>> 
>>> (?file1 aa:processedIn ?fld1)
>>> 
>>> (?file1 aa:processedIn ?fld2)
>>> 
>>> notEqual(?fld1, ?fld2)
>>> 
>>> (?fld1 aa:createdBy ?auth1)
>>> 
>>> (?fld2 aa:createdBy ?auth2)
>>> 
>>> notEqual(?auth1, ?auth2)
>>> 
>>> ->
>>> 
>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>> 
>>> ]
>>> 
>>> [ruleY:
>>> (?file1 aa:processedIn ?fld1)
>>> (?file1 aa:processedIn ?fld2)
>>> notEqual(?fld1, ?fld2)
>>> ->
>>> (?file1 rdf:type aa:fileInManyFolders)
>>> ]
>>> 
>>> 
>>> RuleY is properly recognized and I can see the following statement added
>>> to
>>> the Inference model:
>>> *http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type
>>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>> http://www.abcd.org/ofdf#fileInManyFolders
>>> <http://www.abcd.org/ofdf#fileInManyFolders>*
>>> 
>>> 
>>> Nothing however for ruleX and this is what I struggle with. Thanks in
>>> advance for the help.
>>> 
>>> On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <dave.e.reynolds@gmail.com
>>>> 
>>> wrote:
>>> 
>>> On 21/08/16 12:37, lookman sanni wrote:
>>>> 
>>>> Hi all,
>>>>> 
>>>>> I am struggling with the definition of jena rules. I have an RDF file
>>>>> where
>>>>> I am defining:
>>>>> 
>>>>>    - a "folder" class with a property "createdBy"
>>>>>    - a "file" class with a property "processedIn" of type "folder"
>>>>> 
>>>>> My RDF file contains resources from the two classes. I am trying to
>>>>> define
>>>>> a Jena rule for querying files appearing in more than a folder, having
>>>>> different authors.
>>>>> 
>>>>> To that end, I added to my RDF the specification of a class
>>>>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>>>>> specified the following jena rule:
>>>>> 
>>>>> [ruleX:
>>>>> (?file1 aa:processedIn ?fld2)
>>>>> (?file1 aa:processedIn ?fld1)
>>>>> notEqual(?fld1, ?fld2)
>>>>> (?fld1 aa:createdBy ?auth1)
>>>>> (?fld2 aa:createdBy ?auth2)
>>>>> notEqual(?auth1, ?auth2)
>>>>> ->
>>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>>> ]
>>>>> 
>>>>> Outcome is that the rule is likely never met whenever expected as per my
>>>>> sample dataset. Any idea what I might be missing ?
>>>>> 
>>>>> 
>>>> Looks reasonable, check your namespaces are correct. If you can't get it
>>>> working then post a minimal example of the data and someone might be able
>>>> to spot the problem.
>>>> 
>>>> Dave
>>>> 
>>>> 
>>>> 
>>> 
>>> 
> 
> 
> -- 
> Best Regards
> 
> Lookman SANNI


Re: Jena Rules Definition

Posted by lookman sanni <lo...@gmail.com>.
Awesome !

The reason why I am using XML/RDF is that I have an input of
thousands/millions of lines in either CSV or XML. I chose XML, and
converted the XML to RDF/XML through XSLT. I can after that read the
RDF/XML either in memory or via TDB. Any chance I could be using TTL ? If
yes, I would be interested in learning how.

Thank you.



On Mon, Aug 22, 2016 at 10:20 AM, Dave Reynolds <da...@gmail.com>
wrote:

> Hi,
>
> The problem is with your RDF file. You have given the values of the
> aa:processedIn properties as strings instead of resources. To see this
> serialize as ttl. Better still, only use ttl and ignore rdf/xml!
>
> Using a corrected RDF file:
>
> <?xml version="1.0" encoding="UTF-8"?>
>   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> xmlns:aa="http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2
> 002/07/owl#" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
> http://www.w3.org/2000/01/rdf-schema#">
>   <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>   </owl:Class>
>   <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>   </owl:Class>
>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>     <aa:createdBy>MisterX</aa:createdBy>
>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>    </rdf:Description>
>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/001" />
>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>   </rdf:Description>
>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>     <aa:createdBy>MisterY</aa:createdBy>
>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>   </rdf:Description>
>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/002" />
>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>   </rdf:Description>
>   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>     <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>   </rdf:Description>
> </rdf:RDF>
>
> and using your rule definitions then the ruleX fires fine and the
> resulting InfModel is:
>
> @prefix aa:    <http://www.abcd.org/ofdf#> .
> @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix owl:   <http://www.w3.org/2002/07/owl#> .
> @prefix html:  <http://www.w3.org/1999/xhtml> .
> @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
>
> <http://www.abcd.org/ofdf#file/AAA>
>         a               aa:fileRequiringConflictCheck ,
> aa:fileInManyFolders , aa:file ;
>         aa:processedIn  <http://www.abcd.org/ofdf#folder/002> , <
> http://www.abcd.org/ofdf#folder/001> .
>
> aa:file  a      owl:Class .
>
> <http://www.abcd.org/ofdf#file/BBB>
>         a               aa:file ;
>         aa:processedIn  "http://www.abcd.org/ofdf#folder/002" .
>
> <http://www.abcd.org/ofdf#folder/002>
>         a             aa:folder ;
>         aa:createdBy  "MisterY" .
>
> aa:folder  a    owl:Class .
>
> <http://www.abcd.org/ofdf#folder/001>
>         a             aa:folder ;
>         aa:createdBy  "MisterX" .
>
>
> Dave
>
>
> On 21/08/16 19:34, lookman sanni wrote:
>
>> Ok Dave. Here is a minimal example:
>>
>>
>> *Java Code*
>>                        String rdfPath = "dataset/rdf/sample.rdf";
>>                  String inRuleBase = "rules/sampleRule.txt";
>>                  Model model = ModelFactory.createDefaultModel();
>> FileInputStream fis = new FileInputStream(rdfPath);
>> model.read(fis,"ticket");
>> Reasoner reasoner = new GenericRuleReasoner(
>> Rule.rulesFromURL(inRuleBase));
>> InfModel infModel = ModelFactory.createInfModel( reasoner, model );
>> StmtIterator si = infModel.listStatements();
>> while ( si.hasNext() )
>> {
>> Statement stmt = si.nextStatement();
>> Resource subject = stmt.getSubject();
>> Property predicate = stmt.getPredicate();
>> RDFNode object = stmt.getObject();
>> System.out.println(subject.toString() + " " + predicate.toString() + " "
>> +
>> object.toString());
>> }
>>
>> *RDF File** (sample.rdf)*
>>
>>
>>          <?xml version="1.0" encoding="UTF-8"?>
>> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>> xmlns:aa="
>> http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
>> xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
>> http://www.w3.org/2000/01/rdf-schema#">
>> <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
>> </owl:Class>
>> <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
>> </owl:Class>
>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
>> <aa:createdBy>MisterX</aa:createdBy>
>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>> </rdf:Description>
>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>> <aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>> </rdf:Description>
>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
>> <aa:createdBy>MisterY</aa:createdBy>
>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
>> </rdf:Description>
>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>> </rdf:Description>
>> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
>> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
>> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
>> </rdf:Description>
>> </rdf:RDF>
>>
>>
>> *Rule** (**sampleRule.txt)*
>>
>> @prefix aa: <http://www.abcd.org/ofdf#>.
>>
>> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
>>
>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>>
>> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>>
>>
>> [ruleX:
>>
>> (?file1 aa:processedIn ?fld1)
>>
>> (?file1 aa:processedIn ?fld2)
>>
>> notEqual(?fld1, ?fld2)
>>
>> (?fld1 aa:createdBy ?auth1)
>>
>> (?fld2 aa:createdBy ?auth2)
>>
>> notEqual(?auth1, ?auth2)
>>
>> ->
>>
>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>
>> ]
>>
>> [ruleY:
>> (?file1 aa:processedIn ?fld1)
>> (?file1 aa:processedIn ?fld2)
>> notEqual(?fld1, ?fld2)
>> ->
>> (?file1 rdf:type aa:fileInManyFolders)
>> ]
>>
>>
>> RuleY is properly recognized and I can see the following statement added
>> to
>> the Inference model:
>> *http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type
>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>> http://www.abcd.org/ofdf#fileInManyFolders
>> <http://www.abcd.org/ofdf#fileInManyFolders>*
>>
>>
>> Nothing however for ruleX and this is what I struggle with. Thanks in
>> advance for the help.
>>
>> On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <dave.e.reynolds@gmail.com
>> >
>> wrote:
>>
>> On 21/08/16 12:37, lookman sanni wrote:
>>>
>>> Hi all,
>>>>
>>>> I am struggling with the definition of jena rules. I have an RDF file
>>>> where
>>>> I am defining:
>>>>
>>>>     - a "folder" class with a property "createdBy"
>>>>     - a "file" class with a property "processedIn" of type "folder"
>>>>
>>>> My RDF file contains resources from the two classes. I am trying to
>>>> define
>>>> a Jena rule for querying files appearing in more than a folder, having
>>>> different authors.
>>>>
>>>> To that end, I added to my RDF the specification of a class
>>>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>>>> specified the following jena rule:
>>>>
>>>> [ruleX:
>>>> (?file1 aa:processedIn ?fld2)
>>>> (?file1 aa:processedIn ?fld1)
>>>> notEqual(?fld1, ?fld2)
>>>> (?fld1 aa:createdBy ?auth1)
>>>> (?fld2 aa:createdBy ?auth2)
>>>> notEqual(?auth1, ?auth2)
>>>> ->
>>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>>> ]
>>>>
>>>> Outcome is that the rule is likely never met whenever expected as per my
>>>> sample dataset. Any idea what I might be missing ?
>>>>
>>>>
>>> Looks reasonable, check your namespaces are correct. If you can't get it
>>> working then post a minimal example of the data and someone might be able
>>> to spot the problem.
>>>
>>> Dave
>>>
>>>
>>>
>>
>>


-- 
Best Regards

Lookman SANNI

Re: Jena Rules Definition

Posted by Dave Reynolds <da...@gmail.com>.
Hi,

The problem is with your RDF file. You have given the values of the 
aa:processedIn properties as strings instead of resources. To see this 
serialize as ttl. Better still, only use ttl and ignore rdf/xml!

Using a corrected RDF file:

<?xml version="1.0" encoding="UTF-8"?>
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:aa="http://www.abcd.org/ofdf#" 
xmlns:owl="http://www.w3.org/2002/07/owl#" 
xmlns:html="http://www.w3.org/1999/xhtml" 
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
   <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
   </owl:Class>
   <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
   </owl:Class>
   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
     <aa:createdBy>MisterX</aa:createdBy>
     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
    </rdf:Description>
   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/001" />
     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
   </rdf:Description>
   <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
     <aa:createdBy>MisterY</aa:createdBy>
     <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
   </rdf:Description>
   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
     <aa:processedIn rdf:resource="http://www.abcd.org/ofdf#folder/002" />
     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
   </rdf:Description>
   <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
     <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
     <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
   </rdf:Description>
</rdf:RDF>

and using your rule definitions then the ruleX fires fine and the 
resulting InfModel is:

@prefix aa:    <http://www.abcd.org/ofdf#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix html:  <http://www.w3.org/1999/xhtml> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

<http://www.abcd.org/ofdf#file/AAA>
         a               aa:fileRequiringConflictCheck , 
aa:fileInManyFolders , aa:file ;
         aa:processedIn  <http://www.abcd.org/ofdf#folder/002> , 
<http://www.abcd.org/ofdf#folder/001> .

aa:file  a      owl:Class .

<http://www.abcd.org/ofdf#file/BBB>
         a               aa:file ;
         aa:processedIn  "http://www.abcd.org/ofdf#folder/002" .

<http://www.abcd.org/ofdf#folder/002>
         a             aa:folder ;
         aa:createdBy  "MisterY" .

aa:folder  a    owl:Class .

<http://www.abcd.org/ofdf#folder/001>
         a             aa:folder ;
         aa:createdBy  "MisterX" .


Dave


On 21/08/16 19:34, lookman sanni wrote:
> Ok Dave. Here is a minimal example:
>
>
> *Java Code*
>                        String rdfPath = "dataset/rdf/sample.rdf";
>                  String inRuleBase = "rules/sampleRule.txt";
>                  Model model = ModelFactory.createDefaultModel();
> FileInputStream fis = new FileInputStream(rdfPath);
> model.read(fis,"ticket");
> Reasoner reasoner = new GenericRuleReasoner( Rule.rulesFromURL(inRuleBase));
> InfModel infModel = ModelFactory.createInfModel( reasoner, model );
> StmtIterator si = infModel.listStatements();
> while ( si.hasNext() )
> {
> Statement stmt = si.nextStatement();
> Resource subject = stmt.getSubject();
> Property predicate = stmt.getPredicate();
> RDFNode object = stmt.getObject();
> System.out.println(subject.toString() + " " + predicate.toString() + " " +
> object.toString());
> }
>
> *RDF File** (sample.rdf)*
>
>          <?xml version="1.0" encoding="UTF-8"?>
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:aa="
> http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
> xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
> http://www.w3.org/2000/01/rdf-schema#">
> <owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
> </owl:Class>
> <owl:Class rdf:about="http://www.abcd.org/ofdf#file">
> </owl:Class>
> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
> <aa:createdBy>MisterX</aa:createdBy>
> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
> </rdf:Description>
> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
> <aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
> </rdf:Description>
> <rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
> <aa:createdBy>MisterY</aa:createdBy>
> <rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
> </rdf:Description>
> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
> </rdf:Description>
> <rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
> <aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
> <rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
> </rdf:Description>
> </rdf:RDF>
>
>
> *Rule** (**sampleRule.txt)*
>
> @prefix aa: <http://www.abcd.org/ofdf#>.
>
> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
>
> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
>
> @prefix owl: <http://www.w3.org/2002/07/owl#>.
>
>
> [ruleX:
>
> (?file1 aa:processedIn ?fld1)
>
> (?file1 aa:processedIn ?fld2)
>
> notEqual(?fld1, ?fld2)
>
> (?fld1 aa:createdBy ?auth1)
>
> (?fld2 aa:createdBy ?auth2)
>
> notEqual(?auth1, ?auth2)
>
> ->
>
> (?file1 rdf:type aa:fileRequiringConflictCheck)
>
> ]
>
> [ruleY:
> (?file1 aa:processedIn ?fld1)
> (?file1 aa:processedIn ?fld2)
> notEqual(?fld1, ?fld2)
> ->
> (?file1 rdf:type aa:fileInManyFolders)
> ]
>
>
> RuleY is properly recognized and I can see the following statement added to
> the Inference model:
> *http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
> http://www.w3.org/1999/02/22-rdf-syntax-ns#type
> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
> http://www.abcd.org/ofdf#fileInManyFolders
> <http://www.abcd.org/ofdf#fileInManyFolders>*
>
> Nothing however for ruleX and this is what I struggle with. Thanks in
> advance for the help.
>
> On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <da...@gmail.com>
> wrote:
>
>> On 21/08/16 12:37, lookman sanni wrote:
>>
>>> Hi all,
>>>
>>> I am struggling with the definition of jena rules. I have an RDF file
>>> where
>>> I am defining:
>>>
>>>     - a "folder" class with a property "createdBy"
>>>     - a "file" class with a property "processedIn" of type "folder"
>>>
>>> My RDF file contains resources from the two classes. I am trying to define
>>> a Jena rule for querying files appearing in more than a folder, having
>>> different authors.
>>>
>>> To that end, I added to my RDF the specification of a class
>>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>>> specified the following jena rule:
>>>
>>> [ruleX:
>>> (?file1 aa:processedIn ?fld2)
>>> (?file1 aa:processedIn ?fld1)
>>> notEqual(?fld1, ?fld2)
>>> (?fld1 aa:createdBy ?auth1)
>>> (?fld2 aa:createdBy ?auth2)
>>> notEqual(?auth1, ?auth2)
>>> ->
>>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>>> ]
>>>
>>> Outcome is that the rule is likely never met whenever expected as per my
>>> sample dataset. Any idea what I might be missing ?
>>>
>>
>> Looks reasonable, check your namespaces are correct. If you can't get it
>> working then post a minimal example of the data and someone might be able
>> to spot the problem.
>>
>> Dave
>>
>>
>
>

Re: Jena Rules Definition

Posted by lookman sanni <lo...@gmail.com>.
Ok Dave. Here is a minimal example:


*Java Code*
                      String rdfPath = "dataset/rdf/sample.rdf";
                String inRuleBase = "rules/sampleRule.txt";
                Model model = ModelFactory.createDefaultModel();
FileInputStream fis = new FileInputStream(rdfPath);
model.read(fis,"ticket");
Reasoner reasoner = new GenericRuleReasoner( Rule.rulesFromURL(inRuleBase));
InfModel infModel = ModelFactory.createInfModel( reasoner, model );
StmtIterator si = infModel.listStatements();
while ( si.hasNext() )
{
Statement stmt = si.nextStatement();
Resource subject = stmt.getSubject();
Property predicate = stmt.getPredicate();
RDFNode object = stmt.getObject();
System.out.println(subject.toString() + " " + predicate.toString() + " " +
object.toString());
}

*RDF File** (sample.rdf)*

        <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:aa="
http://www.abcd.org/ofdf#" xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdfs="
http://www.w3.org/2000/01/rdf-schema#">
<owl:Class rdf:about="http://www.abcd.org/ofdf#folder">
</owl:Class>
<owl:Class rdf:about="http://www.abcd.org/ofdf#file">
</owl:Class>
<rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/001">
<aa:createdBy>MisterX</aa:createdBy>
<rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
<aa:processedIn>http://www.abcd.org/ofdf#folder/001</aa:processedIn>
<rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.abcd.org/ofdf#folder/002">
<aa:createdBy>MisterY</aa:createdBy>
<rdf:type rdf:resource="http://www.abcd.org/ofdf#folder"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.abcd.org/ofdf#file/AAA">
<aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
<rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.abcd.org/ofdf#file/BBB">
<aa:processedIn>http://www.abcd.org/ofdf#folder/002</aa:processedIn>
<rdf:type rdf:resource="http://www.abcd.org/ofdf#file"/>
</rdf:Description>
</rdf:RDF>


*Rule** (**sampleRule.txt)*

@prefix aa: <http://www.abcd.org/ofdf#>.

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.

@prefix owl: <http://www.w3.org/2002/07/owl#>.

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.

@prefix owl: <http://www.w3.org/2002/07/owl#>.


[ruleX:

(?file1 aa:processedIn ?fld1)

(?file1 aa:processedIn ?fld2)

notEqual(?fld1, ?fld2)

(?fld1 aa:createdBy ?auth1)

(?fld2 aa:createdBy ?auth2)

notEqual(?auth1, ?auth2)

->

(?file1 rdf:type aa:fileRequiringConflictCheck)

]

[ruleY:
(?file1 aa:processedIn ?fld1)
(?file1 aa:processedIn ?fld2)
notEqual(?fld1, ?fld2)
->
(?file1 rdf:type aa:fileInManyFolders)
]


RuleY is properly recognized and I can see the following statement added to
the Inference model:
*http://www.abcd.org/ofdf#file/AAA <http://www.abcd.org/ofdf#file/AAA>
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
http://www.abcd.org/ofdf#fileInManyFolders
<http://www.abcd.org/ofdf#fileInManyFolders>*

Nothing however for ruleX and this is what I struggle with. Thanks in
advance for the help.

On Sun, Aug 21, 2016 at 3:44 PM, Dave Reynolds <da...@gmail.com>
wrote:

> On 21/08/16 12:37, lookman sanni wrote:
>
>> Hi all,
>>
>> I am struggling with the definition of jena rules. I have an RDF file
>> where
>> I am defining:
>>
>>    - a "folder" class with a property "createdBy"
>>    - a "file" class with a property "processedIn" of type "folder"
>>
>> My RDF file contains resources from the two classes. I am trying to define
>> a Jena rule for querying files appearing in more than a folder, having
>> different authors.
>>
>> To that end, I added to my RDF the specification of a class
>> "fileRequiringConflictCheck" a subclass of the class "file" and then
>> specified the following jena rule:
>>
>> [ruleX:
>> (?file1 aa:processedIn ?fld2)
>> (?file1 aa:processedIn ?fld1)
>> notEqual(?fld1, ?fld2)
>> (?fld1 aa:createdBy ?auth1)
>> (?fld2 aa:createdBy ?auth2)
>> notEqual(?auth1, ?auth2)
>> ->
>> (?file1 rdf:type aa:fileRequiringConflictCheck)
>> ]
>>
>> Outcome is that the rule is likely never met whenever expected as per my
>> sample dataset. Any idea what I might be missing ?
>>
>
> Looks reasonable, check your namespaces are correct. If you can't get it
> working then post a minimal example of the data and someone might be able
> to spot the problem.
>
> Dave
>
>


-- 
Best Regards

Lookman SANNI

Re: Jena Rules Definition

Posted by Dave Reynolds <da...@gmail.com>.
On 21/08/16 12:37, lookman sanni wrote:
> Hi all,
>
> I am struggling with the definition of jena rules. I have an RDF file where
> I am defining:
>
>    - a "folder" class with a property "createdBy"
>    - a "file" class with a property "processedIn" of type "folder"
>
> My RDF file contains resources from the two classes. I am trying to define
> a Jena rule for querying files appearing in more than a folder, having
> different authors.
>
> To that end, I added to my RDF the specification of a class
> "fileRequiringConflictCheck" a subclass of the class "file" and then
> specified the following jena rule:
>
> [ruleX:
> (?file1 aa:processedIn ?fld2)
> (?file1 aa:processedIn ?fld1)
> notEqual(?fld1, ?fld2)
> (?fld1 aa:createdBy ?auth1)
> (?fld2 aa:createdBy ?auth2)
> notEqual(?auth1, ?auth2)
> ->
> (?file1 rdf:type aa:fileRequiringConflictCheck)
> ]
>
> Outcome is that the rule is likely never met whenever expected as per my
> sample dataset. Any idea what I might be missing ?

Looks reasonable, check your namespaces are correct. If you can't get it 
working then post a minimal example of the data and someone might be 
able to spot the problem.

Dave