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


Reply via email to