Skip to content

Commit f7f05b4

Browse files
author
Rinke Hoekstra
committed
Now we're getting somewhere!!!
1 parent e20ac2e commit f7f05b4

5 files changed

Lines changed: 163 additions & 51 deletions

File tree

src/app/static/guidelines.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ $( document ).ready(function() {
33
$('#rec_list_row').hide();
44

55
$('#inferenceButton').on('click',function(){
6+
$('#inferenceButton').text("Working...");
67
$.get('/getinference',function(data){
78
console.log(data);
89

src/app/templates/recommendations_list.html

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,64 @@
33
<h3>{{ guideline_label }}</h3>
44
<h4>Recommendations</h4>
55
<div class="list-group">
6-
{% for grouper, list in recommendations|groupby('rec_label') %}
6+
{% for grouper, list in recommendations_menu|groupby('rec_label') %}
77
{% for e in list %}
88
{% if loop.first %}
9-
<a href="#" class="list-group-item" uri='{{e.rec.value }}'>
10-
<span class="list-group-item-heading">{{ grouper.value }} <span class="badge alert-info">{{ e.rec_stripped.value }}</span></span>
9+
<a href="#" class="list-group-item" uri='{{e.rec.value }}'>
10+
<span class="list-group-item-heading">{{ e.rec_label.value }}<br/><small>
1111
{% endif %}
12+
<span class="badge alert-info">{{ e.rec_stripped.value }}</span>
1213
{% if loop.last %}
13-
</a>
14+
</small>
15+
</span>
16+
</a>
1417
{% endif %}
1518
{% endfor %}
1619
{% endfor %}
1720
</div>
1821
</div>
22+
23+
24+
25+
1926
<div class="col-md-8">
2027
{% for grouper, list in recommendations|groupby('rec_label') %}
2128
{% for e in list %}
2229
{% if loop.first %}
2330
{% set uri = e.rec.value %}
2431
<div class="transition" style="display: none;" transition_container_for='{{e.rec.value}}'>
2532
<h3>{{ grouper.value }} <small>({{e.rec_stripped.value }})</small></h3>
26-
{% if 'irec_label' in e or 'erec_label' in e %}
27-
<table class="table table-striped">
28-
<tbody>
29-
<tr><th class='col-md-3'>Type</th><td>
30-
{% if 'irec_label' in e %}
31-
<span class="badge alert-warning" target="{{ e.irec.value }}">{{ e.irec_label.value }}</span>
32-
{% endif %}
33-
{% if 'erec_label' in e %}
34-
<span class="badge alert-error" target="{{ e.erec.value }}">{{ e.erec_label.value }}</span>
35-
{% endif %}
36-
</td></tr>
37-
<tr><th>Interactions</th><td>
38-
{% endif %}
33+
{% set iiheader = False %}
34+
{% set eiheader = False %}
35+
{% set caheader = False %}
3936
{% endif %}
40-
{% if 'internal_rec_label' in e and e.internal_rec.value != e.rec.value %}
41-
<span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_label.value }}</span>
37+
{% if 'internal_rec_label' in e and e.internal_rec.value != uri %}
38+
{% if not iiheader %}
39+
<h4>Internal Interactions</h4>
40+
{% set iiheader = True %}
41+
{% endif %}
42+
<div class="list-group-item">This recommendation interacts with the recommendation to <strong>{{ e.internal_rec_label.value }}</strong> <span class="badge alert-warning" target="{{ e.internal_rec.value }}">{{ e.internal_rec_stripped.value }}</span></div>
4243
{% endif %}
4344
{% if 'external_rec_label' in e and e.external_rec.value != e.rec.value %}
44-
<span class="badge alert-error" target="{{ e.external_rec.value }}">{{ e.external_rec_label.value }}</span>
45+
{% if not eiheader %}
46+
<h4>External Interactions</h4>
47+
{% set eiheader = True %}
48+
{% endif %}
49+
<div class="list-group-item">This recommendation interacts with the recommendation to <strong>{{ e.external_rec_label.value }}</strong>
50+
<span class="badge alert-error" target="{{ e.external_rec.value }}">{{ e.external_rec_stripped.value }}</span>
51+
because <strong>{{ e.drug1_label.value}}</strong> interacts with <strong>{{ e.drug2_label.value }}</strong>.
52+
</div>
53+
{% endif %}
54+
{% if 'care_action_label' in e %}
55+
{% if not caheader %}
56+
<h4>Alternative Care Actions</h4>
57+
{% set caheader = True %}
58+
{% endif %}
59+
<div class="list-group-item">This recommendation interacts with another recommendation because of the use of <strong>{{ e.drug1_label.value }}</strong> in the <strong>{{ e.care_action_label.value }}</strong> care action. Consider administering <strong>{{ e.drug2_label.value}}</strong> as alternative.
60+
</div>
4561
{% endif %}
4662
{% if loop.last %}
47-
{%if 'irec_label' in e %}
48-
</td>
49-
</tbody>
50-
</table>
51-
{% endif %}
63+
<hr/>
5264
<div transitions_for='{{ uri }}'>
5365
</div>
5466
</div>

src/app/views.py

Lines changed: 115 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import json
66
from app import app
77
import uuid
8+
import pprint
89

910
ENDPOINT_URL = 'http://localhost:5820/guidelines/query'
1011
UPDATE_URL = 'http://localhost:5820/guidelines/update'
@@ -73,32 +74,103 @@ def recommendations():
7374
guideline_uri = request.args.get('uri', '')
7475
guideline_label = request.args.get('label','')
7576

77+
78+
79+
7680
query = PREFIXES + """
77-
SELECT DISTINCT ?rec ?rec_label ?crec ?irec ?erec WHERE
81+
SELECT DISTINCT ?rec ?rec_label WHERE
7882
{
7983
?rec tmr4i:partOf <""" + guideline_uri + """> .
8084
?rec rdfs:label ?rec_label .
8185
?rec a owl:NamedIndividual .
82-
OPTIONAL {
83-
?rec tmr4i:interactsInternallyWith ?crec .
84-
?crec a owl:NamedIndividual .
85-
}
86-
OPTIONAL {
87-
?rec a tmr4i:InternallyInteractingRecommendation .
88-
BIND(tmr4i:InternallyInteractingRecommendation AS ?irec)
86+
}"""
87+
88+
recommendations_menu = sparql(query, strip=True)
89+
90+
91+
## initialize the rest of the results with the stuff for the recommendations menu
92+
all_results = []
93+
all_results.extend(recommendations_menu)
94+
95+
query = PREFIXES + """
96+
SELECT DISTINCT * WHERE
97+
{
98+
?rec tmr4i:partOf <""" + guideline_uri + """> .
99+
?rec rdfs:label ?rec_label .
100+
?rec a owl:NamedIndividual .
101+
?rec tmr4i:interactsInternallyWith ?internal_rec .
102+
?internal_rec rdfs:label ?internal_rec_label .
103+
?internal_rec a tmr4i:Recommendation .
104+
?internal_rec a owl:NamedIndividual .
105+
BIND(tmr4i:InternallyInteractingRecommendation AS ?irec)
106+
}"""
107+
108+
all_results.extend(sparql(query, strip=True))
109+
110+
query = PREFIXES + """
111+
SELECT DISTINCT * WHERE
112+
{
113+
?rec tmr4i:partOf <""" + guideline_uri + """> .
114+
?rec rdfs:label ?rec_label .
115+
?rec a owl:NamedIndividual .
116+
?rec tmr4i:interactsExternallyWith ?external_rec .
117+
?external_rec rdfs:label ?external_rec_label .
118+
?external_rec a tmr4i:Recommendation .
119+
?external_rec a owl:NamedIndividual .
120+
?i tmr4i:relates ?rec .
121+
?i tmr4i:relates ?external_rec .
122+
?i tmr4i:drug ?drug1 .
123+
?drug1 rdfs:label ?drug1_label .
124+
?i tmr4i:drug ?drug2 .
125+
?drug2 rdfs:label ?drug2_label .
126+
FILTER(?drug1 != ?drug2)
127+
BIND(tmr4i:ExternallyInteractingRecommendation AS ?erec)
89128
}
90-
OPTIONAL {
91-
?rec a tmr4i:ExternallyInteractingRecommendation .
129+
"""
130+
131+
all_results.extend(sparql(query, strip=True))
132+
133+
query = PREFIXES + """
134+
SELECT DISTINCT * WHERE
135+
{
136+
?rec tmr4i:partOf <""" + guideline_uri + """> .
137+
?rec rdfs:label ?rec_label .
138+
?rec a owl:NamedIndividual .
139+
?i tmr4i:relates ?rec .
140+
?i tmr4i:action ?care_action .
141+
?care_action rdfs:label ?care_action_label .
142+
?i tmr4i:drug ?drug1 .
143+
?drug1 rdfs:label ?drug1_label .
144+
?i tmr4i:alternative_drug ?drug2 .
145+
?drug2 rdfs:label ?drug2_label .
92146
BIND(tmr4i:ExternallyInteractingRecommendation AS ?erec)
93147
}
94-
}"""
148+
"""
149+
all_results.extend(sparql(query, strip=True))
95150

151+
log.debug(all_results)
96152

97-
recommendations = sparql(query, strip=True)
153+
recommendations = []
154+
double_drugs = set()
155+
print len(all_results)
156+
for r in all_results :
157+
if 'drug1_label' and 'drug2_label' in r:
158+
d1 = r['drug1_label']['value']
159+
d2 = r['drug2_label']['value']
160+
161+
if (d2,d1) in double_drugs:
162+
log.debug("Drug couple already found")
163+
else :
164+
double_drugs.add((d1,d2))
165+
recommendations.append(r)
166+
else :
167+
recommendations.append(r)
168+
169+
print len(recommendations)
98170

99-
log.debug(recommendations)
171+
pprint.pprint(recommendations)
100172

101-
return render_template('recommendations_list.html', recommendations = recommendations, guideline_label = guideline_label)
173+
return render_template('recommendations_list.html', recommendations_menu = recommendations_menu, recommendations = recommendations, guideline_label = guideline_label)
102174

103175
@app.route('/gettransitions', methods=['GET'])
104176
def transitions():
@@ -111,7 +183,11 @@ def transitions():
111183
?transformable_situation rdfs:label ?transformable_situation_label .
112184
?transition tmr4i:hasExpectedPostSituation ?post_situation .
113185
?post_situation rdfs:label ?post_situation_label .
186+
?transition tmr4i:promotedBy ?care_action .
187+
?care_action rdfs:label ?care_action_label .
188+
?care_action a owl:NamedIndividual .
114189
?transition a owl:NamedIndividual .
190+
115191
?transformable_situation a owl:NamedIndividual .
116192
?post_situation a owl:NamedIndividual .
117193
OPTIONAL {
@@ -122,11 +198,13 @@ def transitions():
122198
?transition tmr4i:inverseToTransition ?inverse_transition .
123199
?inverse_transition a owl:NamedIndividual .
124200
?irec tmr4i:recommends ?inverse_transition .
201+
?irec rdfs:label ?irec_label .
125202
}
126203
OPTIONAL {
127204
?transition tmr4i:similarToTransition ?similar_transition .
128205
?similar_transition a owl:NamedIndividual .
129206
?srec tmr4i:recommends ?similar_transition .
207+
?srec rdfs:label ?srec_label .
130208
}
131209
132210
@@ -141,6 +219,9 @@ def transitions():
141219
?transformable_situation rdfs:label ?transformable_situation_label .
142220
?transition tmr4i:hasExpectedPostSituation ?post_situation .
143221
?post_situation rdfs:label ?post_situation_label .
222+
?transition tmr4i:promotedBy ?care_action .
223+
?care_action rdfs:label ?care_action_label .
224+
?care_action a owl:NamedIndividual .
144225
?transition a owl:NamedIndividual .
145226
?transformable_situation a owl:NamedIndividual .
146227
?post_situation a owl:NamedIndividual .
@@ -151,10 +232,14 @@ def transitions():
151232
OPTIONAL {
152233
?transition tmr4i:inverseToTransition ?inverse_transition .
153234
?inverse_transition a owl:NamedIndividual .
235+
?irec tmr4i:recommends ?inverse_transition .
236+
?irec rdfs:label ?irec_label .
154237
}
155238
OPTIONAL {
156239
?transition tmr4i:similarToTransition ?similar_transition .
157240
?similar_transition a owl:NamedIndividual .
241+
?srec tmr4i:recommends ?similar_transition .
242+
?srec rdfs:label ?srec_label .
158243
}
159244
BIND(IF (bound(?f_condition), ?f_condition, "none") as ?filter_condition)
160245
@@ -206,13 +291,18 @@ def sparql(query, strip=False, endpoint_url = ENDPOINT_URL):
206291
if v['type'] == 'uri' and not k+'_label' in r.keys():
207292
new_result[k+'_label'] = {}
208293
new_result[k+'_label']['type'] = 'literal'
209-
210294
new_result[k+'_label']['value'] = v['value'][v['value'].rfind('/')+1:]
295+
211296
elif not k+'_label' in r.keys():
212297
new_result[k+'_label'] = {}
213298
new_result[k+'_label']['type'] = 'literal'
214299
new_result[k+'_label']['value'] = v['value']
215300

301+
new_result[k+'_stripped'] = {}
302+
new_result[k+'_stripped']['type'] = 'literal'
303+
new_result[k+'_stripped']['value'] = v['value'][v['value'].rfind('/')+1:]
304+
305+
216306
new_result[k] = v
217307

218308
new_results.append(new_result)
@@ -279,7 +369,7 @@ def internal_recommendation_interaction():
279369
else :
280370
print "result already found", (two,one)
281371

282-
log.debug(len(deduped_results), "interactions found.")
372+
log.debug("{} interactions found.".format(len(deduped_results)))
283373

284374
update_template = PREFIXES + """
285375
INSERT DATA
@@ -351,16 +441,16 @@ def incompatible_drugs_external_interaction():
351441
else :
352442
print "result already found", (RTwo,ROne,DTwo,DOne)
353443

354-
log.debug(len(deduped_results) + " external interactions found.")
444+
log.debug("{} external interactions found.".format(len(deduped_results)))
355445

356446
update_template = PREFIXES + """
357447
INSERT DATA
358448
{{
359449
tmr4i:{0} a tmr4i:IncompatibleDrugExternalInteraction, owl:NamedIndividual .
360450
tmr4i:{0} tmr4i:relates <{1}> .
361451
tmr4i:{0} tmr4i:relates <{2}> .
362-
tmr4i:{0} tmr4i:relates <{3}> .
363-
tmr4i:{0} tmr4i:relates <{4}> .
452+
tmr4i:{0} tmr4i:drug <{3}> .
453+
tmr4i:{0} tmr4i:drug <{4}> .
364454
<{1}> tmr4i:interactsExternallyWith <{2}> .
365455
<{2}> tmr4i:interactsExternallyWith <{1}> .
366456
}}
@@ -416,8 +506,8 @@ def alternative_drugs_external_interaction():
416506
?iir a tmr4i:AlternativeDrugExternalInteraction .
417507
?iir tmr4i:relates ?rec .
418508
?iir tmr4i:relates ?ca .
419-
?iir tmr4i:relates ?d .
420-
?iir tmr4i:relates ?dALT .
509+
?iir tmr4i:drug ?d .
510+
?iir tmr4i:alternative_drug ?dALT .
421511
}
422512
423513
}
@@ -439,16 +529,16 @@ def alternative_drugs_external_interaction():
439529
else :
440530
print "result already found", (rec,ca,DTwo,DOne)
441531

442-
log.debug(len(deduped_results) + " external interactions found.")
532+
log.debug("{} external alternative interactions found.".format(len(deduped_results)))
443533

444534
update_template = PREFIXES + """
445535
INSERT DATA
446536
{{
447537
tmr4i:{0} a tmr4i:AlternativeDrugExternalInteraction, owl:NamedIndividual .
448538
tmr4i:{0} tmr4i:relates <{1}> .
449-
tmr4i:{0} tmr4i:relates <{2}> .
450-
tmr4i:{0} tmr4i:relates <{3}> .
451-
tmr4i:{0} tmr4i:relates <{4}> .
539+
tmr4i:{0} tmr4i:action <{2}> .
540+
tmr4i:{0} tmr4i:drug <{3}> .
541+
tmr4i:{0} tmr4i:alternative_drug <{4}> .
452542
}}
453543
"""
454544

src/data/TMR4I.ttl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@
2424
tmr4i:derivesFrom rdf:type owl:ObjectProperty .
2525

2626

27+
### http://guidelines.data2semantics.org/vocab/drug
28+
29+
tmr4i:drug rdf:type owl:ObjectProperty .
30+
31+
### http://guidelines.data2semantics.org/vocab/action
32+
33+
tmr4i:action rdf:type owl:ObjectProperty .
34+
35+
2736

2837
### http://guidelines.data2semantics.org/vocab/hasExpectedPostSituation
2938

src/reset-stardog.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22

33
echo "Dropping database 'guidelines'"
4-
stardog data remove --all guidelines
4+
stardog-admin db drop guidelines
55

66
./create-stardog.sh
77

0 commit comments

Comments
 (0)