Загрузка очень большого RDF-файла в openrdf Менеджер онтологии Sesame - PullRequest
4 голосов
/ 23 августа 2010

Мне нужно загрузить очень большую онтологию, представленную в виде файла N-triples (1 ГБ) в приложение openrdf Sesame Я использую интерфейс Workbench, чтобы сделать это. Я знаю, что этот файл слишком велик для загрузки в одном запросе. Чтобы обойти это, я разделил свои файлы на файлы размером 100 МБ. Но я все еще получаю сообщение об ошибке от сервера сезам openrdf:

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)

Кто-нибудь хорошо знает openrdf Sesame или другой менеджер онтологий, который я могу использовать для своей задачи?

Большое спасибо за ваш вклад

К.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2010

Sesame Workbench действительно не идеальный инструмент для подобных задач, хотя я ожидаю, что он сможет справиться с файлами размером 100 МБ.Может быть, у Tomcat, на котором вы запускаете Sesame, установлен предел POST?Вы можете спросить в списке рассылки Сезам, там также довольно мало знающих людей.Но вот две возможные идеи для достижения цели:

Один из способов справиться с этим - выполнить загрузку программно, используя API репозитория Sesame.Посмотрите пользовательскую документацию на сайте Sesame для примеров кода.

В качестве альтернативы, если вы используете нативное хранилище Sesame, вы можете сделать «грязный» обходной путь с помощью консоли командной строки Sesame: создать локальное нативное тройное хранилище и загрузить данные в это локальное хранилище (это должнобыстрее, потому что не требуется HTTP-связь).Затем выключите сервер Sesame, скопируйте файлы данных локального собственного хранилища поверх файлов данных хранилища на вашем сервере и перезапустите.

1 голос
/ 16 октября 2015

У меня была такая же проблема. Когда я попытался загрузить «большой» RDF (около 40 МБ), процесс загрузки завершился с ошибкой:

Запрос на вложение небуферизованного объекта не может повторяться.

Я пробую другую версию Tomcat, а также кунжут, но безуспешно. Затем я пытаюсь использовать консоль sesame и локальный репозиторий (не localhost на сервере Tomcat - как Джин сказал в другом ответе), он показывает мне еще одну ошибку:

Неправильный документ: JAXP00010001: синтаксический анализатор обнаружил в этом документе более 64000 расширений сущностей; это предел, установленный JDK. [строка 1, столбец 1]

Так что я думаю, что ошибка в Entity Limit где-то в tomcat скрыта ошибкой в ​​Umbuffered сущности.

Затем я нашел эту тему Что вызывает эти исключения ParseError при чтении очереди AWS SQS в моем кластере Storm и добавьте этот оператор перед запуском tomcat:

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

Этот оператор отключает ограничение сущности в анализаторе XML (по умолчанию 64 000, как говорится в сообщении об ошибке). После этого шага я могу загрузить "большой" RDF (проверено на 40-800MB).

0 голосов
/ 16 сентября 2010

Я не знаю точно, какую задачу вы надеетесь достичь, но вы можете проверить здесь для списка масштабируемых тройных магазинов с неофициальными (в основном самозваными) результатами масштабируемости.В этом Сезам сообщает только о 70M заявлениях (не так много ... может быть причиной ваших проблем.)

...