Patrick Daßler
Patrick Daßler

Reputation: 17

Issues importing an ontology into Protege

I have some severe issues importing the "Rhizomik" MPEG7 Ontology in all common ontology Editors. Primarily I tend to work with Protege. Import allways leads to several 100 errors. I fixed a few of them. One of the remaining seems to be connected to the following class:

<owl:Class rdf:about="&mpeg7;SpatioTemporalLocatorType">
    <rdfs:subClassOf>
        <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
                <owl:Restriction>
                    <owl:onProperty rdf:resource="&mpeg7;CoordRef"/>
                    <owl:allValuesFrom>
                        <owl:Class>
                            <rdfs:subClassOf>
                                <owl:Restriction>
                                    <owl:onProperty rdf:resource="&mpeg7;ref"/>
                                    <owl:allValuesFrom rdf:resource="&xsd;string"/>
                                </owl:Restriction>
                            </rdfs:subClassOf>
                            <rdfs:subClassOf>
                                <owl:Restriction>
                                    <owl:onProperty rdf:resource="&mpeg7;ref"/>
                                    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
                                </owl:Restriction>
                            </rdfs:subClassOf>
                            <rdfs:subClassOf>
                                <owl:Restriction>
                                    <owl:onProperty rdf:resource="&mpeg7;spatialRef"/>
                                    <owl:allValuesFrom rdf:resource="http://www.w3.org/2001/XMLSchema&mpeg7;boolean"/>
                                </owl:Restriction>
                            </rdfs:subClassOf>
                            <rdfs:subClassOf>
                                <owl:Restriction>
                                    <owl:onProperty rdf:resource="&mpeg7;spatialRef"/>
                                    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
                                </owl:Restriction>
                            </rdfs:subClassOf>
                        </owl:Class>
                    </owl:allValuesFrom>
                </owl:Restriction>
                <owl:Class>
                    <owl:unionOf rdf:parseType="Collection">
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="&mpeg7;FigureTrajectory"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;FigureTrajectoryType"/>
                        </owl:Restriction>
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="&mpeg7;ParameterTrajectory"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;ParameterTrajectoryType"/>
                        </owl:Restriction>
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="&mpeg7;MediaTime"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;MediaTimeType"/>
                        </owl:Restriction>
                    </owl:unionOf>
                </owl:Class>
            </owl:intersectionOf>
        </owl:Class>
    </rdfs:subClassOf>
</owl:Class>

Is someone in the position to check this class for any logical error?

Kind regards, Patrick

Upvotes: 1

Views: 791

Answers (1)

Ignazio
Ignazio

Reputation: 10684

The problem is in the construction of the axioms. subClassOf axioms appear embedded in class usage, but the rdfs:subClassOf token is not allowed in those positions (see https://www.w3.org/TR/owl2-mapping-to-rdf/ for the recognised mappings).

For example, the Error1 URL refers to this axiom:

ObjectPropertyRange(<#Mpeg7> <http://org.semanticweb.owlapi/error#Error1>)

The corresponding XML is:

<owl:ObjectProperty rdf:ID="Mpeg7">
    <rdfs:range>
        <owl:Class>
            <rdfs:subClassOf rdf:resource="&mpeg7;Mpeg7Type"/>
            <rdfs:subClassOf>
                <owl:Class>
                    <owl:unionOf rdf:parseType="Collection">
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="#DescriptionUnit"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;Mpeg7BaseType"/>
                        </owl:Restriction>
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="#Description"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;CompleteDescriptionType"/>
                        </owl:Restriction>
                    </owl:unionOf>
                </owl:Class>
            </rdfs:subClassOf>
        </owl:Class>
    </rdfs:range>
</owl:ObjectProperty>

The intent here is clear, but the anonymous class is intended to be an intersection - it cannot be parsed as such because it is created as nested subclass axioms, which are not valid OWL syntax.

When the above sample is changed to this:

<owl:ObjectProperty rdf:ID="Mpeg7">
    <rdfs:range>
        <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
                <rdf:Description rdf:about="&mpeg7;Mpeg7Type"/>
                <owl:Class>
                    <owl:unionOf rdf:parseType="Collection">
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="#DescriptionUnit"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;Mpeg7BaseType"/>
                        </owl:Restriction>
                        <owl:Restriction>
                            <owl:onProperty rdf:resource="#Description"/>
                            <owl:allValuesFrom rdf:resource="&mpeg7;CompleteDescriptionType"/>
                        </owl:Restriction>
                    </owl:unionOf>
                </owl:Class>
            </owl:intersectionOf>
        </owl:Class>
    </rdfs:range>
</owl:ObjectProperty>

The parsed axiom becomes

ObjectPropertyRange(<#Mpeg7>
    ObjectIntersectionOf(
        <http://rhizomik.net/ontologies/2005/03/Mpeg7-2001.owl#Mpeg7Type>
        ObjectUnionOf(
            ObjectAllValuesFrom(<#Description> <http://rhizomik.net/ontologies/2005/03/Mpeg7-2001.owl#CompleteDescriptionType>)
            ObjectAllValuesFrom(<#DescriptionUnit> <http://rhizomik.net/ontologies/2005/03/Mpeg7-2001.owl#Mpeg7BaseType>)
        )
    )
)

I count about 175 similar problems in the file...

Upvotes: 1

Related Questions