В настоящее время я настроил решение с помощью Fiware-Orion + Fiware-Cygnus + CKAN.Как хранить сложные атрибуты контекста в CKAN с помощью Cygnus
У меня следующий вопрос:
атрибуты контекста всегда хранятся по типу, стоимости и метаданных; в режиме строки, также как и в режиме столбцов. Однако я использую более сложные структуры JSON в Контекст-брокере (тип 'T')
Однако большинство стандартных наблюдателей CKAN не могут обрабатывать значения атрибута JSON.
Есть ли решение для решения проблемы?
Аналогичная проблема существует для метаданных, которые в настоящее время хранятся Cygnus в CKAN как JSON по определению.
Простейшим решением было бы изменение модели данных посредника контекста для использования плоских типов данных. Тем не менее, я считаю это плохим решением, потому что я не хочу, чтобы контекстное моделирование страдает от ограничений адаптера хранилища.
Другим решением будет обновление стандартных зрителей и создание новых. Однако, это более общее решение, которое позволяет мне использовать любой CKAN-просмотрщик.
Предположим, у меня есть атрибут ContextElement с именем myAttr
и значением { a: 1, b: 2, c: 3}
. В настоящее время он будет храниться в CKAN Раковина как:
Режим строки сохранение
attrName: "myAttr"
attrValue: "{ a: 1, b: 2, c: 3}"
attrMd: "[{name: md1_name, type: md1_type, value: md1_value}, {name: md2_name, type: md2_type, value: md2_value}]"
Колонка Режим настойчивость:
column: myAttr
value: { a: 1, b: 2, c: 3}
column: myAttr_md
value [{name: md1_name, type: md1_type, value: md1_value}, {name: md2_name, type: md2_type, value: md2_value}]
Для того, чтобы решить эту проблему, я предложить следующую структуру:
Режим сохранения строки:
attrName: myAttr_a
attrType: primitive myAttr.a type
attrValue: 1
attrName: myAttr_b
attrType: primitive myAttr.b type
attrValue: 2
attrName: myAttr_c
attrType: <primitive myAttr.b type>
attrValue: 3
attrName: myAttr_md_md1_name
attrType: md1_type
attrValue: md1_value
attrName: myAttr_md_md2_name
attrType: md2_type
attrValue: md2_value
...
Мнения оценены.
Хотя это совсем не важно для обсуждения, я исправил описание стойкости столбца. Тем не менее, я, конечно, не хочу менять мою модель данных Orion только ради того, чтобы иметь достойный исторический набор данных в CKAN. В любом случае, я не могу сделать это для метаданных, так как в режиме столбца и в режиме строки метаданные будут представлены как структура JSON в CKAN. В настоящее время нет способа иметь значения метаданных в отдельном столбце CKAN. –
Я внедрил свое предложение, в том числе тесты на прочность, и многие другие улучшения кода на https://github.com/rianwouters/fiware-cygnus/tree/feature/CKAN_structured_attributes –
Я проверю код;) В любом случае, подумайте немного больше о своем Я думаю, что вы всегда считаете, что тип полей объекта, относящихся к уведомленному значению атрибута, является примитивным. Я говорю об этом из-за вашего предложения: 'attrType: primitive myAttr.a type' ... Но вы могли бы быть уведомлены с помощью' {"a": {"b": "1", "c": "2" }, "d": "3"} '(и очень сложные вещи); в этом случае тип 'a' не примитивен, а объект Json, поэтому вы можете быть в том же оригинальном сценарии :) – frb