def edit_resource(app_id, url): ltwapp = App.query.filter_by(id=app_id).first() graph_id = ltwapp.graph_id data_graph = get_ltw_data_graph(graph_id) config_graph = get_ltw_config_graph(graph_id) class_uri = list(data_graph.objects(URIRef(url), RDF.type))[0] res_data = get_resource_triples(data_graph, config_graph, str(class_uri), url) i = -1 for i, triple in enumerate(sorted(res_data['triples'])): if isinstance(triple[1], Literal) and triple[1].language: default_txt = u'%s @ %s' % (unicode(triple[1]), triple[1].language) else: default_txt = triple[1] setattr(ResourceEditForm, 'field' + str(i), TextField(triple[2], default=default_txt, description=triple[0])) number_of_fields = i + 1 # +1 because i starts on 0 form = ResourceEditForm() if form.validate_on_submit(): for i, triple in enumerate(sorted(res_data['triples'])): data_graph.remove( (URIRef(url), triple[0], triple[1]) ) field_data, lang = get_literal_and_lang(getattr(form, 'field' + str(i)).data) if field_data: data_graph.add( (URIRef(url), triple[0], Literal(field_data, lang=lang)) ) if len(request.form.keys()) - 1 > number_of_fields: # -1 because CSRF token is included in form keys number_of_new_fields = (len(request.form.keys()) - 1 - number_of_fields) / 2 for i in range(number_of_fields + 1, number_of_fields + 1 + number_of_new_fields): p = request.form['field%s_p' % str(i)] o = request.form['field%s_o' % str(i)] if p and o: if o.startswith('http://'): data_graph.add( (URIRef(url), URIRef(p), URIRef(o)) ) else: o, lang = get_literal_and_lang(o) data_graph.add( (URIRef(url), URIRef(p), Literal(o, lang=lang)) ) return redirect(url_for('edit_resource', app_id=app_id, url=url)) else: linked_resources = [] resources = {} for link in res_data['linkable']: for o in data_graph.objects(URIRef(url), URIRef(link)): if str(o.encode('utf-8')) not in linked_resources: linked_resources.append(str(o.encode('utf-8'))) lang = o.language if o.language else 'en' if lang not in resources: resources[lang] = [] for resource in search_dbpedia_trough_wikipedia(str(o.encode('utf-8')), lang): resources[lang].append(resource) return render_template('edit_resource.html', data=res_data, app_id=app_id, url=url, resources=resources, form=form, number_of_fields=number_of_fields)
def add_external_triples(): s = request.args.get('s', None, type=str) p = request.args.get('p', None, type=str) o = request.args.get('o', None, type=str) o, lang = get_literal_and_lang(urllib.unquote(o)) ltwapp = App.query.filter_by(id=session['app']).first() data_graph = get_ltw_data_graph(ltwapp.graph_id) data_graph.add( (URIRef(urllib.unquote(s)), URIRef(urllib.unquote(p)), Literal(o, lang=lang)) ) return json.dumps({})
def rdf_description_of_resource(graph_id, url): data_graph = get_ltw_data_graph(graph_id) requested_mimetype = request_wants_rdf() if requested_mimetype and data_graph != None: g = Graph() for p, o in data_graph.query('SELECT DISTINCT ?p ?o WHERE { <%s> ?p ?o }' % url): if isinstance(o, URIRef): g.add( (URIRef(url), p, URIRef(get_ltw_uri(str(o), graph_id))) ) else: g.add( (URIRef(url), p, o) ) return Response(response=g.serialize(format=SUPPORTED_RDF_HEADERS[requested_mimetype]), mimetype=requested_mimetype) return render_template('error/406_error.html'), 406
def add_external_triples(): s = request.args.get('s', None, type=str) p = request.args.get('p', None, type=str) o = request.args.get('o', None, type=str) o, lang = get_literal_and_lang(urllib.unquote(o)) ltwapp = App.query.filter_by(id=session['app']).first() data_graph = get_ltw_data_graph(ltwapp.graph_id) data_graph.add((URIRef(urllib.unquote(s)), URIRef(urllib.unquote(p)), Literal(o, lang=lang))) return json.dumps({})
def rdf_description_of_resource(graph_id, url): data_graph = get_ltw_data_graph(graph_id) requested_mimetype = request_wants_rdf() if requested_mimetype and data_graph != None: g = Graph() for p, o in data_graph.query( 'SELECT DISTINCT ?p ?o WHERE { <%s> ?p ?o }' % url): if isinstance(o, URIRef): g.add((URIRef(url), p, URIRef(get_ltw_uri(str(o), graph_id)))) else: g.add((URIRef(url), p, o)) return Response(response=g.serialize( format=SUPPORTED_RDF_HEADERS[requested_mimetype]), mimetype=requested_mimetype) return render_template('error/406_error.html'), 406
def edit_resource(app_id, url): ltwapp = App.query.filter_by(id=app_id).first() graph_id = ltwapp.graph_id data_graph = get_ltw_data_graph(graph_id) config_graph = get_ltw_config_graph(graph_id) class_uri = list(data_graph.objects(URIRef(url), RDF.type))[0] res_data = get_resource_triples(data_graph, config_graph, str(class_uri), url) i = -1 for i, triple in enumerate(sorted(res_data['triples'])): if isinstance(triple[1], Literal) and triple[1].language: default_txt = u'%s @ %s' % (unicode(triple[1]), triple[1].language) else: default_txt = triple[1] setattr( ResourceEditForm, 'field' + str(i), TextField(triple[2], default=default_txt, description=triple[0])) number_of_fields = i + 1 # +1 because i starts on 0 form = ResourceEditForm() if form.validate_on_submit(): for i, triple in enumerate(sorted(res_data['triples'])): data_graph.remove((URIRef(url), triple[0], triple[1])) field_data, lang = get_literal_and_lang( getattr(form, 'field' + str(i)).data) if field_data: data_graph.add( (URIRef(url), triple[0], Literal(field_data, lang=lang))) if len( request.form.keys() ) - 1 > number_of_fields: # -1 because CSRF token is included in form keys number_of_new_fields = (len(request.form.keys()) - 1 - number_of_fields) / 2 for i in range(number_of_fields + 1, number_of_fields + 1 + number_of_new_fields): p = request.form['field%s_p' % str(i)] o = request.form['field%s_o' % str(i)] if p and o: if o.startswith('http://'): data_graph.add((URIRef(url), URIRef(p), URIRef(o))) else: o, lang = get_literal_and_lang(o) data_graph.add( (URIRef(url), URIRef(p), Literal(o, lang=lang))) return redirect(url_for('edit_resource', app_id=app_id, url=url)) else: linked_resources = [] resources = {} for link in res_data['linkable']: for o in data_graph.objects(URIRef(url), URIRef(link)): if str(o.encode('utf-8')) not in linked_resources: linked_resources.append(str(o.encode('utf-8'))) lang = o.language if o.language else 'en' if lang not in resources: resources[lang] = [] for resource in search_dbpedia_trough_wikipedia( str(o.encode('utf-8')), lang): resources[lang].append(resource) return render_template('edit_resource.html', data=res_data, app_id=app_id, url=url, resources=resources, form=form, number_of_fields=number_of_fields)