|
|||||||||
2022年8月10日 |
|||||||||
前章で格納したExtityを再掲します。
idはcore @contextで@idに対し割り当てられた短縮名です。idは標準で形式が決まっており、"urn:ngsi-ld:<データタイプ名>:<文字節>"の形式であるURNです。URNですから、ユニークであることが期待されます。typeも同様に@typeの短縮名で、値はデータモデルのIRIです。次に.https://schema.org/address、location、nameがPropertyですが、locationとnameはcore @contextで定義された短縮名です。addressは定義されていないので、IRIで書かれています。typeはPropertyかRelationshipかの区別なのですが、Propertyの中でも座標は特別なので、GetPropertyと明示しています。addressとlocationの値は構造化されていますので、波括弧で囲って複数のマップ(Key-Valueペア)を記載していまず。また、Coordinatesは座標なので複数の値を持つため、大括弧で囲って東経と北緯の順番に記載しています。因みに、西経と南緯はマイナスの値で書きます。 さて、id、type、locationなどは、https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld内の定義のおかげでシンプルになっていますが、streetAddressなど、context内に定義が無いものは冗長なままでした。まずはこれを消しましょう。 以下のコンテキストを作ります。
このJSON-LD文書をhttp://www.coppelltech.jp/basecontext.jsonldに格納します。そうすると、Entityは以下の様に単純化して書く事ができます。
ここで、https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonldが消えているのが分かりますが、実はこのContextはcore @contextであり、既定値として自動的に実行されるため、本来は省略しても構わない定義でした。尚、他の定義に優先するので、この既定値のContext (core @context) を他の定義で書き換える事は出来ません。このJSON-LD文書を今度はDドライブ直下のpostStore101new.jsonldファイルに格納します。 早速書き込んでみましょう。コマンドは以下です。
そうすると、結果は以下の通りです。 |
|||||||||
PS C:\Users\owner> curl -iX POST 'http://localhost:1026/ngsi-ld/v1/entities/' -H 'Content-Type: application/ld+json' -d @d:\postStore101new.jsonld HTTP/1.1 201 Created Date: Wed, 10 Aug 2022 07:22:53 GMT Location: /ngsi-ld/v1/entities/urn:ngsi-ld:Store:101 Content-Length: 0 PS C:\Users\owner> |
|||||||||
また読み出してみましょう。読み出すときもContextを通知する必要があり、ヘッダのLinkで通知します。 |
|||||||||
curl -X GET 'http://localhost:1026/ngsi-ld/v1/entities/urn:ngsi-ld:Store:101' -H 'Accept: application/ld+json' -H 'Link: <http://www.coppelltech.jp/basecontext.jsonld>; type="application/ld+json"' | |||||||||
そうすると、結果が以下の様に帰ってくるはずです。 |
|||||||||
PS C:\Users\owner> curl -X GET 'http://localhost:1026/ngsi-ld/v1/entities/urn:ngsi-ld:Store:101' -H 'Accept: application/ld+json' -H 'Link: <http://www.coppelltech.jp/basecontext.jsonld>; type="application/ld+json"' {"@context":"http://www.coppelltech.jp/basecontext.jsonld","id":"urn:ngsi-ld:Store:101","type":"Store","address":{"type":"Property","value":{"streetAddress":"長沼町202-5","addressLocality":"八王子市","addressRegion":"東京都","postalCode":"1920907"}},"location":{"type":"GeoProperty","value":{"type":"Point","coordinates":[139.37158,35.64226]}},"name":{"type":"Property","value":"ローソン八王子長沼町店"}} PS C:\Users\owner> |
|||||||||
json Pretty Linter で整形すると以下となります。 |
|||||||||
{ "@context": "http://www.coppelltech.jp/basecontext.jsonld", "id": "urn:ngsi-ld:Store:101", "type": "Store", "address": { "type": "Property", "value": { "streetAddress": "長沼町202-5", "addressLocality": "八王子市", "addressRegion": "東京都", "postalCode": "1920907" } }, "location": { "type": "GeoProperty", "value": { "type": "Point", "coordinates": [ 139.37158, 35.64226 ] } }, "name": { "type": "Property", "value": "ローソン八王子長沼町店" } } |
|||||||||
登録したEntityが読み出されている事がわかります。尚、GET時にLinkヘッダでContextを通知しない場合、全てが短縮名にならず、core @contextの範囲でだけ短縮名になります。 |
|||||||||