}
private void collectComplexPropertyValues(Individual subj) {
Set<Role> collected = new HashSet<Role>();
for( Edge edge : subj.getOutEdges() ) {
Role role = edge.getRole();
// only collect non-simple, i.e. complex, roles
// TODO we might not need to collect all non-simple roles
// collecting only the base ones, i.e. minimal w.r.t. role
// ordering, would be enough
if( role.isSimple() || !collected.add( role ) )
continue;
collected.add( role );
collectComplexPropertyValues( subj, role );
}
for( Edge edge : subj.getInEdges() ) {
Role role = edge.getRole().getInverse();
if( role.isSimple() || !collected.add( role ) )
continue;
collectComplexPropertyValues( subj, role );
}
}