Ошибка при сохранении онтологии с помощью jena

Пытаюсь создать новую онтологию и после некоторых действий сохранить. Он был создан хорошо, и у меня нет проблем с классами и другими вещами, но когда я пытаюсь сохранить его в локальный файл, я получаю ошибку! Мой код:

//create a new ontology
SOURCE = "http://www.w3.org/2002/07/owl#";
NS = SOURCE + "#";
ontology = ModelFactory.createOntologyModel();
ontology.read( SOURCE, "RDF/XML" );
///////some actions
//save the ontology
try {
        File file= new File("Log.owl");
        ontology.write(new FileOutputStream(file));

    } 
    catch (IOException e) {
        e.printStackTrace();
    }

И ошибка:

Exception in thread "main" com.hp.hpl.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <d> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing.
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.checkURI(BaseXMLWriter.java:829)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.xmlnsDecl(BaseXMLWriter.java:348)
at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFHeader(Basic.java:56)
at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:39)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:500)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:472)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:458)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:271)
at com.hp.hpl.jena.ontology.impl.OntModelImpl.write(OntModelImpl.java:2552)

Я знаю, что формат http://www.w3.org/2002/07/owl# - ЧЕРЕПАХА, но я хотел бы иметь онтологию в RDF / XML, и я не знаю, что писать вместо Я пробовал разные ссылки, но каждый раз получал новую ошибку. Должен ли SOURCE быть реальной ссылкой?

Спасибо за любой ответ!


person Mahdieh    schedule 12.09.2012    source источник


Ответы (3)


Наконец-то мне удалось найти решение! И это оказалось проще, чем я думал! Моя проблема заключалась в создании классов. Мой код был:

ontology.createClass(word);

Пришлось написать:

ontology.createClass(NS+word);

Кусок торта!

person Mahdieh    schedule 22.09.2012
comment
По сути, решение такого рода ошибок заключается в добавлении пространства имен; будь то в классе или в отдельном Субъекте, объекте, предикате (Ресурсы). Без пространства имен он не позволяет писать онтологию в RDF / XML. - person Pratiksha Sharma; 16.09.2016

Попробуйте читать как Turtle - вывод будет RDF / XML (но вы хотите использовать более аккуратный RDF / XML-ABBREV. Внутри он хранится в виде троек, а не в каком-то конкретном синтаксисе при чтении.

person AndyS    schedule 13.09.2012
comment
Спасибо, Энди. Я мог бы запустить его с помощью TURTLE, но результат тоже в TURTLE! - person Mahdieh; 14.09.2012

Вы должны читать онтологию в формате "TURTLE", а не "RDF/XML". Вы можете выбрать другой формат при записи, см. Jena Model javadoc для различных версий метода write(). Выберите тот, в котором вы можете указать формат вывода (lang), и используйте "RDF/XML-ABBREV", как говорит AndyS.

Исключение состоит в том, что вы использовали простую строку (очевидно "d") в месте, где разрешены только полные абсолютные URI (например, "http://example.com/mydata#d"). Может быть, при звонке на createResource()?

person cygri    schedule 13.09.2012
comment
Спасибо за ваше предложение cygri. У меня нет проблем с TURTLE, и он отлично работает, но мне нужен вывод в RDF / XML и когда я пишу ontology.write (новый FileOutputStream (файл), RDF / XML-ABBREV); это снова дает мне ту ошибку! К сожалению, я не смог понять ваш последний вопрос. - person Mahdieh; 14.09.2012
comment
Нет, ошибка именно в записи в локальный файл! Я внимательно отследил ее. - person Mahdieh; 14.09.2012
comment
И когда я пишу ontology.write (новый FileOutputStream (файл), ЧЕРЕПАХА); это работает хорошо. Вот почему я запуталась! - person Mahdieh; 14.09.2012
comment
Нет, серьезно, проблема в «некоторых действиях». Вы генерируете что-то, что нельзя сериализовать как RDF / XML. Попробуйте удалить часть «некоторые действия», чтобы сохранить оригинал как RDF / XML без каких-либо изменений. Если это сработает, тогда проблема должна быть в части «некоторых действий», верно? - person cygri; 14.09.2012
comment
Хотя я удалил эту часть, она продолжала выдавать ошибку! Мне нужна моя онтология в owl. У меня были проблемы с OWL API, поэтому я переключился на jena, и теперь OWL API не может читать TURTLE, и я не знаю, как изменить TURTLE на owl ... - person Mahdieh; 15.09.2012
comment
Серьезно: я протестировал фрагмент кода, который вы дали выше, и ЭТО РАБОТАЕТ, после добавления недостающих объявлений типов для переменных и изменения формата ввода на "TURTLE". Если вы получаете какие-либо ошибки, значит, вы запускаете код, отличный от того, который вы показали выше. Никто не сможет вам помочь, если вы не покажете код, который вы на самом деле выполняете. - person cygri; 15.09.2012
comment
Конечно, когда я изменил RDF / XML на TURTLE, это сработало, но теперь у меня есть вывод в TURTLE! Я хочу его в RDF / XML. - person Mahdieh; 16.09.2012
comment
Я протестировал фрагмент кода, который вы дали выше, и он создает RDF / XML после того, как я внес описанные мной изменения. Что с тобой не так? Я больше никогда тебе ни в чем не буду помогать. - person cygri; 17.09.2012
comment
Простите, если я вас побеспокоил. Я не сошел с ума! Мой код - это то, что я сказал, и если бы я знал, что не так, я бы не спрашивал других! Я не знаю, чего не хватает, но у меня все еще есть проблема, но спасибо за вашу помощь и любезные предложения. - person Mahdieh; 17.09.2012