virgil/commit
ADD grammer to generate provenance in RDF prov-o
author | Michiel Hildebrand |
---|---|
Tue Jun 4 17:23:39 2013 +0200 | |
committer | Michiel Hildebrand |
Tue Jun 4 17:23:39 2013 +0200 | |
commit | fd8a2317c0dfe6ee37b09ccfa0871b67b9f85e17 |
tree | 6f18e2cfd7a09c8890be5ba72a0c209864d66c68 |
parent | 3055a0cfc354b59c96d9264bbb75a9185601b83d |
Diff style: patch stat
diff --git a/api/prov.pl b/api/prov.pl new file mode 100644 index 0000000..dc12d3a --- /dev/null +++ b/api/prov.pl @@ -0,0 +1,120 @@ +:- module(generate_prov, + []). + + +:- use_module(library(http/http_dispatch)). + + +prov_triples(Term, Tripples) :- + prov_triples(Term, Tripples, []). + +prov_triples(prr(Value, Drug, DrugNames, Reaction, Counts)) --> + prr(Value, Drug, DrugNames, Reaction, Counts, _). + +prr(Value, Drug, DrugSelection, Reaction, Counts, PRR) --> + { rdf_bnode(PRR) }, + prr_compute(Drug, DrugSelection, Reaction, Counts, Process), + [ rdf(PRR, rdf:type, prov:'Entity'), + rdf(PRR, rdf:value, literal(Value)), + rdf(PRR, prov:wasGeneratedBy, Process) + ]. + +prr_compute(Drug, DrugSelection, Reaction, Counts, URI) --> + { Counts = counts(D,E,DE,A), + format(atom(C), '(~w/~w)/((~w-~w)/(~w-~w))', + [DE,D,E,DE,A,D]), + http_link_to_id(http_measurements_prr, [reaction(Reaction)], URI) + }, + all_reports(A, Reports), + drug_reports(Drug, DrugSelection, D, Reports, Drugs), + reaction_reports(Reaction, E, Reports, Reactions), + drug_reaction_reports(Drugs, Reactions, DE, DrugReactions), + [ rdf(URI, rdf:type, prov:'Activity'), + rdf(URI, prov:used, Drugs), + rdf(URI, prov:used, Reactions), + rdf(URI, prov:used, Reports), + rdf(URI, prov:used, DrugReactions), + rdf(URI, rdf:value, literal(C)) + ]. + +all_reports(Count, URI) --> + { rdf_bnode(URI) + }, + [ rdf(URI, rdf:type, prov:'Entity'), + rdf(URI, rdfs:label, literal('AERS Reports')), + rdf(URI, rdf:value, literal(Count)) + ]. + +drug_reports(Drug, DrugSelection, Count, Reports, URI) --> + { rdf_bnode(URI) + }, + drug_report_select(Drug, DrugSelection, Reports, DrugSelect), + [ rdf(URI, rdf:type, prov:'Entity'), + rdf(URI, rdf:value, literal(Count)), + rdf(URI, prov:wasGeneratedBy, DrugSelect) + ]. + +reaction_reports(Reaction, Count, Reports, URI) --> + { http_link_to_id(http_reports, [reaction(Reaction)], URI) + }, + [ rdf(URI, rdf:type, prov:'Entity'), + rdf(URI, prov:specializationOf, Reports), + rdf(URI, rdf:value, literal(Count)) + ]. + +drug_reaction_reports(Drugs, Reactions, Count, URI) --> + [ rdf(URI, rdf:type, prov:'Entity'), + rdf(URI, prov:specializationOf, Drugs), + rdf(URI, prov:specializationOf, Reactions), + rdf(URI, rdf:value, literal(Count)) + ]. + + +drug_report_select(Drug, DrugSelection, Reports, URI) --> + { rdf_bnode(URI) + }, + drugs(Drug, DrugSelection, Reports), + [ rdf(URI, rdf:type, prov:'Activity'), + rdf(URI, prov:used, DrugSelection), + rdf(URI, prov:used, Reports) + ]. + +drugs(Drug, DrugSelection, Reports) --> + drug_user_select(Drug, Reports, UserSelect), + [ rdf(DrugSelection, rdf:type, prov:'Entity'), + rdf(DrugSelection, prov:wasGeneratedBy, UserSelect) + ]. + +drug_user_select(Drug, Reports, URI) --> + { rdf_bnode(URI) + }, + drug_names(names, Drug, Reports, Names), + drug_names(brands, Drug, Reports, Brands), + drug_names(synonyms, Drug, Reports, Synonyms), + [ rdf(URI, rdf:type, prov:'Activity'), + rdf(URI, prov:used, Names), + rdf(URI, prov:used, Brands), + rdf(URI, prov:used, Synonyms) + ]. + +drug_names(Type, Drug, Reports, URI) --> + { rdf_bnode(URI) + }, + drug_name_select(Type, Drug, Reports, DrugSelect), + [ rdf(URI, rdf:type, prov:'Entity'), + rdf(URI, prov:wasGeneratedBy, DrugSelect) + ]. + +drug_name_select(Type, Drug, Reports, URI) --> + { drug_name_select_uri(Type, Drug, URI) + }, + [ rdf(URI, rdf:type, prov:'Activity'), + rdf(URI, prov:used, Reports) + ]. + +drug_name_select_uri(names, Drug, URI) :- + http_link_to_id(http_drug_mentions, [q(Drug)], URI). +drug_name_select_uri(brands, Drug, URI) :- + http_link_to_id(http_drug_brand_mentions, [q(Drug)], URI). +drug_name_select_uri(synonyms, Drug, URI) :- + http_link_to_id(http_drug_synonym_mentions, [drug(Drug)], URI).