@Dave: Yes, that's also what I understand:

He wants to get a qualified cardinality restriction on an object
property such that the restriction is of type owl:oneOf.

But as he already noticed, this is OWL 2, thus no convenience methods in
the ontology layer of Jena exists so far.


Cheers,

Lorenz


On 16.10.2016 20:09, Dave Reynolds wrote:
> On 15/10/16 22:32, Darko Androcec wrote:
>> My aim is to get the following enumerated restriction using Apache Jena:
>>
>>  <SubClassOf>
>>         <Class IRI="http://www.equixonline.com/Grainger#TestClass"/>
>>
>>         <ObjectMaxCardinality cardinality="1">
>>
>>             <ObjectProperty
>> IRI="http://www.equixonline.com/Grainger#TestObjectProperty"/>
>>
>>             <ObjectOneOf>
>>                 <NamedIndividual
>> IRI="http://www.equixonline.com/Grainger#male"/>
>>                 <NamedIndividual
>> IRI="http://www.equixonline.com/Grainger#female"/>
>>             </ObjectOneOf>
>>
>>         </ObjectMaxCardinality>
>>
>> </SubClassOf>
>
> That doesn't make sense as a piece of RDF/XML let alone a piece of OWL.
>
>> I tried different codes, but can't get the above restriction. If I use
>> the following code:
>>
>> OntClass newItemClass = model.createClass(baseURI + "TestClass");
>> ObjectProperty objectProperty = model.createObjectProperty(baseURI +
>> "TestObjectProperty");
>> MaxCardinalityRestriction restriction =
>> model.createMaxCardinalityRestriction(null, objectProperty, 1);
>>
>> newItemClass.addSuperClass(restriction);
>>
>> I get max cardinality restriction without enumeration:
>>
>>  <SubClassOf>
>>         <Class IRI="http://www.equixonline.com/Grainger#TestClass"/>
>>         <ObjectMaxCardinality cardinality="1">
>>             <ObjectProperty
>> IRI="http://www.equixonline.com/Grainger#TestObjectProperty"/>
>>         </ObjectMaxCardinality>
>>     </SubClassOf>
>
> You shouldn't, you should get:
>
> <owl:Class rdf:about="http://www.equixonline.com/Grainger#TestClass";>
>     <rdfs:subClassOf>
>       <owl:Restriction>
>         <owl:maxCardinality
> rdf:datatype="http://www.w3.org/2001/XMLSchema#int";
>         >1</owl:maxCardinality>
>         <owl:onProperty>
>           <owl:ObjectProperty
> rdf:about="http://www.equixonline.com/Grainger#TestObjectProperty"/>
>         </owl:onProperty>
>       </owl:Restriction>
>     </rdfs:subClassOf>
>   </owl:Class>
>
>> When I add the following code:
>>
>> Individual male = model.createIndividual(baseURI + "male", OWL.Thing);
>> Individual female = model.createIndividual(baseURI + "female",
>> OWL.Thing);
>> RDFList enums = model.createList();
>> enums = enums.cons(male);
>> enums = enums.cons(female);
>>
>> OntClass newItemClass = model.createClass(baseURI + "TestClass");
>> ObjectProperty objectProperty = model.createObjectProperty(baseURI +
>> "TestObjectProperty");
>> MaxCardinalityRestriction restriction =
>> model.createMaxCardinalityRestriction(null, objectProperty, 1);
>>
>> restriction.addProperty(OWL.oneOf, enums);
>>
>> newItemClass.addSuperClass(restriction);
>>
>> I only get enumeration, but max cardinality restriction is nowhere to
>> find:
>>
>> <SubClassOf>
>>         <Class IRI="http://www.equixonline.com/Grainger#TestClass"/>
>>         <ObjectOneOf>
>>             <NamedIndividual
>> IRI="http://www.equixonline.com/Grainger#male"/>
>>             <NamedIndividual
>> IRI="http://www.equixonline.com/Grainger#female"/>
>>         </ObjectOneOf>
>> </SubClassOf>
>
> No, you won't get that. Among other things your above code does not
> create an owl:NamedIndividual type. If I run your code I get:
>
>   <owl:Class rdf:about="http://www.equixonline.com/Grainger#TestClass";>
>     <rdfs:subClassOf>
>       <owl:Restriction>
>         <owl:oneOf rdf:parseType="Collection">
>           <owl:Thing
> rdf:about="http://www.equixonline.com/Grainger#female"/>
>           <owl:Thing
> rdf:about="http://www.equixonline.com/Grainger#male"/>
>         </owl:oneOf>
>         <owl:maxCardinality
> rdf:datatype="http://www.w3.org/2001/XMLSchema#int";
>         >1</owl:maxCardinality>
>         <owl:onProperty>
>           <owl:ObjectProperty
> rdf:about="http://www.equixonline.com/Grainger#TestObjectProperty"/>
>         </owl:onProperty>
>       </owl:Restriction>
>     </rdfs:subClassOf>
>   </owl:Class>
>
>
> Which doesn't make sense as OWL (the oneOf and maxCardinality should
> be separate) but at least the maxCardinality hasn't disappeared.
>
>> Do you maybe know what I am doing wrong and how to get format
>> (enumerated restriction) described at the beginning of this message?
>
> An enumeration is created as you've done it but use addSuperClass
> again to add it to your class, don't patch it into the existing
> restriction.
>
> However, perhaps you mean that you want a qualified cardinality
> restriction where testObjectProperty is restricted to at most one out
> of the set #male and #female?  The RDF for that is quite different.
>
> Dave
>

Reply via email to