aers_rewrite/commit

Rewrite of ascii aers to remove verbose triples

authorMichiel Hildebrand
Wed Jan 30 17:37:16 2013 +0100
committerMichiel Hildebrand
Wed Jan 30 17:37:16 2013 +0100
commitb327a2b79a71d29eba140ee17c489664e6790f2f
treee3df87e90e8f27c2311ef41d592ce91ecee33535
parentef562928093a645c5f36e0115e6d1a739a0f2ee9
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, _, _).