private void generateTriplesForCell( Node node, Set<String> existingTopRowTriples, String hNodeId, Set<String> predicatesCovered, Map<String, ReportMessage> predicatesFailed) { Map<String, String> columnValues = node.getColumnValues(); List<PredicateObjectMap> pomList = this.auxInfo.getHNodeIdToPredObjLinks().get(hNodeId); if (pomList == null || pomList.isEmpty()) return; List<TriplesMap> toBeProcessedTriplesMap = new LinkedList<TriplesMap>(); for (PredicateObjectMap pom : pomList) { toBeProcessedTriplesMap.add(pom.getTriplesMap()); } Set<String> alreadyProcessedTriplesMapIds = new HashSet<String>(); while (!toBeProcessedTriplesMap.isEmpty()) { TriplesMap trMap = toBeProcessedTriplesMap.remove(0); boolean dontAddNeighboringMaps = false; // Generate properties for the triple maps for (PredicateObjectMap pom : trMap.getPredicateObjectMaps()) { if (!predicatesCovered.contains(pom.getPredicate().getId())) { generatePropertyForPredObjMap( pom, columnValues, predicatesCovered, existingTopRowTriples, hNodeId, predicatesFailed); } } // Need to stop at the root if (trMap.getSubject().isSteinerTreeRootNode()) { dontAddNeighboringMaps = true; } List<TriplesMapLink> neighboringLinks = this.auxInfo.getTriplesMapGraph().getAllNeighboringTriplesMap(trMap.getId()); for (TriplesMapLink trMapLink : neighboringLinks) { if (predicatesCovered.contains( trMapLink.getPredicateObjectMapLink().getPredicate().getId())) continue; // Add the other triplesMap in queue to be processed later if (!alreadyProcessedTriplesMapIds.contains(trMapLink.getSourceMap().getId()) && !dontAddNeighboringMaps) { toBeProcessedTriplesMap.add(trMapLink.getSourceMap()); } if (!alreadyProcessedTriplesMapIds.contains(trMapLink.getTargetMap().getId()) && !dontAddNeighboringMaps) { toBeProcessedTriplesMap.add(trMapLink.getTargetMap()); } } alreadyProcessedTriplesMapIds.add(trMap.getId()); } }
private void generatePropertyForPredObjMap( PredicateObjectMap pom, Map<String, String> columnValues, Set<String> predicatesCovered, Set<String> existingTopRowTriples, String hNodeId, Map<String, ReportMessage> predicatesFailed) { // Generate subject RDF SubjectMap subjMap = pom.getTriplesMap().getSubject(); String subjUri = ""; try { subjUri = generateSubjectMapRDF(subjMap, existingTopRowTriples, columnValues); } catch (ValueNotFoundKarmaException ve) { ReportMessage msg = createReportMessage( "Could not generate subject's RDF and URI for <i>predicate:" + pom.getPredicate() .getTemplate() .toString() .replaceAll("<", "{") .replaceAll(">", "}") + ", subject node: " + subjMap.getId() + "</i>", ve, this.factory.getHNode(hNodeId).getColumnName()); predicatesFailed.put(pom.getPredicate().getId(), msg); return; } catch (NoValueFoundInNodeException e) { logger.debug("No value found in a node required to generate subject's RDF or URI."); } // Generate the predicate RDF String predicateUri = ""; try { predicateUri = getTemplateTermSetPopulatedWithValues(columnValues, pom.getPredicate().getTemplate()) .replaceAll(" ", ""); } catch (ValueNotFoundKarmaException ve) { ReportMessage msg = createReportMessage( "Could not generate predicate's URI for <i>predicate:" + pom.getPredicate() .getTemplate() .toString() .replaceAll("<", "{") .replaceAll(">", "}") + ", subject node: " + subjMap.getId() + "</i>", ve, this.factory.getHNode(hNodeId).getColumnName()); predicatesFailed.put(pom.getPredicate().getId(), msg); return; } catch (NoValueFoundInNodeException e) { logger.debug("No value found in a node required to generate predicate's URI."); } // Object property if (pom.getObject().hasRefObjectMap()) { // Generate the object URI TriplesMap objPropertyObjectTriplesMap = pom.getObject().getRefObjectMap().getParentTriplesMap(); String objUri = ""; try { objUri = generateSubjectMapRDF( objPropertyObjectTriplesMap.getSubject(), existingTopRowTriples, columnValues); } catch (ValueNotFoundKarmaException ve) { ReportMessage msg = createReportMessage( "Could not generate object's URI for <i>predicate:" + pom.getPredicate() .getTemplate() .toString() .replaceAll("<", "{") .replaceAll(">", "}") + ", subject node: " + pom.getTriplesMap().getSubject().getId() + "</i>", ve, this.factory.getHNode(hNodeId).getColumnName()); predicatesFailed.put(pom.getPredicate().getId(), msg); return; } catch (NoValueFoundInNodeException e) { logger.debug("No value found in a node required to generate object's URI for a predicate."); } String triple = constructTripleWithURIObject(subjUri, predicateUri, objUri); if (!existingTopRowTriples.contains(triple)) { outWriter.println(triple); existingTopRowTriples.add(triple); } } // Data Property else { // Get the value String value = ""; try { value = getTemplateTermSetPopulatedWithValues(columnValues, pom.getObject().getTemplate()); if (value == null || value.trim().equals("")) return; } catch (ValueNotFoundKarmaException ve) { ReportMessage msg = createReportMessage( "Could not retrieve value for the <i>predicate:" + pom.getPredicate() .getTemplate() .toString() .replaceAll("<", "{") .replaceAll(">", "}") + ", subject node: " + subjMap.getId() + "</i>", ve, this.factory.getHNode(hNodeId).getColumnName()); predicatesFailed.put(pom.getPredicate().getId(), msg); return; } catch (NoValueFoundInNodeException e) { logger.debug("No value found in a node required to generate value for a predicate."); } String triple = constructTripleWithLiteralObject(subjUri, predicateUri, value, ""); if (!existingTopRowTriples.contains(triple)) { existingTopRowTriples.add(triple); outWriter.println(triple); } } predicatesCovered.add(pom.getPredicate().getId()); if (predicatesFailed.containsKey(pom.getPredicate().getId())) predicatesFailed.remove(pom.getPredicate().getId()); }