rdfowlrdfsturtle-rdf

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


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?


Solution

  • 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