aers_rewrite/commit
Rewrite of ascii aers to remove verbose triples
author | Michiel Hildebrand |
---|---|
Wed Jan 30 17:37:16 2013 +0100 | |
committer | Michiel Hildebrand |
Wed Jan 30 17:37:16 2013 +0100 | |
commit | b327a2b79a71d29eba140ee17c489664e6790f2f |
tree | e3df87e90e8f27c2311ef41d592ce91ecee33535 |
parent | ef562928093a645c5f36e0115e6d1a739a0f2ee9 |
Diff style: patch stat
diff --git a/lib/ascii_simplify.pl b/lib/ascii_simplify.pl new file mode 100644 index 0000000..32d14ff --- /dev/null +++ b/lib/ascii_simplify.pl @@ -0,0 +1,109 @@ +:- module(ascii_simplify, + [simplify/0, + remove_updated/0 + ]). + +:- use_module(library(semweb/rdf_db)). +:- use_module(library(semweb/rdf_turtle_write)). +:- use_module(library(xmlrdf/rdf_rewrite)). + +user:file_search_path(ascii_simple_rdf, '../rdf/aers_ascii_simple'). + + +quarter('04Q1'). +quarter('04Q2'). +quarter('04Q3'). +quarter('04Q4'). + +:- debug(simplify). + +simplify :- + ( quarter(Q), + atom_concat(aers, Q, Graph), + atom_concat(Graph, '.ttl', RDF_FileName), + absolute_file_name(ascii_rdf(RDF_FileName), RDF_File), + absolute_file_name(ascii_simple_rdf(RDF_FileName), RDF_Simple_File), + rdf_load(RDF_File), + simplify_graph(Graph), + rdf_save_turtle(RDF_Simple_File, [graph(Graph)]), + rdf_retractall(_,_,_,Graph), + fail + ; true + ). + +simplify_graph(Graph) :- + debug(simplify, 'simplify ~w', [Graph]), + rdf_rewrite(Graph). + + +report @@ +{S, rdf:type, aers:'Report'}\ +{S, aers:followup_status, _}?, +{S, aers:foll_seq, _}?, +{S, aers:mfr_dt, _}?, +{S, aers:report_type, _}?, +{S, aers:mfr_num, _}?, +{S, aers:mfr_sndr, _}?, +{S, aers:e_sub, _}?, +{S, aers:rept_dt, _}?, +{S, aers:reporter_type, _}?, +{S, aers:source, _}?, +{S, aers:to_mfr, _}?, +{S, aers:confid, _} +<=> +true. + +patient @@ +{S, rdf:type, aers:'Patient'}\ +{S, aers:age_type, _}?, +{S, aers:weight_type, _}?, +{S, aers:death_dt, _}? +<=> +true. + +drug @@ +{S, rdf:type, aers:'Drug'}\ +{S, aers:name_type, _}?, +{S, aers:dose_vbm, _}?, +{S, aers:dechal, _}?, +{S, aers:rechal, _}?, +{S, aers:lot_num, _}?, +{S, aers:exp_dt, _}?, +{S, aers:nda_num, _}? +<=> +true. + +therapy @@ +{S, rdf:type, aers:'Therapy'}, +{_, aers:therapy, S}, +{S, _, _} +<=> +true. + +% TBD load all files then remove the updated and save the update graphs + +remove_updated :- + ( rdf(_,aers:case,Case), + remove_updated(Case), + fail + ; true + ). + +remove_updated(Case) :- + findall(S,rdf(S,aers:case,Case),Reports), + Reports = [_,_|_], + sort_by_id(Reports, Sorted), + reverse(Sorted, [_Latest|Updated]), + maplist(retract_update, Updated). + +sort_by_id(Reports, Sorted) :- + maplist(add_id_key, Reports, Pairs0), + keysort(Pairs0, Pairs), + pairs_values(Pairs, Sorted). + +add_id_key(Report, Id-Report) :- + rdf(Report, aers:isr, literal(Id)), + !. + +retract_update(R) :- + rdf_retractall(R, _, _).