-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Brian Duggan
committed
Nov 20, 2013
1 parent
5d6cf2a
commit ed69f2f
Showing
13 changed files
with
446 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
create table gcmd_keyword ( | ||
identifier varchar not null primary key, | ||
parent_identifier varchar constraint fk_parent | ||
references gcmd_keyword(identifier) | ||
deferrable initially deferred, | ||
label varchar, | ||
definition varchar | ||
); | ||
|
||
create view vw_gcmd_keyword as | ||
select | ||
coalesce(level4.identifier, | ||
level3.identifier, | ||
level2.identifier, | ||
level1.identifier, | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
level1.label as level1, | ||
level2.label as level2, | ||
level3.label as level3, | ||
level4.label as level4 | ||
from gcmd_keyword wrapper left join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
left join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
left join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
left join gcmd_keyword level1 on level1.parent_identifier = term.identifier | ||
left join gcmd_keyword level2 on level2.parent_identifier = level1.identifier | ||
left join gcmd_keyword level3 on level3.parent_identifier = level2.identifier | ||
left join gcmd_keyword level4 on level4.parent_identifier = level3.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords'; | ||
|
||
create table publication_gcmd_keyword_map ( | ||
publication_id integer not null references publication(id) on delete cascade on update cascade, | ||
gcmd_keyword_identifier varchar not null references gcmd_keyword(identifier) on delete cascade on update cascade, | ||
primary key (publication_id, gcmd_keyword_identifier) | ||
); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
create view vw_gcmd_keyword as | ||
select | ||
coalesce(level4.identifier, | ||
level3.identifier, | ||
level2.identifier, | ||
level1.identifier, | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
level1.label as level1, | ||
level2.label as level2, | ||
level3.label as level3, | ||
level4.label as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
inner join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
inner join gcmd_keyword level1 on level1.parent_identifier = term.identifier | ||
inner join gcmd_keyword level2 on level2.parent_identifier = level1.identifier | ||
inner join gcmd_keyword level3 on level3.parent_identifier = level2.identifier | ||
inner join gcmd_keyword level4 on level4.parent_identifier = level3.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
UNION | ||
select | ||
coalesce( | ||
level3.identifier, | ||
level2.identifier, | ||
level1.identifier, | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
level1.label as level1, | ||
level2.label as level2, | ||
level3.label as level3, | ||
NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
inner join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
inner join gcmd_keyword level1 on level1.parent_identifier = term.identifier | ||
inner join gcmd_keyword level2 on level2.parent_identifier = level1.identifier | ||
inner join gcmd_keyword level3 on level3.parent_identifier = level2.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
UNION | ||
select | ||
coalesce( | ||
level2.identifier, | ||
level1.identifier, | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
level1.label as level1, | ||
level2.label as level2, | ||
NULL as level3, | ||
NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
inner join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
inner join gcmd_keyword level1 on level1.parent_identifier = term.identifier | ||
inner join gcmd_keyword level2 on level2.parent_identifier = level1.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
UNION | ||
select | ||
coalesce( | ||
level1.identifier, | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
level1.label as level1, | ||
NULL as level2, NULL as level3, NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
inner join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
inner join gcmd_keyword level1 on level1.parent_identifier = term.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
UNION | ||
select | ||
coalesce( | ||
term.identifier, | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
term.label as term, | ||
NULL as level1, NULL as level2, NULL as level3, NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
inner join gcmd_keyword term on term.parent_identifier = topic.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
union | ||
select | ||
coalesce( | ||
topic.identifier, | ||
category.identifier) as identifier, | ||
category.label as category, | ||
topic.label as topic, | ||
NULL as term, NULL as level1, NULL as level2, NULL as level3, NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
inner join gcmd_keyword topic on topic.parent_identifier = category.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
union | ||
select | ||
coalesce( category.identifier) as identifier, | ||
category.label as category, | ||
NULL as topic, NULL as term, NULL as level1, NULL as level2, NULL as level3, NULL as level4 | ||
from gcmd_keyword wrapper inner join gcmd_keyword category on category.parent_identifier = wrapper.identifier | ||
where | ||
wrapper.identifier='1eb0ea0a-312c-4d74-8d42-6f1ad758f999' and wrapper.label='Science Keywords' | ||
; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#!/usr/bin/env perl | ||
|
||
use Mojo::UserAgent; | ||
use Tuba::DB::Objects qw/-nicknames -autoconnect/; | ||
use HTML::Entities qw/decode_entities/; | ||
use v5.14; | ||
|
||
my $me = $ENV{USER} || 'unknown'; | ||
my $ua = Mojo::UserAgent->new(); | ||
my $tx = $ua->get(q[http://gcmdservices.gsfc.nasa.gov/static/kms/sciencekeywords/sciencekeywords.rdf]); | ||
|
||
# http://gcmdservices.gsfc.nasa.gov/static/kms/concept/536a86bd-3dd1-4f4a-9b4a-222a12746db5 | ||
my $changes = 0; | ||
|
||
my $db = GcmdKeyword->meta->db; | ||
|
||
$db->do_transaction(sub { | ||
$db->dbh->do('set constraints all deferred;'); | ||
$tx->res->dom->find('rdf\:RDF > skos\:Concept')->each(sub { | ||
my $dom = shift; | ||
my $identifier = $dom->attr('rdf:about'); | ||
my $label = [ $dom->find('skos\:prefLabel')->each ]->[0]->text; | ||
my @broader = $dom->find('skos\:broader')->each; | ||
die "not a tree" if @broader > 1; | ||
my $parent; | ||
if ($parent = $broader[0]) { | ||
$parent = $parent->attr('rdf:resource'); | ||
my $gk = GcmdKeyword->new(identifier => $parent); | ||
unless ($gk->load(speculative => 1)) { | ||
$gk->save(audit_user => $me) or die $gk->error; | ||
} | ||
} | ||
my @definition = $dom->find('skos\:definition')->each; | ||
my $definition = $definition[0]->text if @definition; | ||
|
||
my $kw = GcmdKeyword->new( identifier => $identifier ); | ||
$kw->load(speculative => 1); | ||
$kw->parent($parent); | ||
$kw->label($label || undef); | ||
$definition =~ s/ / /g; | ||
$kw->definition($definition); | ||
$kw->save(audit_user => $me) or die $definition; | ||
}); | ||
}); | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package Tuba::DB::Object::GcmdKeyword; | ||
use Tuba::Log; | ||
use Data::Dumper; | ||
# Tuba::DB::Mixin::Object::GcmdKeyword; | ||
|
||
sub stringify { | ||
my $self = shift; | ||
my %args = @_; | ||
if ($args{short}) { | ||
return $self->label; | ||
} | ||
if (my $parent = $self->parent) { | ||
return join '>', $self->parent->label, $self->label; | ||
} | ||
return $self->label; | ||
} | ||
|
||
sub new_from_flat { | ||
my $c = shift; | ||
my %h = @_; | ||
# Example : | ||
# { | ||
# 'id' => '5286', | ||
# 'category' => 'EARTH SCIENCE', | ||
# 'topic' => 'HUMAN DIMENSIONS', | ||
# 'term' => 'ENVIRONMENTAL IMPACTS', | ||
# 'level1' => 'FOSSIL FUEL BURNING' | ||
# 'level2' => undef, | ||
# 'level3' => undef, | ||
# }; | ||
my $new; | ||
my @cols = qw/category topic term level1 level2 level3/; | ||
my %cols; | ||
@cols{@cols} = @h{@cols}; | ||
my $ds = DBIx::Simple->new(Tuba::Plugin::Db->connection->dbh); | ||
my @rows = $ds->select('vw_gcmd_keyword', '*', \%cols )->hashes; | ||
return unless @rows > 0; | ||
unless (@rows==1) { | ||
logger()->warn("we got ".@rows." rows for ".dumpit(\%h)); | ||
} | ||
my $identifier = $rows[0]->{identifier}; | ||
return $c->new(identifier => $identifier); | ||
} | ||
|
||
1; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.