I don't follow what you are trying to achieve but it sounds like at
least part of it is to be able to state that the domain or range of a
property is a union of classes, rather than a single class. At least
that's what your OWL API example seems to do.
This is perfectly possible in Jena. For example:
UnionClass range = ont.createUnionClass(null, ont.createList());
range.addOperand(animalClass);
range.addOperand(personClass);
children.addRange(range);
There are various ways to construct the RDFList for the union class, the
above is just one example.
If you want to later add more to the range then just do so:
range.addOperand(plantClass);
Dave
On 04/03/13 10:25, Bojan Milić wrote:
Dear friends,
I am developing ontology for supply chain management and I am
encountering some problems regarding Jena API. In my ontology I have
following structure:
classA
classA1
classA2
classA3
classA4
classB
classC
classD
Classes are representing some documents for example (classA = planning
doc, classB = execution doc, etc.). Now I would like to connect
(relationship) these classes with same ObjectProperty. In Jena
Ontology API it sais: In an ontology, a property denotes the name of a
relationship between resources, or between a resource and a data
value. I followed jena api and did the relationship like this
(OntologyPrintscreen.jpg in attachment):
//let's start some JENA code -- simple default RDF model
String baseURI = InitInfo.getInstance().getDefaultBaseURI();
//create ontology model
OntModel processModel =
ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_TRANS_INF);
//createResource
Resource r = processModel.createResource(baseURI + "r");
OntClass classA = processModel.createClass(baseURI + "classA");
OntClass classB = processModel.createClass(baseURI + "classB");
OntClass classC = processModel.createClass(baseURI + "classC");
OntClass classD = processModel.createClass(baseURI + "classD");
classA.addSubClass(processModel.createClass(baseURI +
"classA1"));
classA.addSubClass(processModel.createClass(baseURI +
"classA2"));
classA.addSubClass(processModel.createClass(baseURI +
"classA3"));
classA.addSubClass(processModel.createClass(baseURI +
"classA4"));
OntClass classA1 = processModel.getOntClass(baseURI +
"classA1");
OntClass classA2 = processModel.getOntClass(baseURI +
"classA2");
OntClass classA3 = processModel.getOntClass(baseURI +
"classA3");
OntClass classA4 = processModel.getOntClass(baseURI +
"classA4");
ObjectProperty uses =
processModel.createObjectProperty(baseURI + "uses");
ObjectProperty creates =
processModel.createObjectProperty(baseURI +
"creates");
creates.addDomain(classA1);
creates.addRange(classA2);
uses.addDomain(classA1);
uses.addRange(classB);
My problem: I would like to use same objectProperty (uses and creates)
to model relationship between my classes. For example:
classA1 uses classB
classA1 creates classA2
classA2 creates classA3
classA3 uses classD
classA4 creates classC
There is a desired look (what I would like to achieve) with jena api
(OntologyDesired.jpg). I've already tried:
creates.addDomain(classA2);
creates.addRange(classA3);
uses.addDomain(classA3);
uses.addRange(classD);
But statements get disregarded.
Can you please help me model relationships between these classes with
same ObjectProperty, is this even possible? With protege API you can
do this:
OWLObjectProperty childrenProperty =
owlModel.createOWLObjectProperty("children");
childrenProperty.addUnionRangeClass(personClass);
childrenProperty.addUnionRangeClass(animalClass);
Is something like that possible with Jena, I haven't found anything on
the web, so you are my final chance :)
Looking forward for your answer.
Thank you and my best regards,
Bojan Milic