private function prepare_turtle($row, $row_class_name, $resource_uri, $entry_uri)
 {
     $row_type = $row_class_name::ROW_TYPE;
     $primary_key = @self::field_decode($row[$row_class_name::PRIMARY_KEY]);
     $graph_name = $this->harvest_event->resource->virtuoso_graph_name();
     // # TODO: taxon id of the partner will not be globally unique
     // # may this is a reason we will need to do represent the data in a custom way
     if ($primary_key) {
         $node_uri = $graph_name . "/" . $row_class_name::GRAPH_NAME . "/" . SparqlClient::to_underscore($primary_key);
     } else {
         $node_uri = $graph_name . "/" . $row_class_name::GRAPH_NAME . "/" . md5(serialize($row));
     }
     $turtle = "<{$node_uri}> a <{$row_type}>";
     $simple_turtle = "";
     foreach ($row as $key => $value) {
         $value = @self::field_decode($value);
         if ($value && preg_match("/^http:\\/\\//", $key, $arr)) {
             if ($key == $row_class_name::PRIMARY_KEY) {
                 continue;
             }
             if ($key == "http://rs.tdwg.org/dwc/terms/taxonID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/taxa/" . SparqlClient::to_underscore($value)) . "\n";
                 if ($row_type == 'http://rs.tdwg.org/dwc/terms/Occurrence') {
                     $this->occurrence_taxon_mapping[$primary_key] = @self::field_decode($value);
                 }
             } elseif ($key == "http://eol.org/schema/targetTaxonID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/taxa/" . SparqlClient::to_underscore($value)) . "\n";
                 if ($row_type == 'http://rs.tdwg.org/dwc/terms/targetOccurrenceID') {
                     $this->occurrence_taxon_mapping[$primary_key] = @self::field_decode($value);
                 }
             } elseif ($key == "http://rs.tdwg.org/dwc/terms/eventID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/events/" . SparqlClient::to_underscore($value)) . "\n";
             } elseif ($key == "http://rs.tdwg.org/dwc/terms/occurrenceID" || $key == "http://eol.org/schema/targetOccurrenceID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/occurrences/" . SparqlClient::to_underscore($value)) . "\n";
                 if ($key == "http://rs.tdwg.org/dwc/terms/occurrenceID" && ($row_type == "http://rs.tdwg.org/dwc/terms/MeasurementOrFact" || $row_type == 'http://eol.org/schema/Association')) {
                     $occurrence_id = $value;
                 } elseif ($row_type == 'http://eol.org/schema/Association' && $key == "http://eol.org/schema/targetOccurrenceID") {
                     $object = $value;
                 }
             } elseif ($key == "http://eol.org/schema/associationID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/associations/" . SparqlClient::to_underscore($value)) . "\n";
             } elseif ($key == "http://eol.org/schema/parentMeasurementID") {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/measurements/" . SparqlClient::to_underscore($value)) . "\n";
             } elseif ($key == "http://eol.org/schema/reference/referenceID") {
                 $reference_ids = self::get_foreign_keys_from_row($row, 'http://eol.org/schema/reference/referenceID');
                 foreach ($reference_ids as $reference_id) {
                     $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($graph_name . "/references/" . SparqlClient::to_underscore($reference_id)) . "\n";
                 }
             } elseif ($row_type == "http://rs.tdwg.org/dwc/terms/MeasurementOrFact" && $key == "http://rs.tdwg.org/dwc/terms/measurementType") {
                 $predicate = $value;
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($value) . "\n";
             } elseif ($row_type == "http://eol.org/schema/Association" && $key == "http://eol.org/schema/associationType") {
                 $predicate = $value;
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($value) . "\n";
             } elseif ($row_type == "http://rs.tdwg.org/dwc/terms/MeasurementOrFact" && $key == "http://rs.tdwg.org/dwc/terms/measurementValue") {
                 $object = $value;
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($value) . "\n";
             } elseif ($row_type == "http://rs.tdwg.org/dwc/terms/MeasurementOrFact" && $key == "http://rs.tdwg.org/dwc/terms/measurementUnit") {
                 $unit_of_measure = $value;
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($value) . "\n";
             } else {
                 $turtle .= "; " . SparqlClient::enclose_value($key) . " " . SparqlClient::enclose_value($value) . "\n";
             }
         }
     }
     if ($row_type == "http://rs.tdwg.org/dwc/terms/MeasurementOrFact" || $row_type == "http://eol.org/schema/Association") {
         if (isset($predicate) && isset($object)) {
             $trait_id = md5(serialize($row));
             $trait_uri = "{$resource_uri}/traits/{$trait_id}";
             $simple_turtle = "{$trait_uri} a eol:trait ;\n";
             $simple_turtle .= "  eol:predicate {$predicate} ;\n";
             $simple_turtle .= "  eol:recognized_as {$entry_uri} ;\n";
             $simple_turtle .= "  eol:value {$object} ;\n";
             $simple_turtle .= "  eol:source {$resource_uri} .\n";
             if (isset($unit_of_measure)) {
                 $simple_turtle .= "  eol:units {$unit_of_measure} .\n";
             }
             $simple_turtle .= "{$entry_uri} {$predicate} {$trait_uri} .\n";
         }
         // prepare data point uri attributes
         $data_point_uri = array("uri" => $node_uri, "created_at" => 'NOW()', "updated_at" => 'NOW()', "resource_id" => $this->harvest_event->resource->id);
         if (isset($predicate)) {
             $data_point_uri["predicate"] = $predicate;
         }
         if (isset($object)) {
             $data_point_uri["object"] = $object;
         }
         if (isset($unit_of_measure)) {
             $data_point_uri["unit_of_measure"] = $unit_of_measure;
         }
         if (isset($occurrence_id)) {
             $data_point_uri["occurrence_id"] = $occurrence_id;
         }
     } else {
         $data_point_uri = NULL;
     }
     return array($turtle, $data_point_uri, $simple_turtle);
 }