4
4
import LidoRDFConverter as LRC
5
5
from pathlib import Path
6
6
from .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
8
8
from .database import db , User
9
9
10
10
@@ -25,13 +25,14 @@ def dlftLidoFile():
25
25
return Path ('./defaultLido.xml' )
26
26
27
27
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 ''
35
36
36
37
37
38
def registerLidoBlueprint (app ,user ):
@@ -135,20 +136,27 @@ def runMappings():
135
136
if request .method == 'POST' :
136
137
parm = request .get_json ()
137
138
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 ())
139
140
response_object ['message' ] = 'Mappings applied to Lido!'
140
141
return jsonify (response_object )
141
142
142
143
@lidoapp_bp .route ('/convert' , methods = ['POST' ])
143
144
def convert ():
144
145
# 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"
145
148
if request .mimetype == "multipart/form-data" :
146
149
lido_xml = request .files ['file' ].read ().decode ('utf-8' )
150
+ format = request .form .get ('format' ,'turtle' )
147
151
else :
148
152
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
152
160
return response
153
161
154
162
@lidoapp_bp .route ('/updateLido' , methods = ['GET' , 'POST' ])
0 commit comments