2013-08-08 2 views
4

В моей программе мне нужно сделать глубокую копию экземпляра OWLOntology.Как сделать глубокую копию OWLOntology

Я полагаю, мне нужно создать новый OWLOntologyManager:

ontologyManager = OWLManager.createOWLOntologyManager(); 

теперь я хочу, чтобы добавить онтологию к менеджеру, который является DEEP копия данного OWLOntology. Я не хочу снова загружать онтологию из документа, потому что это занимает много времени.

Как я могу сделать это в простой форме?

+0

В документах я не вижу соответствующих клонов или подобных методов, поэтому наилучшим вариантом является, вероятно, запись онтологии в строку, а затем загрузка этого снова, по крайней мере, таким образом, сокращение задержки чтения/записи жесткого диска. – Robadob

ответ

4

На самом деле нет способа получить глубокую копию, насколько я знаю. Одним из решений является добавление всех аксиом, присутствующих в вашей первой онтологии, к вновь созданному экземпляру онтологии. Таким образом, вы храните все в памяти и не должны перечитывать файлы. Объекты OWL (классы, свойства и т. Д.) Также должны быть скопированы.

Следующий код должен работать (не проверено):

manager.addAxioms(newOntology, oldOntology.getAxioms()); 
1

Все содержимое онтологии с точки зрения аксиом неизменные объекты, поэтому глубокое копирование необходимо только добавить все аксиомы из OWLOntology к другому - вам нужно только создать OWLOntology с тем же OWLOntologyID в другом OWLOntologyManager и добавить все аксиомы. Поскольку аксиомы, сущности и выражения являются неизменными, их ссылки, на которые ссылаются две OWLOntologies, не приводят к тому, что изменения распространяются от одного к другому или к условиям гонки.

Добавление всех аксиом может быть выполнено так же, как в ответе loopasam, что действительно правильно.

Смежные вопросы