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?
The meaning of
Nothingis that it represents the empty set. How you are usingNothing(in <#GreenBall> claimedBy owl:Nothing) it impliesNothingis an individual. Object properties likeclaimedBydefine 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
AgentandItemas classes that are disjoint.Agentcan have further subclasses likePersonandOrgranization.Itemhave subclassesKnownToBeClaimedandKnownToBeUnclaimedthat are disjointed.KnownToBeClaimedis defined as equivalent to be claimed by at least 1Agent.KnownToBeUnclaimedis defined as items that are known to have a maximum of zero claims.If you now have an individual
knownToBeClaimedthat is anItemand it is claimed byperson1, aPerson, the reasoner (Hermit or any OWL DL reasoner - not an EL reasoner like ELK) will infer that theknownToBeClaimedindividual belongs to the classKnownToBeClaimedIf you have an individual
knownToBeUnclaimedwith type set toItemandclaimedBy max 0 owl:Thing, theknownToBeUnclaimedindividual will be inferred to belong to the classKnownToBeUnclaimed.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
UnknownWhetherClaimedto Item which is disjoint fromKnownToBeClaimedandKnownToBeUnclaimed. If you now define an individual that is of typeItemand you state that it isnot KnownToBeClaimed and not KnownToBeUnclaimed, it will infer that the item isUnknownWhetherClaimed.Below is the ontology in Manchester syntax.