Search code examples
owlprotegecardinality

min cardinality not working as expected in Protege


I'm a beginner in Protege / OWL and I'm having trouble understanding why max cardinality is working and min cardinality is not. I tried Hermit Pellet and Fact as reasoners. I know about the Open World Assumtion, but this seems not logical to me.

I want to express that there must be at least 2 Persons in a Marriage event.

Class: MarriageEvent

EquivalentTo:

This works: MarriageEvent and is_event_of max 2 Person

And this not: MarriageEvent and is_event_of min 2 Person

All individuals are declared as different individuals.

My ontology:

 <?xml version="1.0"?>
 <Ontology xmlns="http://www.w3.org/2002/07/owl#"
 xml:base="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 ontologyIRI="http://www.semanticweb.org/anato/ontologies/2017/7/untitled-ontology-184">
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
    <NamedIndividual IRI="#Peter"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Julia"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#is_event_of"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Max"/>
</Declaration>
<Declaration>
    <Class IRI="#Person"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#Event_Marriage"/>
</Declaration>
<Declaration>
    <Class IRI="#MarriageEvent"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#MarriageEvent"/>
    <ObjectIntersectionOf>
        <Class IRI="#MarriageEvent"/>
        <ObjectMinCardinality cardinality="2">
            <ObjectProperty IRI="#is_event_of"/>
            <Class IRI="#Person"/>
        </ObjectMinCardinality>
    </ObjectIntersectionOf>
</EquivalentClasses>
<EquivalentClasses>
    <Class IRI="#MarriageEvent"/>
    <ObjectIntersectionOf>
        <Class IRI="#MarriageEvent"/>
        <ObjectMaxCardinality cardinality="2">
            <ObjectProperty IRI="#is_event_of"/>
            <Class IRI="#Person"/>
        </ObjectMaxCardinality>
    </ObjectIntersectionOf>
</EquivalentClasses>
<DisjointClasses>
    <Class IRI="#MarriageEvent"/>
    <Class IRI="#Person"/>
</DisjointClasses>
<ClassAssertion>
    <Class IRI="#MarriageEvent"/>
    <NamedIndividual IRI="#Event_Marriage"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Julia"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Max"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#Peter"/>
</ClassAssertion>
<DifferentIndividuals>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Julia"/>
    <NamedIndividual IRI="#Max"/>
    <NamedIndividual IRI="#Peter"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#is_event_of"/>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Julia"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#is_event_of"/>
    <NamedIndividual IRI="#Event_Marriage"/>
    <NamedIndividual IRI="#Peter"/>
</ObjectPropertyAssertion>
<SubObjectPropertyOf>
    <ObjectProperty IRI="#is_event_of"/>
    <ObjectProperty abbreviatedIRI="owl:topObjectProperty"/>
</SubObjectPropertyOf>
<IrreflexiveObjectProperty>
    <ObjectProperty IRI="#is_event_of"/>
</IrreflexiveObjectProperty>
<ObjectPropertyDomain>
    <ObjectProperty IRI="#is_event_of"/>
    <Class IRI="#MarriageEvent"/>
</ObjectPropertyDomain>
<ObjectPropertyRange>
    <ObjectProperty IRI="#is_event_of"/>
    <Class IRI="#Person"/>
</ObjectPropertyRange>
</Ontology>

<!-- Generated by the OWL API (version 4.2.8.20170104-2310) https://github.com/owlcs/owlapi -->

Solution

  • min 2 Person will not complain about marriages where only one person is known because of the Open World Assumption. Just because the second party to the wedding is not known, does not mean that it's not there.