# export_function.py - The [script](https://github.com/CECSpecialistI/UWLibCatProfiles/blob/e55484828e2cbac578981e915104a96696972c2c/scripts/export_function.py) is currently in **UWLibCatProfiles** (link to version in [tree e55484828e](https://github.com/CECSpecialistI/UWLibCatProfiles/tree/e55484828e2cbac578981e915104a96696972c2c)) - Alexis K.M. kindly provided overviews for both of these fixes before finishing up her position in CAMS, they are linked below (both are located in the [UWL CaMS Linked Data Team shared G. drive](https://drive.google.com/drive/folders/0AOh1bCss-RsNUk9PVA) > [documentation and drafts folder](https://drive.google.com/drive/folders/1fc68QGEzZ8NVXsxzt2QvJ2-6oNz5mkKn)) ## To-do: 1. Fix issues encountered by Melissa 2020-05-08 (see error message at bottom\* of this note) - see AKM recommendation [sin2fuseki export updates](https://docs.google.com/document/d/1TTBbJrNQGaR0nUbedBJtwa1PttukCkALGjYQV0Gk1v8/edit) 2. Add functionality to create provenance statements and load these in Fuseki along with Sinopia export triples - see recommendation [sin2fuseki prov statement](https://docs.google.com/document/d/1AbzB4lk0YCu_6CmpmVzugHBoUUeZieQ90UvWSB7klCg/edit) ## Other notes - This script loads Trellis export triples into Fuseki and also serializes and saves triples locally in RDF/XML and Turtle; these are saved in `export_xml` and `export_ttl` folders in multiple files, one for each resource (this matches the structure of Sinopia exports, which are provided in multiple JSON-LD files, one for each resource) - [rdfLibSer.py](https://github.com/uwlib-cams/webviews/blob/3412f1073ab1bf13ca1c2e0a88d6a0f1b93bdd3d/python/rdfLibSer.py) is a modification of this script; it was changed so that it would serialize and save a single file containing all triples (RDF/XML only), as opposed to multiple files as described above ## 2020-05-08 error message ``` python3 export_function.py ... retrieving graph uris ... saving downloaded graphs locally ... clearing graph ... update succeeded ... updating fuseki Traceback (most recent call last): File "/home/mcm104/.local/lib/python3.6/site-packages/SPARQLWrapper/Wrapper.py", line 1073, in _query response = urlopener(request) File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python3.6/urllib/request.py", line 532, in open response = meth(req, response) File "/usr/lib/python3.6/urllib/request.py", line 642, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python3.6/urllib/request.py", line 570, in error return self._call_chain(*args) File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain result = func(*args) File "/usr/lib/python3.6/urllib/request.py", line 650, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 400: During handling of the above exception, another exception occurred: Traceback (most recent call last): File "export_function.py", line 94, in <module> results = sparql.query().convert() File "/home/mcm104/.local/lib/python3.6/site-packages/SPARQLWrapper/Wrapper.py", line 1107, in query return QueryResult(self._query()) File "/home/mcm104/.local/lib/python3.6/site-packages/SPARQLWrapper/Wrapper.py", line 1077, in _query raise QueryBadFormed(e.read()) SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed. Response: b'<!DOCTYPE html><html><head><title>Apache Tomcat/9.0.0.M15 - Error report</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style> </head><body><h1>HTTP Status 400 - Unknown content type for triples: [application/x-www-form-urlencoded]</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>Unknown content type for triples: [application/x-www-form-urlencoded]</u></p><p><b>description</b> <u>The request sent by the client was syntactically incorrect.</u></p><hr class="line"><h3>Apache Tomcat/9.0.0.M15</h3></body></html>' ``` ## More (random) notes re: export_function.py To run AKM's Sinopia-to-Fuseki script: - Install (pip3): - rdflib - SPARQLwrapper - random - os* - NOTE: - random does not seem to be needed by the script... the import has been commented out - os is included in Python3 by default - AKM also notes: - I'll probably want requests