You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Ashwani Rathi <as...@oracle.com> on 2020/08/03 12:55:59 UTC

Re: Jena 2 to Jena 3 upgrade -> Issue in createOntologyModel method

Hi Andy,
I tried removing 'file:', but that didn't work. 
I also tried adding a http:// but that didn't work either.

I can't use an absolute path as the imported owl file is contained in other jar file.
I found something like org.apache.jena.util.FileManager.addLocatorZip(String zfn) .. But didn't get any examples on how can we use a Zip locator to load an owl file from another jar.

Can you please help on how can we add a Zip Locator to load owl from a jar file? Or some other pointer that might help to address this issue?

Regards,
Ashwani

    
    There is also use renaming - put a proper http:// above (or if you want 
    a file: with absolute path.  The relative file path is making things 
    complicated.
    
    https://urldefense.com/v3/__https://jena.apache.org/documentation/notes/stream-manager.html__;!!GqivPVa7Brio!P8xYoCIVAFctOvPeR-sdSBylcunyriAW29Zwuwh2l6H72p-2yTkkxADbPTP2XZsDQw$ 
    
    RDFParser gives detail control if you don't want a global setup for 
    StreamManager.

Regards,
Ashwani

On 31/07/20, 8:04 PM, "Andy Seaborne" <an...@apache.org> wrote:

    
    
    On 31/07/2020 14:22, Ashwani Rathi wrote:
    > Hi Andy,
    > I am able to find out the issue:
    > 
    > In my OWL file, I am importing another owl like:
    > <owl:imports rdf:resource="file:metamodel/businessArchitectureOntology.owl"/>
    > 
    > metamodel/businessArchitectureOntology.owl file is present in a jar file.
    > 
    > This import used to work with Jena 2, but with Jena 3, businessArchitectureOntology.owl is not getting loaded from the jar. I copied this owl at a local location and updated the path and then it started working in Jena 3 as well.
    > So can you please let me know, how can I specify owl:imports in Jena 3 to load a owl file from a jar that is present in classpath?
    
    Probably - don't put "file:" on the front but relative URI resolution is 
    going to make thinds difficult.
    
    There is also use renaming - put a proper http:// above (or if you want 
    a file: with absolute path.  The relative file path is making things 
    complicated.
    
    https://urldefense.com/v3/__https://jena.apache.org/documentation/notes/stream-manager.html__;!!GqivPVa7Brio!P8xYoCIVAFctOvPeR-sdSBylcunyriAW29Zwuwh2l6H72p-2yTkkxADbPTP2XZsDQw$ 
    
    RDFParser gives detail control if you don't want a global setup for 
    StreamManager.
    
         Andy
    
    > 
    > Regards,
    > Ashwani
    > 
    > 
    > On 31/07/20, 1:13 PM, "Andy Seaborne" <an...@apache.org> wrote:
    > 
    >      
    >      
    >      On 30/07/2020 15:42, Ashwani Rathi wrote:
    >      > Hi,
    >      > We are upgrading Jena from version 2.8.8
    >      
    >      I think you mean ARQ-2.8.8 (2011-04-21), which is a pre-Apache release.
    >      It uses jena 2.6.4 (2010-12-10) - sourceforge releases.
    >      License differences obviously.
    >      
    >      I don't believe there was a Jena 2.8.8, at least not an official one.
    >      
    >      At Apache, Jena releases start 2.7, or 2.9 for ARQ, then jump to 2.10
    >      (and that was 2013) to sync numbering.
    >      
    >      In summary - long time ago, big jump. Including RDF 1.0 to RDF 1.1
    >      (which affects string literals).
    >      
    >      > to the latest one available 3.16.0
    >      > Now we have the following code to initialize OntModel from a .owl  input file
    >      >
    >      >      public static OntModel getOntModel()
    >      >              throws BusinessArchitectureException
    >      
    >      How can this throw BusinessArchitectureException? Is this the real code
    >      or an extract?
    >      
    >      >          {
    >      >              OntModel ontModel = null;
    >      >              OntModelSpec s = new OntModelSpec(OntModelSpec.OWL_MEM_MICRO_RULE_INF);
    >      >
    >      >              //FileManager fileMgr = FileManager.get(); // Used for Jena 2
    >      >              FileManager fileMgr = FileManagerImpl.get(); // Used for Jena 3
    >      >              try {
    >      >                  Model model = fileMgr.loadModel(REPORTS_EXTENSION_OWL_FILE_PATH);
    >      
    >      No need to use "impl" classes:
    >      
    >           Model model = RDFDataMgr.loadModel(REPORTS_EXTENSION_OWL_FILE_PATH);
    >      
    >      >                  ontModel = ModelFactory.createOntologyModel(s, model);
    >      >              }
    >      >              catch (Exception e) {
    >      >              	e.printStackTrace();
    >      >              }
    >      >              return ontModel;
    >      >          }
    >      >
    >      > This code when used in Jena 2 generated 235 OntClasses (ontModel.listClasses()), but with Jena 3 it created only 23 OntClasses. Difference is the classes like the following which are only generated while using Jena 2:
    >      >
    >      > OntClass ----------- 74a1eaff:173a0249c84:-7f26
    >      > OntClass ----------- 74a1eaff:173a0249c84:-7ffb
    >      
    >      which are blank nodes.
    >      
    >      So, Jena3 only shows named classes?
    >      Does the file have the same number of triples when parsed with Jena2 as
    >      with Jena3?
    >      
    >      Have you tried bisecting on jena versions to see where the change
    >      happened? jena 2.7 and 2.10 onwards are in maven central so it is a
    >      matter of changing versions in a pom.xml/build.gradle file
    >      
    >      > Because of these missing classes,  we are running in to issues.
    >      
    >      Which are?
    >      
    >      I ask because if it is because of a bug fix, then the application code
    >      might be doing something strange.
    >      
    >      > So just wanted to check why are these extra ont classes not getting generated with Jena 3 when we are using the same input file.
    >      > Has something changed in the api implementation?
    >      
    >      That seems to be a question that is probably about the data.
    >      
    >      Maybe something changed but in almost 10 years and no data to see it is
    >      hard to know.
    >      
    >      > Do we need to use some other createOntologyModel api in Jena 3 or need to do it some other way?
    >      > Kindly respond
    >      >
    >      > Regards,
    >      > Ashwani
    >      
    >           Andy
    >      
    > 
    > 
    



Re: Jena 2 to Jena 3 upgrade -> Issue in createOntologyModel method

Posted by Andy Seaborne <an...@apache.org>.

On 03/08/2020 13:55, Ashwani Rathi wrote:
> Hi Andy,
> I tried removing 'file:', but that didn't work.
> I also tried adding a http:// but that didn't work either.

Have you checked what the java resource name is for 
"businessArchitectureOntology.owl"?

> I can't use an absolute path as the imported owl file is contained in other jar file.
> I found something like org.apache.jena.util.FileManager.addLocatorZip(String zfn) .. But didn't get any examples on how can we use a Zip locator to load an owl file from another jar.
> 
> Can you please help on how can we add a Zip Locator to load owl from a jar file? Or some other pointer that might help to address this issue?

The suggestion is have a URI for the "<owl:imports rdf:resource=" and a 
rename in a location mapper - see below.

Factors like whether there is a non-default OntDocumentManager will matter.

I'd suggest writing a small tests case to get things working. There are 
quite a few details here.

(Not sure why you want businessArchitectureOntology.owl in a jar - seems 
to make things complicated.)

This works:

---- owl.rdf
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
          xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
	 xmlns:owl="http://www.w3.org/2002/07/owl#"
    >

   <owl:Ontology>
     <owl:imports rdf:resource="http://ex/ont.owl"/>
   </owl:Ontology>

</rdf:RDF>


---- src/main/resources/data-ont.ttl
----   (so it is on the classpath as "data-ont.ttl")
PREFIX : <http://example/>

:DATA :PREDICATE 123456789 .



---- Code
public static void main(String...a) {
         OntModel example = 
ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);

	// Add a rename.
         example.getDocumentManager()
             .getFileManager()
             .getLocationMapper()
             .addAltEntry("http://ex/ont.owl", "data-ont.ttl");

         // Load
         example.read("owl.rdf");
	// Print
         example.writeAll(System.out, "TTL");
         System.out.println("DONE");
         System.exit(0);





> 
> Regards,
> Ashwani
> 
>      
>      There is also use renaming - put a proper http:// above (or if you want
>      a file: with absolute path.  The relative file path is making things
>      complicated.
>      
>      https://urldefense.com/v3/__https://jena.apache.org/documentation/notes/stream-manager.html__;!!GqivPVa7Brio!P8xYoCIVAFctOvPeR-sdSBylcunyriAW29Zwuwh2l6H72p-2yTkkxADbPTP2XZsDQw$
>      
>      RDFParser gives detail control if you don't want a global setup for
>      StreamManager.
> 
> Regards,
> Ashwani
> 
> On 31/07/20, 8:04 PM, "Andy Seaborne" <an...@apache.org> wrote:
> 
>      
>      
>      On 31/07/2020 14:22, Ashwani Rathi wrote:
>      > Hi Andy,
>      > I am able to find out the issue:
>      >
>      > In my OWL file, I am importing another owl like:
>      > <owl:imports rdf:resource="file:metamodel/businessArchitectureOntology.owl"/>
>      >
>      > metamodel/businessArchitectureOntology.owl file is present in a jar file.
>      >
>      > This import used to work with Jena 2, but with Jena 3, businessArchitectureOntology.owl is not getting loaded from the jar. I copied this owl at a local location and updated the path and then it started working in Jena 3 as well.
>      > So can you please let me know, how can I specify owl:imports in Jena 3 to load a owl file from a jar that is present in classpath?
>      
>      Probably - don't put "file:" on the front but relative URI resolution is
>      going to make thinds difficult.
>      
>      There is also use renaming - put a proper http:// above (or if you want
>      a file: with absolute path.  The relative file path is making things
>      complicated.
>      
>      https://urldefense.com/v3/__https://jena.apache.org/documentation/notes/stream-manager.html__;!!GqivPVa7Brio!P8xYoCIVAFctOvPeR-sdSBylcunyriAW29Zwuwh2l6H72p-2yTkkxADbPTP2XZsDQw$
>      
>      RDFParser gives detail control if you don't want a global setup for
>      StreamManager.
>      
>           Andy
>      
>      >
>      > Regards,
>      > Ashwani
>      >
>      >
>      > On 31/07/20, 1:13 PM, "Andy Seaborne" <an...@apache.org> wrote:
>      >
>      >
>      >
>      >      On 30/07/2020 15:42, Ashwani Rathi wrote:
>      >      > Hi,
>      >      > We are upgrading Jena from version 2.8.8
>      >
>      >      I think you mean ARQ-2.8.8 (2011-04-21), which is a pre-Apache release.
>      >      It uses jena 2.6.4 (2010-12-10) - sourceforge releases.
>      >      License differences obviously.
>      >
>      >      I don't believe there was a Jena 2.8.8, at least not an official one.
>      >
>      >      At Apache, Jena releases start 2.7, or 2.9 for ARQ, then jump to 2.10
>      >      (and that was 2013) to sync numbering.
>      >
>      >      In summary - long time ago, big jump. Including RDF 1.0 to RDF 1.1
>      >      (which affects string literals).
>      >
>      >      > to the latest one available 3.16.0
>      >      > Now we have the following code to initialize OntModel from a .owl  input file
>      >      >
>      >      >      public static OntModel getOntModel()
>      >      >              throws BusinessArchitectureException
>      >
>      >      How can this throw BusinessArchitectureException? Is this the real code
>      >      or an extract?
>      >
>      >      >          {
>      >      >              OntModel ontModel = null;
>      >      >              OntModelSpec s = new OntModelSpec(OntModelSpec.OWL_MEM_MICRO_RULE_INF);
>      >      >
>      >      >              //FileManager fileMgr = FileManager.get(); // Used for Jena 2
>      >      >              FileManager fileMgr = FileManagerImpl.get(); // Used for Jena 3
>      >      >              try {
>      >      >                  Model model = fileMgr.loadModel(REPORTS_EXTENSION_OWL_FILE_PATH);
>      >
>      >      No need to use "impl" classes:
>      >
>      >           Model model = RDFDataMgr.loadModel(REPORTS_EXTENSION_OWL_FILE_PATH);
>      >
>      >      >                  ontModel = ModelFactory.createOntologyModel(s, model);
>      >      >              }
>      >      >              catch (Exception e) {
>      >      >              	e.printStackTrace();
>      >      >              }
>      >      >              return ontModel;
>      >      >          }
>      >      >
>      >      > This code when used in Jena 2 generated 235 OntClasses (ontModel.listClasses()), but with Jena 3 it created only 23 OntClasses. Difference is the classes like the following which are only generated while using Jena 2:
>      >      >
>      >      > OntClass ----------- 74a1eaff:173a0249c84:-7f26
>      >      > OntClass ----------- 74a1eaff:173a0249c84:-7ffb
>      >
>      >      which are blank nodes.
>      >
>      >      So, Jena3 only shows named classes?
>      >      Does the file have the same number of triples when parsed with Jena2 as
>      >      with Jena3?
>      >
>      >      Have you tried bisecting on jena versions to see where the change
>      >      happened? jena 2.7 and 2.10 onwards are in maven central so it is a
>      >      matter of changing versions in a pom.xml/build.gradle file
>      >
>      >      > Because of these missing classes,  we are running in to issues.
>      >
>      >      Which are?
>      >
>      >      I ask because if it is because of a bug fix, then the application code
>      >      might be doing something strange.
>      >
>      >      > So just wanted to check why are these extra ont classes not getting generated with Jena 3 when we are using the same input file.
>      >      > Has something changed in the api implementation?
>      >
>      >      That seems to be a question that is probably about the data.
>      >
>      >      Maybe something changed but in almost 10 years and no data to see it is
>      >      hard to know.
>      >
>      >      > Do we need to use some other createOntologyModel api in Jena 3 or need to do it some other way?
>      >      > Kindly respond
>      >      >
>      >      > Regards,
>      >      > Ashwani
>      >
>      >           Andy
>      >
>      >
>      >
>      
> 
>