我没有列出类的所有子类。我列出了类,我的算法检查每个类是否有一个子类。如果为true,则列出所有子类。但这没有发生,它似乎忽略了条件“如果(essaClasse.hasSubClass)。任何人都可以帮助我吗?咆哮代码部分。
谢谢!
黛博拉 (里约热内卢 - 巴西)
完整代码:
package testejena;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import java.io.InputStream;
import java.util.Iterator;
public class testeProp {
static final String inputFileName = "OBRecortada3.owl";
public static void main(String args[]) {
try {
//create the reasoning model using the base
OntModel inf = ModelFactory.createOntologyModel();
// use the FileManager to find the input file
InputStream in = FileManager.get().open(inputFileName);
if (in == null) {
throw new IllegalArgumentException("File: " + inputFileName + " not found");
}
inf.read(in, "");
String URI = "http://www.owl-ontologies.com/OntologyBase.owl#";
ExtendedIterator classes = inf.listClasses();
while (classes.hasNext()) {
OntClass essaClasse = (OntClass) classes.next();
String vClasse = essaClasse.getLocalName().toString();
if (essaClasse.hasSubClass()) {
System.out.println("Classe: " + vClasse);
OntClass cla = inf.getOntClass(URI + vClasse);
for (Iterator i = cla.listSubClasses(); i.hasNext();) {
OntClass c = (OntClass) i.next();
System.out.print(" " + c.getLocalName() + " " + "\n");
}
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}}
答案 0 :(得分:0)
您不显示您的数据或完整代码(包括您设置OntModel对象的位),因此很难给出明确的建议。在Jena单元测试中测试hasSubClass
方法,因此它不太可能(尽管不是不可能)包含错误。我建议检查:
您在运行上述代码之前正确地将数据加载到Model
中,使用调试器或日志语句来显示例如加载的三元组数
您正在加载的本体实际上包含子类语句,包括检查用于在任何rdfs
三元组中定义rdfs:subClassOf
的前缀声明(它必须完全< / em> http://www.w3.org/2000/01/rdf-schema#
)
答案 1 :(得分:0)
您的算法无效,因为您未在OntModelSpec
中指定OntModel
。指定OntModelSpec
此代码可以完美运行!
OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);