On 09/09/14 08:19, huang huiliang wrote:
All codes involved have been listed in my original post. It seems that I
just used the default . And individual model has nothing else.
I don't know what's wrong.

OK if you don't need inference then use:

OntModel individuals = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);

That will make this go away.

If you do need inference then use OWL_MEM_MINI_RULE_INF.

What seems to be happening is that the default for OntModels is to specify RDFS reasoning. In RDFS then everything is an rdfs:Resource and every class is a subclass of rdfs:Resource so what it is saying is not wrong. The RDFS reasoner doesn't know about owl:Class but does know about rdfs:domain so as soon as you make the domain statement the reasoner works out a bunch of stuff about class2 but not quite enough to know that class1 is also a subClass of rdfs:Resource (and so remove rdfs:Resource from the direct superclasses).

Dave

-----邮件原件-----
发件人: Dave Reynolds [mailto:[email protected]]
发送时间: 2014年9月9日 15:12
收件人: [email protected]
主题: Re: 答复: why does the addDomain method affect the domain's
SuperClass?

Don't know.

What reasoner configuration are you using?

Is there any other data in the "individuals" model?

Dave

On 09/09/14 08:07, huang huiliang wrote:
Thank you for your suggestion ,Dave. I modify my code as you said.
Before p.addDomain(class2) ,the class2's SupClass is :
http://www.xxx.org.cn/standards/publishing/ontology/cores/class1.
But after p.addDomain(class2) execute ,class2's has two SupClasses.
http://www.w3.org/2000/01/rdf-schema#Resource is added to class2's
SupClasses.
Now the question is : why would addDomain(class2) add rdfs:Resouce to
class2's SupClasses.
Thanks for your attention.
-----邮件原件-----
发件人: Dave Reynolds [mailto:[email protected]]
发送时间: 2014年9月9日 14:51
收件人: [email protected]
主题: Re: why does the addDomain method affect the domain's SuperClass?

On 09/09/14 07:40, huang huiliang wrote:
I'm creating an ontology from excel files and I have some problems to
make my program work.

The first problem I encounter is that I can't get the right
superclass .The simplest code example is below.

Code begin:

OntModel individuals = ModelFactory.createOntologyModel();

         TreeMap<String, String> namespaces=new
TreeMap<String,String>();

         namespaces.put("pubo",
"http://www.xxx.org.cn/standards/publishing/ontology/cores/";);

         individuals.setNsPrefixes(namespaces);

         OntClass
class1=individuals.createClass(namespaces.get("pubo")+"class1");

         class1.setLabel("class1", "en");

         OntClass
class2=individuals.createClass(namespaces.get("pubo")+"class2");

         class2.setLabel("class2", "en");

class2.setSuperClass(class1);

         System.out.println(class2.getSuperClass().getURI());

         DatatypeProperty p =
individuals.createDatatypeProperty(namespaces

               .get("pubo") + "haha");

         p.addDomain(class2);

         System.out.println(class2.getSuperClass().getURI());

Code end

The first output is:
<http://www.xxx.org.cn/standards/publishing/ontology/cores/class1>
http://www.xxx.org.cn/standards/publishing/ontology/cores/class1

The second output is : http://www.w3.org/2000/01/rdf-schema#Resource

I have no idea why the two output are different? Have I done
something wrong? Any suggestions?

Mostly likely possibility is that getSuperClass is simply picking a
different random value from the set of super classes (see the javadoc).
I don't know if getSuperClass is supposed to list only direct
superclasses but if you are getting rdfs:Resource then probably not.

Suggest using listSuperClasses(true) to find out what's going on.

Dave



Reply via email to