0

I have a problem about reasoning with transitive roles in Protégé.

I created a simple ontology that says:

"Any rod is part of some engine."

"Any engine is part of some car."

"PartOf relation is transitive."

I expected Protégé to recognise this DL as S in the DL-metrics and to infer that "any rod is part of some car", but it seems just to ignore the transitivity axiom. The question is why.

(I used different versions of Protégé (4.3 and 5.0) and different reasoners. I suspect that I did not set some important checkbox option.)

I attach my ontology:

<?xml version="1.0"?>


<!DOCTYPE Ontology [
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY xml "http://www.w3.org/XML/1998/namespace" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>


<Ontology xmlns="http://www.w3.org/2002/07/owl#"
 xml:base="http://www.semanticweb.org/ирина/ontologies/2015/2/untitled-ontology-9"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace"
 ontologyIRI="http://www.semanticweb.org/ирина/ontologies/2015/2/untitled-ontology-9">
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Declaration>
    <Class IRI="#Car"/>
</Declaration>
<Declaration>
    <Class IRI="#Engine"/>
</Declaration>
<Declaration>
    <Class IRI="#Rod"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#isPartOf"/>
</Declaration>
<SubClassOf>
    <Class IRI="#Engine"/>
    <ObjectSomeValuesFrom>
        <ObjectProperty IRI="#isPartOf"/>
        <Class IRI="#Car"/>
    </ObjectSomeValuesFrom>
</SubClassOf>
<SubClassOf>
    <Class IRI="#Rod"/>
    <ObjectSomeValuesFrom>
        <ObjectProperty IRI="#isPartOf"/>
        <Class IRI="#Engine"/>
    </ObjectSomeValuesFrom>
</SubClassOf>
<TransitiveObjectProperty>
    <ObjectProperty IRI="#isPartOf"/>
</TransitiveObjectProperty>
</Ontology>



<!-- Generated by the OWL API (version 3.5.0) http://owlapi.sourceforge.net -->
Stanislav
  • 1
  • 1

1 Answers1

1

I expected Protégé to recognise this DL as S in the DL-metrics

It recognises transitivity and mark it as +. The overall expressivity is ALE+ (well, EL+ would probably be better), which is correct as it hasn't seen the negation yet.

and to infer that "any rod is part of some car", but it seems just to ignore the transitivity axiom. The question is why.

The answer is twofold. It is not clear what did you expect here, I presume that you'd like to see isPartOf some Car in the anonymous subclasses area for Rod. Protege doesn't do this, because in general such an approach would require classification between class names and arbitrary expressions, and there are infinite number of expressions that subsume any single class.

On the other hand, Protege does take into account the transitivity axiom. If you add a named class PartOfCar with the following definition <EquivalentClasses> <Class IRI="#PartOfCar"/> <ObjectSomeValuesFrom> <ObjectProperty IRI="#isPartOf"/> <Class IRI="#Car"/> </ObjectSomeValuesFrom> </EquivalentClasses>

then Protege will classify both Engine and Rod as a subclasses of PartOfCar.

Dmitry Tsarkov
  • 768
  • 4
  • 11