private void generateTriplesForRow(
     Row row,
     Set<String> existingTopRowTriples,
     Set<String> predicatesCovered,
     Map<String, ReportMessage> predicatesFailed) {
   Map<String, Node> rowNodes = row.getNodesMap();
   for (String hNodeId : rowNodes.keySet()) {
     Node rowNode = rowNodes.get(hNodeId);
     if (rowNode.hasNestedTable()) {
       Table rowNodeTable = rowNode.getNestedTable();
       if (rowNodeTable != null) {
         for (Row nestedTableRow : rowNodeTable.getRows(0, rowNodeTable.getNumRows())) {
           Set<String> rowPredicatesCovered = new HashSet<String>();
           generateTriplesForRow(
               nestedTableRow, existingTopRowTriples, rowPredicatesCovered, predicatesFailed);
         }
       }
     } else {
       generateTriplesForCell(
           rowNode, existingTopRowTriples, hNodeId, predicatesCovered, predicatesFailed);
     }
   }
 }