44import LidoRDFConverter as LRC
55from pathlib import Path
66from .x3ml_classes import Mapping , Link , PredicateVariant , Equals , X3ml
7- from flask import Blueprint , render_template , request , send_file , jsonify
7+ from flask import Blueprint , render_template , request , send_file , jsonify , make_response
88from .database import db , User
99
1010
@@ -25,13 +25,14 @@ def dlftLidoFile():
2525 return Path ('./defaultLido.xml' )
2626
2727
28- def processString (lidoString , x3mlstr ):
29- result = '<no-data/>'
30- if lidoString :
31- converter = LRC .LidoRDFConverter .from_str (x3mlstr )
32- graph = converter .parse_string (lidoString )
33- result = graph .serialize (format = 'turtle' )
34- return result
28+ def convert_lido_str (lido_str , x3ml_str ,format = 'turtle' ):
29+ '''Converts LIDO XML string to RDF using the provided X3ML mapping string.
30+ Returns the RDF string in the specified format.'''
31+ if lido_str :
32+ converter = LRC .LidoRDFConverter .from_str (x3ml_str )
33+ graph = converter .parse_string (lido_str )
34+ return graph .serialize (format = format )
35+ return ''
3536
3637
3738def registerLidoBlueprint (app ,user ):
@@ -135,20 +136,27 @@ def runMappings():
135136 if request .method == 'POST' :
136137 parm = request .get_json ()
137138 lidoapp_bp .user .lido = parm ['data' ]
138- response_object ['text' ] = processString (lidoapp_bp .user .lido , lidoapp_bp .model .to_str ())
139+ response_object ['text' ] = convert_lido_str (lidoapp_bp .user .lido , lidoapp_bp .model .to_str ())
139140 response_object ['message' ] = 'Mappings applied to Lido!'
140141 return jsonify (response_object )
141142
142143@lidoapp_bp .route ('/convert' , methods = ['POST' ])
143144def convert ():
144145 # TODO: catch error and provide better error response e.g. code 400 for malformed LIDO
146+ # Valid formats: "xml", "n3", "turtle", "nt", "pretty-xml", "trix", "trig", "nquads", "json-ld", "hext"
147+ # Example: curl -X POST -F format='nt' -F file=@FILE HOST:PORT/convert"
145148 if request .mimetype == "multipart/form-data" :
146149 lido_xml = request .files ['file' ].read ().decode ('utf-8' )
150+ format = request .form .get ('format' ,'turtle' )
147151 else :
148152 lido_xml = request .get_data ()
149- return processString (lido_xml , dlftMappingFile ().read_text ())
150- response = make_response (turtle , 200 )
151- response .mime_type = "text/turtle"
153+ format = 'turtle'
154+ try :
155+ rdf_str = convert_lido_str (lido_xml , dlftMappingFile ().read_text (),format = format )
156+ response = make_response (rdf_str , 200 )
157+ response .mime_type = f"text/{ format } "
158+ except Exception as e :
159+ return jsonify ({'error' : str (e )}), 400
152160 return response
153161
154162@lidoapp_bp .route ('/updateLido' , methods = ['GET' , 'POST' ])
0 commit comments