-
Notifications
You must be signed in to change notification settings - Fork 2
ImporterCodeSpec
В настоящее время вызов поиска из редактора – консольный. Чтобы импортировать внешние данные и создать по ним связный набор данных в трипл-сторе по какому либо паттерну необходимо выполнить команду вида:
builder.collect(type=patterns.<PatternName>.<PatternOptionName>, <role1> = ‘value1’, <role2> = ’value2’, …)
builder.collect вернет созданные элементы (при повторном импорте некоторые элементы могут не создаваться, т.к. возможно они уже есть в трипл-сторе программы, это нормально).
Поиск выполняется функциями, вызываемыми при указании паттерна.
Функции для паттернов регистрируются с декоратором public, например:
@public('collectors.<PatternName>')
def func(roles_in, pattern_name):
<тут размещается код, реализующий запросы к внешней БД, разбор ответов и генерацию уникальных ID>
return [roles_out1, roles_out2…]
Можно также зарегистрировать функцию декоратором @public('collectors’), такая функция будет вызываться при попытке импортировать данные по любому паттерну, распознать который внутри функции можно будет по аргументу pattern_name.
Аргумент roles_in – словарь, он содержит входящие условия для ролей, по которым возможен поиск во внешней базе данных при отправке туда запроса. На данном этапе это будут строки.
Возвращаемое функцией значение – список со словарями сформированных пар роль-значение для паттерна. Каждый словарь содержит набор ролей паттерна роль : значение где значение извлечено из базы или является сгенерированным по установленным правилам уникальным ID.
Можно также возвращать словари с ролями через yield.
Если роли, переданные при вызове через словарь roles_in, не поменены в функции, они будут отданы обратно билдеру паттернов в исходном виде
Билдер паттернов получает ответ от кода доступа к API и и пишет RDF в соответствии с паттерном по обычным правилам, используя полученные уникальные ID как фрагменты в неймспейсе для новых элементов того источника данных, куда идёт импорт.
Билдер паттернов проверяет уникальность первой описанной в паттерне части каждого элемента. Если полученные для этой части данные совпадают с уже имеющимися в источнике (записанными ранее) - данный элемент в RDF повторно не создаётся.
Данные, переданные в последующие части паттерна, относящиеся к тому же элементу - замещают аналогичные RDF данные, если они уже были созданы ранее.
Билдер паттернов обрабатывает неполные возвращённые словари по обычным правилам генерации недостаточно наполненного паттерна.