2016-09-06 6 views
1

現在、私はFiware-Orion + Fiware-Cygnus + CKANでソリューションを構成しました。CygnusでCKANに複雑なコンテキスト属性を格納する方法

I、次の質問を持っている:

コンテキスト属性は常にタイプ、値、およびメタデータによって保存されています。行モードではウェルモード、ウェルモードではウェルモード。 しかし、Context Brokerでもっと複雑なJSON構造(タイプ 'T')を使用しています。

しかし、ほとんどの標準CKANフロントエンドビューアはJSON属性値を扱うことができません。

解決方法はありますか?

現在、CygnusによってCKANのJSONとして定義によって保存されているメタデータについても同様の問題があります。

最も簡単な解決策は、コンテキストブローカーのデータモデルをフラットなデータ型を使用するように変更することです。しかし、私はコンテキスト・モデリングにストレージ・アダプターの制約が掛からないようにしたいので、これは悪い解決策だと考えています。

もう1つの解決策は、標準視聴者をアップグレードして新しい視聴者を書き込むことです。 しかし、以下はCKANビューアを使用できる、より汎用的なソリューションです。

名前がmyAttrで、値が{ a: 1, b: 2, c: 3}のContextElement属性があるとします。私は次の構造を提案し、この問題を解決するために

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" 
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}]" 

行永続モード列の永続モードを:現在、ようCKANシンクによって格納されます行持続モード:

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 
... 

意見は高く評価されています。

答えて

0

まず、「列」のような永続性が正しいとは言えません。属性名myAttr、属性値{ a: 1, b: 2, c: 3}と属性メタデータ[{name: md1_name, type: md1_type, value: md1_value}, {name: md2_name, type: md2_type, value: md2_value}]を持って、それから2つの列のみが保持されます:

  • { a: 1, b: 2, c: 3}
  • と価値[{name: md1_name, type: md1_type, value: md1_value}, {name: md2_name, type: md2_type, value: md2_value}]myAttr_mdという名前の二列にmyAttrという名前の最初の列。つまり、説明したように、1つの列のすべてのメタデータが分割されていません。

CKANパーシステンスに関するすべての詳細はreadthedocsです。

Orionのデータモデルを変更することで、ユースケースを簡単に修正できると思います。 「サブ値」ごとに1つの値{ a: 1, b: 2, c: 3}を分割する必要があるようです。a: 1,b: 2およびc: 3(同じことがメタデータに適用されます)、適切なタイプとメタデータを持つ3つの属性を使用するだけです。

+1

説明は必須ではありませんが、列の永続性の記述を修正しました。しかし、私はもちろん、CKANでまともな履歴データセットを持つために、私のOrionデータモデルを変更したくありません。とにかく、私はメタデータに対してこれを行うことはできません。なぜなら、列モードと行モードのどちらでも、メタデータはCKANのJSON構造として表されるからです。現在、個別のCKAN列にメタデータ値を持たせる方法はありません。 –

+0

私は、Peristenceテストや他の多くのコード改良を含む私の提案をhttps://github.com/rianwouters/fiware-cygnus/tree/feature/CKAN_structured_attributesに実装しました –

+0

コードをチェックします;)とにかく、あなたは、通知された属性値に関するオブジェクトフィールドのタイプがプリミティブなものであると常に仮定していると思います。私はあなたの提案のためにこれを言っています: 'attrType:primitive myAttr.a type' ...' {"a":{"b": "1"、 "c": "2" }、 "d": "3"} '(そして非常に複雑なもの);その場合、 'a'の型はプリミティブなものではなく、Jsonオブジェクトですから、同じ元のシナリオになる可能性があります:) – frb

関連する問題