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