I want to develop an ontology with Protégé. My class tree is as follows:
├── Binary
├── Function
├── Plugin
My property tree is:
├── available_function
├── needs_binary
├── restricted_function
In this ontology, I want to model that a Plugin needs a certain binary and for the implementation of the binary I can use the function linked to it. However, I also want to model, that certain functions are forbidden from being used in the plugin. I now want to make sure, that an available function is not a restricted function. I was thinking about using the disjoint with
construct for properties, however, I did not find anything regarding more complex structures (using the property expression editor) for it.
Also, I also realize, that in this example, the ontology is not properly structured. However, this is just a subset of the bigger ontology in which I want to achieve the discussed constraint.
How can I achieve this?
I want to develop an ontology with Protégé. My class tree is as follows:
├── Binary
├── Function
├── Plugin
My property tree is:
├── available_function
├── needs_binary
├── restricted_function
In this ontology, I want to model that a Plugin needs a certain binary and for the implementation of the binary I can use the function linked to it. However, I also want to model, that certain functions are forbidden from being used in the plugin. I now want to make sure, that an available function is not a restricted function. I was thinking about using the disjoint with
construct for properties, however, I did not find anything regarding more complex structures (using the property expression editor) for it.
Also, I also realize, that in this example, the ontology is not properly structured. However, this is just a subset of the bigger ontology in which I want to achieve the discussed constraint.
How can I achieve this?
Share Improve this question edited yesterday Mark Rotteveel 109k226 gold badges155 silver badges219 bronze badges asked yesterday macmanmacman 1231 gold badge1 silver badge8 bronze badges1 Answer
Reset to default 0You can achieve this by introducing classes AvailableFunction
and Restricted Function
that are disjoint and subclasses of Function
. Then the range of available_function
is set to AvailableFunction
and that of restricted_function
as RestrictedFunction
.
To model that a Plugin
needs some function we introduce a needs
object property with range Binary
. To state that Plugin
needs a Binary
and its implementation is an available function we state the following axioms:
Class: Plugin
SubClassOf:
hasAvailableFunction some AvailableFunction,
needs some Binary
Here is the complete ontology:
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: so: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>
Prefix: : <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl>
Ontology: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl>
<https://henrietteharmse.com/79424806/v0.0.1/disjoint-properties-for-different-domains>
ObjectProperty: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasAvailableFunction>
SubPropertyOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasFunction>
Range:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#AvailableFunction>
ObjectProperty: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasFunction>
ObjectProperty: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasRestrictedFunction>
SubPropertyOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasFunction>
Range:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#RestrictedFunction>
ObjectProperty: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#needs>
Range:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Binary>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#AvailableFunction>
SubClassOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Function>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Binary>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Function>
DisjointUnionOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#AvailableFunction>, <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#RestrictedFunction>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Implementation>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Plugin>
SubClassOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#hasAvailableFunction> some <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#AvailableFunction>,
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#needs> some <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Binary>
Class: <https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#RestrictedFunction>
SubClassOf:
<https://henrietteharmse.com/SO/79424806/disjoint-properties-for-different-domains.owl#Function>