나는이 같은 모델을 이해 :
는 세 쌍둥이로 구성 (제목 술어/속성 개체)Apache Jena에서 모델 데이터 (또는 그래프)의 정확한 구현은 무엇입니까?
ABC
CDE
EFG
GHI
XYZ
그리고 우리의 위에서 나타낼 수 그래프에서 노드와 가장자리가있는 삼중 항.
모델에서 C-> E-> G-> I와 같은 체인을 가질 수있는 Subject 'A'값을 가져 오려면 'C'노드에서 SubGraph를 반환해야합니다.
여기 내 재귀 코드 :
public Model getRecursive(String subject) {
Model newModel = ModelFactory.createDefaultModel();
StmtIterator it = this.model.listStatements();
while (it.hasNext()) {
Statement statement = it.next();
if(statement.getSubject().toString().equals(subject))
{
newModel = newModel.add(statement);
}
}
Model objectModel = ModelFactory.createDefaultModel();
it = newModel.listStatements();
while (it.hasNext()) {
Statement statement = it.next();
objectModel = objectModel.add(getRecursive(statement.getObject().toString()));
}
newModel = newModel.add(objectModel);
return newModel;
}
하지만 내 문제는 복잡성이 너무 높은 것입니다.
모델에 1000 개의 세 쌍이 있고 제목에 'A'의 체인 길이가 10이라고 가정합니다. 내 코드에 따르면 각 호출에 대한 재귀 코드가 전체 세 쌍을 반복하여 현재 주어진 주체와 쌍을 이루기 때문에 시간 복잡도는 10 * 1000입니다. 그리고 나서 Object 값을 재귀 적으로 호출합니다.
빨리 할 수있는 다른 방법이 있습니까? 나는 그래프와 모델에서 어떤 메소드도 얻지 못했다.
이 작업에 SPARQL을 사용 해본 적이 있습니까? – AndyS
1) StmtIterator sIter = model.listStatements (subject, null, (RDFNode) null) 2) SPARQL 질의 SELECT * WHERE {? 술어? }.이 두 문장은 같은 결과를 줄 것입니다. 둘 다 동일한 시간이 걸리겠습니까? –
Badman