Каковы асимптотические времена выполнения для методов OWL EntitySearcher (например, EntitySearcher.getAnnotations(c, o, factory.getRDFSLabel()))
Я пишу приложение, которое использует как онтологию /owlapi, так и базу данных sqlite, в которой значение определенных полей является IRI из онтологии.
Мне интересно, будет ли (асимптотически) быстрее извлекать аннотации rdfs:Label и rdfs:Comment из базы данных SQL (при условии, что они хранятся там заранее), а не извлекать эти значения из OWLAPI каждый раз.
В общем, насколько интенсивно время / пространство являются основными операциями в EntitySearcher (асимптотически или иным образом)?
Предположим для этого примера, что rdfs: label является единственным свойством аннотации, принадлежащим классу c, поэтому нам не нужно явно перебирать список свойств аннотации.
1 ответ
Я не сделал полный анализ соответствующего кода здесь, но, грубо говоря, выполняются следующие операции:
- Учитывая онтологию и сущность
- получить аннотации аннотации для сущности
- итерация ищет подходящее свойство аннотации
- получить буквальное значение
Аксиомы индексируются по типу, поэтому получение аксиом аннотации равно O(1). Выбор аксиом, релевантных для сущности, также использует индекс, так что это снова O(1). Итерация и поиск подходящего свойства - это O (N), где N - количество аннотаций - 1 в вашем примере, и снова O(1). Само сравнение разрешается в сравнении строк для свойства IRI. rdfs:label
Сам по себе является синглтоном, так как его много используют, поэтому сравнение по производительности незначительно. Извлечение буквенного значения является простым доступом, поэтому в целом процесс должен быть O(1).
По сравнению с базой данных, порядок О будет таким же; но реализация по умолчанию OWLAPI ConcurrentHashMaps
в памяти. Доступ к удаленной базе данных по сети, при условии, что нет необходимости открывать новое соединение, все еще, вероятно, будет доминировать в фактических измерениях времени.