You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Dibyanshu Jaiswal <dj...@gmail.com> on 2014/12/17 11:49:09 UTC

Re: Unable to Query statemets for imported Ontologies.

I would like to Load the import closure as a single tdb graph (i.e choice
1), but how can we do that.. is there any function call ?? since my base
ontology has 2-3 import statement this seems to be the best choice.

On Wed, Jul 9, 2014 at 1:18 PM, Dave Reynolds <da...@gmail.com>
wrote:
>
> You haven't said anything about how you created the TDB models so it is
> pretty hard to diagnose.
>
> First off, do you need to use TDB here?  If you load your ontology into
> memory as an OntModel then the import processing will be done and your
> query would probably work. You should try that as a check.
>
> If you really do need to use TDB here then how are you trying to process
> the imports? You might be trying to:
>
> (1) Load the imports closure as a single TDB graph.
>
> (2) Load the ontology as one graph and load the imports as separate TDB
> graphs but access the whole as a single OntModel.
>
> (3) Load the ontology as one TDB graph, wrap an OntModel round it, but go
> and fetch the imported ontologies from the web when they are a needed.
>
> (1) is likely to be the best route. If this is what you are doing and it
> is not working then look at how you are doing the TDB loading. If you are
> doing it in your own program then ensure import processing has happened. If
> you are using TDB loader then make sure you are including in TDB loader all
> the imported ontologies.
>
> (2) Can be done but you need to set up an appropriate OntDocumentManager
> and associated ModelMaker to help the OntModel find the right graphs in
> TDB. Someone else would have to help with the details of that if this the
> route your are taking.
>
> (3) For this and (2) the other thing that might go wrong is that the
> import processing isn't being triggered. The OntModels normally do import
> processing at read() time. With a TDB-model then there is no read so you
> will need to call loadImports(). Do have this call?
>
> Finally for all of these cases the import processing might fail because
> one or more of the imports is not accessible - whether due to server
> problems or firewall problems. You should see error messages in that case.
>
> Dave
>
>
>
>
> On 09/07/14 07:25, Dibyanshu Jaiswal wrote:
>
>> Friends!! I am really facing this problem. Any help or suggestion will be
>> greatly appreciated.
>>
>>
>>
>> On Wed, Jun 25, 2014 at 3:58 PM, Dibyanshu Jaiswal <dj...@gmail.com>
>> wrote:
>>
>>
>>> Hi all!
>>> I am using Jena 2.11.
>>>
>>> I have an ontology setup, in a form of OntModel and backed by jena TDB.
>>> The ontology consists of a base owl file which import 4 other owl files.
>>> Out of these 2 owl files further import other owl files.
>>>
>>>
>>> I am unable to get results using a sparql query using jena ARQ engine,
>>> where by exactly the same query when executed in Protege 4.3 returns
>>> appropriate results.
>>>
>>> Query being:
>>>
>>>
>>> PREFIX un: <http://purl.oclc.org/NET/ssnx/ssn#>
>>> PREFIX : <http://www.semanticweb.org/ontologies/2013/9/My_BASE_OWL.owl#>
>>> PREFIX geo: <http://www.opengis.net/ont/geosparql#>
>>> PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
>>> PREFIX sf: <http://www.opengis.net/ont/sf#>
>>> PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
>>> PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
>>> PREFIX gml: <http://www.opengis.net/ont/gml#>
>>> PREFIX j.0:<http://www.opengis.net/def/geosparql/#>
>>> PREFIX my:<http://example.org/ApplicationSchema#>
>>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>>> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
>>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>>> PREFIX uo: <http://purl.obolibrary.org/obo/uo#>
>>> PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
>>> PREFIX ucum: <http://purl.oclc.org/NET/muo/ucum/>
>>> PREFIX ucumpq: <http://purl.oclc.org/NET/muo/ucum/physical-quality/>
>>> PREFIX uomvocab: <http://purl.oclc.org/NET/muo/muo#>
>>>
>>> SELECT * WHERE {?UOM uomvocab:measuresQuality ucumpq:power}
>>>
>>>
>>>
>>> In my java programs, i fire the query using two methods.
>>> 1.
>>> public static String prefixTheQuery(String q){
>>>
>>>
>>>         q ="PREFIX un: <"+AppProperties.getImportedIRI()+">\n"+
>>>                  "PREFIX : <"+AppProperties.getBaseIRI()+">\n"+
>>>                   "PREFIX geo: <http://www.opengis.net/ont/geosparql#>\n"
>>> +
>>>                  "PREFIX geof: <
>>> http://www.opengis.net/def/function/geosparql/>\n" +
>>>                  "PREFIX sf: <http://www.opengis.net/ont/sf#>\n"+
>>>                  "PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>\n"+
>>>                  "PREFIX fn: <http://www.w3.org/2005/xpath-functions#
>>> >\n"+
>>>                  "PREFIX gml: <http://www.opengis.net/ont/gml#>\n"+
>>>                  "PREFIX j.0:<http://www.opengis.net/def/geosparql/#
>>> >\n"+
>>>                  "PREFIX my:<http://example.org/ApplicationSchema#>\n"+
>>>                  "PREFIX rdf: <http://www.w3.org/1999/02/22-
>>> rdf-syntax-ns#
>>>
>>>> \n"+
>>>>
>>>                  "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"+
>>>                  "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"+
>>>                  "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#
>>> >\n"+
>>>                  "PREFIX uo: <http://purl.obolibrary.org/obo/uo#>\n"+
>>>                  "PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>\n"+
>>>                  "PREFIX ucum: <http://purl.oclc.org/NET/muo/ucum/>\n"+
>>>                  "PREFIX ucumpq: <
>>> http://purl.oclc.org/NET/muo/ucum/physical-quality/>\n"+
>>>                  "PREFIX uomvocab: <http://purl.oclc.org/NET/muo/muo#
>>>
>>>> \n"+q;
>>>>
>>>
>>>          return q;
>>>      }
>>>
>>> which returns the actual query string prefixed with different prefixes
>>> being used in all the ontologies in use.
>>>
>>>
>>> 2.
>>>
>>> public static String sparqlQuery(String sparqlQueryString){
>>>
>>>          String r = null;
>>>          QueryExecution qexec = null;
>>>          Query query = null;
>>>          ResultSet results = null;
>>>          ModelGenerator.getDataset().begin(ReadWrite.READ); //returns
>>> dataset
>>>      try {
>>>      sparqlQueryString = prefixTheQuery(sparqlQueryString);
>>>      query = QueryFactory.create(sparqlQueryString) ;
>>>      qexec =
>>> QueryExecutionFactory.create(query,ModelGenerator.getDataset());
>>>      results = qexec.execSelect() ;
>>>
>>>
>>>           r = printResultsWithResultSetFormatter(results,
>>> OutputType.TEXT);
>>> // to format output w.r.t JSON, XML,TEXT
>>>
>>>       } catch(Exception e){
>>>          System.out.println("Exception Occured while in QueryExecution:
>>> " );
>>>          e.printStackTrace();
>>>       } finally {
>>>
>>>           qexec.close() ;
>>>           ModelGenerator.getDataset().end();
>>>       }
>>>
>>>
>>>      return r;
>>>      }
>>>
>>>
>>>
>>>
>>> Using this approach (have used this for a long time) I am unable to get
>>> the results as expected, instead i get a blank results.
>>>
>>> To me the problem is that I am unable to fetch triples which have been
>>> imported indirectly via some ontology directly imported in my base
>>> ontology, Which is not the case when Protege is used to do the same.
>>>
>>> Is it so that the ontologies imported indirectly into the base model,
>>> doest not imports the all the statements of it?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *Dibyanshu Jaiswal*
>>> Mb: +91 9038304989
>>>
>>>
>>>
>>>
>>
>>
>

-- 
*Dibyanshu Jaiswal*
Mb: +91 9038304989

Re: Unable to Query statemets for imported Ontologies.

Posted by Dibyanshu Jaiswal <dj...@gmail.com>.
My code for Loading the TDB is as follows:

Dataset dataset = TDBFactory.createDataset("./TempWorkSpace/Datasets/");
Model model = dataset.getDefaultModel();

dataset.begin(ReadWrite.WRITE);
    try{
    ontModel = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM,
model );
    FileManager.get().readModel( ontModel,"./sourceOwl1.owl");
    FileManager.get().readModel( ontModel,"./sourceOwl2.owl");
    registerListener();
    dataset.commit();
    } catch (Exception e){
    System.out.println("Error in Loading model from source!!");
    e.printStackTrace();
    } finally {

    dataset.end();
    }



Here my source owls itself contains import statements which i would like to
have them in the dataset as well along with the ontModel.

On Wed, Dec 17, 2014 at 4:19 PM, Dibyanshu Jaiswal <dj...@gmail.com>
wrote:
>
> I would like to Load the import closure as a single tdb graph (i.e choice
> 1), but how can we do that.. is there any function call ?? since my base
> ontology has 2-3 import statement this seems to be the best choice.
>
> On Wed, Jul 9, 2014 at 1:18 PM, Dave Reynolds <da...@gmail.com>
> wrote:
>>
>> You haven't said anything about how you created the TDB models so it is
>> pretty hard to diagnose.
>>
>> First off, do you need to use TDB here?  If you load your ontology into
>> memory as an OntModel then the import processing will be done and your
>> query would probably work. You should try that as a check.
>>
>> If you really do need to use TDB here then how are you trying to process
>> the imports? You might be trying to:
>>
>> (1) Load the imports closure as a single TDB graph.
>>
>> (2) Load the ontology as one graph and load the imports as separate TDB
>> graphs but access the whole as a single OntModel.
>>
>> (3) Load the ontology as one TDB graph, wrap an OntModel round it, but go
>> and fetch the imported ontologies from the web when they are a needed.
>>
>> (1) is likely to be the best route. If this is what you are doing and it
>> is not working then look at how you are doing the TDB loading. If you are
>> doing it in your own program then ensure import processing has happened. If
>> you are using TDB loader then make sure you are including in TDB loader all
>> the imported ontologies.
>>
>> (2) Can be done but you need to set up an appropriate OntDocumentManager
>> and associated ModelMaker to help the OntModel find the right graphs in
>> TDB. Someone else would have to help with the details of that if this the
>> route your are taking.
>>
>> (3) For this and (2) the other thing that might go wrong is that the
>> import processing isn't being triggered. The OntModels normally do import
>> processing at read() time. With a TDB-model then there is no read so you
>> will need to call loadImports(). Do have this call?
>>
>> Finally for all of these cases the import processing might fail because
>> one or more of the imports is not accessible - whether due to server
>> problems or firewall problems. You should see error messages in that case.
>>
>> Dave
>>
>>
>>
>>
>> On 09/07/14 07:25, Dibyanshu Jaiswal wrote:
>>
>>> Friends!! I am really facing this problem. Any help or suggestion will be
>>> greatly appreciated.
>>>
>>>
>>>
>>> On Wed, Jun 25, 2014 at 3:58 PM, Dibyanshu Jaiswal <djthequest@gmail.com
>>> >
>>> wrote:
>>>
>>>
>>>> Hi all!
>>>> I am using Jena 2.11.
>>>>
>>>> I have an ontology setup, in a form of OntModel and backed by jena TDB.
>>>> The ontology consists of a base owl file which import 4 other owl files.
>>>> Out of these 2 owl files further import other owl files.
>>>>
>>>>
>>>> I am unable to get results using a sparql query using jena ARQ engine,
>>>> where by exactly the same query when executed in Protege 4.3 returns
>>>> appropriate results.
>>>>
>>>> Query being:
>>>>
>>>>
>>>> PREFIX un: <http://purl.oclc.org/NET/ssnx/ssn#>
>>>> PREFIX : <http://www.semanticweb.org/ontologies/2013/9/My_BASE_OWL.owl#
>>>> >
>>>> PREFIX geo: <http://www.opengis.net/ont/geosparql#>
>>>> PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
>>>> PREFIX sf: <http://www.opengis.net/ont/sf#>
>>>> PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
>>>> PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
>>>> PREFIX gml: <http://www.opengis.net/ont/gml#>
>>>> PREFIX j.0:<http://www.opengis.net/def/geosparql/#>
>>>> PREFIX my:<http://example.org/ApplicationSchema#>
>>>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>>>> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
>>>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>>>> PREFIX uo: <http://purl.obolibrary.org/obo/uo#>
>>>> PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
>>>> PREFIX ucum: <http://purl.oclc.org/NET/muo/ucum/>
>>>> PREFIX ucumpq: <http://purl.oclc.org/NET/muo/ucum/physical-quality/>
>>>> PREFIX uomvocab: <http://purl.oclc.org/NET/muo/muo#>
>>>>
>>>> SELECT * WHERE {?UOM uomvocab:measuresQuality ucumpq:power}
>>>>
>>>>
>>>>
>>>> In my java programs, i fire the query using two methods.
>>>> 1.
>>>> public static String prefixTheQuery(String q){
>>>>
>>>>
>>>>         q ="PREFIX un: <"+AppProperties.getImportedIRI()+">\n"+
>>>>                  "PREFIX : <"+AppProperties.getBaseIRI()+">\n"+
>>>>                   "PREFIX geo: <http://www.opengis.net/ont/geosparql#>\n"
>>>> +
>>>>                  "PREFIX geof: <
>>>> http://www.opengis.net/def/function/geosparql/>\n" +
>>>>                  "PREFIX sf: <http://www.opengis.net/ont/sf#>\n"+
>>>>                  "PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#
>>>> >\n"+
>>>>                  "PREFIX fn: <http://www.w3.org/2005/xpath-functions#
>>>> >\n"+
>>>>                  "PREFIX gml: <http://www.opengis.net/ont/gml#>\n"+
>>>>                  "PREFIX j.0:<http://www.opengis.net/def/geosparql/#
>>>> >\n"+
>>>>                  "PREFIX my:<http://example.org/ApplicationSchema#>\n"+
>>>>                  "PREFIX rdf: <http://www.w3.org/1999/02/22-
>>>> rdf-syntax-ns#
>>>>
>>>>> \n"+
>>>>>
>>>>                  "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"+
>>>>                  "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"+
>>>>                  "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#
>>>> >\n"+
>>>>                  "PREFIX uo: <http://purl.obolibrary.org/obo/uo#>\n"+
>>>>                  "PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>\n"+
>>>>                  "PREFIX ucum: <http://purl.oclc.org/NET/muo/ucum/>\n"+
>>>>                  "PREFIX ucumpq: <
>>>> http://purl.oclc.org/NET/muo/ucum/physical-quality/>\n"+
>>>>                  "PREFIX uomvocab: <http://purl.oclc.org/NET/muo/muo#
>>>>
>>>>> \n"+q;
>>>>>
>>>>
>>>>          return q;
>>>>      }
>>>>
>>>> which returns the actual query string prefixed with different prefixes
>>>> being used in all the ontologies in use.
>>>>
>>>>
>>>> 2.
>>>>
>>>> public static String sparqlQuery(String sparqlQueryString){
>>>>
>>>>          String r = null;
>>>>          QueryExecution qexec = null;
>>>>          Query query = null;
>>>>          ResultSet results = null;
>>>>          ModelGenerator.getDataset().begin(ReadWrite.READ); //returns
>>>> dataset
>>>>      try {
>>>>      sparqlQueryString = prefixTheQuery(sparqlQueryString);
>>>>      query = QueryFactory.create(sparqlQueryString) ;
>>>>      qexec =
>>>> QueryExecutionFactory.create(query,ModelGenerator.getDataset());
>>>>      results = qexec.execSelect() ;
>>>>
>>>>
>>>>           r = printResultsWithResultSetFormatter(results,
>>>> OutputType.TEXT);
>>>> // to format output w.r.t JSON, XML,TEXT
>>>>
>>>>       } catch(Exception e){
>>>>          System.out.println("Exception Occured while in QueryExecution:
>>>> " );
>>>>          e.printStackTrace();
>>>>       } finally {
>>>>
>>>>           qexec.close() ;
>>>>           ModelGenerator.getDataset().end();
>>>>       }
>>>>
>>>>
>>>>      return r;
>>>>      }
>>>>
>>>>
>>>>
>>>>
>>>> Using this approach (have used this for a long time) I am unable to get
>>>> the results as expected, instead i get a blank results.
>>>>
>>>> To me the problem is that I am unable to fetch triples which have been
>>>> imported indirectly via some ontology directly imported in my base
>>>> ontology, Which is not the case when Protege is used to do the same.
>>>>
>>>> Is it so that the ontologies imported indirectly into the base model,
>>>> doest not imports the all the statements of it?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *Dibyanshu Jaiswal*
>>>> Mb: +91 9038304989
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>
> --
> *Dibyanshu Jaiswal*
> Mb: +91 9038304989
>
>
>

-- 
*Dibyanshu Jaiswal*
Mb: +91 9038304989