将 ontology 导入 Protege 时出现问题

Issues importing an ontology into Protege

我在所有常见的 ontology 编辑器中导入 "Rhizomik" MPEG7 Ontology 时遇到了一些严重的问题。我主要倾向于与 Protege 一起工作。 导入总是会导致数百个错误。我修复了其中的一些。剩下的一个似乎与以下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>

是否有人能够检查此 class 是否存在任何逻辑错误?

亲切的问候, 帕特里克

问题出在公理的构造上。 subClassOf 公理出现在 class 用法中,但在这些位置不允许使用 rdfs:subClassOf 标记(有关已识别的映射,请参阅 https://www.w3.org/TR/owl2-mapping-to-rdf/)。

例如Error1 URL就是指这个公理:

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

对应的XML为:

<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>

这里的意图很明确,但是匿名 class 旨在成为一个交集 - 它不能被这样解析,因为它被创建为嵌套的 subclass 公理,这是无效的OWL 语法。

当上面的例子改成这样时:

<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>

解析后的公理变为

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

我数了一下文件中大约有 175 个类似的问题...