owl:ObjectProperty and reasoning

2019-08-03 17:49发布

问题:

In my ontology, I have two individuals of type abc:Invention :

abc:InventionA rdf:type abc:Invention .
abc:InventionB rdf:type abc:Invention .

and 2 individuals of type abc:MarketSector, linked with an object property abc:includedIn :

abc:MrktSctrA rdf:type abc:MarketSector .
abc:MrktSctrB rdf:type abc:MarketSector .    
abc:MrktSctrB abc:includedIn MrktSctrA .

Currently, InventionA and InventionB are linked with, respectively MrktSctrA and MrktSctrB via an object property abc:targets :

abc:InventionA abc:targets abc:MrktSctrA .
abc:InventionB abc:targets abc:MrktSctrB .

Is it possible to create an object property abc:commonObjectivesWith equivalent to the following statement ?

If an Invention targets a MarketSector, and another Invention targets another MarketSector, and any of these MarketSectors is included in the other MarketSector, then those two Inventions have common objectives.

Then, if I start my reasoner on this ontology, it can infer

abc:InventionA abc:commonObjectivesWith abc:InventionB

Is this possible ? Thanks in advice

回答1:

You can do this with a SWRL rule as shown in your answer, but that requires a reasoner that can use SWRL rules. You can also do this in OWL 2 DL using subproperty chains. You've got this situation, where the solid arrows are relationships in your data, and the dotted arrow is what you want to infer:

You can represent this with an OWL 2 DL subproperty chain axiom of the form (first abstract, then in Protégé with the resulting ontology):

targets o includes o inverse(targets) SubPropertyOf common

@prefix :      <https://stackoverflow.com/q/24569317/1281433/paths#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

<https://stackoverflow.com/q/24569317/1281433/paths> aowl:Ontology .
:includesClassification a owl:ObjectProperty .
:targets                a owl:ObjectProperty .
:commonObjectivesWith
        a owl:ObjectProperty ;
        owl:propertyChainAxiom  ( :targets :includesClassification [ owl:inverseOf :targets ] ) .


回答2:

Ok I find out how : On Protégé 4, I clicked Window -> Views -> Ontology Views -> Rules. In Rules pane, I added the rule :

includesClassification(?mA, ?mB), targets(?invA, ?mA), targets(?invB, ?mB) -> commonObjectives(?invA, ?invB)