From 67556f40c1653f1082ee1881bc9fa43e629151d9 Mon Sep 17 00:00:00 2001 From: Alliyya Mo Date: Thu, 24 Aug 2017 15:41:49 -0400 Subject: [PATCH] Generic taxonomy generator created #11 language still needs to be dealt with --- taxonomyGenerator/createTaxonomy.pl | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 taxonomyGenerator/createTaxonomy.pl diff --git a/taxonomyGenerator/createTaxonomy.pl b/taxonomyGenerator/createTaxonomy.pl new file mode 100755 index 0000000..0ea8477 --- /dev/null +++ b/taxonomyGenerator/createTaxonomy.pl @@ -0,0 +1,55 @@ +#!/usr/bin/env perl +#Usage: +# ./createTaxonomy ontology.owl Class +# Class that you're interested in building a taxonomy for ex. +# ./createTaxonomy cwrc.owl Religion +# ./createTaxonomy cwrc.owl PoliticalAffiliation +use strict; +use RDF::Trine; +use RDF::Query; +use XML::LibXML; +use Digest::MD5 qw(md5 md5_hex); + +my $xml_parser = XML::LibXML->new(); +$xml_parser->clean_namespaces(1); +my $store = RDF::Trine::Store::Memory->new(); +my $model = RDF::Trine::Model->new($store); +# parse some web data into the model, and print the count of resulting RDF statements +if (scalar(@ARGV) != 2) { + print "Insufficent Argument Provided\n"; + print "Expected Usage:\n"; + print "\t./createTaxonomy ontology.owl Class\n"; + print "Will output a diagraph with instance nodes of that class linking to their uri's\n"; + exit(0); +} +my $raw_file = 'file:'. $ARGV[0]; +my $taxonomy = $ARGV[1]; + + +RDF::Trine::Parser->parse_url_into_model( $raw_file, $model ); +my @allmaps ; +my $query = RDF::Query->new('SELECT * WHERE { ?uri . +?uri ?label . +FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "en")) +}'); +my $iterator = $query->execute( $model ); +print "digraph ".$taxonomy."Graph {\n + size=\"30,30\"; + margin=0;\n"; + +while (my $row = $iterator->next) { + my $astring = $row->{"uri"}->as_string(); + my $innerquery = RDF::Query->new('SELECT * WHERE { ' . $astring . ' ?upper . }'); + my $inneriterator = $innerquery->execute( $model ); + my $lhs = "X" . substr(md5_hex($astring),1,5); + while (my $tworow = $inneriterator->next) { + my $rhs = "X" . substr(md5_hex($tworow->{"upper"}->as_string()),1,5); + print " " .$lhs . " -> " . $rhs . "\n"; + } + my $uri = $astring; + $uri =~ s//"/; + print " $lhs [label=\"" . $row->{"label"}->value()."\" URL=".$uri."target=\"_parent\"]\n"; +} +print "}"; +exit 0; \ No newline at end of file