Search code examples
owlprotegeswrl

SWRL and Rolification cannot return what I want


I have developed an ontology and I want to add the following SWRL in protege:

Divider_intersection(?node), is_extent_of(?node, ?s), builds(?s, ?l),Segment(?s),Lane(?l),detailed_partition(?d), builds(?l, ?d)-> is_divided_at(?d, ?node)

with this I wish to add an object property, is_divided_at, between an individual from detailed_partition (?d) and a node that is classified as a divider_intersection if it is the extent of a segment (?s) that build a lane (?l) which then build the detailed?partition (?d). As noted here, I am looking for NamedIndividuals, hence I presume the SWRL should do the job.

Further research, I found Rolification (1, 2, 3) as a possible answer however I have never used it before, but I made the following chain:

r_Divider_intersection o is_extent_of o r_Segment o builds o r_Lane o builds o r_detailed_partition

still I do not get the answer. Any idea what is wrong?


Solution

  • Your approach works, and without seeing your ontology (your link requires permissions, and offsite links aren't very helpful anyhow) we can't see why your particular construction of it works. One thing that jumps out from your question is that the it looks like your is_divided_at property has its arguments (?d,?node) in the opposite order from what the property chain axiom would produce. Anyhow, here's a working example.

    screenshot in protege

    @prefix :      <urn:ex:#> .
    @prefix ex:    <urn:ex:#> .
    @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix owl:   <http://www.w3.org/2002/07/owl#> .
    @prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
    @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
    
    ex:isDividedAt  a               owl:ObjectProperty ;
            owl:propertyChainAxiom  ( ex:_DividerIntersection ex:isExtentOf ex:_Segment ex:builds ex:_Lane ex:builds ex:_DetailedPartition ) .
    
    ex:Segment  a                owl:Class ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  ex:_Segment
                                 ] .
    
    ex:_DetailedPartition
            a       owl:ObjectProperty .
    
    ex:DividerIntersection
            a                    owl:Class ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  ex:_DividerIntersection
                                 ] .
    
    ex:_Segment  a  owl:ObjectProperty .
    
    ex:_Lane  a     owl:ObjectProperty .
    
    ex:builds  a    owl:ObjectProperty .
    
    ex:dividerIntersection0
            a              owl:NamedIndividual , ex:DividerIntersection ;
            ex:isExtentOf  ex:segment0 .
    
    <urn:ex:>  a    owl:Ontology .
    
    ex:detailedPartition0
            a       owl:NamedIndividual , ex:DetailedPartition .
    
    ex:_DividerIntersection
            a       owl:ObjectProperty .
    
    ex:segment0  a     owl:NamedIndividual , ex:Segment ;
            ex:builds  ex:lane0 .
    
    ex:DetailedPartition  a      owl:Class ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  ex:_DetailedPartition
                                 ] .
    
    ex:isExtentOf  a  owl:ObjectProperty .
    
    ex:lane0  a        owl:NamedIndividual , ex:Lane ;
            ex:builds  ex:detailedPartition0 .
    
    ex:Lane  a                   owl:Class ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  ex:_Lane
                                 ] .