You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by hu...@aol.com on 2011/09/06 16:52:32 UTC

Multiple graphs / Subject / getProperty

 Hi,

I am using TDB and I have two ontologies, the NCI thesaurus and my own ontology (EC, created using Protege), both in RDF/XML format.Here is what I did so far:

- Imported both ontologies into the same TDB store, using different graphs (for this example http://nci.gov and http://ec.org)

 - I can issue SparQL queries without any problems (listing the subjects, predicates and objects; restricting searches etc.), also across graphs.

I am using a SparQl like this to get a certain subject:

SELECT ?s
FROM NAMED http://nci.gov
FROM NAMED http://ec.org

WHERE {
   GRAPH http://nci.gov {   ?s nci:Preferred_Name "Overall"^^xsd:string }
}

And my Jena code is: 

ResultSet rs = qe.execSelect();
        while(rs.hasNext()){
            QuerySolution qs = rs.next();
            Resource subject = qs.get("s").asResource();
            StmtIterator iter = subject.listProperties();
            System.out.println(iter.hasNext());
        }

The iterator.hasNext() call returns false and all other attempts to get a property (e.g. the preferred name property) return null.

Earlier in my project, I loaded both ontologies into the default graph and did not use named graphs and the approach used to work to get properties. Now listProperties() returns nothing even though a modified SparQl that returns any predicate along with the subject shows all expected properties and their URIs exactly like I am using them for getProperty() calls.

Does anybody know why listProperties returns null when the ontologies are loaded into two separate graphs, but it works if both are loaded into the default graph?

Thanks in advance for any help!

-Wolfgang



Re: Multiple graphs / Subject / getProperty

Posted by hu...@aol.com.
Hi Andy,


thanks for the reply.

The proposed queries work and used to work before too. I can get the information I want in a SparQL query for either all subjects, predicates and objects or with a certain predicate specified, also using "Overall" as a condition either in filter or as object.

I want to take a subject and translate it into a Java object. For that I used to get the subject via SparQL query, used the Resultset->QuerySolution->get(...).asResource() and then I used resource.getProperty(...) to access the known properties (e.g. code, preferred name etc.). 

Problem is that this does not work anymore ever since I loaded my ontologies into specific graphs rather than into the default graph. I can get the subject as a resource, but there are no properties accessible via listProperties() or getProperty(). 

I can make a SparQl query that will return all properties in separate variables and then extract those variables rather than using the getProperty() method. But I was just wondering why that used to work when both were in the default graph and why it does not work now. 

Here are the commands I used for the TDBloader:

bin/tdbloader --graph=http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl --loc ../OntStore ../NCI_Thesaurus/Thesaurus.owl
bin/tdbloader --graph=http://ec.org/ec.owl --loc ../OntStore ../Ec_Ontology.owl


Regards,
Wolfgang



On 06/09/11 15:52, hueyl16@aol.com wrote:
>
>   Hi,
>
> I am using TDB and I have two ontologies, the NCI thesaurus and my own 
ontology (EC, created using Protege), both in RDF/XML format.Here is what I did 
so far:
>
> - Imported both ontologies into the same TDB store, using different graphs 
(for this example http://nci.gov and http://ec.org)
>
>   - I can issue SparQL queries without any problems (listing the subjects, 
predicates and objects; restricting searches etc.), also across graphs.
>
> I am using a SparQl like this to get a certain subject:
>
> SELECT ?s
> FROM NAMED http://nci.gov
> FROM NAMED http://ec.org
>
> WHERE {
>     GRAPH http://nci.gov {   ?s nci:Preferred_Name "Overall"^^xsd:string }
> }
>
> And my Jena code is:
>
> ResultSet rs = qe.execSelect();
>          while(rs.hasNext()){
>              QuerySolution qs = rs.next();
>              Resource subject = qs.get("s").asResource();
>              StmtIterator iter = subject.listProperties();
>              System.out.println(iter.hasNext());
>          }
>
> The iterator.hasNext() call returns false and all other attempts to
get a property (e.g. the preferred name property) return null.
>
> Earlier in my project, I loaded both ontologies into the default
> graph
and did not use named graphs and the approach used to work to get
properties. Now listProperties() returns nothing even though a modified
SparQl that returns any predicate along with the subject shows all
expected properties and their URIs exactly like I am using them for
getProperty() calls.
>
> Does anybody know why listProperties returns null when the
> ontologies
are loaded into two separate graphs, but it works if both are loaded
into the default graph?
>
> Thanks in advance for any help!

Is the data

"Overall"^^xsd:string

or

"Overall"


They match differently in TDB (good news, the RDF Working Group is going 
to fix this).

Try

SELECT *
...
{ ?s nci:Preferred_Name ?x }

(you can use tdbquery)

and see what the output is.

Also:

{ ?s nci:Preferred_Name ?x . FILTER ( ?x = "Overall" ) }

does a value test, not an exact term test.

	Andy

 

Re: Multiple graphs / Subject / getProperty

Posted by Andy Seaborne <an...@epimorphics.com>.

On 06/09/11 15:52, hueyl16@aol.com wrote:
>
>   Hi,
>
> I am using TDB and I have two ontologies, the NCI thesaurus and my own ontology (EC, created using Protege), both in RDF/XML format.Here is what I did so far:
>
> - Imported both ontologies into the same TDB store, using different graphs (for this example http://nci.gov and http://ec.org)
>
>   - I can issue SparQL queries without any problems (listing the subjects, predicates and objects; restricting searches etc.), also across graphs.
>
> I am using a SparQl like this to get a certain subject:
>
> SELECT ?s
> FROM NAMED http://nci.gov
> FROM NAMED http://ec.org
>
> WHERE {
>     GRAPH http://nci.gov {   ?s nci:Preferred_Name "Overall"^^xsd:string }
> }
>
> And my Jena code is:
>
> ResultSet rs = qe.execSelect();
>          while(rs.hasNext()){
>              QuerySolution qs = rs.next();
>              Resource subject = qs.get("s").asResource();
>              StmtIterator iter = subject.listProperties();
>              System.out.println(iter.hasNext());
>          }
>
> The iterator.hasNext() call returns false and all other attempts to
get a property (e.g. the preferred name property) return null.
>
> Earlier in my project, I loaded both ontologies into the default
> graph
and did not use named graphs and the approach used to work to get
properties. Now listProperties() returns nothing even though a modified
SparQl that returns any predicate along with the subject shows all
expected properties and their URIs exactly like I am using them for
getProperty() calls.
>
> Does anybody know why listProperties returns null when the
> ontologies
are loaded into two separate graphs, but it works if both are loaded
into the default graph?
>
> Thanks in advance for any help!

Is the data

"Overall"^^xsd:string

or

"Overall"


They match differently in TDB (good news, the RDF Working Group is going 
to fix this).

Try

SELECT *
...
{ ?s nci:Preferred_Name ?x }

(you can use tdbquery)

and see what the output is.

Also:

{ ?s nci:Preferred_Name ?x . FILTER ( ?x = "Overall" ) }

does a value test, not an exact term test.

	Andy