2010-08-23 4 views
3

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

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 кунжут или другого менеджера онтологий, что я мог бы использовать для моей задачи?

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

К.

ответ

3

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

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

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

-1

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

+0

Этот список плохо устарел ИМХО, а также указанный номер для кунжута. Он способен обрабатывать сотни миллионов троек (и если вы считаете OWLIM как магазин кунжута, миллиарды). –

1

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

Unbuffered entity enclosing request can not be repeated.

я попробовать другой wersion из Tomcat, а также кунжут, но без успеха. Тогда я пытаюсь использовать кунжутную консоль и локальное хранилище (не локальный на TOMCAT сервера - в Jeen говорит в другом ответе) он показал мне другую ошибку:

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]

Так что я думаю, ошибка о Entity Limit покрывается где-то в коте по ошибка об Umbuffered entity.

Тогда я нашел эту тему What's causing these ParseError exceptions when reading off an AWS SQS queue in my Storm cluster и добавить это заявление до TOMCAT запуска:

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

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

+0

Можете указать, где именно вы указали эту строку. – kurious

+1

Как я помню, я добавляю эту строку в файл .bashrc в домашнем каталоге пользователя, под которым выполняется tomcat. Но есть много мест, где вы можете добавить его.Я думаю, что эту строку можно добавить поверх файлов startup.sh или catalina.sh в папке bin tomcat. – PeterMacko