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 <[email protected]> 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 <[email protected] >> > >> 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
