How to structure an OWL property that be "Nobody"?

32 Views Asked by At

I am attempting to create an OWL ontology that includes a claimedBy property that could be a person, organization, or similar "agent" (foaf:Agent essentially), or could be unowned (owl:Thing claimedBy A).

I need to be able to differentiate between "it's not known (not in this data set) if anyone has claimed that owl:Thing or not" and "it is known that specific owl:Thing is not claimed by anyone, currently".

The goal would be to be able to have a dataset of:

<#Alice> a <https://schema.org/Person> .
<#RedBall> a owl:Thing .
<#GreenBall> a owl:Thing .
<#BlueBall> a owl:Thing .

<#RedBall> claimedBy <#Alice> .
<#GreenBall> claimedBy owl:Nothing .

Which records the knowledge that Alice currently claims the Red ball, the Green ball is available to be claimed, and the Blue ball is in an unknown claimed state (this authority doesn't know one way or the other if the Blue ball is claimed or not).

My thought was to define the property as:

<#claimedBy> a owl:ObjectProperty ;
  rdfs:domain owl:Thing ;
  rdfs:range [
    owl:unionOf (
      <http://xmlns.com/foaf/0.1/Agent>
      <https://schema.org/Person>
      <https://schema.org/Organization>
      owl:Nothing
    )
  ] .

But this throws off the WebVOWL tool trying to visualize it. Is this a bug in WebVOWL, or is this a misuse of owl:Nothing? Do I need to create a specific <Nobody> instance to make this setup semantically work?

1

There are 1 best solutions below

0
Henriette Harmse On BEST ANSWER

The meaning of Nothing is that it represents the empty set. How you are using Nothing (in <#GreenBall> claimedBy owl:Nothing) it implies Nothing is an individual. Object properties like claimedBy define relations between individuals.

Here is how you can potentially design this. Your main objective is to distinguish between items that are claimed and unclaimed by agents. Hence, define Agent and Item as classes that are disjoint. Agent can have further subclasses like Person and Orgranization. Item have subclasses KnownToBeClaimed and KnownToBeUnclaimed that are disjointed. KnownToBeClaimed is defined as equivalent to be claimed by at least 1 Agent. KnownToBeUnclaimed is defined as items that are known to have a maximum of zero claims.

If you now have an individual knownToBeClaimed that is an Item and it is claimed by person1, a Person, the reasoner (Hermit or any OWL DL reasoner - not an EL reasoner like ELK) will infer that the knownToBeClaimed individual belongs to the class KnownToBeClaimed

If you have an individual knownToBeUnclaimed with type set to Item and claimedBy max 0 owl:Thing, the knownToBeUnclaimed individual will be inferred to belong to the class KnownToBeUnclaimed.

If you have an item for which no further information is available, this item will only be an item with no inferences as to whether it is claimed or not. If you like, you could add a 3rd subclass called UnknownWhetherClaimed to Item which is disjoint from KnownToBeClaimed and KnownToBeUnclaimed. If you now define an individual that is of type Item and you state that it is not KnownToBeClaimed and not KnownToBeUnclaimed, it will infer that the item is UnknownWhetherClaimed.

Below is the ontology in Manchester syntax.

    Prefix: : <http://www.semanticweb.org/henriette007/stackoverflow-77848886/how-to-structure-an-owl-property-that-be-nobody.owl/>
    Prefix: so: <http://www.semanticweb.org/henriette007/stackoverflow-77848886/how-to-structure-an-owl-property-that-be-nobody.owl#>
    Prefix: owl: <http://www.w3.org/2002/07/owl#>
    Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    Prefix: xml: <http://www.w3.org/XML/1998/namespace>
    Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>



    Ontology: <http://www.semanticweb.org/henriette007/stackoverflow-77848886/how-to-structure-an-owl-property-that-be-nobody.owl>
    <http://www.semanticweb.org/henriette007/stackoverflow-77848886/v0.1/how-to-structure-an-owl-property-that-be-nobody.owl>

    ObjectProperty: so:claimedBy

        
    Class: so:Agent

        DisjointWith: 
            so:Item
        
        
    Class: so:Item

        DisjointUnionOf: 
            so:KnownToBeClaimed, so:KnownToBeUnclaimed, so:UnknownWhetherClaimed
        
        DisjointWith: 
            so:Agent
        
        
    Class: so:KnownToBeClaimed

        EquivalentTo: 
            so:claimedBy some so:Agent
        
        SubClassOf: 
            so:Item
        
        
    Class: so:KnownToBeUnclaimed

        EquivalentTo: 
            so:claimedBy max 0 owl:Thing
        
        SubClassOf: 
            so:Item
        
        
    Class: so:Organization

        SubClassOf: 
            so:Agent
        
        
    Class: so:Person

        SubClassOf: 
            so:Agent
        
        
    Class: so:UnknownWhetherClaimed

        SubClassOf: 
            so:Item
        
        
    Class: owl:Thing

        
    Individual: so:knownToBeClaimedItem

        Types: 
            so:Item
        
        Facts:  
        so:claimedBy  so:person1
        
        
    Individual: so:knownToBeUnclaimedItem

        Types: 
            so:Item,
            so:claimedBy exactly 0 owl:Thing
        
        
    Individual: so:person1

        Types: 
            so:Person
        
        
    Individual: so:unknownWhetherClaimedItem

        Types: 
            so:Item,
            (not (so:KnownToBeClaimed))
            and (not (so:KnownToBeUnclaimed))
        
        
    DisjointClasses: 
        so:KnownToBeClaimed,so:KnownToBeUnclaimed,so:UnknownWhetherClaimed