code: private String getRefSQL(ForeignKeyConstraint fk) {
  
  		Set<Object> columns = new LinkedHashSet<>(); // Set avoids duplicated and LinkedHashSet keeps the insertion order
  		for (Attribute attr : getIdentifyingAttributes(fk.getRelation()))
  			columns.add(getColumnNameWithAlias(attr));
  
  		List<String> conditions = new ArrayList<>(fk.getComponents().size());
  		for (ForeignKeyConstraint.Component comp : fk.getComponents()) {
  			columns.add(getColumnNameWithAlias(comp.getReference()));	
  			conditions.add(getColumnName(comp.getAttribute()) + " = " + getColumnName(comp.getReference()));
  		}
  		
  		for (Attribute attr : getIdentifyingAttributes(fk.getReferencedRelation())) 
  			columns.add(getColumnNameWithAlias(attr));
  
  		final String tables = fk.getRelation().getID().getSQLRendering() + 
  							", " + fk.getReferencedRelation().getID().getSQLRendering();
  		
  		return String.format("SELECT %s FROM %s WHERE %s", 
  				Joiner.on(", ").join(columns), tables, Joiner.on(" AND ").join(conditions));
  	}
docs: *
  Definition reference triple: an RDF triple with:
  <p/>
  subject: the row node for the row.
  predicate: the reference property IRI for the columns.
  object: the row node for the referenced row.
  
  @param fk
  @return