Каковы асимптотические времена выполнения для методов 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 в памяти. Доступ к удаленной базе данных по сети, при условии, что нет необходимости открывать новое соединение, все еще, вероятно, будет доминировать в фактических измерениях времени.

Другие вопросы по тегам