As part of my bachelor's thesis, I am trying to create a universal ontology for organizations (I know about the existence of The Organizational Ontology from the W3C). In the process, I came up with the following scheme (ontology drawn in pencil). The idea is to have one main entity (in my case it is the entity Workspace) for which I could set its type (organization, department, position, person, place) and which I could pair with itself (with using the typed relationship "Relation") to build any arbitrarily complex organizational structure.
I tried to translate the drawn ontology into an RDF graph using the WebVOWL online utility and this is what I got (picture of ontology).
Unfortunately, my knowledge of ontological modeling theory and semantic web technologies leaves much to be desired, and I ask people who understand them to help me.
Correct me if I'm wrong, but I have a feeling that in the ontology I've built, the Relation entity must have all the links at once. (Relation - relationType - HoldsPost, Relation - relationType - ReportsTo, Relation - relationType - subOrganization, etc.). I need the Relation entity instance to have only one relationship (For example, only Relation - relationType - HoldsPost).
Only one solution to this problem comes to mind - get rid of the HeadOf, HoldsPost, ReportsTo, .. nodes and instead add a string node in which to write the desired value, depending on the type of relationship.
So it seems that the problem is how to build an ontology that will provide a Relation instance with only one of the types listed, and not all at once.
I would be really grateful for any help and feedback.
Also I am attaching the contents of the Turtle file generated by the WebVOWL utility:
#################################################################
### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) http://visualdataweb.de/webvowl/ ###
#################################################################
@prefix : <http://visualdataweb.org/organizationalOntology/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix wot: <http://xmlns.com/wot/0.1/> .
@prefix vs: <http://www.w3.org/2003/06/sw-vocab-status/ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@base <http://visualdataweb.org/organizationalOntology/> .
<http://visualdataweb.org/organizationalOntology/> rdf:type owl:Ontology ;
dc:title "Organizational structure ontology"@en;
dc:description "Ontology for modelling organizational structures, specializable to a broad variety of types of organization."@en;
owl:versionInfo "0.1"@en;
dc:creator "" .
#################################################################
### Property Definitions (Number of Property) 20 ###
# --------------------------- Property 0-------------------------
:supports rdf:type owl:ObjectProperty ;
rdfs:label "supports"@en;
rdfs:domain :Workspace;
rdfs:range :SupportedOperations .
# --------------------------- Property 1-------------------------
:constraints rdf:type owl:ObjectProperty ;
rdfs:label "limits"@en;
rdfs:domain :Workspace;
rdfs:range :BuisnessRules .
# --------------------------- Property 2-------------------------
:name rdf:type owl:DatatypeProperty ;
rdfs:label "name"@en;
rdfs:domain :Workspace;
rdfs:range rdfs:Datatype .
# --------------------------- Property 3-------------------------
:relationWorkspaceLink rdf:type owl:ObjectProperty ;
rdfs:label "relationWorkspaceLink"@en;
rdfs:domain :Relation;
rdfs:range :Workspace .
# --------------------------- Property 4-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :HeadOf .
# --------------------------- Property 5-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :HoldPost .
# --------------------------- Property 6-------------------------
:workspaceRelationLink rdf:type owl:ObjectProperty ;
rdfs:label "workspaceRelationLink"@en;
rdfs:domain :Workspace;
rdfs:range :Relation .
# --------------------------- Property 7-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :ReportsTo .
# --------------------------- Property 8-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range : .
# --------------------------- Property 9-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :SubUnit .
# --------------------------- Property 10-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :MemberOf .
# --------------------------- Property 11-------------------------
:hasType rdf:type owl:ObjectProperty ;
rdfs:label "relationType"@en;
rdfs:domain :Relation;
rdfs:range :LocatesIn .
# --------------------------- Property 12-------------------------
:workspaceType rdf:type owl:ObjectProperty ;
rdfs:label "workspaceType"@en;
rdfs:domain :Workspace;
rdfs:range :Place .
# --------------------------- Property 13-------------------------
:workspaceType rdf:type owl:ObjectProperty ;
rdfs:label "workspaceType"@en;
rdfs:domain :Workspace;
rdfs:range :Organization .
# --------------------------- Property 14-------------------------
:workspaceType rdf:type owl:ObjectProperty ;
rdfs:label "workspaceType"@en;
rdfs:domain :Workspace;
rdfs:range :Department .
# --------------------------- Property 15-------------------------
:workspaceType rdf:type owl:ObjectProperty ;
rdfs:label "workspaceType"@en;
rdfs:domain :Workspace;
rdfs:range :Person .
# --------------------------- Property 16-------------------------
:workspaceType rdf:type owl:ObjectProperty ;
rdfs:label "workspaceType"@en;
rdfs:domain :Workspace;
rdfs:range :Post .
# --------------------------- Property 17-------------------------
:hasCoordinates rdf:type owl:ObjectProperty ;
rdfs:label "hasCoordinates"@en;
rdfs:domain :Place;
rdfs:range :Coordinates .
# --------------------------- Property 18-------------------------
:coordinatesString rdf:type owl:DatatypeProperty ;
rdfs:label "coordinatesString"@en;
rdfs:domain :Coordinates;
rdfs:range xsd:string .
# --------------------------- Property 19-------------------------
:description rdf:type owl:DatatypeProperty ;
rdfs:label "description"@en;
rdfs:domain :Workspace;
rdfs:range rdfs:Datatype .
### Class Definitions (Number of Classes) 17 ###
# --------------------------- Class 0-------------------------
:Workspace rdf:type owl:Class;
rdfs:label "Workspace"@en .
# --------------------------- Class 1-------------------------
:SupportedOperations rdf:type owl:Class;
rdfs:label "SupportedOperations"@en .
# --------------------------- Class 2-------------------------
:BuisnessRules rdf:type owl:Class;
rdfs:label "BuisnessRules"@en .
# --------------------------- Class 3-------------------------
:Relation rdf:type owl:Class;
rdfs:label "Relation"@en .
# --------------------------- Class 4-------------------------
:ReportsTo rdf:type owl:Class;
rdfs:label "ReportsTo"@en .
# --------------------------- Class 5-------------------------
:MemberOf rdf:type owl:Class;
rdfs:label "MemberOf"@en .
# --------------------------- Class 6-------------------------
:HoldPost rdf:type owl:Class;
rdfs:label "HoldsPost"@en .
# --------------------------- Class 7-------------------------
:HeadOf rdf:type owl:Class;
rdfs:label "HeadOf"@en .
# --------------------------- Class 8-------------------------
:LocatesIn rdf:type owl:Class;
rdfs:label "LocatesIn"@en .
# --------------------------- Class 9-------------------------
: rdf:type owl:Class;
rdfs:label "SubOrganization"@en .
# --------------------------- Class 10-------------------------
:SubUnit rdf:type owl:Class;
rdfs:label "SubUnit"@en .
# --------------------------- Class 11-------------------------
:Organization rdf:type owl:Class;
rdfs:label "Organization"@en .
# --------------------------- Class 12-------------------------
:Department rdf:type owl:Class;
rdfs:label "Department"@en .
# --------------------------- Class 13-------------------------
:Post rdf:type owl:Class;
rdfs:label "Post"@en .
# --------------------------- Class 14-------------------------
:Person rdf:type owl:Class;
rdfs:label "Person"@en .
# --------------------------- Class 15-------------------------
:Place rdf:type owl:Class;
rdfs:label "Place"@en .
# --------------------------- Class 16-------------------------
:Coordinates rdf:type owl:Class;
rdfs:label "Coordinates"@en .
You will need to add a max 1 cardinality restriction to the
Relation
class:Then, if you have the following individuals:
with individuals
relationType1
andrelationType2
distinctIf you run a reasoner over this ontology, you will get an inconsistency because the
relation
individual is linked twice via therelationType
property.Answers to questions in comment
Object properties relates 2 individuals with each other, not classes. if you have:
it means that whenever 2 individuals
a
andb
are linked viahasType
, individuala
is of typeRelation
and individualb
is of typeMemberOf
. This also means for eachhasType
defined with domain an ranges, will causea
to be of the type of the domain andb
to be of type of the range. In your examplea
will be inferred to be of typeRelation
andb
will be referred to be of typeMemberOf
,HeadOf
,HolfPost
etc. Furthermore, defining an individualrelation
of typeRelation
will not forcerelation
to have anyhasType
link to an individual of typeMemberOf
.Yes, your understanding is incorrect. Any individual in OWL/RDF can have as many links via as many predicates as they want. If you want to restrict the number of links via a specific predicate you have to define class the individual belongs to such that it will only allow a limited amount of links. I have written about this on my blog here, here and here.
Whether the ontology has a right to live depends on the use cases it supports.
Reasoning is the process via which inferences are derived based on the axioms in an ontology. An ontology has mathematical logic meaning which based on these axioms and assertions in your ontology can apply logic based algorithms to derive inferences. This is called reasoning and the application doing it, is called a reasoner. You can read more about it in chapter 3 of my dissertation.