Hi Dave & Lorenzo
thank you very much for your replies. I am still struggling with the code of
the case with a singleton with "true" (CASE B below).
As in my code below, I (think I) can create the list with "true" as well an
anonymous datatype. But then I can't link them by OWL.oneOf. In the code I am
stalling from the lines marked ==>.
My intention would have been to define a link before the anonymous datatype and
replace " OntClass.class " with " link " in the datatype definition. But that's
not working.
CASE A
>>>> - in_category property should range over a singleton (Collection)
>>>> containing only #Bo,
>>>
>>> You need to create an enumerated class (oneOf) containing #Bo (see
>>> OntModel#createEnumeratedClass) and pass that class to the
>>> allValuesFrom restriction.
>>>
CASE B
>>>> - is_XXX_type should range over a singleton containing only the
>>>> Boolean value "true"
>>> That's OWL2 which is not supported by Jena's convenience OntAPI. So
>>> you'll need top do this at the RDF level - create an anonymous
>>> instance of rdfs:Datatype, create a RDFList containing boolean true
>>> then link them with an owl:oneOf property, then again pass that to
>>> the allValuesFrom.
CODE
Individual thisInstance = (Individual) instances.next();
OntClass newClass = model2.createClass(thisInstance.toString());
DatatypeProperty is_XXX_type =
model2.createDatatypeProperty("http://www._.net/ontologies/2016/XXXs_Ontology.owl#is_XXX_type");
is_XXX_type.setRange(XSD.xboolean);
Literal tV = model2.createTypedLiteral(true);
RDFList list = model2.createList(); /* create a RDFList containing
boolean true */
list = list.cons(tV); /* create a RDFList
containing boolean true */
OntClass test = model2.createOntResource(OntClass.class, RDFS.Datatype,null);
/* create an anonymous instance of rdfs:Datatype */
==> RDFNode link = list.getPropertyResourceValue(OWL.oneOf).as(RDFList.class);
/* then link them with an owl:oneOf property */
==> Restriction restriction = model2.createAllValuesFromRestriction(null,
is_XXX_type, test); /* then again pass that to the allValuesFrom. */
newClass.addSuperClass(restriction);
Suggestions welcome.
Cheers, Jos
-----Ursprüngliche Nachricht-----
Von: Lorenz B. [mailto:[email protected]]
Gesendet: Mittwoch, 9. November 2016 11:14
An: [email protected]
Betreff: Re: How to create restrictions that range on singleton collections or
singleton datatypes
Ah, I didn't look at the RDF/XML snippet. Yes, then it's clear and your
solution should work perfectly.
Cheers,
Lorenz
> Hi Lorenz,
>
> On 09/11/16 09:17, Lorenz B. wrote:
>> Hello Dave,
>>
>> my question would be whether he ask how to set this singleton
>> enumeration as
>>
>> a) the range of the property or
>>
>> b) used in a class expression with
>>
>> b1) owl:hasValue or
>>
>> b2) like you suggested to use owl:allValuesFrom
>
> The example "desired output" RDF/XML seemed fairly clear that the goal
> is to create an allValuesFrom restriction.
>
> Cheers,
> Dave
>
>>
>>
>>
>> Cheers,
>> Lorenz
>>
>>> On 08/11/16 14:02, Jos Lehmann wrote:
>>>> Hi there
>>>>
>>>>
>>>>
>>>> I am new to jena and I'm trying the write the two following
>>>> restrictions into an owl (rdf/xml) ontology:
>>>>
>>>>
>>>>
>>>> - in_category property should range over a singleton (Collection)
>>>> containing only #Bo,
>>>
>>> You need to create an enumerated class (oneOf) containing #Bo (see
>>> OntModel#createEnumeratedClass) and pass that class to the
>>> allValuesFrom restriction.
>>>
>>>> - is_XXX_type should range over a singleton containing only the
>>>> Boolean value "true"
>>>
>>> That's OWL2 which is not supported by Jena's convenience OntAPI. So
>>> you'll need top do this at the RDF level - create an anonymous
>>> instance of rdfs:Datatype, create a RDFList containing boolean true
>>> then link them with an owl:oneOf property, then again pass that to
>>> the allValuesFrom.
>>>
>>> Dave
>>>
>>>> My code (below) cannot write the parts of the desired output
>>>> (below) marked with ==>.
>>>>
>>>>
>>>>
>>>> So far, I have been working to achieve the second part of the
>>>> desired output (i.e. the #is_XXX_type part), and that's my
>>>> priority, but suggestions on the first part would be welcome.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> DESIRED OUTPUT
>>>>
>>>>
>>>>
>>>> <owl:Class
>>>> rdf:about="http://www._.net/ontologies/2016/XXXs_Ontology.owl#B7">
>>>>
>>>> <rdfs:subClassOf
>>>> rdf:resource="http://www._.net/ontologies/2016/XXXs_Ontology.owl#B"
>>>> />
>>>>
>>>> <rdfs:subClassOf
>>>> rdf:resource="http://www._.net/ontologies/2016/XXXs_Ontology.owl#T"
>>>> />
>>>>
>>>> <rdfs:subClassOf>
>>>>
>>>> <owl:Restriction>
>>>>
>>>> <owl:onProperty
>>>> rdf:resource="http://www._.net/ontologies/2016/XXXs_Ontology.owl#in
>>>> _category"/>
>>>>
>>>>
>>>> <owl:allValuesFrom>
>>>>
>>>> ==> <owl:Class>
>>>>
>>>> ==> <owl:oneOf rdf:parseType="Collection">
>>>>
>>>> ==> <rdf:Description
>>>> rdf:about="http://www._.net/ontologies/2016/XXXs_Ontology.owl#Bo"/>
>>>>
>>>> ==> </owl:oneOf>
>>>>
>>>> ==> </owl:Class>
>>>>
>>>> </owl:allValuesFrom>
>>>>
>>>> </owl:Restriction>
>>>>
>>>> </rdfs:subClassOf>
>>>>
>>>> <rdfs:subClassOf>
>>>>
>>>> <owl:Restriction>
>>>>
>>>> <owl:onProperty
>>>> rdf:resource="http://www._.net/ontologies/2016/XXXs_Ontology.owl#is
>>>> _XXX_type"/>
>>>>
>>>>
>>>> <owl:allValuesFrom>
>>>>
>>>> ==> <rdfs:Datatype>
>>>>
>>>> ==> <owl:oneOf>
>>>>
>>>> ==> <rdf:Description>
>>>>
>>>> ==> <rdf:type
>>>> rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
>>>>
>>>> ==> <rdf:first
>>>> rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">true</rdf:f
>>>> irst>
>>>>
>>>>
>>>> ==> <rdf:rest
>>>> rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
>>>>
>>>> ==> </rdf:Description>
>>>>
>>>> ==> </owl:oneOf>
>>>>
>>>> </rdfs:Datatype>
>>>>
>>>> </owl:allValuesFrom>
>>>>
>>>> </owl:Restriction>
>>>>
>>>> </rdfs:subClassOf>
>>>>
>>>> </owl:Class>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> MY CODE (note: the new class is derived from an existing
>>>> individual)
>>>>
>>>>
>>>>
>>>> OntClass newClass =
>>>> model2.createClass(thisInstance.toString());
>>>>
>>>>
>>>>
>>>> DatatypeProperty is_XXX_type =
>>>> model2.createDatatypeProperty("http://www._.net/ontologies/2016/XXX
>>>> s_Ontology.owl#is_XXX_type");
>>>>
>>>>
>>>>
>>>>
>>>> is_XXX_type.setRange(XSD.xboolean);
>>>>
>>>>
>>>>
>>>> Restriction restriction =
>>>> model2.createAllValuesFromRestriction(null, is_ XXX_type,
>>>> XSD.xboolean);
>>>>
>>>>
>>>>
>>>> newClass.addSuperClass(restriction);
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> MY PRESENT OUTPUT FOR THE is_XXX_type CASE:
>>>>
>>>>
>>>>
>>>> <owl:Class
>>>> rdf:about="http://www._.net/ontologies/2016/XXXs_Ontology.owl#B7">
>>>>
>>>> <rdfs:subClassOf>
>>>>
>>>> <owl:Restriction>
>>>>
>>>> <owl:allValuesFrom
>>>> rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
>>>>
>>>> <owl:onProperty>
>>>>
>>>> <owl:DatatypeProperty
>>>> rdf:about="http://www._.net/ontologies/2016/XXXs_Ontology.owl#is_XX
>>>> X_type"/>
>>>>
>>>>
>>>> </owl:onProperty>
>>>>
>>>> </owl:Restriction>
>>>>
>>>> </rdfs:subClassOf>
>>>>
>>>> </owl:Class>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Thank you in advance for the advice.
>>>>
>>>>
>>>>
>>>> Jos Lehmann
>>>>
>>>>
>>>>
>>>> Knowledge Management
>>>>
>>>> Bauhaus Luftfahrt e.V.
>>>>
>>>> GERMANY
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>
--
Lorenz Bühmann
AKSW group, University of Leipzig
Group: http://aksw.org - semantic web research center