2010-08-23 22 views
3

J'ai besoin de charger une très grande ontologie représentée par un fichier N-triples (1gb) dans l'application openrdf Sésame. J'utilise l'interface de workbench pour le faire. Je sais que ce fichier est trop volumineux pour être chargé en une seule requête. Pour contourner cela, j'ai divisé mes fichiers dans des fichiers de taille 100mb. Mais je reçois une erreur encore former le serveur de sésame openrdf:Chargement très grand fichier RDF dans openrdf Gestionnaire d'ontologie sésame

HTTP ERROR 500 

Problem accessing /openrdf-workbench/repositories/business/add. Reason: 

    Unbuffered entity enclosing request can not be repeated. 
Caused by: 

org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated. 
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487) 

Quelqu'un at-il une bonne connaissance de openrdf Sésame ou tout autre gestionnaire de l'ontologie que je pourrais utiliser pour ma tâche?

Merci beaucoup pour votre entrée

K.

Répondre

3

Le SESAME Workbench n'est vraiment pas l'outil idéal pour ce genre de tâches - même si je m'attendais à être en mesure de faire face à des fichiers de 100 Mo. Il se peut que le Tomcat sur lequel vous exécutez Sésame ait une limite POST? Vous pouvez demander autour de la liste de diffusion de Sesame, il y a aussi quelques personnes bien informées là-bas. Mais voici deux idées possibles pour faire avancer les choses:

Une façon de gérer cela est de faire votre téléchargement par programmation, en utilisant l'API Repository de Sésame. Jetez un oeil à la documentation de l'utilisateur sur le Sesame website pour des exemples de code. Alternativement, si vous utilisez un magasin natif Sésame, vous pouvez faire une solution de contournement "sale" en utilisant la console de ligne de commande de Sésame: créer un magasin triple natif local et télécharger vos données dans ce magasin local (cela devrait être beaucoup plus rapide aucune communication HTTP n'est nécessaire). Ensuite, fermez votre serveur Sesame, copiez les fichiers de données du magasin natif local sur les fichiers de données du magasin dans votre serveur et redémarrez.

-1

Je ne sais pas exactement quelle tâche que vous espérez atteindre, mais vous pouvez consulter here pour une liste des magasins triple évolutives avec informel résultats d'extensibilité (principalement auto-réclamés). En cela, Sésame ne signale que la gestion des déclarations 70M (pas beaucoup ... peut être la cause de vos problèmes.)

+0

Cette liste est mal à jour IMHO, et le nombre signalé pour Sésame est également. Il est capable de gérer des centaines de millions de triplets (et si vous comptez OWLIM comme un magasin de sésame, des milliards). –

1

J'ai eu le même problème. Lorsque j'ai essayé de télécharger « grand » RDF (environ 40 Mo), le processus téléchargement faild avec l'erreur:

Unbuffered entity enclosing request can not be repeated.

j'essayer d'autres wersion de Tomcat et aussi le sésame, mais sans succès. Ensuite, je tente d'utiliser la console de sésame et dépôt local (non localhost sur le serveur tomcat - comme Jeen dit dans une autre réponse) il me montre une autre erreur:

Malformed document: JAXP00010001: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK. [line 1, column 1]

Je pense donc que l'erreur au sujet de l'entité limite est couvert quelque part dans tomcat par erreur sur l'entité Umbuffered.

Je trouve ce sujet What's causing these ParseError exceptions when reading off an AWS SQS queue in my Storm cluster et ajoutez cette déclaration avant tomcat départ:

export JAVA_OPTS="${JAVA_OPTS} -Djdk.xml.entityExpansionLimit=0" 

Cette déclaration disable limite d'entité dans parseur XML (par défaut est de 64 000 comme message d'erreur indique). Après cette étape, il est possible de charger un "grand" RDF (testé sur 40-800 Mo).

+0

Pouvez-vous préciser où exactement vous avez ajouté cette ligne? – kurious

+1

Si je me souviens, j'ajoute cette ligne dans le fichier .bashrc dans le répertoire personnel de l'utilisateur sous lequel est exécuté tomcat. Mais il y a beaucoup d'endroits où vous pouvez l'ajouter.Je pense qu'il est possible d'ajouter cette ligne au-dessus des fichiers startup.sh ou catalina.sh dans le dossier bin de tomcat. – PeterMacko