2
votes

Téléchargement par programmation de l'ensemble de données vers fuseki

J'utilise l'image docker jena fuseki 2 pour créer un serveur fuseki.

Et je veux savoir s'il existe un moyen de télécharger mon ensemble de données sur fuseki non pas à partir de l'interface Web, mais par programme , à partir de SPARQL ou Python ou quoi que ce soit d'autre.

Et aussi, y a-t-il un moyen de travailler avec l'ontologie de webprotégé directement depuis fuseki? Merci pour votre réponse


0 commentaires

3 Réponses :


2
votes

Fuseki est livré avec une API HTTP qui peut être utilisée pour télécharger des données. Vous pouvez utiliser CURL ou une bibliothèque HTTP Python pour communiquer avec cette API. Fuseki comprend également des scripts d'assistance de ligne de commande qui peuvent être utilisés pour appeler l'API HTTP. Voir https://jena.apache.org/documentation/fuseki2/soh.html#soh-sparql-http pour plus de détails.


8 commentaires

Merci pour votre réponse. S'il vous plaît, pouvez-vous me montrer un exemple d'utilisation de python avec l'API HTTP de fuseki pour télécharger mon ensemble de données?


@mee charge simplement le fichier en tant que flux, ce qui crée le corps du contenu HTTP et utilise HTTP PUT comme type de requête. Et puis en effet l'URI de requête approprié composé de l'ensemble de données et du nom du graphe.


J'ai essayé cela sans succès: with open('pizza.owl', 'rb') as f: response=requests.put(http://localhost:3030/mydataset/update‌​, data=f, stream=True)


Si je comprends bien la documentation, vous devez probablement PUT sur http://localhost:3030/mydataset/data ou http://localhost:3030/mydataset/data?default . Cela utiliserait le protocole SPARQL Graph Store ( w3.org/2012/01/http-rdf-update ), qui (avec un appel PUT) remplace l'ensemble de données. Si vous souhaitez utiliser le point de terminaison /update , qui ajoute / met à jour uniquement les triplets donnés, vous devez probablement utiliser POST comme méthode HTTP.


J'ai essayé http://localhost:3030/mydataset/data comme url dans ma méthode put et j'ai obtenu une response[400] , et quand je regarde mes journaux de conteneur, je trouve ceci: PUT http://localhost:3030/mydataset/data , PUT /mydataset :: 'data' :: [multipart/form-data] ? , 400 Only files accepted in multipart file upload (got fileName=pizza.owl) .


Est-il utile de passer headers={'Content-type': 'application/octet-stream'} comme paramètre supplémentaire à requests.put() ?


Non, j'ai eu cette erreur lorsque je regarde les journaux de conteneurs: Unknown content type for triples: [application/octet-stream]


Merci pour toute votre aide, ça marche enfin !!! J'utilise le MultiparEncoder de requests_toolbet : from requests_toolbelt.multipart.encoder import MultipartEncoder multipart_data = MultipartEncoder(fields={'file': ('pizza.owl', open('pizza.owl', 'rb'), 'text/plain')}) response=requests.put('http://localhost:3030/mydatset/data', data=multipart_data, auth=('admin','mypassword'),headers={'Content-Type': multipart_data.content_type})



1
votes

Si vos données RDF sont au format tortue, vous pouvez utiliser le code suivant:

n3: text/n3; charset=utf-8
nt: text/plain
rdf: application/rdf+xml
owl: application/rdf+xml
nq: application/n-quads
trig: application/trig
jsonld: application/ld+json

Si vos données RDF sont dans un autre format, vous devez changer vos en-têtes, voici une liste:

data = open('test.ttl').read()
headers = {'Content-Type': 'text/turtle;charset=utf-8'}
r = requests.post('http://localhost:3030/mydataset/data?default', data=data, headers=headers)


0 commentaires

1
votes

J'ai essayé de télécharger le fichier sur fuseki en utilisant CURL, WGET, ./s-post, ./s-put sans effet. J'ai généré une demande avec l'aide du facteur. Si quelqu'un, comme moi, recherche une requête CURL correcte, c'est celle-ci:

curl --location --request POST 'http://{FUSEKIADDRESS}/{YOURDATASET}/data' --header 'Content-Type: multipart/form-data' --form 'file.ttl=@{}PATHtoFILE/file.ttl'


0 commentaires