입력 클래스의 하위 클래스를로드하는 메서드를 작성하려고합니다. 이 코드는 OWL API 3.1.x (Pizza.owl)로 작성된 RDF 파일로 제대로 작동하지만 이제는 OWL API 3.4.x 버전에서 생성 된 파일과 작동하지 않습니다.OWLapi에서 전용 클래스의 하위 클래스를 검색하려면 어떻게해야합니까?
<!DOCTYPE Ontology [
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY xml "http://www.w3.org/XML/1998/namespace" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
xml:base="http://localhost/CA/SmartHome/SmartHome_1113"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
ontologyIRI="http://localhost/CA/SmartHome/SmartHome_1113">
<Prefix name="" IRI="http://localhost/CA/SmartHome/SmartHome_1113.owl#"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
<Class IRI="#Adult"/>
</Declaration>
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<SubClassOf>
<Class IRI="#Adult"/>
<Class IRI="#Person"/>
</SubClassOf>
</Ontology>
그것은 두 클래스로 구성된 매우 간단 온톨로지, 그리고 성인이이다 : 이것은 OWL의 API 3.4.2에 의해 생성 된 올빼미 파일이
public ArrayList<String> getSubClassOf(String parentClass)
{
String seq = "";
tempList.clear();
tempClass = factory.getOWLClass(":" + parentClass, pm);
s = reasoner.getSubClasses(tempClass, false);
i = s.iterator();
while(i.hasNext()){
seq = i.next().toString();
if(!seq.contains("Nothing"))
tempList.add(seq.substring(seq.indexOf("#")+1,seq.indexOf(">")));
}
return tempList;
}
입니다 : 여기에 아래
은 내가 쓴 코드 사람의 하위 클래스
감사를 OWLEntity은 아무것도 일치하지 않는 경우를 결정하는 방법을 가지고, 당신은 온톨로지는 모두 3.1 및 3.4.x와 유효해야
OWLEntity.getIRI().getFragment()
와 IRI 조각을 얻을 수 있습니다 , 그러나 어떻게 든 그것은 나를 위해 일하지 않고있다. Person 클래스를 올바르게 가져 오지만 그 클래스의 하위 클래스를 얻지는 못합니다. FaCT ++ 대신 Pellet reasoner를 사용했습니다. 그것은 문제 일 수 있습니까? – Jun1987
나는 이상하게도이 문제를 해결했다 .. 3.1.x 형식의 OWL 파일을 생성하고 protge와 함께 온톨로지를 만들기 시작했다. 그런 다음, protege는 위에 게시 된 형식이 아닌 3.1.x 형식으로 RDF 파일을 생성하기 시작했습니다. 그리고 나서, 내 코드가 완벽하게 작동했고 lgnazio도 완벽하게 작동했습니다. 이 문제를 해결하려면 Plz, 의견을 남겨주세요. – Jun1987
3.1과이 코드의 차이점은 무엇인지 말할 수 없습니다. 나는 단지 IRI에 몇 가지 오타가 있다고 가정하고 파일을 재생성했다. – Ignazio