Search code examples
owlontologyprotege

Disjoint properties for different domains


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?


Solution

  • You 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>