Difficulty reading a matrix as a node in rdflib -


i created rdf file images stored in nodes matrices. when try read them cannot matrix form: example

from rflib import literal  mm = np.random.normal(0,1,(3,3)) l = literal(mm) 

it easy matrix l.value

in [494]: l out[494]: rdflib.term.literal(u'[[-1.39304728  0.39093531 0.88042378]\n   [ 0.22605682  0.56064787 -0.75176713]\n [ 0.57021203  0.31796492 -0.53303191]]')   in [495]: l.value  out[495]:   array([[-1.39304728,  0.39093531,  0.88042378],    [ 0.22605682,  0.56064787, -0.75176713],    [ 0.57021203,  0.31796492, -0.53303191]]) 

however when execute sparql stored in image_nodes get:

in [501]: res = [q q in image_nodes]  in [502]: res[0][0] out[502]: rdflib.term.literal(u'[[ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n ..., \n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]]')  in [503]: (res[0][0]).value out[503]: u'[[ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n ..., \n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]\n [ 0.  0.  0. ...,  0.  0.  0.]]' 

why cant matrix format time? in unicode , resistant transformation. thanks

as didn't provide sparql query parts of answer guess-work...

if create rdflib.literal(obj) rdflib try convert given object suitable rdf (xsd) representation. python standard types mapped here. if given object doesn't have of types (like np.array) _castpythontoliteral(obj) method fall return obj. l.value observe here untouched obj passed literal(obj), can seen in constructor code, arguably confusing. actual returned inst of literal unicode object, can "content" of literal unicode(l). important it's stored in stores / sparql endpoint.

now if retrieve literal sparql endpoint , if obj none of standard types, endpoint ever knew string representation of obj, returns l = literal(str_rep_of_obj). sparql endpoint's standpoint string. rdflib see string , why unicode string in res[0][0].value.

in order fix need de-serialize string content of res[0][0] np.array, e.g. json this:

l = literal(json.dumps(mm.tolist())) 

and later

imagenode = np.array(json.loads(unicode(res_literal))) 

one additional remark though... databases saving binary blobs such images in database not idea. it's better put binary data somewhere , save link in database. isn't cool rdf uses uris ;)


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -