Search code examples
javardfjenaobject-properties

I cannot access an object property


I'm using Java and Jena API. I have a class Marriage which have 3 Object Properties called "hasHusband", "Haswife" and "dateOfMarriage". The first two are associated with a class Person which has the datatypeproperties like hasFirstName, hasLastName, dateOfBirth....

I'd like to access the objects properties "Haswife" and "hasHusband" and then the wife's first name and the husband's first name.

Here is how that is represented in my rdf file:

(...)

  <j.0:FAMmariage rdf:about=http://www.fam.com/FAM#BrunoCatherine> 

  <j.0:FAMaDateMariage>25/07/2011</j.0:FAMaDateMariage>

   <j.0:FAMhasWife>
     <rdf:Description rdf:about="http://www.fam.com/FAM#Catherine20/03/1982">
       <j.0:FAMDateOfBirth>20/03/1980</j.0:FAMDateOfBirth>
       <j.0:FAMHasName>Gomez</j.0:FAMHasName>
       <j.0:FAMHasFirstName>Catherine</j.0:FAMHasFirstName>
    </rdf:Description>
  </j.0:FAMHasWife>

   <j.0:FAMHusband>
     <rdf:Description rdf:about="http://www.fam.com/FAM# Bruno15/06/1980 ">
       <j.0:FAMaDateOfBirth>15/06/1980 </j.0:FAMDateOfBirth>
       <j.0:FAMHasName>Jeandet </j.0:FAMHasName>
       <j.0:FAMHasFirstName>Bruno</j.0:FAMHasFirstName>
     </rdf:Description>
   </j.0:FAMHusband>

 </j.0:FAMmariage>
(...)

I tried like this but it still does not works:

StmtIterator iter = onto.model.listStatements();  
    while (iter.hasNext()) {
        Statement stmt = iter.nextStatement();  
        Resource  subject = stmt.getSubject();     
        Property  predicate = stmt.getPredicate();   
        RDFNode   object = stmt.getObject();
        if (predicate.equals(onto.hasWife))
        {       
           System.out.print(" " + object.toString() + " ");
        }
  }

Can you please tell me what's wrong?

Thanks

EDITED

More useful details:

(...)

person = model.createClass(uriBase+"person");
person.addSubClass(man);
person.addSubClass(woman);
marriage = model.createClass(uriBase+"marriage");

(...)

hasHusband = model.createObjectProperty(uriBase+"hasHusband");
hasHusband.setDomain(marriage);
hasHusband.setRange(man);

hasWife = model.createObjectProperty(uriBase+"hasWife");
hasWife.setDomain(marriage);
hasWife.setRange(woman);

hasFirstName = model.createDatatypeProperty(uriBase+"hasFirstName"); 
hasFirstName.setDomain(person);
hasFirstName.setRange(XSD.xstring);

(...)


Solution

  • does that work ?

    ont.hasWife=model.createProperty("your namespace URI here","FAMhasWife");
    
    StmtIterator iter = onto.model.listStatements(null,onto.hasWife,(RDFNode)null);  
        while (iter.hasNext()) {
            Statement stmt = iter.nextStatement();  
    
               System.out.print(stmt.getObject().toString());
      }