{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Studiando la documentazione di Virtuoso, si vede che ci sono potenzialmente un sacco di metodi, più o meno complicati, per caricare file RDF o singole triple, sia da interfaccia che da codice; vedi [qui](http://vos.openlinksw.com/owiki/wiki/VOS/VirtRDFInsert).\n", "Quello che mi pareva più accessibile e su cui mi sono concentrato per ora usa l'endpoint SPARQL. In [questa pagina](http://vos.openlinksw.com/owiki/wiki/VOS/VirtGraphProtocolCURLExamples) sono riportati esempi per farlo tramite il comando *curl*, ad esempio:\n", "\n", "**> curl --digest --user USER:PWD (--verbose) --url \"http://VIRTUOSO_URL:PORT/sparql-graph-crud-auth?graph-uri=FULL_PATH_TO_THE_GRAPH\" -T FILE_TO_UPLOAD**\n", "\n", "Una volta verificato che funzionava, si è trattato di replicare il comando in Python. Per farlo ho usato il modulo *requests*. L'unico punto delicato è stato riprodurre l'**autenticazione**, che a quanto pare richiede il metodo **\"Digest\"** - ho dovuto cercare un po' sul web per trovare l'opzione per riprodurla." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Segue il codice per fare l'upload del file di prova che mi ha passato Federica." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# SETUP\n", "\n", "import requests\n", "\n", "file_path = '/Users/federicaspinelli/TEAMOVI/Parser/DATA/ASPO/RDF/ospedale/' # CAMBIARE QUESTO!\n", "file_name = 'data_fonds (2).n3' # Cambiare se si desidera" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Internal Server Error\n" ] } ], "source": [ "# UPLOAD\n", "\n", "file_object = open(file_path + file_name, 'rb')\n", "user = 'dba'\n", "pwd = 'R41s344ll'\n", "virtuoso_url = 'http://147.213.76.182:8890/'\n", "graph_uri = 'http://147.213.76.182:8890/prova' # Cambiare se si desidera\n", "\n", "resp = requests.post(virtuoso_url + '/sparql-graph-crud-auth?graph-uri=' + graph_uri,\n", " data = file_object,\n", " auth = requests.auth.HTTPDigestAuth(user, pwd))\n", "\n", "print(resp)\n", "print(resp.reason)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per riferimento" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'User-Agent': 'python-requests/2.28.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '30588', 'Authorization': 'Digest username=\"dba\", realm=\"SPARQL\", nonce=\"9191a082763dbbb6a4dc17c826cac571\", uri=\"//sparql-graph-crud-auth?graph-uri=http://147.213.76.182:8890/prova\", response=\"9290773fd8b2cb50f950c352d08d9c6f\", opaque=\"5ebe2294ecd0e0f08eab7690d2a6ee69\", algorithm=\"MD5\", qop=\"auth\", nc=00000001, cnonce=\"d8cbb57f0356db55\"'}\n" ] } ], "source": [ "print(resp.request.headers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per completezza: prova di ri-download delle info uploadate. Notare che l'url da chiamare è *leggermente diverso*: la substring **crud-auth** diventa **crud**." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "@prefix rdf:\t .\n", "@prefix ns1:\t .\n", "\trdf:type\tns1:E74_Group .\n", "@prefix rdfs:\t .\n", "\trdfs:label\t\"Archivio di Stato di Prato\" .\n" ] } ], "source": [ "resp2 = requests.get(virtuoso_url + '/sparql-graph-crud?graph-uri=' + graph_uri)\n", "\n", "print(resp2.text)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.4 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "vscode": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" } } }, "nbformat": 4, "nbformat_minor": 4 }