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
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 ] ) .
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)