private boolean validateRelationships(I_ConceptualizeLocally local)
      throws IOException, TerminologyException {
    if (relSpecs == null || relSpecs.length == 0) {
      return true;
    }

    for (RelSpec relSpec : relSpecs) {
      I_ConceptualizeLocally relType = relSpec.getRelType().localize();
      I_ConceptualizeLocally destination = relSpec.getDestination().localize();
      boolean foundDestination = false;
      boolean foundType = false;
      List<I_ConceptualizeLocally> destinationsOfType = new ArrayList<I_ConceptualizeLocally>();

      for (I_RelateConceptsLocally rel : local.getSourceRels()) {
        if (rel.getRelType().equals(relType)) {
          foundType = true;
          destinationsOfType.add(rel.getC2());
          if (rel.getC2().equals(destination)) {
            foundDestination = true;
            break;
          }
        }
      }
      if (foundDestination == false) {
        boolean foundTransitively = false;
        if (foundType == true && relSpec.isTransitive()) {
          for (I_ConceptualizeLocally destinationOfType : destinationsOfType) {
            if (validateRelationships(destinationOfType)) {
              foundTransitively = true;
              break;
            }
          }
        }
        if (foundTransitively == false) {
          throw new RuntimeException("No matching rel: " + relSpec + " found for: " + local);
        }
      }
    }
    return true;
  }