You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by "r. r." <ro...@abv.bg> on 2018/04/13 09:21:47 UTC

Jena doesn't use LocationMapper on owl-imports

Hello!
I have a ttl file with owl-imports clause like



@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> 

<http://test/data.ttl>
  a       owl:Ontology ;
  owl:imports <file:///Users/tht/workspace/jenatest/test_course.ttl> ;
  owl:versionInfo "tht testing owl:imports"^^xsd:string .




When test_course.ttl file exists, FileManager.get().readModel loads 
the model, the other ttl is imported and sparql queries work fine. But 
if I remove the file and use 
FileManager.get().setLocationMapper().addAltEntry() to redirect to 
another existing file, the model is not what i expect and the sparql 
queries return no results.




So owl-imports works fine, but it seems like Jena is not using 
LocationMapper when importing? or could it be my mapping uris are 
incorrect? I'm using something like 





mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
"file:///Users/tht/workspace/jenatest/test_course.ttl.redirected")


Thanks for any hints!


    

Re: Jena doesn't use LocationMapper on owl-imports

Posted by "r. r." <ro...@abv.bg>.
Andy, thank you!
The hint that OntModel uses its own FileManager solved it for me. I have a custom mapper, so utilized it as model.getDocumentManager().getFileManager().setLocationMapper(mapper);

Also I see that if I had set up the global FileManager with my mapper, it could also have solved the problem, as the global FM seems to be used by the model by default 







 >-------- Оригинално писмо --------

 >От: Andy Seaborne andy@apache.org

 >Относно: Re: Jena doesn't use LocationMapper on owl-imports

 >До: users@jena.apache.org

 >Изпратено на: 14.04.2018 18:45



 
> The list does not accept attachments, however, I mocked something up.
 
> 
 
> The OntModel has it's own FileManager for imports in the DocumentManager
 
> 
 
> model.getDocumentManager().addAltEntry(...)
 
> 
 
> or get the FileManager for imports
 
> 
 
> model.getDocumentManager().getFileManager()
 
> 
 
> 
 
> ---
 
> 
 
> Note:
 
> 
 
> fileManager.readModel(model, "file://" + source, "TURTLE");
 
> 
 
> the model does not know it's being read into via the FileManager
 
> 
 
>      Andy
 
> 
 
> On 13/04/18 11:24, r. r. wrote:
 
> > Hi Andy
 
> > indeed I first posted the question to SO..
 
> > 
 
> > here's the code; it's using Jena 3.6.0. I'm attaching the base and imported .ttl files as well.
 
> > indeed the extension of the mapped file was invalid, but even changing it to .ttl didn't help.
 
> > note that the query in queryModel() does produce results when the import is not redirected
 
> > 
 
> > package com.jenatest;
 
> > 
 
> > import java.io.FileNotFoundException;
 
> > import org.apache.jena.query.Query;
 
> > import org.apache.jena.query.QueryExecution;
 
> > import org.apache.jena.query.QueryExecutionFactory;
 
> > import org.apache.jena.query.QueryFactory;
 
> > import org.apache.jena.query.QuerySolution;
 
> > import org.apache.jena.query.ResultSet;
 
> > import org.apache.jena.rdf.model.Model;
 
> > import org.apache.jena.rdf.model.ModelFactory;
 
> > import org.apache.jena.rdf.model.RDFNode;
 
> > import org.apache.jena.util.FileManager;
 
> > import org.apache.jena.util.LocationMapper;
 
> > 
 
> > public class App {
 
> > 
 
> >      public void queryModel(Model model) {
 
> >          Query sparql = QueryFactory.create("prefix ab: <http://learningsparql.com/ns/addressbook#>\n" +
 
> >                  "prefix d:  <http://learningsparql.com/ns/data#>\n" +
 
> >                  "\n" +
 
> >                  "select ?email ?courseTitle\n" +
 
> >                  " { \n" +
 
> >                  "    ?d ab:email ?email ;\n" +
 
> >                  "       ab:takingCourse ?course .\n" +
 
> >                  "    ?course ab:courseTitle ?courseTitle\n" +
 
> >                  "}");
 
> > 
 
> >      Query query = QueryFactory.create(sparql);
 
> >      QueryExecution qe = QueryExecutionFactory.create(query, model);
 
> >      ResultSet rs = qe.execSelect();
 
> >          while (rs.hasNext()) {
 
> >              QuerySolution qs = rs.next();
 
> >              RDFNode r = qs.get("email");
 
> >              System.out.println("email: " + r);
 
> >          }
 
> >      }
 
> > 
 
> >      public void complexLoad() throws FileNotFoundException {
 
> >          LocationMapper mapper = new LocationMapper();
 
> >          mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
 
> >              "file:///Users/tht/workspace/jenatest/test_course.redirected.ttl");
 
> > 
 
> >          Model model = ModelFactory.createOntologyModel();
 
> >          String source = "/Users/tht/workspace/jenatest/test_book.ttl";
 
> > 
 
> >          
 
> >          FileManager fileManager = new FileManager(mapper);
 
> >          fileManager.addLocatorFile();
 
> >          fileManager.readModel(model, "file://" + source, "TURTLE");
 
> > 
 
> >          queryModel(model);
 
> >      }
 
> > 
 
> >      public static void main(String[] args) {
 
> >          App app = new App();
 
> > 
 
> >          try {
 
> >              app.complexLoad();
 
> >          } catch (FileNotFoundException e) {
 
> >              // TODO Auto-generated catch block
 
> >              e.printStackTrace();
 
> >          }
 
> >      }
 
> > }
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> >   >-------- Оригинално писмо --------
 
> > 
 
> >   >От: Andy Seaborne andy@apache.org
 
> > 
 
> >   >Относно: Re: Jena doesn't use LocationMapper on owl-imports
 
> > 
 
> >   >До: users@jena.apache.org
 
> > 
 
> >   >Изпратено на: 13.04.2018 13:02
 
> > 
 
> > 
 
> > 
 
> >   
 
> >> same as yesterday's
 
> >   
 
> >>
 
> >   
 
> >> https://stackoverflow.com/questions/49801630/jena-doesnt-use-locationmapper-on-owl-imports
 
> >   
 
> >>
 
> >   
 
> >> Please provide a complete, minimal, debuggable example, and also say
 
> >   
 
> >> which version of Jena you are using.
 
> >   
 
> >>
 
> >   
 
> >>       Andy
 
> >   
 
> >>
 
> >   
 
> >> PS redirecting to a file with an extension that does not indicate the
 
> >   
 
> >> RDF syntax will not work.
 
> >   
 
> >>
 
> >   
 
> >> On 13/04/18 10:21, r. r. wrote:
 
> >   
 
> >>> Hello!
 
> >   
 
> >>> I have a ttl file with owl-imports clause like
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>> @prefix xsd:     <http://www.w3.org/2001/XMLSchema#>
 
> >   
 
> >>>
 
> >   
 
> >>> <http://test/data.ttl>
 
> >   
 
> >>>     a       owl:Ontology ;
 
> >   
 
> >>>     owl:imports <file:///Users/tht/workspace/jenatest/test_course.ttl> ;
 
> >   
 
> >>>     owl:versionInfo "tht testing owl:imports"^^xsd:string .
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>> When test_course.ttl file exists, FileManager.get().readModel loads
 
> >   
 
> >>> the model, the other ttl is imported and sparql queries work fine. But
 
> >   
 
> >>> if I remove the file and use
 
> >   
 
> >>> FileManager.get().setLocationMapper().addAltEntry() to redirect to
 
> >   
 
> >>> another existing file, the model is not what i expect and the sparql
 
> >   
 
> >>> queries return no results.
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>> So owl-imports works fine, but it seems like Jena is not using
 
> >   
 
> >>> LocationMapper when importing? or could it be my mapping uris are
 
> >   
 
> >>> incorrect? I'm using something like
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>> mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
 
> >   
 
> >>> "file:///Users/tht/workspace/jenatest/test_course.ttl.redirected")
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>> Thanks for any hints!
 
> >   
 
> >>>
 
> >   
 
> >>>
 
> >   
 
> >>>       
 
> >   

Re: Jena doesn't use LocationMapper on owl-imports

Posted by Andy Seaborne <an...@apache.org>.
The list does not accept attachments, however, I mocked something up.

The OntModel has it's own FileManager for imports in the DocumentManager

model.getDocumentManager().addAltEntry(...)

or get the FileManager for imports

model.getDocumentManager().getFileManager()


---

Note:

fileManager.readModel(model, "file://" + source, "TURTLE");

the model does not know it's being read into via the FileManager

     Andy

On 13/04/18 11:24, r. r. wrote:
> Hi Andy
> indeed I first posted the question to SO..
> 
> here's the code; it's using Jena 3.6.0. I'm attaching the base and imported .ttl files as well.
> indeed the extension of the mapped file was invalid, but even changing it to .ttl didn't help.
> note that the query in queryModel() does produce results when the import is not redirected
> 
> package com.jenatest;
> 
> import java.io.FileNotFoundException;
> import org.apache.jena.query.Query;
> import org.apache.jena.query.QueryExecution;
> import org.apache.jena.query.QueryExecutionFactory;
> import org.apache.jena.query.QueryFactory;
> import org.apache.jena.query.QuerySolution;
> import org.apache.jena.query.ResultSet;
> import org.apache.jena.rdf.model.Model;
> import org.apache.jena.rdf.model.ModelFactory;
> import org.apache.jena.rdf.model.RDFNode;
> import org.apache.jena.util.FileManager;
> import org.apache.jena.util.LocationMapper;
> 
> public class App {
> 
>      public void queryModel(Model model) {
>          Query sparql = QueryFactory.create("prefix ab: <http://learningsparql.com/ns/addressbook#>\n" +
>                  "prefix d:  <http://learningsparql.com/ns/data#>\n" +
>                  "\n" +
>                  "select ?email ?courseTitle\n" +
>                  " { \n" +
>                  "    ?d ab:email ?email ;\n" +
>                  "       ab:takingCourse ?course .\n" +
>                  "    ?course ab:courseTitle ?courseTitle\n" +
>                  "}");
> 
>      Query query = QueryFactory.create(sparql);
>      QueryExecution qe = QueryExecutionFactory.create(query, model);
>      ResultSet rs = qe.execSelect();
>          while (rs.hasNext()) {
>              QuerySolution qs = rs.next();
>              RDFNode r = qs.get("email");
>              System.out.println("email: " + r);
>          }
>      }
> 
>      public void complexLoad() throws FileNotFoundException {
>          LocationMapper mapper = new LocationMapper();
>          mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
>              "file:///Users/tht/workspace/jenatest/test_course.redirected.ttl");
> 
>          Model model = ModelFactory.createOntologyModel();
>          String source = "/Users/tht/workspace/jenatest/test_book.ttl";
> 
>          
>          FileManager fileManager = new FileManager(mapper);
>          fileManager.addLocatorFile();
>          fileManager.readModel(model, "file://" + source, "TURTLE");
> 
>          queryModel(model);
>      }
> 
>      public static void main(String[] args) {
>          App app = new App();
> 
>          try {
>              app.complexLoad();
>          } catch (FileNotFoundException e) {
>              // TODO Auto-generated catch block
>              e.printStackTrace();
>          }
>      }
> }
> 
> 
> 
> 
> 
> 
> 
> 
> 
>   >-------- Оригинално писмо --------
> 
>   >От: Andy Seaborne andy@apache.org
> 
>   >Относно: Re: Jena doesn't use LocationMapper on owl-imports
> 
>   >До: users@jena.apache.org
> 
>   >Изпратено на: 13.04.2018 13:02
> 
> 
> 
>   
>> same as yesterday's
>   
>>
>   
>> https://stackoverflow.com/questions/49801630/jena-doesnt-use-locationmapper-on-owl-imports
>   
>>
>   
>> Please provide a complete, minimal, debuggable example, and also say
>   
>> which version of Jena you are using.
>   
>>
>   
>>       Andy
>   
>>
>   
>> PS redirecting to a file with an extension that does not indicate the
>   
>> RDF syntax will not work.
>   
>>
>   
>> On 13/04/18 10:21, r. r. wrote:
>   
>>> Hello!
>   
>>> I have a ttl file with owl-imports clause like
>   
>>>
>   
>>>
>   
>>>
>   
>>> @prefix xsd:     <http://www.w3.org/2001/XMLSchema#>
>   
>>>
>   
>>> <http://test/data.ttl>
>   
>>>     a       owl:Ontology ;
>   
>>>     owl:imports <file:///Users/tht/workspace/jenatest/test_course.ttl> ;
>   
>>>     owl:versionInfo "tht testing owl:imports"^^xsd:string .
>   
>>>
>   
>>>
>   
>>>
>   
>>>
>   
>>> When test_course.ttl file exists, FileManager.get().readModel loads
>   
>>> the model, the other ttl is imported and sparql queries work fine. But
>   
>>> if I remove the file and use
>   
>>> FileManager.get().setLocationMapper().addAltEntry() to redirect to
>   
>>> another existing file, the model is not what i expect and the sparql
>   
>>> queries return no results.
>   
>>>
>   
>>>
>   
>>>
>   
>>>
>   
>>> So owl-imports works fine, but it seems like Jena is not using
>   
>>> LocationMapper when importing? or could it be my mapping uris are
>   
>>> incorrect? I'm using something like
>   
>>>
>   
>>>
>   
>>>
>   
>>>
>   
>>>
>   
>>> mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
>   
>>> "file:///Users/tht/workspace/jenatest/test_course.ttl.redirected")
>   
>>>
>   
>>>
>   
>>> Thanks for any hints!
>   
>>>
>   
>>>
>   
>>>       
>   

Re: Jena doesn't use LocationMapper on owl-imports

Posted by "r. r." <ro...@abv.bg>.
Hi Andy
indeed I first posted the question to SO..

here's the code; it's using Jena 3.6.0. I'm attaching the base and imported .ttl files as well.
indeed the extension of the mapped file was invalid, but even changing it to .ttl didn't help.
note that the query in queryModel() does produce results when the import is not redirected

package com.jenatest;

import java.io.FileNotFoundException;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.util.FileManager;
import org.apache.jena.util.LocationMapper;

public class App {

    public void queryModel(Model model) {
        Query sparql = QueryFactory.create("prefix ab: <http://learningsparql.com/ns/addressbook#>\n" + 
                "prefix d:  <http://learningsparql.com/ns/data#>\n" + 
                "\n" + 
                "select ?email ?courseTitle\n" + 
                " { \n" + 
                "    ?d ab:email ?email ;\n" + 
                "       ab:takingCourse ?course .\n" + 
                "    ?course ab:courseTitle ?courseTitle\n" + 
                "}");

    Query query = QueryFactory.create(sparql);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    ResultSet rs = qe.execSelect();
        while (rs.hasNext()) {
            QuerySolution qs = rs.next();
            RDFNode r = qs.get("email");
            System.out.println("email: " + r);
        }
    }

    public void complexLoad() throws FileNotFoundException {
        LocationMapper mapper = new LocationMapper();
        mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
            "file:///Users/tht/workspace/jenatest/test_course.redirected.ttl");

        Model model = ModelFactory.createOntologyModel();
        String source = "/Users/tht/workspace/jenatest/test_book.ttl";

        
        FileManager fileManager = new FileManager(mapper);
        fileManager.addLocatorFile();
        fileManager.readModel(model, "file://" + source, "TURTLE");

        queryModel(model);
    }

    public static void main(String[] args) {
        App app = new App();

        try {
            app.complexLoad();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}









 >-------- Оригинално писмо --------

 >От: Andy Seaborne andy@apache.org

 >Относно: Re: Jena doesn't use LocationMapper on owl-imports

 >До: users@jena.apache.org

 >Изпратено на: 13.04.2018 13:02



 
> same as yesterday's
 
> 
 
> https://stackoverflow.com/questions/49801630/jena-doesnt-use-locationmapper-on-owl-imports
 
> 
 
> Please provide a complete, minimal, debuggable example, and also say 
 
> which version of Jena you are using.
 
> 
 
>      Andy
 
> 
 
> PS redirecting to a file with an extension that does not indicate the 
 
> RDF syntax will not work.
 
> 
 
> On 13/04/18 10:21, r. r. wrote:
 
> > Hello!
 
> > I have a ttl file with owl-imports clause like
 
> > 
 
> > 
 
> > 
 
> > @prefix xsd:     <http://www.w3.org/2001/XMLSchema#>
 
> > 
 
> > <http://test/data.ttl>
 
> >    a       owl:Ontology ;
 
> >    owl:imports <file:///Users/tht/workspace/jenatest/test_course.ttl> ;
 
> >    owl:versionInfo "tht testing owl:imports"^^xsd:string .
 
> > 
 
> > 
 
> > 
 
> > 
 
> > When test_course.ttl file exists, FileManager.get().readModel loads
 
> > the model, the other ttl is imported and sparql queries work fine. But
 
> > if I remove the file and use
 
> > FileManager.get().setLocationMapper().addAltEntry() to redirect to
 
> > another existing file, the model is not what i expect and the sparql
 
> > queries return no results.
 
> > 
 
> > 
 
> > 
 
> > 
 
> > So owl-imports works fine, but it seems like Jena is not using
 
> > LocationMapper when importing? or could it be my mapping uris are
 
> > incorrect? I'm using something like
 
> > 
 
> > 
 
> > 
 
> > 
 
> > 
 
> > mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
 
> > "file:///Users/tht/workspace/jenatest/test_course.ttl.redirected")
 
> > 
 
> > 
 
> > Thanks for any hints!
 
> > 
 
> > 
 
> >      
 
> > 

Re: Jena doesn't use LocationMapper on owl-imports

Posted by Andy Seaborne <an...@apache.org>.
same as yesterday's

https://stackoverflow.com/questions/49801630/jena-doesnt-use-locationmapper-on-owl-imports

Please provide a complete, minimal, debuggable example, and also say 
which version of Jena you are using.

     Andy

PS redirecting to a file with an extension that does not indicate the 
RDF syntax will not work.

On 13/04/18 10:21, r. r. wrote:
> Hello!
> I have a ttl file with owl-imports clause like
> 
> 
> 
> @prefix xsd:     <http://www.w3.org/2001/XMLSchema#>
> 
> <http://test/data.ttl>
>    a       owl:Ontology ;
>    owl:imports <file:///Users/tht/workspace/jenatest/test_course.ttl> ;
>    owl:versionInfo "tht testing owl:imports"^^xsd:string .
> 
> 
> 
> 
> When test_course.ttl file exists, FileManager.get().readModel loads
> the model, the other ttl is imported and sparql queries work fine. But
> if I remove the file and use
> FileManager.get().setLocationMapper().addAltEntry() to redirect to
> another existing file, the model is not what i expect and the sparql
> queries return no results.
> 
> 
> 
> 
> So owl-imports works fine, but it seems like Jena is not using
> LocationMapper when importing? or could it be my mapping uris are
> incorrect? I'm using something like
> 
> 
> 
> 
> 
> mapper.addAltEntry("file:///Users/tht/workspace/jenatest/test_course.ttl",
> "file:///Users/tht/workspace/jenatest/test_course.ttl.redirected")
> 
> 
> Thanks for any hints!
> 
> 
>      
>