On 25/01/13 14:25, Tayfun Gökmen Halaç wrote:
Hi,

Nothing changes if the model creation is done by
ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_TRANS_INF) in my
example code.

What does "as(OntClass.class) part doesn't work" mean? If you get an
exception like com.hp.hpl.jena.ontology.ConversionException, your class
resources do not have a type assertion.

It means there's no type assertion on that class :)

By default OntModels work in strict mode, so to know that something can be treated as a class it is looking for a statement that it is of type owl:Class. If you have inference this may be inferred for you but in any case it is best practice to explicitly declare classes.

You can use ontmodel.setStrictMode(false) to disable this checking.

Dave


Best,
Tayfun


2013/1/25 Dave Reynolds <[email protected]>

You don't need to load your ontology twice. An OntModel is just a wrapper
round an underlying model so you can construct both a with-inference and a
without-inference OntModel over the same Model.

Dave


On 25/01/13 03:35, Emanuel Santos wrote:

Hi Tayfun,

Thank you so much!

That way only works if I choose a model without any class-hierarchy
inference. Of course.

When I'm working with a model with class-hierarchy inference (e.g.
OWL_MEM_TRANS_INF
ou a reasoner) can I still get the direct Disjointwith classes ?? I tried
it getting them using the baseModel but the "as(OntClass.class)" part
doesn't work. If there isn't any other way...I'm doomed to load 2x my
ontology... it is not good :) Any ideas ?

Thanks!

best,

Emanuel




On 24 January 2013 22:32, Tayfun Gökmen Halaç
<[email protected]>**wrote:

  Hi Emanuel,

Not with a direct method. You can obtain those sets with a modified
version
of previous solution.

// create the ontology...
OntModel model = ModelFactory.**createOntologyModel();
OntClass classA = model.createClass("http://bla.**bla/A<http://bla.bla/A>
");
OntClass classB = model.createClass("http://bla.**bla/B<http://bla.bla/B>
");
OntClass classC = model.createClass("http://bla.**bla/C<http://bla.bla/C>
");
OntClass classD = model.createClass("http://bla.**bla/D<http://bla.bla/D>
");

classA.addDisjointWith(classB)**;
classA.addDisjointWith(classC)**;

classC.addDisjointWith(classD)**;

// list disjoint sets...
ResIterator classesHasDisjoint = model
.listResourcesWithProperty(**OWL.disjointWith);
while (classesHasDisjoint.hasNext()) {
OntClass cls = classesHasDisjoint.next().as(**OntClass.class);
List<OntClass> disjointList = cls.listDisjointWith().toList(**);
disjointList.add(0, cls);
System.out.println(**disjointList);
}

Console output:
[http://bla.bla/A, http://bla.bla/C, http://bla.bla/B]
[http://bla.bla/C, http://bla.bla/D]

Best,
Tayfun


2013/1/24 Emanuel Santos <[email protected]>

  Hi,

Thanks for the reply!

Maybe I was not clear.

For instance, given these classes:

      <owl:Class rdf:about="http://bla#A!>
          <owl:disjointWith rdf:resource="http:/bla#B"/>
          <owl:disjointWith rdf:resource="http:/bla#C"/>
      </owl:Class>

      <owl:Class rdf:about="http://bla#C";>
          <owl:disjointWith rdf:resource="http:/bla#D"/>
      </owl:Class>

I want to obtain these sets : {A,B,C} and {C,D}.
Only the direct classes.

Thanks!






On 24 January 2013 14:03, Fabio Aiub Sperotto <[email protected]>
wrote:

  Hi Emanuel,

I don't know if I have a good solution for you (I'm not the best
programmer), but recently I made this: Search for all classes of

ontology.

For each class X, return the set of classes that is disjoint with X:

          model.read(new InputStreamReader(in), ""); //read the ontology

          Iterator classes = model.listClasses(); //list all classes in
ontology
          while (classes.hasNext()){
              OntClass ontologyClass = (OntClass) classes.next(); //get

one

class

              //get list of disjoint classes from ontologyClass
              Iterator disjointClasses =

ontologyClass.**listDisjointWith();


              while(disjointClasses.hasNext(**)){
              System.out.print("Class "+ontologyClass.getLocalName()**+"
is
disjoint with: ");
              System.out.println(**disjointClasses.next());
              }
              System.out.println("");

          }

This will help? My some mistake?


2013/1/24 Emanuel Santos <[email protected]>

  Hi,

I just started using Jena.
Any easyway to get all set of classes "disjointWith" ?

Thanks




--
Fabio Aiub Sperotto
Mestrando em Modelagem Computacional
about.me/fabiosperotto
www.twitter.com/fabio_gk








Reply via email to