ConversionException 到 OntClass?
ConversionException to an OntClass?
我在使用 OntClass.listSubClasses
时遇到了问题。我在一个循环中使用这个方法,在给定点之前它工作正常:
for(Iterator i = class.listSubClasses() ; i.hasNext() ;) {
System.out.println(((OntClass) i.next()).getLocalName());
}
然后,出现以下异常:
Exception in thread "main" org.apache.jena.ontology.ConversionException: Cannot convert node http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE to OntClass: it does not have rdf:type owl:Class or equivalent
at org.apache.jena.ontology.impl.OntClassImpl.wrap(OntClassImpl.java:82)
...
org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
at rocks.novateam.axis.sow.poc.backend.ontology.RegisterManager.main(RegisterManager.java:194)
这很奇怪。
在 ontology 中,这里是这个特定 class 的定义:
<!-- http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE -->
<rdf:Description rdf:about="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE">
<rdfs:subClassOf rdf:resource="http://titan.be/axis-csrm/datamodel/ontology/0.4#Register"/>
</rdf:Description>
这是我正在使用的 OntModel
文件中的 datamodel.owl
文件。
<!-- http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE -->
<owl:Class rdf:about="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE">
<rdfs:subClassOf rdf:resource="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#Entity"/>
<rdfs:label xml:lang="en">Autonomous eXchange Entity</rdfs:label>
</owl:Class>
这是在第一个interoperabilitymodel.owl
中导入的ontology。
这种导入机制似乎不是问题所在,因为还有其他 class 是从同一个 ontology 以这种方式导入的,不会导致程序崩溃。
有什么想法吗?
是不是你的#AXE根本就没有定义为OWLclass?
它是一个 rdfs:subclassof 所以它必须是一个 rdfs:class 但这并不意味着它也是一个 owl:class
所以,最终,这个问题与耶拿 OntModel
的严格程度有关。 Setting in to non-strict mode 解决了问题。
我在使用 OntClass.listSubClasses
时遇到了问题。我在一个循环中使用这个方法,在给定点之前它工作正常:
for(Iterator i = class.listSubClasses() ; i.hasNext() ;) {
System.out.println(((OntClass) i.next()).getLocalName());
}
然后,出现以下异常:
Exception in thread "main" org.apache.jena.ontology.ConversionException: Cannot convert node http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE to OntClass: it does not have rdf:type owl:Class or equivalent
at org.apache.jena.ontology.impl.OntClassImpl.wrap(OntClassImpl.java:82)
...
org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
at rocks.novateam.axis.sow.poc.backend.ontology.RegisterManager.main(RegisterManager.java:194)
这很奇怪。
在 ontology 中,这里是这个特定 class 的定义:
<!-- http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE -->
<rdf:Description rdf:about="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE">
<rdfs:subClassOf rdf:resource="http://titan.be/axis-csrm/datamodel/ontology/0.4#Register"/>
</rdf:Description>
这是我正在使用的 OntModel
文件中的 datamodel.owl
文件。
<!-- http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE -->
<owl:Class rdf:about="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#AXE">
<rdfs:subClassOf rdf:resource="http://titan.be/axis-csrm/interoperabilitymodel/ontology/0.4#Entity"/>
<rdfs:label xml:lang="en">Autonomous eXchange Entity</rdfs:label>
</owl:Class>
这是在第一个interoperabilitymodel.owl
中导入的ontology。
这种导入机制似乎不是问题所在,因为还有其他 class 是从同一个 ontology 以这种方式导入的,不会导致程序崩溃。
有什么想法吗?
是不是你的#AXE根本就没有定义为OWLclass?
它是一个 rdfs:subclassof 所以它必须是一个 rdfs:class 但这并不意味着它也是一个 owl:class
所以,最终,这个问题与耶拿 OntModel
的严格程度有关。 Setting in to non-strict mode 解决了问题。