Revision 56007
Added by Sandro La Bruzzo almost 5 years ago
modules/dli-service-portal/branches/3.0/DLI.py | ||
---|---|---|
1 |
#!/usr/bin/python |
|
2 |
|
|
3 |
from flask import Flask, jsonify, request |
|
4 |
from flask.json import JSONEncoder |
|
5 |
from eu.dnetlib.es_connector import DLIESConnector |
|
6 |
from flask_prometheus import monitor |
|
7 |
|
|
8 |
from logger import dlilogger |
|
9 |
|
|
10 |
DLI_INDEX = None |
|
11 |
ES_HOST = None |
|
12 |
|
|
13 |
|
|
14 |
def read_properies(): |
|
15 |
f = open('api.properties') |
|
16 |
for line in f: |
|
17 |
s = line.strip().split('=') |
|
18 |
if s[0] == 'api.index': |
|
19 |
DLI_INDEX = s[1] |
|
20 |
if s[1] == 'es_index': |
|
21 |
ES_HOST = [x.strip() for x in s[1].split(',')] |
|
22 |
|
|
23 |
|
|
24 |
class MyJSONEncoder(JSONEncoder): |
|
25 |
def default(self, obj): |
|
26 |
return obj.__dict__ |
|
27 |
|
|
28 |
|
|
29 |
app = Flask(__name__) |
|
30 |
app.debug = False |
|
31 |
app.json_encoder = MyJSONEncoder |
|
32 |
|
|
33 |
base_dnet_url = "http://aggregator-dli.openaire.eu/dli/" |
|
34 |
|
|
35 |
pid_resolver = { |
|
36 |
"pdb": "http://www.rcsb.org/pdb/explore/explore.do?structureId=%s", |
|
37 |
"ncbi-n": "http://www.ncbi.nlm.nih.gov/gquery/?term=%s", |
|
38 |
"pmid": "http://www.ncbi.nlm.nih.gov/pubmed/%s", |
|
39 |
"pmcid": "http://www.ncbi.nlm.nih.gov/pmc/articles/%s", |
|
40 |
"pubmedid": "http://www.ncbi.nlm.nih.gov/pubmed/%s", |
|
41 |
"doi": "http://dx.doi.org/%s", |
|
42 |
"genbank": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
43 |
"nuccore": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
44 |
"swiss-prot": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
45 |
"arrayexpress": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
46 |
"biomodels": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
47 |
"bmrb": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
48 |
"ena": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
49 |
"geo": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
50 |
"ensembl": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
51 |
"mgi": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
52 |
"bind": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
53 |
"pride": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
54 |
"ddbj": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
55 |
"bioproject": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
56 |
"embl": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
57 |
"sra": "http://www.ncbi.nlm.nih.gov/nucest/%s?report=genbank", |
|
58 |
} |
|
59 |
|
|
60 |
|
|
61 |
class InvalidUsage(Exception): |
|
62 |
status_code = 400 |
|
63 |
|
|
64 |
def __init__(self, message, status_code=None, payload=None): |
|
65 |
Exception.__init__(self) |
|
66 |
self.message = message |
|
67 |
if status_code is not None: |
|
68 |
self.status_code = status_code |
|
69 |
self.payload = payload |
|
70 |
|
|
71 |
def to_dict(self): |
|
72 |
rv = dict(self.payload or ()) |
|
73 |
rv['message'] = self.message |
|
74 |
return rv |
|
75 |
|
|
76 |
|
|
77 |
# Routes |
|
78 |
@app.route('/') |
|
79 |
def root(): |
|
80 |
return app.send_static_file('index.html') |
|
81 |
|
|
82 |
|
|
83 |
@app.route('/<path:path>') |
|
84 |
def static_proxy(path): |
|
85 |
# send_static_file will guess the correct MIME type |
|
86 |
return app.send_static_file(path) |
|
87 |
|
|
88 |
|
|
89 |
@app.route('/api/item/<path:identifier>', methods=['post', 'get']) |
|
90 |
def get_item(identifier): |
|
91 |
if identifier: |
|
92 |
object_type = request.form.get('type') |
|
93 |
start = request.form.get('from') |
|
94 |
if object_type and len(object_type) == 0: |
|
95 |
object_type = None |
|
96 |
if start and len(start) == 0: |
|
97 |
start = None |
|
98 |
elif start: |
|
99 |
start = int(start) |
|
100 |
connector = DLIESConnector() |
|
101 |
return jsonify(result=connector.item_by_id(identifier, object_type, start)) |
|
102 |
else: |
|
103 |
raise InvalidUsage('This view is gone', status_code=410) |
|
104 |
|
|
105 |
|
|
106 |
@app.route('/api/main_page_stats', methods=['get']) |
|
107 |
def main_page_stats(): |
|
108 |
connector= DLIESConnector() |
|
109 |
return jsonify(result=connector.get_main_page_stats()) |
|
110 |
|
|
111 |
@app.route('/api/stats/', methods=['post', 'get']) |
|
112 |
def stats(): |
|
113 |
raise Exception("Method to be implemented") |
|
114 |
# q = QueryResolver(host, base_dnet_url) |
|
115 |
# return jsonify(stats=q.get_stats()) |
|
116 |
|
|
117 |
|
|
118 |
@app.route('/api/ds_info/', methods=['post', 'get']) |
|
119 |
def info(): |
|
120 |
raise Exception("Method to be implemented") |
|
121 |
|
|
122 |
|
|
123 |
@app.route('/api/stats_detail/', methods=['post', 'get']) |
|
124 |
def stats_detail(): |
|
125 |
return "" |
|
126 |
|
|
127 |
|
|
128 |
@app.route('/api/resolveId', methods=['get']) |
|
129 |
def resolveIdentifier(): |
|
130 |
pid = request.form.get('pid') |
|
131 |
pid_type = request.form.get('pid_type') |
|
132 |
if pid_type!= None: |
|
133 |
if pid_type.lower() in pid_resolver: |
|
134 |
return pid_resolver[pid_type.lower()] % pid |
|
135 |
elif pid_type.lower().strip() == 'url': |
|
136 |
return pid |
|
137 |
else: |
|
138 |
return "http://identifiers.org/%s:%s" % (pid_type, pid) |
|
139 |
return "" |
|
140 |
|
|
141 |
|
|
142 |
|
|
143 |
@app.route('/api/queryPid/', methods=['post']) |
|
144 |
def query_pid(): |
|
145 |
if 'pid' in request.form: |
|
146 |
print "pid Request for %s "%request.form['pid'] |
|
147 |
connector = DLIESConnector() |
|
148 |
result = connector.query_by_id(request.form['pid']) |
|
149 |
return jsonify(result=result) |
|
150 |
|
|
151 |
|
|
152 |
@app.route('/api/post/', methods=['post', 'get']) |
|
153 |
def query_post(): |
|
154 |
action = None |
|
155 |
query = None |
|
156 |
filter_key = None |
|
157 |
result = {} |
|
158 |
|
|
159 |
start = 0 |
|
160 |
if 'action' in request.form: |
|
161 |
action = request.form['action'] |
|
162 |
if 'query' in request.form: |
|
163 |
query = request.form['query'] |
|
164 |
if 'start' in request.form: |
|
165 |
start = 0 |
|
166 |
try: |
|
167 |
start = int(request.form.get('start',0)) |
|
168 |
except: |
|
169 |
pass |
|
170 |
if 'filter' in request.form: |
|
171 |
filter_key = request.form['filter'] |
|
172 |
|
|
173 |
if action == 'query' and query is not None: |
|
174 |
connector = DLIESConnector() |
|
175 |
try: |
|
176 |
result = connector.simple_query(query, start=start, user_filter=filter_key) |
|
177 |
except Exception as e: |
|
178 |
print e |
|
179 |
return jsonify(result=result) |
|
180 |
else: |
|
181 |
return jsonify(error={'error_code': 'an error occur during query on server'}) |
|
182 |
|
|
183 |
|
|
184 |
if __name__ == '__main__': |
|
185 |
|
|
186 |
app.logger.addHandler(dlilogger) |
|
187 |
# monitor(app, port=8000) |
|
188 |
# app.run() |
|
189 |
app.run(debug=True) |
modules/dli-service-portal/branches/3.0/test/dli/testES.py | ||
---|---|---|
1 |
import unittest |
|
2 |
from eu.dnetlib.es_connector import DLIESConnector |
|
3 |
import time |
|
4 |
|
|
5 |
DLI_INDEX = 'dli' |
|
6 |
ES_HOST = 'ip-90-147-167-27.ct1.garrservices.it' |
|
7 |
|
|
8 |
|
|
9 |
class TestDLIESConnector(unittest.TestCase): |
|
10 |
def setUp(self): |
|
11 |
self.connector = DLIESConnector(ES_HOST, DLI_INDEX) |
|
12 |
|
|
13 |
def testQuery(self): |
|
14 |
start_time = time.time() |
|
15 |
result = self.connector.simple_query('protein') |
|
16 |
print("---Request time: %s milliseconds ---" % ((time.time() - start_time) * 1000)) |
|
17 |
self.assertTrue(result.total > 0) |
|
18 |
|
|
19 |
def tearDown(self): |
|
20 |
self.connector = None |
|
21 |
|
|
22 |
if __name__ == '__main__': |
|
23 |
unittest.main() |
modules/dli-service-portal/branches/3.0/api.properties | ||
---|---|---|
1 |
api.index = dli_shadow |
|
2 |
es_index = ip-90-147-167-25.ct1.garrservices.it,ip-90-147-167-26.ct1.garrservices.it,ip-90-147-167-27.ct1.garrservices.it, ip-90-147-167-28.ct1.garrservices.it |
modules/dli-service-portal/branches/3.0/logger.py | ||
---|---|---|
1 |
import logging |
|
2 |
|
|
3 |
dlilogger = logging.getLogger('dli') |
|
4 |
hdlr = logging.FileHandler('dli.log') |
|
5 |
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') |
|
6 |
hdlr.setFormatter(formatter) |
|
7 |
dlilogger.addHandler(hdlr) |
|
8 |
dlilogger.setLevel(logging.WARNING) |
modules/dli-service-portal/branches/3.0/static/partials/datasourceDetail.html | ||
---|---|---|
1 |
<div class="container"> |
|
2 |
<div class="row"> |
|
3 |
<div class="col-lg-12"> |
|
4 |
<h3>Datasource Info </h3> |
|
5 |
</div> |
|
6 |
</div> |
|
7 |
|
|
8 |
<div class="row"> |
|
9 |
<div class="col-lg-12"> |
|
10 |
<img src="{{ datasource.iconURI }}" style="max-height: 100px"/> |
|
11 |
</div> |
|
12 |
</div> |
|
13 |
<div class="row"> |
|
14 |
<div class="col-lg-6"> |
|
15 |
<ul> |
|
16 |
|
|
17 |
<li>Datasource Name: <b class=blue-text>{{ datasource.officialName }}</b></li> |
|
18 |
<li>Datasource webPage: <a href="{{ datasource.webSite }}">{{ datasource.webSite }}</a></li> |
|
19 |
<li>Number of Datasets: <b>{{ lastStats.numberOfDatasets }}</b></li> |
|
20 |
<li>Number of Publications: <b>{{ lastStats.numberOfPublication }}</b></li> |
|
21 |
<li>Number of Relations: <b>{{ lastStats.numberOfRelations }}</b></li> |
|
22 |
|
|
23 |
|
|
24 |
</ul> |
|
25 |
</div> |
|
26 |
</div> |
|
27 |
|
|
28 |
<div class="row"> |
|
29 |
<div class="col-lg-12"> |
|
30 |
<ul id="myTabs" class="nav nav-tabs text-center" role="tablist"> |
|
31 |
<li role="presentation" class="active"><a href="#stats" role="tab" id="profile-tab" data-toggle="tab" |
|
32 |
aria-controls="profile" aria-expanded="false"><h4> |
|
33 |
Statistics</h4></a></li> |
|
34 |
<li role="presentation"><a href="#dataset" id="home-tab" role="tab" data-toggle="tab" |
|
35 |
aria-controls="home" aria-expanded="true"><h4>Datasets</h4></a></li> |
|
36 |
<li role="presentation"><a href="#publication" role="tab" id="profile-tab" data-toggle="tab" |
|
37 |
aria-controls="profile" aria-expanded="false"><h4>Publications</h4></a></li> |
|
38 |
|
|
39 |
</ul> |
|
40 |
<div id="myTabContent" class="tab-content"> |
|
41 |
<div role="tabpanel" class="tab-pane fade active in" id="stats" aria-labelledby="home-tab"> |
|
42 |
<h1>Stats</h1> |
|
43 |
|
|
44 |
<div id="chart_history_links"></div> |
|
45 |
</div> |
|
46 |
<div role="tabpanel" class="tab-pane fade " id="dataset" aria-labelledby="dropdown1-tab"> |
|
47 |
<h1>Dataset</h1> |
|
48 |
|
|
49 |
<div class="row" ng-show="result_dataset.length"> |
|
50 |
<div class="col-lg-6 col-lg-offset-6"> |
|
51 |
<a href='#/query/q=entitytype:"dataset" AND provenance:"{{ datasource.officialName }}"' |
|
52 |
class="btn btn-primary">See other Datasets <span |
|
53 |
class="glyphicon glyphicon-circle-arrow-right"></span></a> |
|
54 |
</div> |
|
55 |
</div> |
|
56 |
|
|
57 |
<div class="row" ng-repeat="result in result_dataset"> |
|
58 |
<div class="col-lg-12"> |
|
59 |
<a href="#/detail/{{ result.identifier }}"> |
|
60 |
<i ng-hide="result.objectType!= 'unknown' " |
|
61 |
style="padding: 10px" |
|
62 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i> |
|
63 |
<i ng-show="result.objectType=='dataset'" style="padding: 10px" |
|
64 |
class="fa fa-database fa-2x blue-text circle responsive-img"></i> |
|
65 |
<i style="padding: 10px" ng-show="result.objectType=='publication'" |
|
66 |
class="fa fa-book fa-2x blue-text circle responsive-img"></i> |
|
67 |
<b ng-show="result.title">{{ result.title }}</b> |
|
68 |
<b ng-hide="result.title">Metadata non resolved for pid : {{ result.pid }}</b> |
|
69 |
</a> |
|
70 |
</div> |
|
71 |
|
|
72 |
<div class="col-lg-12"> |
|
73 |
<d style="font-size: small"></d> |
|
74 |
<auth style="font-size: small; color: #1565C0" |
|
75 |
ng-repeat="author in result.authors"> |
|
76 |
<f ng-hide="$index==0">,</f> |
|
77 |
{{ author }} |
|
78 |
</auth> |
|
79 |
<d ng-show="result.date">- {{ result.date }}</d> |
|
80 |
</d> |
|
81 |
</div> |
|
82 |
<p> |
|
83 |
|
|
84 |
<div class="col-lg-2"> |
|
85 |
<auth style="font-size: small" class="orange-text"><b>{{ countRelatedDatasets(result) }}</b> |
|
86 |
Related Datasets |
|
87 |
</auth> |
|
88 |
</div> |
|
89 |
<div class="col-lg-2"> |
|
90 |
<auth style="font-size: small" class="orange-text"> |
|
91 |
<b> {{ countRelatedPublication(result) }}</b> Related Publications |
|
92 |
</auth> |
|
93 |
</div> |
|
94 |
<div class="col-lg-2"> |
|
95 |
<auth style="font-size: small" class="orange-text"><b>{{ countOtherRelations(result) }}</b> |
|
96 |
Other Relations |
|
97 |
</auth> |
|
98 |
</div> |
|
99 |
<div class="col-lg-2"> |
|
100 |
<auth style="font-size: small" class="orange-text"><a |
|
101 |
href="{{ result.resolved_url }}" class="orange-text"> <i |
|
102 |
class="fa fa-link"></i> Original Object </a></auth> |
|
103 |
</div> |
|
104 |
<div class="col-lg-3"> |
|
105 |
[ |
|
106 |
<auth style="font-size: small" class="orange-text" |
|
107 |
ng-repeat="prov in result.provenance_record"> |
|
108 |
<f ng-hide="$index==0">,</f> |
|
109 |
<a href='#/datasource/name/{{ prov.name }}' style="color: orange">{{ prov.name }}</a> |
|
110 |
</auth> |
|
111 |
<d style="font-size: small">]</d> |
|
112 |
</div> |
|
113 |
|
|
114 |
</div> |
|
115 |
|
|
116 |
|
|
117 |
</div> |
|
118 |
<div role="tabpanel" class="tab-pane fade" id="publication" aria-labelledby="profile-tab"> |
|
119 |
<h1>Publication</h1> |
|
120 |
|
|
121 |
<div class="row" ng-show="result_publication"> |
|
122 |
<div class="col-lg-6 col-lg-offset-6"> |
|
123 |
<a href='#/query/q=entitytype:"publication" AND provenance:"{{ datasource.officialName }}"' |
|
124 |
class="btn btn-primary">See other Publication <span |
|
125 |
class="glyphicon glyphicon-circle-arrow-right"></span></a> |
|
126 |
</div> |
|
127 |
</div> |
|
128 |
<div class="row" ng-repeat="result in result_publication"> |
|
129 |
<div class="col-lg-12"> |
|
130 |
<a href="#/detail/{{ result.identifier }}"> |
|
131 |
<i ng-hide="result.objectType!= 'unknown' " |
|
132 |
style="padding: 10px" |
|
133 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i> |
|
134 |
<i ng-show="result.objectType=='dataset'" style="padding: 10px" |
|
135 |
class="fa fa-database fa-2x blue-text circle responsive-img"></i> |
|
136 |
<i style="padding: 10px" ng-show="result.objectType=='publication'" |
|
137 |
class="fa fa-book fa-2x blue-text circle responsive-img"></i> |
|
138 |
<b ng-show="result.title">{{ result.title }}</b> |
|
139 |
<b ng-hide="result.title">Metadata non resolved for pid : {{ result.pid }}</b> |
|
140 |
</a> |
|
141 |
</div> |
|
142 |
|
|
143 |
<div class="col-lg-12"> |
|
144 |
<d style="font-size: small"></d> |
|
145 |
<auth style="font-size: small; color: #1565C0" |
|
146 |
ng-repeat="author in result.authors"> |
|
147 |
<f ng-hide="$index==0">,</f> |
|
148 |
{{ author }} |
|
149 |
</auth> |
|
150 |
<d ng-show="result.date">- {{ result.date }}</d> |
|
151 |
</d> |
|
152 |
</div> |
|
153 |
<p> |
|
154 |
|
|
155 |
<div class="col-lg-2"> |
|
156 |
<auth style="font-size: small" class="orange-text"><b>{{ countRelatedDatasets(result) }}</b> |
|
157 |
Related Datasets |
|
158 |
</auth> |
|
159 |
</div> |
|
160 |
<div class="col-lg-2"> |
|
161 |
<auth style="font-size: small" class="orange-text"> |
|
162 |
<b> {{ countRelatedPublication(result) }}</b> Related Publications |
|
163 |
</auth> |
|
164 |
</div> |
|
165 |
<div class="col-lg-2"> |
|
166 |
<auth style="font-size: small" class="orange-text"><b>{{ countOtherRelations(result) }}</b> |
|
167 |
Other Relations |
|
168 |
</auth> |
|
169 |
</div> |
|
170 |
<div class="col-lg-2"> |
|
171 |
<auth style="font-size: small" class="orange-text"><a |
|
172 |
href="{{ result.resolved_url }}" class="orange-text"> <i |
|
173 |
class="fa fa-link"></i> Original Object </a></auth> |
|
174 |
</div> |
|
175 |
<div class="col-lg-3"> |
|
176 |
[ |
|
177 |
<auth style="font-size: small" class="orange-text" |
|
178 |
ng-repeat="prov in result.provenance_record"> |
|
179 |
<f ng-hide="$index==0">,</f> |
|
180 |
<a href='#/datasource/name/{{ prov.name }}' style="color: orange">{{ prov.name }}</a> |
|
181 |
</auth> |
|
182 |
<d style="font-size: small">]</d> |
|
183 |
</div> |
|
184 |
|
|
185 |
</div> |
|
186 |
|
|
187 |
</div> |
|
188 |
|
|
189 |
</div> |
|
190 |
</div> |
|
191 |
</div> |
|
192 |
|
|
193 |
|
|
194 |
</div> |
|
195 |
|
|
196 |
<script> |
|
197 |
$('#myTabs a').click(function (e) { |
|
198 |
e.preventDefault() |
|
199 |
$(this).tab('show') |
|
200 |
}); |
|
201 |
</script> |
modules/dli-service-portal/branches/3.0/static/partials/datasources.html | ||
---|---|---|
1 |
<div class="row container-fluid"> |
|
2 |
|
|
3 |
|
|
4 |
<h1>Datasource's Map</h1> |
|
5 |
|
|
6 |
|
|
7 |
<div class="row"> |
|
8 |
<div class="col-lg-2"> |
|
9 |
<ul class="list-group"> |
|
10 |
<li class="list-group-item" ng-repeat="item in my_markers"> |
|
11 |
<a href="{{ item.weburl }}" > {{ item.name }}</a></li> |
|
12 |
|
|
13 |
</ul> |
|
14 |
|
|
15 |
</div> |
|
16 |
<div class="col-lg-8" > |
|
17 |
<div id="world-map" style="width: 100%; height: 500px; margin: 40px" ></div> |
|
18 |
|
|
19 |
|
|
20 |
</div> |
|
21 |
</div> |
|
22 |
</div> |
|
23 |
|
|
24 |
<script src="js/createMap.js"></script> |
modules/dli-service-portal/branches/3.0/static/partials/detail.html | ||
---|---|---|
1 |
<style> |
|
2 |
.loader { |
|
3 |
border: 16px solid #f3f3f3; /* Light grey */ |
|
4 |
border-top: 16px solid #3498db; /* Blue */ |
|
5 |
border-radius: 50%; |
|
6 |
width: 120px; |
|
7 |
height: 120px; |
|
8 |
animation: spin 2s linear infinite; |
|
9 |
margin: auto; |
|
10 |
} |
|
11 |
|
|
12 |
@keyframes spin { |
|
13 |
0% { |
|
14 |
transform: rotate(0deg); |
|
15 |
} |
|
16 |
100% { |
|
17 |
transform: rotate(360deg); |
|
18 |
} |
|
19 |
} |
|
20 |
</style> |
|
21 |
|
|
22 |
|
|
23 |
<section ng-hide="item"> |
|
24 |
<div class="row"> |
|
25 |
<div class="col-lg-12 center-align"> |
|
26 |
<div class="loader"></div> |
|
27 |
</div> |
|
28 |
</div> |
|
29 |
|
|
30 |
</section> |
|
31 |
|
|
32 |
<section ng-show="item"> |
|
33 |
|
|
34 |
|
|
35 |
<div> |
|
36 |
<div class="row"> |
|
37 |
|
|
38 |
<div class="col-lg-7 col-lg-offset-1"> |
|
39 |
<div class="row" style="margin-bottom: 5px"> |
|
40 |
<div class="col-lg-12"> |
|
41 |
<span class="label label-info" style="font-size: 100%">{{ item.typology }}</span> |
|
42 |
<span ng-repeat="date in showDate(item.date)" class="label label-warning" |
|
43 |
style="font-size: 100%"> {{ date }}</span> |
|
44 |
</div> |
|
45 |
</div> |
|
46 |
<div class="row"> |
|
47 |
<div class="col-lg-12"> |
|
48 |
<p><b style="color: black">{{ item.title[0] }}</b></p> |
|
49 |
</div> |
|
50 |
<div class="col-lg-12"> |
|
51 |
<auth style="font-size: small; color: darkred" |
|
52 |
ng-repeat="author in item.author"> |
|
53 |
<f ng-hide="$index==0">,</f> |
|
54 |
<i>{{ author }}</i> |
|
55 |
</auth> |
|
56 |
</div> |
|
57 |
<div class="col-lg-12"> |
|
58 |
<span ng-repeat="d in item.date">{{ d }}</span> |
|
59 |
</div> |
|
60 |
<div class="col-lg-12"> |
|
61 |
<p style="color: grey; border-left: 4px solid #eeeeee; padding-left: 10px; font-size:15px; text-align: justify"> |
|
62 |
{{item.abstract}} |
|
63 |
</p> |
|
64 |
</div> |
|
65 |
</div> |
|
66 |
</div> |
|
67 |
|
|
68 |
|
|
69 |
<div class="col-lg-3"> |
|
70 |
<div class="row"> |
|
71 |
<div class="panel panel-primary"> |
|
72 |
<div class="panel-body"> |
|
73 |
<div ng-repeat="id in item.localIdentifier">{{id.type }}: <a href="{{ id.url }}">{{ id.id}}</a> </div> |
|
74 |
<hr> |
|
75 |
Sources |
|
76 |
<ul> |
|
77 |
<li ng-repeat="d in item.datasources"><a> {{ d.datasourceName }}</a></li> |
|
78 |
</ul> |
|
79 |
<div ng-show="item.publisher.length"> |
|
80 |
<hr> |
|
81 |
Publisher: |
|
82 |
<ul> |
|
83 |
<li ng-repeat="d in item.publisher"><a> {{ d }}</a></li> |
|
84 |
</ul> |
|
85 |
</div> |
|
86 |
<hr> |
|
87 |
<div id="share"></div> |
|
88 |
|
|
89 |
</div> |
|
90 |
</div> |
|
91 |
</div> |
|
92 |
</div> |
|
93 |
|
|
94 |
|
|
95 |
</div> |
|
96 |
</div> |
|
97 |
|
|
98 |
|
|
99 |
|
|
100 |
<div class="row"> |
|
101 |
<div class="col-lg-11 col-lg-offset-1"> |
|
102 |
<ul id="myTabs" class="nav nav-tabs text-center" role="tablist"> |
|
103 |
<li role="presentation" ng-class="active"><a href="#dataset" id="home-tab" role="tab" data-toggle="tab" |
|
104 |
aria-controls="home" aria-expanded="true"><h4>Link To |
|
105 |
Datasets ({{ item.relatedDatasets }})</h4></a></li> |
|
106 |
<li role="presentation" ng-class=""><a href="#publication" role="tab" id="profile-tab" data-toggle="tab" |
|
107 |
aria-controls="profile" aria-expanded="false"><h4>Link To |
|
108 |
Publications ({{ item.relatedPublications }})</h4></a></li> |
|
109 |
<li role="presentation" ng-class=""><a href="#other" role="tab" id="profile-tab" data-toggle="tab" |
|
110 |
aria-controls="profile" aria-expanded="false"><h4>Other Links |
|
111 |
({{ item.relatedUnknown }})</h4></a></li> |
|
112 |
</ul> |
|
113 |
<div id="myTabContent" class="tab-content"> |
|
114 |
<div role="tabpanel" class="tab-pane fade active in" id="dataset" aria-labelledby="home-tab"> |
|
115 |
|
|
116 |
<div ng-repeat="rels in relations.related_dataset"> |
|
117 |
<div class="row"> |
|
118 |
<div class="col-lg-12" style="padding: 10px;"> |
|
119 |
<span class="label label-info" style="font-size: 100%">{{ rels.target.objectType }}</span> |
|
120 |
<span ng-repeat="date in showDate(rels.target.date)" class="label label-warning" |
|
121 |
style="font-size: 100%"> {{ date }}</span> |
|
122 |
</div> |
|
123 |
<div class="col-lg-12"> |
|
124 |
<a href="#/detail/{{ rels.target.dnetIdentifier }}"class="blue-text"><b>{{ rels.target.title }}</b> |
|
125 |
</a></div> |
|
126 |
|
|
127 |
<div class="col-lg-12"> |
|
128 |
<i style="color: darkred" ng-repeat="a in rels.target.creator">{{ a.name }},</i> |
|
129 |
</div> |
|
130 |
<div ng-repeat="ids in rels.target.identifier"> |
|
131 |
<div class="col-lg-12"><b>{{ ids.schema }}</b> : <a href="{{ ids.url }}"> {{ ids.identifier }}</a></div> |
|
132 |
</div> |
|
133 |
</div> |
|
134 |
<div class="row"> |
|
135 |
<div class="col-lg-2"> |
|
136 |
<b>Sources:</b> <span ng-repeat="d in rels.linkprovider">{{ d.name }}</span> |
|
137 |
</div> |
|
138 |
|
|
139 |
</div> |
|
140 |
</div> |
|
141 |
|
|
142 |
<div class="row centered"> |
|
143 |
<div class="text-center"> |
|
144 |
<ul class="pagination centered"> |
|
145 |
<li><a ng-click="prevPage('dataset')"><</a></li> |
|
146 |
<li><a ng-click="nextPage('dataset')">></a></li> |
|
147 |
</ul> |
|
148 |
</div> |
|
149 |
</div> |
|
150 |
</div> |
|
151 |
<div role="tabpanel" class="tab-pane fade" id="publication" aria-labelledby="profile-tab"> |
|
152 |
<div ng-repeat="rels in relations.related_publications"> |
|
153 |
<div class="row"> |
|
154 |
<div class="col-lg-12" style="padding: 10px;"> |
|
155 |
<span class="label label-info" style="font-size: 100%">{{ rels.target.objectType }}</span> |
|
156 |
<span ng-repeat="date in showDate(rels.target.date)" class="label label-warning" |
|
157 |
style="font-size: 100%"> {{ date }}</span> |
|
158 |
</div> |
|
159 |
<div class="col-lg-12"> |
|
160 |
<a href="#/detail/{{ rels.target.dnetIdentifier }}"class="blue-text"><b>{{ rels.target.title }}</b> |
|
161 |
</a></div> |
|
162 |
|
|
163 |
<div class="col-lg-12"> |
|
164 |
<i style="color: darkred" ng-repeat="a in rels.target.creator">{{ a.name }},</i> |
|
165 |
</div> |
|
166 |
<div ng-repeat="ids in rels.target.identifier"> |
|
167 |
<div class="col-lg-12"><b>{{ ids.schema }}</b> : <a href="{{ ids.url }}"> {{ ids.identifier }}</a></div> |
|
168 |
</div> |
|
169 |
</div> |
|
170 |
<div class="row"> |
|
171 |
<div class="col-lg-2"> |
|
172 |
<b>Sources:</b> <span ng-repeat="d in rels.linkprovider">{{ d.name }}</span> |
|
173 |
</div> |
|
174 |
|
|
175 |
</div> |
|
176 |
</div> |
|
177 |
<div class="row centered"> |
|
178 |
<div class="text-center"> |
|
179 |
<ul class="pagination centered"> |
|
180 |
<li><a ng-click="prevPage('publication')"><</a></li> |
|
181 |
<li><a ng-click="nextPage('publication')">></a></li> |
|
182 |
</ul> |
|
183 |
</div> |
|
184 |
</div> |
|
185 |
</div> |
|
186 |
<div role="tabpanel" class="tab-pane fade" id="other" aria-labelledby="dropdown1-tab"> |
|
187 |
<div ng-repeat="rels in relations.related_unknown"> |
|
188 |
<div class="row"> |
|
189 |
<div class="col-lg-12"><a href="#/detail/{{ rels.target.dnetIdentifier }}" |
|
190 |
class="blue-text"> <i |
|
191 |
style="padding: 10px" |
|
192 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i><b>{{ rels.target.identifier[0].identifier }}</b> |
|
193 |
</a></div> |
|
194 |
|
|
195 |
<div class="col-lg-12"> |
|
196 |
<f style="color: green" ng-repeat="a in rels.target.creator">{{ a.name }},</f> |
|
197 |
</div> |
|
198 |
<div ng-repeat="ids in rels.target.identifier"> |
|
199 |
<div class="col-lg-12"><b>PID</b> : {{ ids.identifier }}</div> |
|
200 |
<div class="col-lg-12"><b>PID Type</b> : {{ ids.schema }}</div> |
|
201 |
</div> |
|
202 |
</div> |
|
203 |
<div class="row"> |
|
204 |
<div class="col-lg-2"> |
|
205 |
<b>provenance (of this link): </b> |
|
206 |
</div> |
|
207 |
<div class="col-lg-8"> |
|
208 |
<table style="width: 100%"> |
|
209 |
<thead> |
|
210 |
<tr> |
|
211 |
<th class="center-align" style="width: 20%">Date Of Collection</th> |
|
212 |
<th class="center-align" style="width: 20%">Datasource</th> |
|
213 |
<th class="center-align" style="width: 60%">Action</th> |
|
214 |
</tr> |
|
215 |
</thead> |
|
216 |
<tbody> |
|
217 |
<tr ng-repeat="d in rels.linkprovider"> |
|
218 |
<td class="left-align">{{ d.collectionDate }}</td> |
|
219 |
<td class="left-align">{{ d.name }}</td> |
|
220 |
<td class="left-align"> |
|
221 |
Relation collected from {{ d.name }} |
|
222 |
</td> |
|
223 |
</tr> |
|
224 |
</tbody> |
|
225 |
</table> |
|
226 |
</div> |
|
227 |
</div> |
|
228 |
</div> |
|
229 |
<div class="row centered"> |
|
230 |
<div class="text-center"> |
|
231 |
<ul class="pagination centered"> |
|
232 |
<li><a ng-click="prevPage('unknown')"><</a></li> |
|
233 |
<li><a ng-click="nextPage('unknown')">></a></li> |
|
234 |
</ul> |
|
235 |
</div> |
|
236 |
</div> |
|
237 |
|
|
238 |
</div> |
|
239 |
</div> |
|
240 |
</div> |
|
241 |
</div> |
|
242 |
</section> |
|
243 |
<script> |
|
244 |
$("#share").jsSocials({ |
|
245 |
showLabel: false, |
|
246 |
showCount: false, |
|
247 |
shares: ["email", "twitter", "facebook", "googleplus", "linkedin"] |
|
248 |
}); |
|
249 |
</script> |
modules/dli-service-portal/branches/3.0/static/partials/contactus.html | ||
---|---|---|
1 |
<section> |
|
2 |
<div class="row" > |
|
3 |
<div class="col-lg-8 col-lg-offset-2"> |
|
4 |
|
|
5 |
<div class="card z-depth-2" style="padding-top: 10px"> |
|
6 |
<div class="row"> |
|
7 |
<div class="col-lg-12"> |
|
8 |
<div class="row"> |
|
9 |
<h4 class="center-align"><b>Contact us</b></h4> |
|
10 |
<div class="col-lg-12"> |
|
11 |
|
|
12 |
<p> |
|
13 |
DLI Service is the result of a cooperation among major publishers, |
|
14 |
data centers, and research/academic institutions and projects under the umbrella of the |
|
15 |
Publishing Data Services Working Group <a href="https://www.rd-alliance.org/filedepot/folder/114?fid=239"> (Case Statement)</a> . |
|
16 |
</p> |
|
17 |
</div> |
|
18 |
</div> |
|
19 |
<div class="row"> |
|
20 |
<div class="col-lg-12"> |
|
21 |
<div class="row"> |
|
22 |
<div class="col-lg-12"> |
|
23 |
<div class="card white"> |
|
24 |
<div class="card-content black-text"> |
|
25 |
<span class="card-title black-text "><b>WDS-RDA working group contacts</b> </span> |
|
26 |
<ul> |
|
27 |
<li><a href="mailto:rdawds_services_wg@rda-groups.org">WG mailing list</a> </li> |
|
28 |
<li><a href="mailto:h.koers@elsevier.com">Hylke Koers</a>, Elsevier, Amsterdam, The Netherlands</li> |
|
29 |
<li> <a href="mailto:adrian.burton@ands.org.au"> Adrian Burton</a>, Australian National Data Service, Melbourne, Australia </li> |
|
30 |
</ul> |
|
31 |
</div> |
|
32 |
</div> |
|
33 |
</div> |
|
34 |
|
|
35 |
<div class="col-lg-12"> |
|
36 |
<div class="card white"> |
|
37 |
<div class="card-content black-text"> |
|
38 |
<span class="card-title black-text "><b>Stakeholders</b> </span> |
|
39 |
<ul> |
|
40 |
<li><a href="https://rd-alliance.org/groups/rdawds-publishing-data-services-wg.html">RDA DPS-WG</a> </li> |
|
41 |
<li><a href="www.openaire.it">OpenAIRE infrastructure</a> </li> |
|
42 |
<li><a href="https://rd-alliance.org">The Research Data Alliance (RDA)</a> </li> |
|
43 |
<li><a href="https://www.icsu-wds.org">ICSU World Data Systems</a> </li> |
|
44 |
<li><a href="http://www.stm-assoc.org ">STM</a> </li> |
|
45 |
<li><a href="www.crossref.org">CrossRef</a> </li> |
|
46 |
<li><a href="www.datacite.org">DataCite</a> </li> |
|
47 |
<li><a href="www.orcid.org">ORCID</a> </li> |
|
48 |
<li><a href="www.nationaldataservice.org">The National Data Service</a> </li> |
|
49 |
<li><a href="www.rmap-project.info">RMap project</a> </li> |
|
50 |
<li><a href="http://datacentrum.3tu.nl/en/home/" >3TU.Datacentrum</a> </li> |
|
51 |
<li><a href="http://www.ands.org.au/"> Australian National Data Service (ANDS)</a> </li> |
|
52 |
<li><a href="http://www.ccdc.cam.ac.uk/pages/Home.aspx">Cambridge Crystallographic Data Centre (CCDC)</a></li> |
|
53 |
<li><a href="http://www.elsevier.com/">Elsevier</a></li> |
|
54 |
<li><a href="http://www.ebi.ac.uk/">EMBL European Bioinformatics Institute (EMBL-EBI)</a></li> |
|
55 |
<li><a href="https://www.icpsr.umich.edu/icpsrweb/landing.jsp">Interuniversity Consortium for Political and Social Research (ICPSR)</a></li> |
|
56 |
<li><a href="https://www.ieee.org/index.html">Institute of Electrical and Electronics Engineers (IEEE)</a></li> |
|
57 |
<li><a href="http://www.stm-assoc.org/">International Association of STM Publishers</a></li> |
|
58 |
<li><a href="http://www.rcsb.org/pdb/home/home.do">Protein Data Bank (PDB)</a></li> |
|
59 |
<li><a href="http://pangaea.de/">PANGAEA</a></li> |
|
60 |
<li><a href="http://rmap-project.info/rmap/">RMap</a></li> |
|
61 |
<li><a href="http://www.rsc.org/">Royal Society of Chemistry (RSc)</a></li> |
|
62 |
<li><a href="http://www.springer.com">Springer</a></li> |
|
63 |
|
|
64 |
|
|
65 |
|
|
66 |
|
|
67 |
</ul> |
|
68 |
</div> |
|
69 |
</div> |
|
70 |
</div> |
|
71 |
|
|
72 |
</div> |
|
73 |
|
|
74 |
|
|
75 |
</div> |
|
76 |
|
|
77 |
<div class="col-lg-12"> |
|
78 |
<div class="card white"> |
|
79 |
<div class="card-content black-text"> |
|
80 |
<span class="card-title black-text "><b>Service realization and operation</b> </span> |
|
81 |
<ul> |
|
82 |
<li class="collection-item"><i>Aggregation system and portal</i></li> |
|
83 |
<li style="text-indent: 1em;" class="collection-item"> <a href="mailto:paolo.manghi@isti.cnr.it">Paolo Manghi</a> and |
|
84 |
<a href="mailto:sandro.labruzzo@isti.cnr.it">Sandro La Bruzzo</a> (OpenAIRE project) |
|
85 |
Institute of Information Science and Technologies, CNR, Pisa, Italy |
|
86 |
</li> |
|
87 |
<br> |
|
88 |
<li class="collection-item"><i>APIs</i></li> |
|
89 |
<li style="text-indent: 1em;" class="collection-item"> <a href="mailto:mdiepenbroek@pangaea.de">Michael Diepenbroek</a> and |
|
90 |
<a href="mailto:uschindler@pangaea.de">Uwe Shindler</a> |
|
91 |
PANGAEA, Bremen, Germany |
|
92 |
</li> |
|
93 |
<li style="text-indent: 1em;" class="collection-item"> <a href="mailto:paolo.manghi@isti.cnr.it">Paolo Manghi</a> and |
|
94 |
<a href="mailto:sandro.labruzzo@isti.cnr.it">Sandro La Bruzzo</a> (OpenAIRE project) |
|
95 |
Institute of Information Science and Technologies, CNR, Pisa, Italy |
|
96 |
</li> |
|
97 |
|
|
98 |
<br> |
|
99 |
<li class="collection-item"><i>RD-Switchboard</i></li> |
|
100 |
<li style="text-indent: 1em;" class="collection-item"> <a href="mailto:amir.aryani@ands.org.au">Amir Aryani</a> and |
|
101 |
<a href="mailto:adrian.burton@ands.org.au">Adrian Burton</a> |
|
102 |
Australian National Data Service, Melbourne, Australia |
|
103 |
|
|
104 |
</li> |
|
105 |
</ul> |
|
106 |
</div> |
|
107 |
</div> |
|
108 |
</div> |
|
109 |
|
|
110 |
|
|
111 |
|
|
112 |
</div> |
|
113 |
|
|
114 |
<div class="row"> |
|
115 |
<div class="col-lg-12"> |
|
116 |
This work is co-funded by the EU projects <a href="https://rd-alliance.org/groups/rdawds-publishing-data-ig.html">RDA Europe</a> (FP7-INFRASTRUCTURES-2013-2, grant agreement: 632756) |
|
117 |
and <a href="http://www.openaire.eu">OpenAIRE2020</a> (H2020-EINFRA-2014-1, grant agreement: 643410). |
|
118 |
</div> |
|
119 |
|
|
120 |
</div> |
|
121 |
</div> |
|
122 |
|
|
123 |
</div> |
|
124 |
|
|
125 |
</div> |
|
126 |
|
|
127 |
</div> |
|
128 |
</div> |
|
129 |
|
|
130 |
|
|
131 |
</section> |
modules/dli-service-portal/branches/3.0/static/partials/query.html | ||
---|---|---|
1 |
<style> |
|
2 |
.loader { |
|
3 |
border: 16px solid #f3f3f3; /* Light grey */ |
|
4 |
border-top: 16px solid #3498db; /* Blue */ |
|
5 |
border-radius: 50%; |
|
6 |
width: 120px; |
|
7 |
height: 120px; |
|
8 |
animation: spin 2s linear infinite; |
|
9 |
margin: auto; |
|
10 |
} |
|
11 |
|
|
12 |
@keyframes spin { |
|
13 |
0% { |
|
14 |
transform: rotate(0deg); |
|
15 |
} |
|
16 |
100% { |
|
17 |
transform: rotate(360deg); |
|
18 |
} |
|
19 |
} |
|
20 |
</style> |
|
21 |
|
|
22 |
|
|
23 |
<section class="container-fluid"> |
|
24 |
|
|
25 |
|
|
26 |
<div class="row"> |
|
27 |
<div class="col-lg-8"> |
|
28 |
<form ng-submit="makeQuery()"> |
|
29 |
<b>Query:</b> |
|
30 |
<input style="width: 80%" ng-model="query" ng-enter="doSomething()"> <a |
|
31 |
href="#/query/q={{ query }}"><span class="glyphicon glyphicon-search"></span> Search</a> |
|
32 |
</form> |
|
33 |
</div> |
|
34 |
<div class="col-lg-2 right-align"> |
|
35 |
<b class="header black-text ">Total Items:</b> |
|
36 |
<f class="header blue-text flow-text"> {{ total }}</f> |
|
37 |
</div> |
|
38 |
<div class="col-lg-2 right-align"> |
|
39 |
<b class="header black-text ">Total pages:</b> |
|
40 |
<f class="header blue-text flow-text"> {{ totalPages }}</f> |
|
41 |
</div> |
|
42 |
</div> |
|
43 |
<div class="row" ng-show="searching"> |
|
44 |
<div class="col-lg-12 center-align"> |
|
45 |
<div class="loader"></div> |
|
46 |
</div> |
|
47 |
</div> |
|
48 |
<div class="row centered" ng-hide="result_query.length"> |
|
49 |
<div class="text-center"> |
|
50 |
<h5 class="red-text">No match found</h5> |
|
51 |
</div> |
|
52 |
</div> |
|
53 |
|
|
54 |
<div class="row centered" ng-show="result_query.length"> |
|
55 |
<div class="text-center"> |
|
56 |
<ul class="pagination centered"> |
|
57 |
<li ng-show="page ==1" class="disabled"><a href=""><</a></li> |
|
58 |
<li ng-hide="page ==1"><a href="#/query/{{ filterPath() }}page={{ page - 1 }}/q={{ query }}"><</a> |
|
59 |
</li> |
|
60 |
<li ng-class="activePage(n)" ng-repeat="n in pageRange"> |
|
61 |
<a href="#/query/{{ filterPath() }}page={{ n }}/q={{ query }}">{{ n }}</a> |
|
62 |
</li> |
|
63 |
<li ng-hide="page == lastPage"><a href="#/query/{{ filterPath() }}page={{ page + 1 }}/q={{ query }}">></a> |
|
64 |
</li> |
|
65 |
<li ng-show="page ==lastPage" class="disabled"><a href="">></a></li> |
|
66 |
|
|
67 |
|
|
68 |
</ul> |
|
69 |
</div> |
|
70 |
</div> |
|
71 |
|
|
72 |
<div class="row container-fluid" ng-show="result_query.length"> |
|
73 |
<div class="col-md-3" id="leftCol"> |
|
74 |
<div class="row"> |
|
75 |
<div class="panel panel-primary"> |
|
76 |
<div class="panel-heading"><b>Typology</b></div> |
|
77 |
<div class="panel-body"> |
|
78 |
<ul class="list-group"> |
|
79 |
<li class="list-group-item" ng-repeat="value in facet.typology "> |
|
80 |
<span class="badge">{{ value.count }}</span> |
|
81 |
<a class="browseLink" |
|
82 |
href='#/query/{{ calculateFilter("typology", value.key) }}/q={{ query }}'>{{ value.key }}</a> |
|
83 |
</li> |
|
84 |
</ul> |
|
85 |
</div> |
|
86 |
</div> |
|
87 |
</div> |
|
88 |
|
|
89 |
<div class="row"> |
|
90 |
<div class="panel panel-primary"> |
|
91 |
<div class="panel-heading"><b>Link Provider</b></div> |
|
92 |
<div class="panel-body"> |
|
93 |
<ul class="list-group"> |
|
94 |
<li class="list-group-item" ng-repeat="value in facet.datasource "> |
|
95 |
<span class="badge">{{ value.count }}</span> |
|
96 |
<a class="browseLink" |
|
97 |
href='#/query/{{ calculateFilter("datasource", value.key) }}/q={{ query }}'>{{ value.key }}</a> |
|
98 |
</li> |
|
99 |
</ul> |
|
100 |
</div> |
|
101 |
</div> |
|
102 |
</div> |
|
103 |
|
|
104 |
<div class="row"> |
|
105 |
<div class="panel panel-primary"> |
|
106 |
<div class="panel-heading"><b>Link Publisher</b></div> |
|
107 |
<div class="panel-body"> |
|
108 |
<ul class="list-group"> |
|
109 |
<li class="list-group-item" ng-repeat="value in facet.publishers "> |
|
110 |
<span class="badge">{{ value.count }}</span> |
|
111 |
<a class="browseLink" |
|
112 |
href='#/query/{{ calculateFilter("publisher", value.key) }}/q={{ query }}'>{{ value.key }}</a> |
|
113 |
</li> |
|
114 |
</ul> |
|
115 |
</div> |
|
116 |
</div> |
|
117 |
</div> |
|
118 |
|
|
119 |
<div class="row"> |
|
120 |
<div class="panel panel-primary"> |
|
121 |
<div class="panel-heading"><b>Pid Type</b></div> |
|
122 |
<div class="panel-body"> |
|
123 |
<ul class="list-group"> |
|
124 |
<li class="list-group-item" ng-repeat="value in facet.pid "> |
|
125 |
<span class="badge">{{ value.count }}</span> |
|
126 |
<a class="browseLink" |
|
127 |
href='#/query/{{ calculateFilter("pidtype", value.key) }}/q={{ query }}'>{{ value.key }}</a> |
|
128 |
</li> |
|
129 |
</ul> |
|
130 |
</div> |
|
131 |
</div> |
|
132 |
</div> |
|
133 |
|
|
134 |
</div> |
|
135 |
<div class="col-md-9 col-xs-12"> |
|
136 |
|
|
137 |
<div class="row" ng-repeat="result in result_query"> |
|
138 |
<div class="col-lg-12" style="margin-top: 10px"> |
|
139 |
<span class="label label-info" style="font-size: 100%">{{ result.typology }}</span> |
|
140 |
<span ng-repeat="date in showDate(result.date)" class="label label-warning" |
|
141 |
style="font-size: 100%"> {{ date }}</span> |
|
142 |
</div> |
|
143 |
|
|
144 |
<div class="col-lg-12" style="margin-top: 10px"> |
|
145 |
<a href="#/detail/{{ result.id }}"> |
|
146 |
<b ng-show="result.title">{{ result.title[0] }}</b> |
|
147 |
<b ng-hide="result.title">Metadata non resolved for pid : {{ result.localIdentifier[0].id }}</b> |
|
148 |
</a> |
|
149 |
</div> |
|
150 |
|
|
151 |
<div class="col-lg-12"> |
|
152 |
<div> |
|
153 |
|
|
154 |
<auth style="font-size: small; color: darkred" |
|
155 |
ng-repeat="author in result.author"> |
|
156 |
<f ng-hide="$index==0">,</f> |
|
157 |
<i>{{ author }}</i> |
|
158 |
</auth> |
|
159 |
</div> |
|
160 |
<span class="more" style="color: #9ba4ad"> |
|
161 |
{{ result.abstract }} |
|
162 |
|
|
163 |
</span> |
|
164 |
|
|
165 |
|
|
166 |
</div> |
|
167 |
|
|
168 |
|
|
169 |
<div class="col-lg-12"> |
|
170 |
<d style="font-size: small"></d> |
|
171 |
|
|
172 |
|
|
173 |
Sources: |
|
174 |
<span ng-repeat="datatasource in result.datasources"> |
|
175 |
<a ng-show="datatasource.datasourceName.length"> {{ datatasource.datasourceName }}</a> |
|
176 |
</span> |
|
177 |
<dd ng-repeat="publisher in result.publisher"> |
|
178 |
<d style="font-size: small; color:darkgreen" ng-show="publisher.length"> |
|
179 |
Publisher: {{ publisher }}</d> |
|
180 |
</dd> |
|
181 |
</div> |
|
182 |
|
|
183 |
|
|
184 |
<div class="col-lg-12 text-right"> |
|
185 |
|
|
186 |
|
|
187 |
<auth style="font-size: small; margin-left: 10px" class="orange-text"> |
|
188 |
Link to Datasets: <b>{{ result.relatedDatasets }}</b> |
|
189 |
</auth> |
|
190 |
|
|
191 |
<auth style="font-size: small; margin-left: 10px" class="orange-text">Link to Literature: |
|
192 |
<b> {{ result.relatedPublications }}</b> |
|
193 |
|
|
194 |
</auth> |
|
195 |
|
|
196 |
<auth style="font-size: small; margin-left: 10px" class="orange-text"> |
|
197 |
Link to other Objects: |
|
198 |
<b>{{ result.relatedUnknown }}</b> |
|
199 |
</auth> |
|
200 |
|
|
201 |
|
|
202 |
<hr> |
|
203 |
</div> |
|
204 |
|
|
205 |
|
|
206 |
</div> |
|
207 |
|
|
208 |
</div> |
|
209 |
|
|
210 |
|
|
211 |
</div> |
|
212 |
|
|
213 |
|
|
214 |
</section> |
modules/dli-service-portal/branches/3.0/static/partials/index.html | ||
---|---|---|
1 |
<style> |
|
2 |
hr { |
|
3 |
border-top: 1px dotted #000000 !important; |
|
4 |
margin-bottom:5px !important; |
|
5 |
margin-top:5px !important; |
|
6 |
} |
|
7 |
|
|
8 |
.form-control { |
|
9 |
border: 0px solid #ffffff; |
|
10 |
} |
|
11 |
</style> |
|
12 |
<!-- Header --> |
|
13 |
<section style="padding-bottom: 0px"> |
|
14 |
<div class="container centered"> |
|
15 |
<div class="row"> |
|
16 |
<div class="col-lg-12 centered"> |
|
17 |
<img ng-hide="facet" img class="img-responsive img-centered" style="max-width:400px" src="img/logo_big.png" alt=""> |
|
18 |
<div class="row"> |
|
19 |
<div class="form-group col-lg-12 "> |
|
20 |
<form ng-submit="makeQuery()"> |
|
21 |
<div class="row"> |
|
22 |
<div class="col-lg-10"> |
|
23 |
<input class="form-control" placeholder="Type your search!" id="query" ng-autocomplete options="options" required data-validation-required-message="Please enter your query" ng-model="query"> |
|
24 |
</div> |
|
25 |
<div class="col-lg-2" > |
|
26 |
<a ng-click="makeQuery()" class="btn btn-primary form-control"><span class="glyphicon glyphicon-search"></span> Search</a> |
|
27 |
</div> |
|
28 |
</div> |
|
29 |
</form> |
|
30 |
</div> |
|
31 |
|
|
32 |
</div> |
|
33 |
|
|
34 |
<div class="row" style="margin-top: 20px"> |
|
35 |
<div class="form-group col-lg-12 "> |
|
36 |
<form ng-submit="makeQuery()"> |
|
37 |
<div class="row"> |
|
38 |
<div class="col-lg-10"> |
|
39 |
<input class="form-control" placeholder="Search by persistent Identifier" id="query" ng-autocomplete options="options" required data-validation-required-message="Please enter your query" ng-model="queryPid"> |
|
40 |
</div> |
|
41 |
|
|
42 |
<div class="col-lg-2" > |
|
43 |
<a ng-click="makeQueryPid()" class="btn btn-primary form-control"><span class="glyphicon glyphicon-search"></span> Search PID</a> |
|
44 |
</div> |
|
45 |
</div> |
|
46 |
</form> |
|
47 |
</div> |
|
48 |
|
|
49 |
</div> |
|
50 |
|
|
51 |
|
|
52 |
</div> |
|
53 |
</div> |
|
54 |
</div> |
|
55 |
</section> |
|
56 |
|
|
57 |
<section id="#stats"> |
|
58 |
<div class="container"> |
|
59 |
<div class="row text-center"> |
|
60 |
<div class="col-lg-12 col-xs-12"> |
|
61 |
|
|
62 |
<p >Search and browse in <span style="color: darkred">{{ main_stats.publication }}</span> literature objects, |
|
63 |
<span style="color: darkred">{{ main_stats.dataset }}</span> datasets, |
|
64 |
<span style="color: darkred">{{ main_stats.total }}</span> bi-directional scholix links,</p> |
|
65 |
<p style=> |
|
66 |
from <span style="color: darkred">13000</span> publishers, |
|
67 |
<span style="color: darkred">10</span> data centers, |
|
68 |
<span style="color: darkred"> CrossRef, DataCite</span>, and <span style="color: darkred">OpenAIRE</span>.</p> |
|
69 |
</div> |
|
70 |
<div class="col-lg-6 col-xs-12"> |
|
71 |
<h4><b> </b></h4> |
|
72 |
</div> |
|
73 |
</div> |
|
74 |
</div> |
|
75 |
|
|
76 |
|
|
77 |
</section> |
modules/dli-service-portal/branches/3.0/static/partials/api.html | ||
---|---|---|
1 |
<style> |
|
2 |
table, th, td { |
|
3 |
border: 1px solid black; |
|
4 |
border-collapse: collapse; |
|
5 |
} |
|
6 |
th, td { |
|
7 |
padding: 5px; |
|
8 |
text-align: left; |
|
9 |
} |
|
10 |
table>thead>tr>th, .table>thead>tr>th, table>tbody>tr>th, .table>tbody>tr>th, table>tfoot>tr>th, .table>tfoot>tr>th, table>thead>tr>td, .table>thead>tr>td, table>tbody>tr>td, .table>tbody>tr>td, table>tfoot>tr>td, .table>tfoot>tr>td { |
|
11 |
border: 1px solid black; |
|
12 |
} |
|
13 |
</style> |
|
14 |
|
|
15 |
<section style="font-size: 20px; font-family: Lato"> |
|
16 |
|
|
17 |
<div class="row"> |
|
18 |
<div class="col-lg-8 col-lg-offset-2"> |
|
19 |
|
|
20 |
<div class="card z-depth-2" style="padding-top: 10px ;"> |
|
21 |
<div class="row" style="margin-top: 10px; text-align: justify; text-justify: inter-word;"> |
|
22 |
<h4 class="center-align"><b>ABOUT SCHOLEXPLORER: THE OPENAIRE’S SCHOLIX HUB</b></h4> |
|
23 |
<b>Scholix</b> The goal of the Scholix initiative is to establish a high level interoperability |
|
24 |
framework for exchanging information about the links between scholarly literature and data. |
|
25 |
It aims to enable an open information ecosystem to understand systematically what data underpins |
|
26 |
literature and what literature references data. Scholix maintains an evolving set |
|
27 |
of<a href="http://www.scholix.org">Guidelines</a> consisting of: |
|
28 |
(i) an information model (conceptual definition of what is a Scholix scholarly link), |
|
29 |
(ii) a link metadata schema (set of metadata fields representing a Scholix link), |
|
30 |
and (iii) a corresponding XML and JSON schema. |
|
31 |
</div> |
|
32 |
<div class="row" style="text-align: center;"> |
|
33 |
<img src="img/ScholixDM.png" style="max-width: 80%;"> |
|
34 |
</div> |
|
35 |
<div class="row" style="text-align: justify; text-justify: inter-word; margin-top: 10px"> |
|
36 |
<b>How to expose Scholix data from this hub</b> Scholexplorer harvests scholarly links |
|
37 |
(i.e. collects metadata records about links from public APIs) from the Scholix |
|
38 |
compatible sources and from DataCite compatible sources. The main sources collected |
|
39 |
by the service are listed in Table 1. |
|
40 |
</div> |
|
41 |
<div class="row" style="font-size: 12px; margin-top: 10px"> |
|
42 |
<b>Table 1.</b> Scholexplorer: data sources. Legenda: Hub (aggregator of sources that exposes Scholix links), Source (data source that exposes Scholix links) |
|
43 |
|
|
44 |
</div> |
|
45 |
<div class="row" style="text-align: justify;"> |
|
46 |
<table class="table"> |
|
47 |
<thead> |
|
48 |
<tr> |
|
49 |
<th scope="col">Data Source</th> |
|
50 |
<th scope="col">Type of source</th> |
|
51 |
</tr> |
|
52 |
<tr> |
|
53 |
<td>DataCite from the DataCite OAI-PMH <a href="https://oai.datacite.org/"> end point</a></td> |
|
54 |
<td>Hub: a <i>provider</i> of links <i>published</i> by data repositories; links are between datasets (DOIs) and articles (DOIs, handles, URLs) or datasets (DOI)</td> |
|
55 |
</tr> |
|
56 |
<tr> |
|
57 |
<td>CrossRef from the Event Data <a href="https://www.crossref.org/services/event-data/"> end point</a></td> |
|
58 |
<td>Hub: a <i>provider</i> of links <i>published</i> by publishers; links are between articles (DOIs) and datasets (DOI, accession numbers, URLs)</td> |
|
59 |
</tr> |
|
60 |
<tr> |
|
61 |
<td>Data repositories that are not yet DataCite members</td> |
|
62 |
<td>Source: a <i>publisher</i> of links between datasets (no DOI) and articles</td> |
|
63 |
</tr> |
|
64 |
<tr> |
|
65 |
<td>Thematic publishers, e.g. Europe PMC</td> |
|
66 |
<td>Source: a <i>publisher</i> of links between articles and accession numbers</td> |
|
67 |
</tr> |
|
68 |
|
|
69 |
<tr> |
|
70 |
<td>Dataset databases, e.g. ENA</td> |
|
71 |
<td>Source: a <i>publisher</i> of links between accession numbers of sequences and articles</td> |
|
72 |
</tr> |
|
73 |
</table> |
|
74 |
</div> |
|
75 |
<div class="row" style="text-align: justify; text-justify: inter-word"> |
|
76 |
Data sources willing to include the links they publish or provide within Scholexplorer have two options: |
|
77 |
<ul> |
|
78 |
<li> |
|
79 |
Become Scholix-compliant and register to become a Scholexplorer data source; |
|
80 |
</li> |
|
81 |
<li> |
|
82 |
Become a data source aggregated by any of the hubs above. |
|
83 |
</li> |
|
84 |
</ul> |
|
85 |
|
|
86 |
</div> |
|
87 |
|
|
88 |
</div> |
|
89 |
</div> |
|
90 |
</div> |
|
91 |
|
|
92 |
|
|
93 |
<div class="row"> |
|
94 |
<div class="col-lg-8 col-lg-offset-2"> |
|
95 |
|
|
96 |
<div class="card z-depth-2" style="padding-top: 10px;text-align: justify; text-justify: inter-word"> |
|
97 |
<div class="row" style="margin-top: 10px"> |
|
98 |
<h4 class="center-align"><b>HOW TO ACCESS SCHOLIX DATA FROM THIS HUB</b></h4> |
|
99 |
The Scholix Swagger API allows clients to run REST queries over the Scholexplorer index |
|
100 |
in order to fetch links matching given criteria. In the current version, clients can search for: |
|
101 |
<ul> |
|
102 |
<li> Links whose source object has a given PID or PID type; </li> |
|
103 |
<li> Links whose source object has been <b>published</b> by a given data source ("data source as publisher");</li> |
|
104 |
<li> Links that were <b>collected</b> from a given data source ("data source as provider"). </li> |
|
105 |
</ul> |
|
106 |
The APIs are available from <a |
|
107 |
href="https://api.scholexplorer.openaire.eu/v2/ui"> here</a>. The results of queries return lists of links |
|
108 |
encoded as JSON Scholix records. JSON (and XML) schema and example records for Scholix links are availabe on |
|
109 |
<a href="https://github.com/scholix/schema">GitHub</a>. |
|
110 |
</div> |
|
111 |
</div> |
|
112 |
</div> |
|
113 |
</div> |
|
114 |
|
|
115 |
|
|
116 |
<div class="row"> |
|
117 |
<div class="col-lg-8 col-lg-offset-2"> |
|
118 |
<div class="card z-depth-2" style="padding-top: 10px;text-align: justify; text-justify: inter-word"> |
|
119 |
<div class="row" style="margin-top: 10px"> |
|
120 |
<h4 class="center-align"><b>TERMS OF USE and SLA</b></h4> |
|
121 |
<b>REST APIs:</b> ScholeXplorer's REST APIs are free-to-use (no sign-up needed) by any third-party service. Note that: |
|
122 |
<ul> |
|
123 |
<li> The service limits each query to around 10,000 paged results (pages are by default of length 100 and can be navigated via resumption token); </li> |
|
124 |
<li> Since March 2018 a full <a href="https://zenodo.org/search?page=1&size=20&q=openaire%20scholexplorer%20service%20JSON%20dump"> JSON dump of the service is made available in Zenodo.org</a> |
|
125 |
every six months </li> |
|
126 |
<li> For unlimited access to the APIs please contact the <a href="mailto:paolo.manghi@isti.cnr.it">service administrators</a> </li> |
|
127 |
</ul> |
|
128 |
<p> |
|
129 |
<b>Metadata license is CC-BY:</b> Scholix metadata records returned by the service can be freely re-used by commercial and non-commercial |
|
130 |
partners under CC-BY license, hence as long as OpenAIRE ScholeXplorer is acknowledged as content provider provider. |
|
131 |
</p> |
|
132 |
<p> |
|
133 |
<b>SLA:</b> the service is running in production 24/7 within the OpenAIRE infrastructure premises deployed at the |
|
134 |
<a href="http://icm.edu.pl/en/centre-of-technology/">data center</a> facilities |
|
135 |
of the <a href="http://icm.edu.pl/en/">Interdisciplinary Centre for Mathematical and Computational Modelling</a> (ICM) |
|
136 |
</p> |
|
137 |
</div> |
|
138 |
<div class="row" style="margin-top: 10px"> |
|
139 |
<h4 class="center-align"><b>Faq</b></h4> |
|
140 |
For any questions you may have about this service please contact <a href="mailto:sandro.labruzzo@isti.cnr.it">Sandro La Bruzzo</a>. |
|
141 |
|
|
142 |
<p style="margin-top: 10px">1. <i>How to I expose Scholix links to Scholexplorer (or other services)? Does Scholix recommend an access protocol?</i></p> |
|
143 |
Scholix does not recommend any specific protocol to expose links, although any community standard is strongly encouraged. |
|
144 |
As to Scholexplorer, its harvesting layer bulk-collects links from external data sources via public APIs. OAI-PMH is preferable, |
|
145 |
but also REST APIs can be accepted. The option of “incremental” harvesting is strongly encouraged (not mandatory), |
|
146 |
for example allowing to search links by "last date of indexing": http://www.mydomain.eu/scholix?lastIndexingDate=yyyy-mm-dd). |
|
147 |
If Scholix links are returned with all metadata fields, including the optional ones, the APIs above are enough. If instead, the links are limited to |
|
148 |
the mandatory fields, then a "resolution" API would be required: given a PID of an object the API returns its full metadata record. |
|
149 |
|
|
150 |
<p style="margin-top: 10px">2. <i>Which PIDs are compatible with Scholexplorer?</i></p> |
|
151 |
Scholexplorer accepts links between any kind of persistent identifiers, including URLs. |
|
152 |
The major standard identifiers (e.g. DOIs, PDBs, PMCID, etc) are also resolved to include the complete record information in Scholexplorer, |
|
153 |
while in general URLs are not resolved as the variability of the associated resolvers cannot be handled by one service. |
|
154 |
In principle if your data source is Scholix compliant and provides proprietary PIDs you can include complete Scholix links records in Scholexplorer in two ways: |
|
155 |
(i) exposing complete Scholix records or (ii) exposing minimally compliant records but making a resolver available, |
|
156 |
so that Scholexplorer can collect the PID complete records (note: your PIDs will have a specific type, associated by Scholexplorer to your resolver service). |
|
157 |
|
|
158 |
|
|
159 |
</div> |
|
160 |
</div> |
|
161 |
</div> |
|
162 |
</div> |
|
163 |
</section> |
|
164 |
|
|
165 |
|
modules/dli-service-portal/branches/3.0/static/partials/about.html | ||
---|---|---|
1 |
<section style="font-size: 20px; font-family: Lato"> |
|
2 |
<div class="row"> |
|
3 |
<div class="col-lg-8 col-lg-offset-2"> |
|
4 |
|
|
5 |
<div class="card z-depth-2" style="padding-top: 10px"> |
|
6 |
<div class="row"> |
|
7 |
<div class="col l8 offset-l2"> |
|
8 |
<div class="row"> |
|
9 |
<h4 class="center-align"><b>About</b></h4> |
|
10 |
<div class="col-lg-12"> |
|
11 |
Scholexplorer populates and provides access to a graph of links between dataset |
|
12 |
and literature objects and dataset |
|
13 |
and dataset objects. Links (and objects) are provided by data sources managed by |
|
14 |
publishers, data centers, or other |
|
15 |
organizations providing services to store and manage links between data sets and |
|
16 |
publications such as CrossRef, DataCite, and OpenAIRE. Scholexplorer aggregates link metadata |
|
17 |
harvested from the data sources and out of these builds and harmonised and de-duplicated graph of scholarly |
|
18 |
objects. The graph is openly accessible (CC-0) via <a |
|
19 |
href="api.scholexplorer.openaire.eu/v1/ui">search REST APIs </a> |
|
20 |
that return links in <a href="http://www.scholix.org"> Scholix format</a>. |
|
21 |
|
|
22 |
|
|
23 |
</div> |
|
24 |
|
|
25 |
</div> |
|
26 |
</div> |
|
27 |
</div> |
|
28 |
</div> |
|
29 |
</div> |
|
30 |
</div> |
|
31 |
|
|
32 |
|
|
33 |
<div class="row"> |
|
34 |
<div class="col-lg-8 col-lg-offset-2"> |
|
35 |
|
|
36 |
<div class="card z-depth-2" style="padding-top: 10px"> |
|
37 |
<div class="row"> |
|
38 |
<div class="col l8 offset-l2"> |
|
39 |
<div class="row"> |
|
40 |
<h4 class="center-align"><b>References (@ OpenAIRE)</b></h4> |
|
41 |
<div class="col-lg-12"> |
|
42 |
<ul> |
|
43 |
<li> |
|
44 |
<a href="https://www.openaire.eu/search/publication?articleId=dedup_wf_001::309cd9083a888d86db07849b9011ad51">On |
|
45 |
Bridging Data Centers and Publishers: The Data-Literature Interlinking |
|
46 |
Service</a> Burton, Adrian; Koers, Hylke; Manghi, Paolo; La Bruzzo, Sandro; Aryani, Amir; Diepenbroek, Michael; SCHINDLER Uwe (2015)</li> |
|
47 |
<li><a href="https://www.openaire.eu/search/publication?articleId=od______2659::a84cec8e6970d6608256103f1146da3f"> |
|
48 |
Persistent Identifiers: a Prerequisite to Establish the Framework for Scholarly Link Exchange—Scholix</a> |
|
49 |
Mustapha Mokrane; Adrian Burton; Hylke Koers; Markus Stocker (2016)</li> |
|
50 |
<li> |
|
51 |
<a href="https://www.openaire.eu/search/publication?articleId=od______2367::72a2ecc3e2d7d17b3c49f47f7d0b3294">The |
|
52 |
data-literature interlinking service: towards a common infrastructure for |
|
53 |
sharing data-article links</a> Burton, Adrian; Koers, Hylke; Manghi, Paolo; La Bruzzo, Sandro; Aryani, Amir; Diepenbroek, Michael; SCHINDLER Uwe (2017) |
|
54 |
</li> |
|
55 |
<li> <a href="http://mirror.dlib.org/dlib/january17/burton/01burton.html">The Scholix Framework for Interoperability in Data-Literature Information Exchange</a> |
|
56 |
Adrian Burton, Hylke Koers, Paolo Manghi, Martin Fenner, Sandro La Bruzzo, Amir Aryani, Michael Diepenbroek, Uwe Schindler, Markus Stocker (2017) |
|
57 |
</li> |
|
58 |
|
|
59 |
</ul> |
|
60 |
|
|
61 |
|
|
62 |
</div> |
|
63 |
|
|
64 |
</div> |
|
65 |
</div> |
|
66 |
</div> |
|
67 |
</div> |
|
68 |
</div> |
|
69 |
</div> |
|
70 |
</section> |
modules/dli-service-portal/branches/3.0/static/partials/statistics.html | ||
---|---|---|
1 |
<section> |
|
2 |
<div class="row"> |
|
3 |
<div class="col-lg-8 col-lg-offset-2"> |
|
4 |
|
|
5 |
<div class="row"> |
|
6 |
<ul id="myTabs" class="nav nav-tabs text-center" role="tablist"> |
|
7 |
<li role="presentation" class="active"><a href="#tabstats" role="tab" id="profile-tab" |
|
8 |
data-toggle="tab" |
|
9 |
aria-controls="profile" aria-expanded="false"><h4> |
|
10 |
Statistics</h4></a></li> |
|
11 |
|
|
12 |
<li role="presentation"><a href="#historystats" role="tab" id="profile-tab" data-toggle="tab" |
|
13 |
aria-controls="profile" aria-expanded="false"><h4>History</h4></a></li> |
|
14 |
|
|
15 |
</ul> |
|
16 |
|
|
17 |
<div id="myTabContent" class="tab-content"> |
|
18 |
|
|
19 |
|
|
20 |
|
|
21 |
|
|
22 |
<div role="tabpanel" class="tab-pane fade in active" id="tabstats" aria-labelledby="dropdown1-tab"> |
|
23 |
<div class="row"> |
|
24 |
<div class="col-lg-12"> |
|
25 |
|
|
26 |
<div class="card z-depth-2" style="padding-top: 10px"> |
|
27 |
<div class="row"> |
|
28 |
<div class="col-lg-12"> |
|
29 |
<div class="row"> |
|
30 |
|
|
31 |
<div class="col-lg-12"> |
|
32 |
<table class="table "> |
|
33 |
|
|
34 |
<col> |
|
35 |
<colgroup span="3"></colgroup> |
|
36 |
<tr> |
|
37 |
<td rowspan="1" class="text-left"><b>Content Provider</b></td> |
|
38 |
<th rowspan="1" class="text-right">Links</th> |
|
39 |
<th colspan="4" scope="colgroup" class="text-center">Object</th> |
|
40 |
</tr> |
|
41 |
<tr> |
|
42 |
<th class="text-left"></th> |
|
43 |
<th class="text-right"></th> |
|
44 |
<th class="text-right" scope="col">Publication</th> |
|
45 |
<th class="text-right" scope="col">Dataset</th> |
|
46 |
<th class="text-right" scope="col">Unknown</th> |
|
47 |
<th class="text-right" scope="col">total</th> |
|
48 |
</tr> |
|
49 |
|
|
50 |
|
|
51 |
|
|
52 |
<!-- |
|
53 |
<tr class="orange-text"> |
|
54 |
|
|
55 |
<td class="text-left"><b>Content provider</b></td> |
|
56 |
<td class="text-right"><b>Contributed links</b></td> |
|
57 |
<td class="text-right"><b>Referred objects</b></td> |
|
58 |
<td class="text-right"><b>Referred publications</b></td> |
|
59 |
<td class="text-right"><b>Referred datasets</b></td> |
|
60 |
<td class="text-right"><b>Referred objects of unknown |
|
61 |
typology</b></td> |
|
62 |
</tr> |
|
63 |
--> |
|
64 |
|
|
65 |
<tr ng-repeat="item in stats"> |
|
66 |
<td class="left-align"><a |
|
67 |
href='#/datasource/id/{{ item.acronym }}'>{{ item.datasourceName }} </a> |
|
68 |
</td> |
|
69 |
<td class="text-right"> {{ item.links }}</td> |
|
70 |
<td class="text-right">{{ item.publication }}</td> |
|
71 |
<td class="text-right">{{ item.dataset }}</td> |
|
72 |
<td class="text-right">{{ item.unknown }}</td> |
|
73 |
<td class="text-right">{{ item.total }} |
Also available in: Unified diff
created new branch for python 3