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