#!/usr/bin/perl

use strict;
use DBI;

my $dsn = "DBI:mysql:database=umbc;host=localhost;port=3306";

my $dbh = DBI->connect($dsn, 'user', 'password');

my $drh = DBI->install_driver("mysql");
my(@databases) = DBI->data_sources("mysql");

my $sth = $dbh->prepare("SELECT * FROM triple_all");

my $rv = $sth->execute;

sub blank($) {
  my $b=shift;
  $b =~ s/\W//g;
  "_:b".$b;
}

sub literal($) {
  my $l=shift;
  
  $l =~ s/\\/\\\\/gs;
  $l =~ s/\"/\\\"/gs;
  $l =~ s/\n/\\n/gs;
  $l =~ s/\r/\\r/gs;
  $l =~ s/\t/\\t/gs;

  $l =~ s/([\x00-\x08\x0b\x0c\x0e-\x1f\x80-\xff])/"\\u00".sprintf("%02x",ord($1))/eg;

  return '"'.$l.'"';
}


sub uri($) {
  my $u=shift;

  $u =~ s/\\/\\\\/gs;
  $u =~ s/\"/\\\"/gs;
  $u =~ s/\n/\\n/gs;
  $u =~ s/\t/\\t/gs;

  $u =~ s/\%/\%25/gs;

  $u =~ s/([ \>\x00-\x1f\x80-\xff])/"%".sprintf("%02x",ord($1))/eg;

  return '<'.$u.'>';
}


my $count=0;
my $m=100000;
while (my $ref = $sth->fetchrow_arrayref) {
  my($id,$subject, $predicate, $object, $type_subject,$type_object)=@$ref;
  
  $count++;
#  $m--;
#  if(!$m) {
#    warn "triple $count\n";
#    $m=100000;
#  }
  
  if($type_subject eq "u") {
    $subject=uri($subject);
  } elsif($type_subject eq "b") {
    $subject=blank($subject)
  } else {
    die "Unknown type_subject >>$type_subject<<\n";
  }
  
  $predicate=uri($predicate);
  
  if($type_object eq "u") {
    $object=uri($object);
  } elsif($type_object eq "b") {
    $object=blank($object)
  } elsif($type_object eq "l") {
    $object=literal($object);
  } else {
    die "Unknown type_object >>$type_object<<\n";
  }
  
  print "$subject $predicate $object .\n";

}

$sth->finish();

# Disconnect from the database.
$dbh->disconnect();

warn "$count triples\n";
