온톨로지 (가져온 온톨로지를 포함한 완성품)를 구문 분석하여 그래프 데이터베이스에 저장하려고합니다. 이를 위해 먼저 온톨로지의 모든 클래스를 나열한 다음 해당 클래스를 각각의 수퍼 클래스에 연결합니다.가져온 OWL 온톨로지에서 슈퍼 클래스 얻기
가져온 수퍼 클래스를 제외하고 코드는 정상적으로 작동합니다. 내 자신의 온톨로지 내에서 슈퍼 클래스에 연결할 수 있지만 가져온 온톨로지에 슈퍼 클래스가있는 클래스에서는 연결할 수 없습니다. 수퍼 클래스가 존재하며 가져온 클래스를 추가하기 위해 true를 지정했기 때문에 getClasesInSignature() 메서드 호출 이후에 인쇄하면 볼 수 있습니다.
이 코드 예제에서, 수퍼 클래스 집합의 출력은 위에서 설명한대로 클래스에 대해 비어 있습니다. 그들을 포함시킬 수있는 방법이 있습니까?
public void importOntology(String ontologyFile) throws Exception {
try {
File file = new File(ontologyFile);
if (file.exists()) {
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLOntology ontology = manager.loadOntologyFromOntologyDocument(file);
OWLReasonerFactory reasonerFactory = PelletReasonerFactory.getInstance();
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, new SimpleConfiguration());
if (!reasoner.isConsistent()) {
throw new Exception("Ontology is inconsistent");
}
Transaction tx = db.beginTx();
try {
//create starting node
Node thingNode = getOrCreateNodeWithUniqueFactory("owl:Thing");
//add all classes
for (OWLClass c :ontology.getClassesInSignature(true)) {
String classString = c.toString();
if (classString.contains("#")) {
classString = classString.substring(classString.indexOf("#")+1,classString.lastIndexOf(">"));
}
//create node
Node classNode = getOrCreateNodeWithUniqueFactory(classString);
Set<OWLClassExpression> superclasses = c.getSuperClasses(ontology);
//top level node
if (superclasses.isEmpty()) {
//link to thing
} else {
//link to superclass(es)
}
//[rest of code removed]
}
}
}
언제든지 블로그에서 공유 할 수 있습니다 - Neo4j 위에 OWLAPI를 구현 하시겠습니까? supercool 것입니다. –