全てのページ
GitBook提供
1 / 25

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

モニタリング

ロギング

Protocol

Overview(概要)

本プロトコルはODS-RAMにおけるモニタリング機能を定義する。 モニタリング機能はデータトランザクションの稼働ステータスを継続的に把握し、異常や障害を早期に検知する機能を提供する。本機能はロギング機能を利用して収集及び集約したデータに基づき、リアルタイムの状態把握、システムの可視化、及び異常の早期検知を可能にする。

Abstract Normative Specification(抽象仕様)

  • shall: ロギング機能で収集されたデータからメトリクスを算出する機能を提供しなければならない。

    • Rationale: 各種状況の適切な監視を可能にするため

  • should: メトリクスの可視化を目的としたダッシュボードを提供することを原則とする。

    • Rationale: 状態の把握と利便性を向上させるため

  • may: メトリクスがユーザ指定の条件を満たした際に、ユーザへの通知やシステムへの介入を行う機能を提供してもよい。

本プロトコルに必要な概念は以下である。

概念
説明

モニタリングの対象はOpen Dataspacesを構成する各モジュールである。 本モニタリング機能の主な対象は以下である。Open Dataspacesが機微なデータを扱う点から、一般的なデータの永続化機能に加えて証跡及びトレース情報を対象とする。

  • 連携サービス・APIの通信状況: システムを通過する通信データおよびその通信履歴に基づき、トラフィック量、エラー率、レスポンス時間などを監視する。また各連携サービスやAPIのリクエスト数、成功率、失敗の種別、処理時間などを管理する。

  • システムリソースの状況: CPU、メモリ、ディスク容量、ネットワーク帯域などのリソースを監視する。システムやサービスが設定した閾値を超えた場合には異常を検知しアラートを発報する。また収集したデータに基づき、定期的なレポートやトレンド予測を実施してシステム運用の改善活動に活用する。

  • セキュリティの状況と監査: ネットワークやプロセスのようなシステムの構成要素、また各機能の挙動の監視を通じて、セキュリティの観点から通常とは異なる振る舞いを早期に検知する。またシステムの監査など証跡のための機能を提供する。

  • should: 他の運用管理ツールやAIによる分析を前提に、サービスとの連携を念頭に、外部に提供するインタフェースはAPIを通じた連携とすることを原則とする。

  • should: メトリクスを可視化するダッシュボードを提供することを原則とする。またユーザがダッシュボードをカスタマイズできるようにしてもよい。

  • should: メトリクスを監視して異常を検知した場合にはシステム管理者に通知することを原則とする。異常検知の目的はサービスの稼働状況に加えて、システムのセキュリティ状況の監視を含む。異常を検知する手段として、各種メトリクスに閾値を設定してもよい。

メトリクスの例
  • サービスのダウンタイム

  • リクエストやサービス処理におけるレスポンスタイムやエラー率

  • システムリソース

  • 特定IPアドレスからの通信量

  • 通知手段の例

    • Eメール

    • インスタントメッセージング

    • Webhookを用いたシステム連携

  • may: 異常を検知した場合には、自動的にシステムに介入してシステムリソースやプロセスを操作する機能を提供してもよい。ただし、この機能は介入対象システムや介入の範囲が事前に定義されていなければならない。またシステム管理者によって設定されたセキュリティポリシーや許可範囲が遵守されなければならない。介入した内容は監査のためにログに記録され、対応履歴として追跡可能でなければならない。

    • Rationale: 異常検知時におけるサービスの継続を維持するためすると共に、不必要な介入や潜在的なセキュリティリスクを最小化するため。

  • may: ロギング機能のデータと分離してメトリクスを別途保存してもよい。その際には時刻情報やトレースIDを用いてロギング情報とのトレーサビリティを確保することを原則とする。

    • Rationale: メトリクスの管理を効率化してロギング情報との整合性を維持することでデータの追跡性と分析精度を向上させるため。

  • may: サービス独自のログの収集及び加工に基づく外部監査向けのレポート作成機能を提供してもよい。

  • Data Provider(データ提供者)

    データ利用者に対してデータストアに格納されたデータを送信する主体

    Data Consumer(データ利用者)

    データ提供者からデータを受信する主体

    Concepts and Roles(概念および役割)

    Scope(適用範囲)

    Normative Requirements(規定要件)

    Protocol

    Overview(概要)

    本プロトコルはODS-RAMにおけるロギング機能を定義する。 ロギング機能は、通信ログ、サービスログ、処理ログの3つのカテゴリに基づき、システムの通信状況、各サービスの処理結果、全体の監視・運用状況を包括的に記録・分析可能とすることを目的とする。各ログは、それぞれ異なる保持要件、セキュリティ要件、および用途に基づき設計・運用される。

    Abstract Normative Specification(抽象仕様)

    • shall: ロギング機能はOpen Dataspacesの構成要素において発生する記録が求められる事象について、その事象の要件に基づく5W1Hの情報を付加して記録する機能を一貫して提供しなければならない。

    • should: ログの記録においては、情報を適切に保護する仕組みを取り入れ、特に機密性の高い情報については改ざん防止等の処理を実施する仕組みを提供することを原則とする。

    • should: ログへのアクセスは標準化されたインタフェースにより一貫したアクセス手段が提供されることを原則とする。

    本プロトコルにおけるログ機能では、ロールをシステム管理者、セキュリティ管理者、開発者、監査担当者に分類して、ログを通信ログ、処理ログ、サービスログに分類する。各カテゴリごとに役割と対象情報を定義して多様なシステム運用や監視ニーズに対応する指針を示す。

    本プロトコルに必要な概念は以下である。

    概念
    説明

    ロギングではログを以下3つのカテゴリに分類する。

    • 通信ログ: ODSを通過するメッセージ(例: リクエスト、レスポンス)やヘッダー情報を記録する。トラフィックや接続状況の監視、および異常検知を目的とする。

    • 処理ログ: リアルタイムダッシュボードや運用監視ツールを通じて、システム全体の処理状況、エラー状況、リソース利用状況などの監視・運用改善を目的とする。

    • サービスログ: 個別の連携サービスやAPIの処理結果の記録を目的とする。サービスログにはユーザの処理内容や機密情報が含まれる場合があり、特定の情報については適切な保護が求められる場合がある。

    各ログの想定される用途は以下の通り。

    • 通信ログ

      • トラフィックと接続状況の監視

      • 異常通信のチェック

      • トラブルシューティング

    本ロギング機能は、それぞれのカテゴリごとに以下の情報を対象とする。 通信ログ・サービスログについては、ユーザーの個人情報や処理内容が含まれる可能性があるため、適切な保護が必要となる場合がある。

    ODSシステムが処理する通信情報(通信ログ):

    • ODSを通過するメッセージのリクエストおよびレスポンスを対象とする。

    • メッセージのボディに加えメタデータ(例: HTTPメソッド、HTTPヘッダー、ステータスコードなど)も対象とする。

    ODSシステム内部の稼働情報(処理ログ):

    • システム全体の状態および各処理結果を対象とする。

    • 対象とするシステムの要件や形態によって具体的な情報は様々であるため、システムごとの可用性や運用性を考慮して選別する。

    • 各情報は集約して監視可能な形式で記録する。

    ODSと連携する連携サービスの情報(サービスログ):

    • 連携サービスごとの各種機能や処理結果に関連する情報を記録対象とする。

    • サービスによっては機密性の高い情報を含むため、適切な保護が求められる。

    • shall: 各種ログは標準的なフォーマット(例: JSON, XML, CSV)で記録されなければならない。

    • shall: 各種ログはその元となる事象に関する時系列情報を含まなければならない。

    • should: 各種ログに含まれる機密性の高い情報については、記録時に匿名化などサービスの要件に応じた処理を実施することを原則とする。

    • should: 各種ログのうち信頼性がサービス品質に直結するログについては改ざん防止のための処理を実施することを原則とする。改ざん防止のアプローチの例としては検知(ハッシュや署名など)や、永続化(イミュータブルストレージやWORM(Write Once Read Many)メディア)などが挙げられる。

    • should: 通信ログの記録内容には、以下の主要メタデータを含むことを原則とする。

      • タイムスタンプ

      • クライアントのIPアドレス

      • リクエストアドレス

    • should: 処理ログの記録内容には以下を含めることを原則とする。

      • リソース利用状況(CPU、メモリ、ディスク容量 など)

      • 発生したエラーの種別及び内容

    • should: サービスログの記録内容には以下を含めることを原則とする。

      • 各サービスの処理結果(成功/失敗)

      • 各サービスのトレースのためのサービス識別子

  • 規制準拠状況の記録確認

  • 処理ログ

    • システム全体の処理状況の監視

    • エラー検知と対策

    • パフォーマンス分析

    • 内部運用ルールへの準拠確認

  • サービスログ

    • 連携サービスの稼働状況の把握

    • 機密情報の適切な保護の確認

    • APIやサービスの処理結果の分析

    • 処理内容の証跡確認

  • should: ログの保存期間はシステムの要件に基づき決定することを原則とする。この期間は監査や証跡のような制約による場合もある。

  • may: 各種ログは一貫性をもってアクセスする手段が提供されることを前提に、中央集約型、分散型いずれのストレージやデータベースでも利用してもよい。

  • may: 各種ログはログ永続化の容量の肥大化を防ぐため、過去のログを削除するログローテーション機能を実装してもよい。

  • アクセスメソッド(例: HTTP GET, POST など)

  • ステータスコード(例: HTTP 200 OK など)

  • リクエスト/レスポンスヘッダー(機密情報を除く)

  • 通信ログの追跡のための識別子(X-TrackingID など)

  • should: 処理ログを外部サービスと連携する仕組みを提供することを原則とする。

    Data Provider(データ提供者)

    データ利用者に対してデータストアに格納されたデータを送信する主体

    Data Consumer(データ利用者)

    データ提供者からデータを受信する主体

    Concepts and Roles(概念および役割)

    Scope(適用範囲)

    Normative Requirements(規定要件)

    共通

    通信ログ

    処理ログ

    サービスログ

    データトラストアセスメント(L1)

    ディスカバリー・サーチ(L4)

    Protocol

    本プロトコルは ODS-RAM の L1「Data Trust Assessment」に対応する Fundamental Protocol であり、「データの完全性/非改竄性の評価・算定を成立させるインターフェース(完全性/非改竄性の評価・算定そのものの機能は含まない)」を担う。

    「データトラストアセスメント(Data Trust Assessment)」プロトコル仕様書は、2026年度に公開予定である。

    Overview(概要)

    Protocol

    Overview(概要)

    Notifierは、データトランザクションに関する更新・受領状況を、データ提供者と利用者間で共有するための情報を通知する機能を提供する。

    本レイヤは以下の領域を対象とする:

    • 通知先リスト管理 データ提供者が提供データの登録・更新・削除をデータ利用者に通知する際に必要な通知先リストの管理機能を提供する。

    • 通知管理 データ提供者からの通知管理および、データ利用者からの通知情報確認機能を提供する。

    Abstract Normative Specification(抽象仕様)

    Concepts and Roles(概念および役割)

    本プロトコルに必要な概念は以下である。

    概念
    説明
    • Open Dataspacesを介したデータ提供に関わる通知先リスト管理

    • Open Dataspacesを介したデータ提供に関わる通知管理

    • shall: 通知先リストは、データ提供者単位で管理されなければならず、異なるデータ提供者間で通知先リストが共有または混在してはならない。

      • Rationale: データ提供者ごとの通知設定の独立性およびセキュリティを確保するため。

    • may: 通知先リストの管理は、複数の通知先を一括で登録・更新・削除する機能を必要に応じて提供してもよい。

    • should: 通知の管理は、認証情報を用いたデータ提供者や利用者の情報を基に、認証・認可に基づいて行うことを原則とする。

      • Rationale: 前提とするL2やL3レイヤの要件に整合し、通知情報へのアクセス制御が必要であるため。

    • may: 通知の管理は、複数通知の一括登録・一括更新・一括削除する機能を必要に応じて提供してもよい。

    • Transaction(L2)を介して、本機能が利用されることを前提とする。

    • Identity & Trust(L3)のトークンを用いて、本機能が利用されることを前提とする。

    種類
    送信元 ⇒ 送信先
    説明

    Notifierを利用する際の、メッセージ交換シーケンスを以下に示す。

    本プロトコルで使用されるエラー処理について記す。

    エラー種別
    説明
    エラー発生時の対応
    • CRYPTREC暗号リスト

    Rationale: 運用負荷を軽減し、管理作業の効率化を図るため。
  • may: 保持するデータを暗号化する場合、CRYPTRECが推奨する暗号方式等の標準的な暗号技術を、必要に応じて参照・採用してもよい。

    • Rationale: 運用要件に合わせた暗号化技術の採用を、検討可能とするため。

  • Rationale: 運用負荷を軽減し、管理作業の効率化を図るため。
  • may: 保持するデータを暗号化する場合、CRYPTRECが推奨する暗号方式等の標準的な暗号技術を、必要に応じて参照・採用してもよい。

    • Rationale: 運用要件に合わせた暗号化技術の採用を、検討可能とするため。

  • 権限不足エラー

    必要な権限不足等において返却される。

    該当操作が許可されていない旨を通知する。なお、再送しても成功しないため再送信は行わない。

    リソース存在エラー

    該当リソースが存在しない等において返却される。

    リソースが存在しない旨を通知する。なお、再送しても成功しないため再送信は行わない。

    データ不整合エラー

    重複データ、排他制御等において返却される。

    最新のデータを再取得し、競合を解消させたうえで、再送信を行う。

    リクエスト形式エラー

    サポートされないリクエスト形式指定時において返却される。

    正しいContent-Typeを設定し、再送信を行う。

    システムエラー

    サーバ内部において何らかの異常発生時に返却される。

    継続的に発生する場合はシステム管理者へ通知を行う。なお、再送信については行った操作によって実行要否を行う。

    Data Provider(データ提供者)

    データ利用者に対してデータストアに格納されたデータを送信する主体。

    Data Consumer(データ利用者)

    データ提供者からデータを受信する主体。

    Request

    クライアント(Transaction(L2)) ⇒ サーバー(Notifier)

    クライアントがサーバー(Notifier)の各機能を実行するために送信するメッセージ。認証情報や要求パラメータを含む。

    Response

    サーバー(Notifier) ⇒ クライアント(Transaction(L2))

    サーバー(Notifier)がリクエストに対する結果を送信するメッセージ。処理結果、エラー情報などを含む。

    リクエスト不正

    パラメータ不正、必須項目欠落等において返却される。

    入力内容を再確認し、正しい入力内容を設定し、再送信を行う。

    トークン設定に関するエラー

    アクセストークン未設定、無効等において返却される。

    アクセストークンを再取得および再設定(必要に応じて再ログインまたはトークン更新)し、再送信を行う。

    参照元

    Scope(適用範囲)

    Normative Requirements(規定要件)

    通知先リスト管理

    通知管理

    Non-functional / Cross-layer Requirements(非機能要件 / クロスレイヤ要件)

    Message Types(メッセージ種類)

    Protocol Flow(プロトコルフロー)

    Error Handling(エラー処理)

    References(参考文献)

    Binding

    実際の通信方式(HTTPS、ファイル転送、WebSocket等)に当てはめたときの定義を記述する。 以下に記述する内容は全てNon-normative(例示)である。

    Concrete Specification(実装例)

    Prerequisites(前提条件)

    • 本プロトコルは HTTPS(TLS 1.2以上)を使用し、REST形式のHTTPリクエスト/レスポンスにより通信を行う。

    • エンドポイント:指定されたURIに対してHTTPメソッド(GET, POST, PUT, DELETE)を使用

    • データ形式:リクエストおよびレスポンスの本文はJSON形式

    • 認証・認可:OAuth 2.0ベースのトークン認証を利用

    • セキュリティ要件:TLS 1.2以上必須、暗号化通信を保証

    本プロトコルで使用される各フィールドの定義を記す。

    各フィールドについて、以下の情報を記す。

    • フィールド名:binding内で使用される名称

    • 型:データ型(例:整数、文字列)

    • 必須性:フィールドの利用条件

    Request・Responseのフィールドは、以下の通り。

    フィールド名
    型
    必須
    Request
    Response
    説明

    Request・Responseのフィールドは本プロトコルの各機能で異なるため、の記載を参照してください。

    Sent by・Resulting state(s)・Request・Response・Example・Error一覧・API固有のフィールド定義などの具体実装はの記載を参照してください。

    機能分類
    機能概要
    説明

    Binding

    実際の通信方式(HTTPS、ファイル転送、WebSocket等)に当てはめたときの定義を記述する。 以下に記述する内容は全てNon-normative(例示)である。

    Concrete Specification(実装例)

    Prerequisites(前提条件)

    • HTTPS通信

    • RDF

    • JSON-LD

    • UTF-8

    • SAMM

    • dcterms

    本プロトコルで使用される各フィールドの定義を記す。

    Discovery Finder/Discovery Serviceは「サービスインスタンス」データを返却する。 サービスインスタンスはJSON-LD形式で表現され、以下の主要な構成要素を持つ:

    • フィールド名:binding内で使用される名称

    • 型:データ型(例:整数、文字列)

    • 必須性:フィールドの利用条件

    フィールド名
    説明
    必須
    Request
    Response
    説明

    • ビジネスドメインにおけるアプリケーション(データ/サービス)のリソース情報を元に、そのリソースに関するアプリケーションのエンドポイントを解決

    • 利用者が、ドメインで使用する様々なデータを検索キーで検索し、データおよびそのデータ獲得に必要なドメインアプリケーションのメタデータを解決

      • 検索キー:緯度・経度、文字列、数値

    機能分類
    機能概要

    なお、独自のビジネスドメイン用にDiscovery Serviceを構築する場合、メッセージ処理とデータベース部分は自動生成されるが、それらをつなぐ処理のみ開発を行う必要がある。

    • Discovery Service利用者がDiscovery Serviceにアクセスするエンドポイントを解決するために使用

    • Discovery Serviceのエンドポイントを登録

      • 既存のキーワードに登録するか新しいキーワードを作成して登録するか選択可能


    Protocol

    Identity & Trust(L3)は、参加主体を識別し、正当な主体同士、かつ正当なリソースへの権限でのみデータ交換が成立する信頼の前提を提供する機能を提供する。

    本プロトコルは以下の領域を対象とする:

    • 認証(Authentication) 自然人(Human)およびシステム(Machine)を主体として識別・認証し、利用コンテキストに応じた認証を実現する。

    • 認可(Authorization) リクエスト単位でポリシーベースの動的認可を行う。

    Protocol

    Overview(概要)

    本プロトコルは ODS-RAM の L1「Data Trustworthiness and Quality Assessment」に対応する Fundamental Protocol であり、「データ品質/信頼性の評価・算定を成立させるインターフェース(品質/信頼性の評価・算定そのものの機能は含まない)」を担う。

    「データトラストワージネス・クオリティアセスメント(Data Trustworthiness and Quality Assessment)」プロトコル仕様書は、2026年度に公開予定である。

    R = Required(必須)
  • C = Conditional(条件付き必須)

  • O = Optional(任意)

  • Request:リクエストにおいて使用される

  • Response:レスポンスにおいて使用される

  • 説明:フィールドの意味や利用方法

  • クライアントアプリごとに払い出されたAPIKeyを指定する。ODS独自項目

    Authorization

    String

    R

    ✔

    アクセストークンを指定する。例:Bearer < token >

    Content-Type

    String

    R

    ✔

    ✔

    リクエスト形式を指定する。

    User-Agent

    String

    R

    ✔

    クライアントのユーザーエージェントを指定する。

    Accept-Language

    String

    O

    ✔

    クライアントの受け入れる希望言語を指定する。

    X-TrackingID

    String

    R

    ✔

    ✔

    リクエストのトレーシングを行う一意なIDを指定する。ODS独自項目

    Content-Security-Policy

    String

    R

    ✔

    コンテンツの読み込み・実行ポリシーを指定し、スクリプトやリソースの許可元を制御する。

    X-Content-Type-Options

    String

    R

    ✔

    ブラウザのMIMEタイプ推測を禁止し、指定されたContent-Typeを強制する。

    Strict-Transport-Security

    String

    R

    ✔

    指定期間、HTTPS接続を強制し、HTTPへのダウングレードを防止する。

    Cache-Control

    String

    R

    ✔

    キャッシュ制御のための方式を指定する。

    ETag

    String

    C

    ✔

    リソースのバージョン識別子を指定する。GETメソッドにおけるレスポンス時の必須項目。

    Last-Modified

    String

    C

    ✔

    リソースの最終更新日時を指定する。GETメソッドにおけるレスポンス時の必須項目。

    通知管理

    通知確認状態更新

    データ利用者が、通知の確認状態を更新する。

    通知管理

    データ受領状態更新

    データ利用者が、データの受領状態を更新する。

    x-notifier-api-key

    String

    R

    ✔

    通知先リスト

    通知先リスト登録・取得・更新・削除

    データ提供者がデータ利用者へ通知する際に必要な、通知先リストに係る操作を行う。

    通知管理

    通知登録・取得・更新・削除

    データ提供者がデータ利用者へ通知する内容に係る操作を行う。

    API仕様書
    API仕様書

    Field Definitions(フィールド定義)

    Headerフィールド定義

    Payloadフィールド定義

    Functional Description(機能詳細)

    Sequence Diagram(シーケンス図)

    通知先リスト作成、更新、取得、削除シーケンス

    通知登録、更新、取得、削除シーケンス

    通知情報確認、通知確認状態更新シーケンス

    データ受領、データ受領状態更新シーケンス

    共通機能

    トランザクション(L2)

    R = Required(必須)
  • C = Conditional(条件付き必須)

  • O = Optional(任意)

  • Request:リクエストにおいて使用される

  • Response:レスポンスにおいて使用される

  • 説明:フィールドの意味や利用方法

  • JSON-LD名前空間の定義。使用するボキャブラリ(dcterms, ods, serviceなど)のプレフィックスとURIを紐付ける

    @graph

    文字列

    R

    ○

    サービスインスタンスの実体データを格納する配列

    ods:DomainApp

    文字列

    R

    ○

    Discovery Serviceまたはドメインアプリケーションの定義。それらが提供するエンドポイント一覧やサービスプロバイダ名を含む

    ods:DomainAppEndpoint

    文字列

    R

    ○

    Discovery Serviceまたはドメインアプリケーションが持つ個別のAPIエンドポイント定義。各エンドポイントのURIを指定

    ods:BaseEndpoint

    文字列

    R

    ○

    Discovery ServiceまたはドメインアプリケーションのベースURL

    ods:SparqlEndpoint

    文字列

    R

    ○

    ドメインアプリケーションが持つRDFサーバのSPARQLクエリを受け付けるエンドポイントのURL

    検索結果:サービスインスタンスのメタデータ

    データベース作成機能

    インターフェース定義から、インデックス管理用のRDBテーブルを作成する

    Discovery Serviceのエンドポイント(アクセスURL)を検索
    • 検索キー:

      1. ディスカバリーサービスのキーワード(例:UAS Lines)

      2. 事業ドメインを表すキーワード(例:ドローン、ドローン航路、ポートなど)

    @context

    文字列

    R

    空間インデックス

    緯度経度の近いデータを近傍に管理することで、緯度経度情報を含む空間検索を高速に実施可能。緯度経度の範囲と、半径指定検索に対応

    文字列インデックス

    同じキーワードを持つリソースを検索可能

    メッセージ処理作成機能

    インターフェース定義から、メッセージ処理プログラムを生成する

    Field Definitions(フィールド定義)

    Discovery Serviceが返却するサービスインスタンス例(航空分野のドローン航路)

    Discovery Finderが返却するサービスインスタンス例(航空分野のドローン航路)

    Functional Description(機能詳細)

    Discovery Service

    Discovery Finder

    Sequence Diagram

    ○

    {
      "@context": {
        "dcterms": "http://purl.org/dc/terms/",
        "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
        "api": "https://localhost.com/v1/api#",
        "inst": "http://www.example.com/myservice/instance#",
        "ods": "https://github.com/ODS-DFS-L4/ods/",
        "service": "urn:samm:com.uasl.service:1.1.0#"
      },
      "@graph": [
        {
          "@id": "inst:MyServiceProd",
          "@type": "ods:DomainApp",
          "dcterms:conformsTo": [
            {
              "@id": "api:UaslServiceWebService"
            },
            {
              "@id": "service:UaslService"
            }
          ],
          "ods:hasBaseEndpoint": {
            "@id": "inst:myServiceBaseEndpoint"
          },
          "ods:hasEndpoint": [
            {
              "@id": "inst:airwayReservationDetailGetEndpoint"
            },
            {
              "@id": "inst:airwayReservationsPostEndpoint"
            }
          ],
          "ods:hasSparqlEndpoint": {
            "@id": "inst:myServiceSparqlEndpoint"
          },
          "service:serviceProviderName": {
            "@type": "http://www.w3.org/2001/XMLSchema#string",
            "@value": "Service Provider Name"
          }
        },
        {
          "@id": "inst:airwayReservationsPostEndpoint",
          "@type": "ods:DomainAppEndpoint",
          "service:airwayReservationsPostRequestUri": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/api/v1/path"
          }
        },
        {
          "@id": "inst:airwayReservationDetailGetEndpoint",
          "@type": "ods:DomainAppEndpoint",
          "service:airwayReservationDetailGetRequestUri": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/api/v1/path"
          }
        },
        {
          "@id": "inst:myServiceSparqlEndpoint",
          "@type": "ods:SparqlEndpoint",
          "ods:accessURL": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/sparql"
          }
        }
      ]
    }
    {
      "@context": {
        "dcterms": "http://purl.org/dc/terms/",
        "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
        "ods": "https://github.com/ODS-DFS-L4/ods/",
        "ads": "urn:samm:org.eclipse.esmf:1.0.0#",
        "api": "https://airway-discovery.example.com/1.0.0/api#",
        "inst": "http://airway-discovery.example.com/instance#"
      },
      "@graph": [
        {
          "@id": "inst:AirwayDiscoveryServiceProd",
          "@type": "ods:DomainApp",
          "dcterms:conformsTo": [
            {
              "@id": "ads:AirwayDiscoveryService"
            },
            {
              "@id": "api:AirwayDiscoveryWebService"
            }
          ],
          "dcterms:description": [
            {
              "@language": "en",
              "@value": "Production instance of Airway Discovery Service for finding and managing airway resources"
            },
            {
              "@language": "ja",
              "@value": "航路リソースの検索と管理のための航路ディスカバリーサービスの本番インスタンス"
            }
          ],
          "dcterms:title": [
            {
              "@language": "en",
              "@value": "Airway Discovery Service - Production"
            },
            {
              "@language": "ja",
              "@value": "航路ディスカバリーサービス - 本番環境"
            }
          ],
          "ods:hasEndpoint": [
            {
              "@id": "inst:FindResourceEndpointProd"
            },
            {
              "@id": "inst:RegisterDomainApplicationEndpointProd"
            },
            {
              "@id": "inst:RegisterResourceEndpointProd"
            }
          ],
          "ods:sparqlEndpoint": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/sparql"
          },
          "ads:serverUrl": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/rpc-api/v1"
          }
        },
        {
          "@id": "inst:RegisterDomainApplicationEndpointProd",
          "@type": "ods:DomainAppEndpoint",
          "dcterms:conformsTo": {
            "@id": "api:RegisterDomainApplicationAPI"
          },
          "dcterms:title": [
            {
              "@language": "en",
              "@value": "Register Domain Application Endpoint"
            },
            {
              "@language": "ja",
              "@value": "ドメインアプリケーション登録エンドポイント"
            }
          ],
          "ods:endpointInformation": "JSON-RPC endpoint for registering new domain applications",
          "ads:registerDomainApplicationRequestUri": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/rpc-api/v1/airway/operations"
          }
        },
        {
          "@id": "inst:RegisterResourceEndpointProd",
          "@type": "ods:DomainAppEndpoint",
          "dcterms:conformsTo": {
            "@id": "api:RegisterResourceAPI"
          },
          "dcterms:title": [
            {
              "@language": "en",
              "@value": "Register Resource Endpoint"
            },
            {
              "@language": "ja",
              "@value": "リソース登録エンドポイント"
            }
          ],
          "ods:endpointInformation": "JSON-RPC endpoint for registering new resources",
          "ads:registerResourceRequestUri": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/rpc-api/v1/airway/operations"
          }
        },
        {
          "@id": "inst:FindResourceEndpointProd",
          "@type": "ods:DomainAppEndpoint",
          "dcterms:conformsTo": {
            "@id": "api:FindResourceAPI"
          },
          "dcterms:title": [
            {
              "@language": "en",
              "@value": "Find Resource Endpoint"
            },
            {
              "@language": "ja",
              "@value": "リソース検索エンドポイント"
            }
          ],
          "ods:endpointInformation": "JSON-RPC endpoint for finding resources by location and drone model",
          "ads:findResourceRequestUri": {
            "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
            "@value": "https://example.com/rpc-api/v1/airway/operations"
          }
        }
      ]
    }
    トークンおよびクレデンシャル管理 アクセストークン・リフレッシュトークンを発行し、事業者識別(operator_id 等)などのビジネスコンテキストをクレームとして付与する。
  • Federation & Trust(トラスト連携) 異なる運営組織・異なるOpen Dataspaces間の相互信頼を確立する。

  • 概念
    説明

    Identity & Trust(L3)

    アイデンティティに関連する機能を提供する主体の総称。 ユーザ等を認証する役割、ユーザ等の認可(権限委譲)を管理する役割、ユーザ等のアイデンティティ情報を提供する役割を持つ。 フェデレーション構成等、アーキテクチャによってはそれぞれの役割を別々の主体が実行することもある。

    Client

    Resource Serverが提供するAPIに対してユーザ等の認可(権限委譲)を受けてアクセスする主体。

    Resource Server

    APIを通じて機能やデータを提供する主体。 リソースの持ち主(ユーザ等)からの権限委譲を受けたClientに対して権限に応じたリソースを提供する。

    • 認証(Authentication)

    • 認可(Authorization)

    • トークン/クレデンシャル管理

    • Federation(Open Dataspacesを跨ぐ信頼連携)

    • shall: Identity & Trust(L3) は自然人・システムの双方を識別できる仕組みを持たなければならない。

      • Rationale: ODS の業務要件では、人による操作とシステム間通信が混在するため、両者を明確に区別しなければならない。

    • shall: 認証・認可方式には OAuth 2.0 および OpenID Connect を使用しなければならない。 自然人主体の認証には OpenID Connect(Authorization Code Flow)を、 システム主体については OAuth 2.0(Client Credentials Flow)におけるクライアント認証によって行う。

      • Rationale: 国際的に広く普及しているため相互運用性を確保できる。

    • should: ユーザ認証には Authorization Code Flow(PKCE)を使用することを原則とする。

      • Rationale: 自然人を扱う ODS では不可欠。PKCE はセキュリティ水準を向上。

    • may: 追加クレデンシャル(例: Verifiable Credential)を利用してもよい。

      • Rationale: 将来の拡張性と他Open Dataspaceとの相互連携性を確保。

    • may: フィッシング体制の高い多要素での認証を利用してもよい。

      • Rationale: 多要素認証により、資格情報の窃取や再利用に起因する不正アクセスのリスク低減が可能。

      Note (Future Consideration): 認証においては、将来的な検討事項として、 フィッシング耐性の高い認証方式(例:FIDO2 に基づくパスキー等)を 用いた多要素認証を採用することが考えられる。

    • shall: 認可判断をネットワーク境界(FW/DMZ)に依存してはならない。

      • Rationale: ゼロトラストアーキテクチャの原則に従うため。

    • shall: 認可判定に用いるsubject識別子は、アクセストークン内の検証済みクレームに基づかなければならない。

      • Rationale: 認証と認可を論理的に接続し、主体のなりすましや識別不整合を防ぐため。

    • should: 認可は API Gateway(粗粒度)と Application(細粒度)の二層構造とすることを原則とする。API Gateway(粗粒度)ではResource ServerのAPI利用のアクセス制御、Application(細粒度)ではリソースレベルでのアクセス制御を原則とする。

      • Rationale: 基盤レイヤと業務アプリレイヤを分離し、拡張性を維持するため。

    • should: PAPおよびPEP,PDP は分離することを原則とする。

      • Rationale: 政策管理と評価ロジックの分離はセキュリティと性能に寄与。

    • should: PEP ↔ PDP の通信は AuthZEN モデルと整合することを原則とする。

      • Rationale: 標準化されたReBACアプローチにより認可判断の一貫性が向上。

    • should: PAPおよびPDPは、論理的にはIdentity & Trust(L3)と統合されることを原則とする。

      • Rational: 認可モデルおよび判定ロジックの一貫性を確保し、ポリシー管理の分散による複雑化を防ぐため。

    • should: 認可モデルはReBACを原則とする。ReBACを採用する場合、認可モデルは少なくとも主体・対象・関係性(subject, object, relation)を明示的に表現できる構造を備えなければならない。

      • Rational: 権限継承や共有関係をグラフとして自然に表現でき、ポリシーの可読性・拡張性に優れるため。

    • should: アクセストークンは署名付き JWT を使用することを原則とする。

      • Rationale: 相互運用性と軽量性に優れる。

    • should: アクセストークンは必要最小限の短い時間にすることを原則とする。

      • Rationale: 漏洩時の影響を最小化するため。

    • should: operator_id / system_id などビジネスクレームを付与することを原則とする。

      • Rationale: Open Dataspacesにおける事業者主体の識別が必須。

    • may: Refresh Token を使用してよい。

      • Rationale: セッション維持を効率化するため。

    • should: 異なるOpen Dataspaces運営組織間の Identity Federation をサポートすることを原則とする。

      • Rationale: 将来的な相互運用性確保が不可欠。

    • should: フェデレーション環境においては、subject識別子は発行主体を識別可能な形式とすることを原則とする。

      • Rationale: Open Dataspace間連携時の主体衝突を防ぐため。

    • may: 第三者トラスト(PKI / DAPS 等)を使用してよい。

      • Rationale: 組織のポリシーに応じた選択肢を提供。

    プロトコルが扱うメッセージの種類を以下に示します。

    種類
    タイミング
    説明

    リクエスト

    クライアント ⇒ サーバー(Identity & Trust(L3))

    クライアントが認証や認可を要求するために送信するメッセージ。認証情報や要求パラメータを含む。

    レスポンス

    サーバー(Identity & Trust(L3)) ⇒ クライアント

    サーバー(Identity & Trust(L3))がリクエストに対する結果を送信するメッセージ。認証結果、トークン、エラー情報などを含む。

    認証における代表的なシナリオとして、自然人主体の認証である認可コードフローのメッセージ交換シーケンスを以下に示す。

    1. クライアントがサーバー(Identity & Trust(L3))に認証画面URL(ログイン画面)のリクエストを送信する:

      • クライアント ⇒ サーバー(Identity & Trust(L3)): 認証画面URL取得リクエスト

      {
          "client_id": "abc123xyz",:clientごとに払い出されたID
          "redirect_uri": "https://example.com/home",:認証後にリダイレクトするURL
          "code_challenge": "IevIR0cQsAuNuPha71dAbjkT-sipaqXEquPhtCqKL80":PKCEで用いるチャレンジ文字列
      }
    2. サーバー(Identity & Trust(L3))がリクエストを解析し、認証画面URL(ログイン画面)をクライアントに返送する:

      • サーバー(Identity & Trust(L3)) ⇒ クライアント: 認証画面URL(ログイン画面)返却レスポンス

    3. ユーザのブラウザで認証画面URL(ログイン画面)にアクセスし、認証情報(ユーザIDとパスワード)を入力する。

      • ユーザのブラウザ ⇒ サーバー(Identity & Trust(L3)): 認可コード取得リクエスト

    4. ユーザIDとパスワードを解析し、認可コードをユーザのブラウザに返送する

      • サーバー(Identity & Trust(L3)) ⇒ ユーザのブラウザ: 認可コード返却レスポンス

    5. クライアントがサーバー(Identity & Trust(L3))に認証リクエストを送信する:

      • クライアント ⇒ サーバー(Identity & Trust(L3)): 認可コードを使った認証リクエスト

    6. サーバー(Identity & Trust(L3))がリクエストを解析し、アクセストークンをクライアントに返送する:

      • サーバー(Identity & Trust(L3)) ⇒ クライアント: 認証レスポンス

    本プロトコルで扱う状態について記す。

    状態
    説明

    UNAUTHENTICATED

    トークンが存在しない状態。認証前。

    AUTHENTICATING

    Idp による認証処理中(/auth/token, /auth/token/clientエンドポイントによる認証)。

    AUTHENTICATED

    アクセストークンが有効な状態。通常の API 呼び出しが可能。

    本プロトコルで使用されるエラー処理について記す。

    エラー種別
    説明
    エラー発生時の対応

    リクエスト不正

    パラメータ不正、必須項目欠落等において返却される。

    入力内容を再確認し、正しい入力内容を設定し、再送信を行う。

    トークン設定に関するエラー

    アクセストークン未設定、無効等において返却される。

    アクセストークンを再取得および再設定(必要に応じて再ログインまたはトークン更新)し、再送信を行う。

    Overview(概要)

    Abstract Normative Specification(抽象仕様)

    Concepts and Roles(概念および役割)

    Scope(適用範囲)

    Normative Requirements(規定要件)

    Authentication(認証)

    Authorization(認可)

    Tokens & Credentials(トークン管理)

    Federation & Trust(連携)

    Message Types(メッセージ種類)

    Protocol Flow(プロトコルフロー)

    State Machine(状態遷移)

    States(状態)

    State Machine Diagram(状態遷移図)

    Error Handling(エラー処理)

    Protocol

    Overview(概要)

    本プロトコルでは、エンドポイントとプロセス制御、データ転送を担い、各レイヤの結節点としてトランザクションを成立させる機能を提供する。 また、本プロトコルのコアコンポーネント群であるトランザクションコンポーネントはODPを構成する各プロトコルの結節点であり、各レイヤ/パースペクティブ(Fundamental Protocols, Complementary Protocols)との通信を行う。

    本プロトコルは、以下のトランザクションマネジメントを定義する。

    • データ転送

      データ利用者からの要求に応じて、データストアのエンドポイントからデータを転送する機能。 データ構造(構造化/非構造化)および処理方式(同期/非同期)のデータ転送を実現するために、下記の4つのデータプレーンモジュールに分類されている。

      • Web API転送モジュール 同期処理の構造化データ(Web API等)の転送に特化したデータプレーンモジュール。

      • ストリーム転送モジュール 非同期処理の構造化データ(ストリームデータ)の転送に特化したデータプレーンモジュール。

      • ファイル/バルク転送モジュール 同期処理の非構造化データ(大規模なファイルやバルクデータ)の転送に特化したデータプレーンモジュール。

      • メディアストリーム転送モジュール 非同期処理の非構造化データ(ビデオや音声などのリアルタイムストリーミングデータ)の転送に特化したデータプレーンモジュール。

    • 認証認可連携 クレデンシャル発行サービスおよびアイデンティティコンポーネント(L3)と連携し、リクエスト単位で認証認可制御を行う機能。

    • ロギング ロギング(Common Functionalities)と連携し、来歴情報およびクリアリング・ペイメント(DCS)で必要となる情報を記録する機能。

    本プロトコルに必要な概念は以下である。

    概念
    説明

    本仕様はWeb API転送モジュールを最小実装例として定義する。

    • shall: Open Dataspacesにおけるデータ転送は、データプレーンモジュールを介して行わなければならない。

      • Rationale: Open Dataspacesにおける信頼性、相互運用性を確保するため。

    • should: 複数のデータ構造および転送方式に対応可能な拡張性を持つことを原則とする。

    • should: アイデンティティコンポーネント(L3)と連携し、リクエスト単位での認証および認可制御を行うことを原則とする。

      • Rationale: Open Dataspaces横断での一貫したアクセス制御を実現し、セキュリティと相互運用性を確保するため。

    • should: データスペースコンプリメンタリサービス(DCS)が必要とする最低限のデータを記録できることを原則とする。

    プロトコルが扱うメッセージの種類を以下に示します。

    種類
    送信元 ⇒ 送信先
    説明

    本プロトコルで送受信されるメッセージは、以下の要素で構成されている。

    要素
    説明
    No.
    名称
    送信元
    送信先
    フィールド
    説明

    本プロトコルで扱う状態について記す。

    状態
    説明

    本プロトコルで使用されるエラー処理について記す。

    エラー種別
    説明
    発生タイミング
    エラー発生時の対応

    Binding

    Concrete Specification

    Prerequisites(前提条件)

    • 本プロトコルは HTTPS(TLS 1.2以上) を使用し、 REST形式のHTTPリクエスト/レスポンス により通信を行う。

    • エンドポイント:指定されたURIに対してHTTPメソッド(GET, POST, PUT, DELETE)を使用

    • データ形式:リクエストおよびレスポンスの本文はJSON形式

    • 認証・認可:認証・認可方式には OAuth 2.0 および OpenID Connect を使用する。

      自然人主体の認証には OpenID Connect(Authorization Code Flow)を、 システム主体のアクセス制御には OAuth 2.0(Client Credentials Flow)を用いる。

      また、ポリシーベースでの認可制御を提供する。

    • セキュリティ要件:TLS 1.2以上必須、暗号化通信を保証

    本プロトコルで使用される各フィールドの定義を記す。 なお、各APIの詳細な項目定義は別途公開している「」を参照すること。

    各フィールドについて、以下の情報を記す。

    • フィールド名:プロトコル内で使用される名称

    • 型:データ型(例:整数、文字列)

    • 必須性:フィールドの利用条件

    フィールド名
    型
    必須
    Request
    Response
    説明
    フィールド名
    型
    必須
    Request
    Response
    説明

    Request・Response・Example・Error一覧・API固有のフィールド定義などの具体実装はの記載を参照すること。

    機能分類
    機能詳細
    説明

    本プロトコルの認証機能では以下の 2 種類の認証フローを提供する。

    認証フロー
    説明

    認証情報

    本機能で用いる主な認証情報を以下に示す。

    認証情報
    利用フロー
    説明

    識別子

    本プロトコルでは発行するアクセストークンに対し、業務上の識別に必要な以下2種類のカスタムクレームを付与する。

    1. operator_id(事業者識別子)

    ユーザまたはクライアントが所属する 事業者(operator) を識別するための情報である。 本クレームは以下のフローにおいてアクセストークンへ付与される。

     - Authorization Code Flow(認可コードフロー) → ユーザ払い出し時に指定された事業者を付与。

     - Client Credentials Flow(クライアントクレデンシャルフロー) → クライアント(client_id)払い出し時に指定された事業者を付与。

    1. open_system_id(システム識別子)  

    クライアントが属するシステムを識別するための情報である。 本クレームは以下のフローにおいてのみアクセストークンへ付与される。

     - Client Credentials Flow(クライアントクレデンシャルフロー)

    Authorization Code Flow(ユーザを伴うフロー)では付与されない。

    を参照すること

    ファンダメンタルプロトコル

    Rationale: Open Dataspacesにおけるデータ流通では、構造化/非構造化、同期/非同期など多様なユースケースが存在し、単一方式では相互運用性と実装容易性を確保できないため。
  • may: データプレーンモジュールは、コントロールプレーンオーケストレータを用いずに直接利用されてもよい。

    • Rationale: 導入容易性や段階的展開を可能にし、実装・運用の選択肢を確保するため。

  • Rationale: DCSとの情報連携を可能にするため。

    データ利用者がWeb API転送モジュールに対し、特定の操作や情報の要求を行うために送信されるメッセージ。認証情報や要求パラメータを含む。

    ②

    認証・認可リクエスト

    Web API転送モジュール

    Identity & Trust(L3)

    リクエストフィールドはIdentity & Trust(L3)の仕様に依るため、Identity & Trust(L3)を参照すること。

    Web API転送モジュールがIdentity & Trust(L3)に対し、認証や認可の要求を行うために送信されるメッセージ。認証情報や要求パラメータを含む。

    ③

    認証・認可レスポンス

    Identity & Trust(L3)

    Web API転送モジュール

    レスポンスフィールドはIdentity & Trust(L3)の仕様に依るため、Identity & Trust(L3)を参照すること。

    Identity & Trust(L3)がリクエストに応じてWeb API転送モジュールに送信する結果メッセージ。認証・認可結果、トークン、エラー情報などを含む。

    ④

    転送リクエスト

    Web API転送モジュール

    データ提供者

    リクエストフィールドは転送先システムの仕様に依るため、データ提供者が公開する仕様を参照すること。

    Web API転送モジュールがデータ提供者に対し、特定の操作や情報の要求を行うために送信されるメッセージ。データ提供者側のAPIの認証情報(APIキー)や要求パラメータを含む。

    ⑤

    提供者レスポンス

    データ提供者

    Web API転送モジュール

    データ提供者から返却された正常系レスポンス、もしくはエラーレスポンスを受け取る。仕様については、データ提供者が公開する仕様を参照すること。

    データ提供者がリクエストに応じてWeb API転送モジュールに送信する結果メッセージ。API実行結果、エラー情報などを含む。

    ⑥

    利用者レスポンス

    Web API転送モジュール

    データ利用者

    データ提供者から返却された正常系レスポンス、もしくはエラーレスポンスを原則としてそのまま透過する。仕様については、データ提供者が公開する仕様を参照すること。

    Web API転送モジュールがリクエストに応じてデータ利用者に送信する結果メッセージ。API実行結果、エラー情報などを含む。

    Authorizing

    認可

    Processing

    接続先システムへのルーティング・プロキシング

    Rejecting

    認証 or 認可失敗時のエラー生成

    Responding

    クライアントにレスポンス返却(成功/エラー)

    Idle(戻り)

    次のリクエスト待ち状態へ

    クライアント(データ利用者) ⇒ Web API転送モジュール

    リクエスト検証を行い、不正な場合はエラーレスポンスを生成して返却する。

    API-Key 関連エラー

    API-Key の検証に失敗

    クライアント(データ利用者) ⇒ Web API転送モジュール

    Web API転送モジュール内で API-Key を検証し、不正な場合はエラーレスポンスを生成して返却する。

    API-Key 関連エラー(L3側)

    Identity & Trust(L3) 側で API-Key 検証に失敗

    Web API転送モジュール ⇒ Identity & Trust(L3)

    Identity & Trust(L3) のレスポンスをそのまま返却する。

    トークン関連エラー(認証)

    アクセストークン無効/期限切れ等によりトークン検証に失敗

    Web API転送モジュール ⇒ Identity & Trust(L3)

    トークン検証結果に基づき、無効/期限切れの場合はエラーレスポンスをそのまま返却する。

    権限不足エラー(認可)

    認可判定によりアクセスが拒否された

    Web API転送モジュール ⇒ Identity & Trust(L3)

    認可判定結果に基づき、認可エラーとしてエラーレスポンスをそのまま返却する。

    ルーティング/エンドポイント不正

    ルート未登録、パス/メソッド不一致等により転送先が決定できない

    Web API転送モジュール ⇒ 連携先システム

    ルーティングの結果としてエラーとなる場合、エラーレスポンスを生成して返却する。

    外部接続エラー(疎通不可/無効応答)

    L3 または連携先に接続できない、無効な応答が返る等、外部通信が成立しない

    Web API転送モジュール ⇒ Identity & Trust(L3) / 連携先システム

    外部接続失敗/無効応答を検知した場合、エラーレスポンスを生成して返却する。

    タイムアウト

    L3 または連携先からの応答が規定時間内に得られない

    Web API転送モジュール ⇒ Identity & Trust(L3) / 連携先システム

    タイムアウトを検知した場合、エラーレスポンスを生成して返却する。

    内部処理失敗

    Web API転送モジュール内部の例外等により処理できない

    Web API転送モジュール

    例外を捕捉し、エラーレスポンスを生成して返却する。

    Data Provider(データ提供者)

    データ利用者に対してデータストアに格納されたデータを送信する主体

    Data Consumer(データ利用者)

    データ提供者からデータを受信する主体

    リクエスト

    ・データ利用者 ⇒ Web API転送モジュール ・Web API転送モジュール ⇒ Identity & Trust(L3) ・Web API転送モジュール ⇒ データ提供者

    送信元がデータを操作するための要求や認証・認可を要求するために送信先に対して送信するメッセージ。リクエストに必要なヘッダ情報や要求パラメータを含む。

    レスポンス

    ・Identity & Trust(L3) ⇒ Web API転送モジュール ・データ提供者 ⇒ Web API転送モジュール ・Web API転送モジュール ⇒ データ利用者

    リクエストの送信先が送信元に対してリクエストに対する結果を送信するメッセージ。データの操作結果や認証・認可の検証結果、トークン、エラー情報などを含む。

    Header

    メッセージの先頭に存在し、通信制御情報に必要なメタデータを保持する。

    Payload

    メッセージの中央部に存在し、業務データ本体を保持する。

    ①

    利用者リクエスト

    データ利用者

    Web API転送モジュール

    Idle

    リクエスト待機

    Receiving

    リクエスト受信

    Authenticating

    認証

    外部システムエラー(連携先応答透過)

    連携先システムが返却した 4xx/5xx 等のエラー(外部サービス固有のエラー)

    Web API転送モジュール ⇒ 連携先システム

    連携先システムのレスポンスをそのまま返却する。

    リクエスト不正

    Abstract Normative Specification(抽象仕様)

    Concepts and Roles(概念および役割)

    Scope(適用範囲)

    Normative Requirements(規定要件)

    Non-functional / Cross-layer Requirements

    Message Types(メッセージ種類)

    Message Format(メッセージ形式)

    Protocol Flow(プロトコルフロー)

    通信の流れ

    各通信の詳細

    State Machine(状態遷移)

    States(状態)

    State Machine Diagram(状態遷移図)

    Error Handling(エラー処理)

    リクエストフィールドは転送先システムの仕様に依るため、該当するデータ提供者が公開する仕様を参照すること。

    必須ヘッダー欠落、値不正などクライアント起因で成立しないリクエスト

    R = Required(必須)
  • C = Conditional(条件付き必須)

  • O = Optional(任意)

  • Request:リクエストにおいて使用される

  • Response:レスポンスにおいて使用される

  • 説明:フィールドの意味や利用方法

  • クライアントアプリごとに払い出されたAPIKeyを指定する。ODS独自項目

    Authorization

    String

    C

    ✔

    アクセストークンを指定する。例:Bearer < token > 認証フロー関連のAPI(パスワード変更を除く)では不要。

    Content-Type

    String

    R

    ✔

    ✔

    リクエスト形式を指定する。

    User-Agent

    String

    O

    ✔

    クライアントのユーザーエージェントを指定する。

    Accept-Language

    String

    O

    ✔

    クライアントの受け入れる希望言語を指定する。

    X-TrackingID

    String

    O

    ✔

    ✔

    リクエストのトレーシングを行う一意なIDを指定する。ODS独自項目

    Content-Security-Policy

    String

    O

    ✔

    コンテンツの読み込み・実行ポリシーを指定し、スクリプトやリソースの許可元を制御する。

    X-Content-Type-Options

    String

    O

    ✔

    ブラウザのMIMEタイプ推測を禁止し、指定されたContent-Typeを強制する。

    Strict-Transport-Security

    String

    O

    ✔

    指定期間、HTTPS接続を強制し、HTTPへのダウングレードを防止する。

    Access-Control-Allow-Origin

    String

    O

    ✔

    CORSに関する項目。 レスポンスを許可するオリジンを指定し、クロスオリジンアクセスを制御する。

    Access-Control-Allow-Methods

    String

    O

    ✔

    CORSに関する項目。 クロスオリジンリクエストで許可するHTTPメソッドを指定する。

    Access-Control-Allow-Headers

    String

    O

    ✔

    CORSに関する項目。 クロスオリジンリクエストで許可するリクエストヘッダーを指定する。

    Access-Control-Allow-Credentials

    String

    O

    ✔

    CORSに関する項目。 クロスオリジンリクエストで認証情報の送信を許可するかを指定する。

    実行結果の種類を識別するURIを設定する。

    title

    String

    R

    ✔

    実行結果を説明する内容を設定する。

    status

    Integer

    R

    ✔

    HTTPステータスコードを設定する。

    detail

    String

    R

    ✔

    ODS運営事業者が調査を行うのにあたり必要な情報(例:エラー発生時の発生日時)を設定する。

    data

    String

    C

    ✔

    正常時の実行結果に対する業務データオブジェクト。 異常時では不要。

    トークン検証・更新

    トークンイントロスペクション

    アクセストークンを検証し、トークンの有効性や関連情報を取得する。

    トークン検証・更新

    アクセストークン更新

    リフレッシュトークンを使用してアクセストークンを再取得する。

    パスワード変更

    パスワード変更

    リクエストに含まれるIDに対応するユーザのパスワードを変更する。

    APIKey検証

    APIKey検証

    リクエストボディに含めたAPIKeyの有効性を検証する。

    認可

    認可モデル登録・取得

    認可に利用するモデルの登録・取得を行う。登録についてはアクセス制限を設け、許可したユーザのみ登録可能となるようにする。

    認可

    認可タプル登録・取得

    認可に利用するタプルの登録・取得を行う。登録についてはアクセス制限を設け、許可したユーザのみ登録可能となるようにする。

    認可

    認可判定

    認可の判定を行う。API定義についてはAuthZENのevaluationエンドポイントの仕様に準拠する。

    ユーザ・クライアント登録

    ユーザ登録

    ユーザの新規作成を行う。

    ユーザ・クライアント登録

    クライアント登録

    クライアントの登録およびクライアントシークレットの発行を行う。

    事業者情報管理

    事業者情報登録・取得・更新

    事業者情報に関する操作を行う。

    事業所情報管理

    事業所情報登録・取得・更新

    事業者に紐づく付帯情報である事業所情報に関する操作を行う。

    client_id

    認可コードフロー/クライアントクレデンシャルフロー

    本プロトコル上のクライアント(アプリケーション)を識別する ID。

    client_secret

    認可コードフロー/クライアントクレデンシャルフロー

    クライアントが Identity & Trust(L3)に対し自身を認証するために使用する秘密情報。

    API-Key

    String

    R

    ✔

    type

    String

    R

    認証

    ユーザ当人認証

    OIDCの認可フローに基づきユーザの認証を行う。

    認証

    クライアントシステム認証

    クライアントIDとクライアントシークレットを使用して、クライアントクレデンシャルフローにてクライアントの認証を行う。

    Authorization Code Flow(認可コードフロー)

    ユーザを伴う認証シナリオで使用する。クライアントはユーザを介してIdentity & Trust(L3)の認証画面へリダイレクトし、認証後に発行される認可コードを用いてアクセストークンを取得する。

    Client Credentials Flow(クライアントクレデンシャルフロー)

    ユーザを伴わない非対話認証シナリオに使用する。クライアントはclient_idおよびclient_secretを用いてIdentity & Trust(L3)のクライアントシステム認証エンドポイントへアクセスし、アクセストークンを取得する。

    login_user_id

    認可コードフロー

    ユーザ認証を伴う認可コードフローにおいて、ユーザがログイン画面で入力する識別子。

    password

    認可コードフロー

    ログインユーザ ID に対応する秘密情報。

    API仕様書
    API仕様書
    プロトコルフロー

    Field Definitions(フィールド定義)

    Headerフィールド定義

    Payloadフィールド定義

    Functional Description(機能詳細)

    認証

    認証情報・識別子

    Sequence Diagram(シーケンス図)

    認可コードフロー

    クライアントクレデンシャルフロー

    トークン検証

    トークン更新

    パスワード変更

    APIKey検証

    モデル登録

    タプル登録

    認可判断

    ユーザ・クライアント登録

    事業者情報管理

    事業所情報管理

    ✔

    データトラストワージネス・クオリティアセスメント(L1)

    Resource Owner

    Clientに対して自身の代わりにResource Server(API Server)へのアクセス権限を認可(権限委譲)する主体。

    Service Provider

    Identity & Trust(L3)を運営する運営団体。

    Operator(事業者)

    Service Providerから権限移譲を受けて、システムを利用する団体。

    PAP

    認可ポリシーの定義および管理を担う。

    PDP

    PEP から送信される認可判断要求を受け取り、PAP により定義されたポリシーおよびリクエストコンテキストを評価し、当該リクエストに対するアクセス可否(Permit / Deny)を決定する。

    PEP

    クライアントからのリクエストを受信し、必要に応じて PDP に対して認可判断を要求する。

    コールバック

    サーバー(Identity & Trust(L3)) ⇒ クライアント

    サーバー(Identity & Trust(L3))のIdPが認可コードを発行する際のメッセージ。

    TOKEN_EXPIRED

    アクセストークンが期限切れ。リフレッシュトークンによる更新もしくは再認証が必要。

    TERMINATED

    セッションまたはトークンが無効化された状態(ログアウト、失効、更新失敗など)。再認証が必要。

    権限不足エラー

    必要な権限不足等において返却される。

    該当操作が許可されていない旨を通知する。なお、再送しても成功しないため再送信は行わない。

    リソース存在エラー

    該当リソースが存在しない等において返却される。

    リソースが存在しない旨を通知する。なお、再送しても成功しないため再送信は行わない。

    データ不整合エラー

    重複データ、排他制御等において返却される。

    最新のデータを再取得し、競合を解消させたうえで、再送信を行う。

    リクエスト形式エラー

    サポートされないリクエスト形式指定時において返却される。

    正しいContent-Typeを設定し、再送信を行う。

    システムエラー

    サーバ内部において何らかの異常発生時に返却される。

    継続的に発生する場合はシステム管理者へ通知を行う。なお、再送信については行った操作によって実行要否を行う。

    外部システムエラー

    サーバ外部において何らかの異常発生時に返却される。

    一定時間ごとにリトライ(再送信)を行った後、解消しない場合は時間をおいて再操作を行うよう通知を行う。またシステム管理者へ通知を行う。

    {
        "type": "https://api.example.com/success",
        "title": "Request processed successfully",
        "status": 200,
        "detail": "time_stamp:2024-10-02T02:26:57.512Z, method:POST",
        "data": {
            "url": "https://ods.com/realms/myrealm/protocol/openid-connect/auth?client_id=myclient&response_type=code&scope=openid&redirect_uri=https%3A%2F%2Fmyapp.com%2Fhome":認証画面URL
            }
    }
    "login_user_id": "login_user_id_12345",
    "password": "xx@&&1234Pass"
    https://example.com/home?code=2c0d0237-9dc1-41da-86f3-d023ae599321.dc903c2f-9042-4940-869e-c0d753107b7f.0c395f1b-8931-467f-bf6a-db561be9742f&state=xyz123
    {
        "code": "2c0d0237-9dc1-41da-86f3-d023ae599321.dc903c2f-9042-4940-869e-c0d753107b7f.0c395f1b-8931-467f-bf6a-db561be9742f",:リダイレクトURIに遷移した際に付与される認可コード
        "client_id": "abc123xyz",:clientごとに払い出されたID
        "client_secret": "abc123xyz",:clientごとに払い出した秘密鍵
        "redirect_uri": "https://example.com/home",:認可コード取得時に指定したリダイレクトURI
        "code_verifier": "IevIR0cQsAuNuPha71dAbjkT-sipaqXEquPhtCqKL80":認可コード取得時に指定したPKCE用のコードチャレンジ文字列
    }
    {
        "type": "https://api.example.com/success",
        "title": "Request processed successfully",
        "status": 200,
        "detail": "time_stamp:2024-10-02T02:26:57.512Z, method:POST",
        "data": {
            "access_token": "eyJhbGciOiJSUzI1NiIsInR5cC...HiFZcDhzDEg",:アクセストークン
            "expires_in": 300,:アクセストークンの有効期限(秒)
            "token_type": "Bearer",:アクセストークンのタイプ
            "not_before_policy": 0,:アクセストークンの適用開始時刻
            "scope": "openid scope1 scope2",:クライアントスコープ
            "refresh_token": "eyJhbGciOiJIUzUxMiIsInR5...9w67QsdnDQ",:IDPから取得したリフレッシュトークン
            "refresh_expires_in": 3600,:リフレッシュトークンの有効期限(秒)
            "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...IiwibWFuYWdlL":IDトークン
            }
    }

    Binding

    Concrete Specification(実装例)

    Prerequisites(前提条件)

    • 本プロトコルは HTTPS(TLS 1.2以上) を使用し、 REST形式のHTTPリクエスト/レスポンス により通信を行う。

    • エンドポイント:指定されたURIに対してHTTPメソッド(GET, POST, PUT, DELETE)を使用する。

    • データ形式:リクエストおよびレスポンスの本文はJSON形式とする。

    Field Definitions(フィールド定義)

    本プロトコルで使用される各フィールドの定義を記す。

    各フィールドについて、以下の情報を記す。

    • フィールド名:プロトコル内で使用される名称

    • 型:データ型(例:整数、文字列)

    • 必須性:フィールドの利用条件

    通信時にはクライアントから以下のヘッダー情報の付与が必要となる。以下に記載のないヘッダー情報については任意となり、Web API転送モジュールは関知しない。

    フィールド名
    型
    必須
    ODS独自項目
    Request
    Response
    説明

    Web API転送モジュールは透過的APIゲートウェイ方式を採用しており、ペイロード情報についてはデータ提供者が提供するAPIの仕様に依存するため、詳細な仕様については、該当するサーバー(データ提供者)のシステム仕様書を参照すること。

    なお、エラー発生時の応答については以下のペイロード(JSON形式)が返却される。

    フィールド名
    型
    形式
    説明
    • 出力例

    Web API転送モジュールは、透過的APIゲートウェイ方式を採用し、ルーティング機能のみに限定しており、ペイロード情報の解析やモデル変換の機能は提供していない。また、Web API転送モジュールはデータ利用者のアプリケーションとデータ提供者が所有するシステム間通信に介在し、アイデンティコンポーネントと連携したトークン検証および認可制御のためのPEP(Policy Enforcement Point)機能を提供する。

    トランザクションレイヤが提供する機能は以下の通りである。

    機能分類
    機能概要
    機能詳細
    Seq No.
    説明

    Binding

    実際の通信方式(HTTPS、ファイル転送、WebSocket等)に当てはめたときの定義を記述する。 以下に記述する内容は全てNon-normative(例示)である。

    • 通信プロトコル: HTTPS (TLS1.2以上)

    • メッセージ形式: JSON-LD

    • エンコーディング: UTF-8

    ノーティファイア

    R = Required(必須)
  • C = Conditional(条件付き必須)

  • O = Optional(任意)

  • Request:リクエストにおいて使用される

  • Response:レスポンスにおいて使用される

  • 説明:フィールドの意味や利用方法

  • ✔

    クライアントアプリごとに払い出されたAPIKeyを指定する。

    Authorization

    String

    R

    ✔

    アクセストークンを指定する。例:Bearer < token >

    X-TrackingID

    String

    C

    ✔

    ✔

    ✔

    リクエストのトレーシングを行う一意なIDを指定する。クライアント側で指定されない場合はWeb API転送モジュールでUUIDを自動採番する。連携する機能によっては必須項目となる。(例:クリアリング・ペイメントとの連携時)

    X-ODS-xxx

    String

    O

    ✔

    ✔

    ODS内の制御用の拡張ヘッダ。例としてデータスペースコンプリメンタリサービス(DCS)の一つである精算決済サービスにおけるログを用いた整合性確認の用途がある。xxxには任意の文字列を記載。(例:X-ODS-UserId)

    {Error Message}

    具体的なエラーメッセージ

    detail

    String

    {Timestamp}

    タイムスタンプ(ISO 8601 の UTC 形式)

    認可制御

    認可制御におけるPEPとして動作する。

    PEP(Policy Enforcement Point)として、PDP(Policy Decision Point)であるIdentity & Trust(L3)と連携して認可制御を実現する。Identity & Trust(L3)が持つ認可機能(OpenFGA)とはAuthZEN APIで連携する。なお、認可制御はユースケースによって要否が異なるため、設定によってON/OFF制御を可能とする。

    ロギング

    ODS基盤における保守運用のために必要なログを出力する。

    Web API転送モジュール内処理の追跡性確保のための情報(ルーティング情報やトラフィック情報等)やデータスペースコンプリメンタリサービス(DCS)との連携のために必要な情報をログとして出力する。ロギング対象の情報は以下の通りである。 【リクエスト時】 ・リクエスト送信元情報 ・リクエスト転送先情報 ・リクエストAPI情報 ・リクエスト受信時間 ・リクエスト送信時間 ・X-TrackingID ・X-ODS-xxxヘッダの情報 【レスポンス時】 ・レスポンス受信時間 ・レスポンス送信時間 ・X-TrackingID ・ステータスコード

    ルート情報永続化

    Web API転送モジュールのルーティングに必要なルート情報を永続化する。

    ・ルート情報のDBへの永続化 ルート情報が再起動等でクリアされないようにDBに格納することで、永続化する。永続化された情報はWeb API転送モジュール起動時にルート情報としてロードされる。 ・ユースケース毎にルート情報を管理可能 1つのDBを複数のユースケース(Web API転送モジュールはユースケース毎に用意)で共用したい場合、ユースケース毎のルート情報はDB(PosgreSQL)のデータベース内にスキーマを分けることで管理する。Web API転送モジュールからは、DBの接続情報として参照するスキーマを指定し、ユースケース毎のルート情報を取得する。

    ファイル転送

    Web API転送モジュールでファイル送受信を行う。

    ・ファイル取得 連携先システムからWeb API転送モジュールを介してファイル形式のデータを取得できる。データサイズは数MB程度を想定。 ・ファイル転送 連携先システムに対してWeb API転送モジュールを介してファイル形式のデータを転送する。データサイズは数MB程度を想定。

    移行性

    コンテナ基盤で動作する。

    コンテナ基盤で動作し、クラウドサービス等に依存しない。

    4

    Web API転送モジュールはさらに、クライアントが要求している操作が許可されているかを確認するため、「認可チェック」エンドポイントへ HTTPリクエストを送信する。

    5

    アイデンティティコンポーネントはポリシーに基づいてアクセス権を評価し、認可結果をWeb API転送モジュールに返す。

    6

    認証・認可が通過すると、Web API転送モジュールはデータ提供者サーバーの API エンドポイントへ HTTPリクエストを送る。

    7

    サーバー(データ提供者)は要求された処理を実行し、その結果をWeb API転送モジュールへ返す。

    8

    Web API転送モジュールは受け取った API 結果をクライアントにそのまま返却し、クライアントはデータを取得する。

    API-Key

    String

    C

    code

    String

    [prefix] {Error Status}

    prefixを含むエラーコード。prefixは下記のとおり。 ・dataspace: Web API転送モジュールでエラーが発生した場合 ・auth: 認証認可関連のエラーが発生した場合

    message

    ルーティング

    透過的APIゲートウェイとして、連携サービスへのルーティング機能を提供する。

    ルーティングのルールを"ルート"として登録し、データ利用者とデータ提供者を仲介する。各ルートは、リクエストの条件(パス、メソッド、ヘッダなど)に基づき、転送先システムのAPIへリクエストを振り分ける。この仕組みにより、ルート設定を変更することで、転送先や条件を容易に追加・更新できる動的なルーティングを実現する。また、ルーティングの際には、Web API転送モジュールとして必要な処理(例:リクエストヘッダーにX-TrackingIDが含まれていない場合は、新規にUUIDを採番する、ヘッダーの内容を書き換える等)を実施する。

    認証制御

    クライアントの認証を行う

    クライアントを認証する方式として以下の2つの認証を実施する。 ・APIキー認証 リクエストヘッダー「API-Key」の検証をWeb API転送モジュール内で実施する。 ・OAuth 2.0 / OpenID Connectトークンイントロスペクション リクエストヘッダー「Authorization」のアクセストークンの検証をIdentity & Trust(L3)と連携して行う。検証の結果、無効または期限切れの場合はHTTPレスポンスステータスコードを「401 Unauthorized」として、JSON形式のエラーレスポンスを返却する。認証制御をWeb API転送モジュールと分離することで、責務が明確になり保守性が向上し、認証方式の変更や追加があってもゲートウェイへの影響を最小化できる。

    1

    クライアント(データ利用者)は、データ提供者の API を実行するため、Web API転送モジュールに対して HTTPリクエストを送信する。

    2

    Web API転送モジュールは、受け取ったリクエストに対してAPIキーチェックを行う。APIキーチェックを通過した場合、トークンの正当性を確認するため、アイデンティティコンポーネントの「トークンイントロスペクション」エンドポイントへ HTTPリクエストを送る。なお、リクエストヘッダーにX-TrackingIDが含まれていない場合は、新規にUUIDを採番する。

    3

    アイデンティティコンポーネントはトークンを検証し、その結果(有効性・スコープなど)をWeb API転送モジュールに返す。

    Headerフィールド定義

    Payloadフィールド定義

    Functional Description(機能詳細)

    Sequence Diagram(シーケンス図)

    シーケンスの説明

    ✔

    String

    {
        "code": "[dataspace] BadRequest",
        "message": "Invalid request parameters",
        "detail": "2025-12-17T04:37:18.189972258Z"
    }

    サービス定義方法: SAMM(Semantic Aspect Metamodel)

  • <base> はコネクタベースURLを示す


  • 本プロトコルで使用される各フィールドの定義を記す。

    Method
    Endpoint
    説明

    POST

    /v1/api/query

    SPARQLクエリ発行

    リクエストボディは、以下である。

    パラメータ
    必須
    型
    説明

    query

    ○

    string

    SPARQLクエリ文字列

    target

    サンプルは、以下となる

    航空業界のドローン航路におけるメタデータの例を挙げる。

    機体 (Aircraft)

    エンティティ概要

    項目
    内容

    RDF型

    Aircraft

    語彙

    http://example.com/aircraft#

    ID形式(例)

    主なプロパティ

    プロパティ
    型
    説明
    サンプル

    aircraftId

    string

    機体ID

    DDDD2222-...0004

    aircraftName

    ジオメトリ

    サンプルデータ


    エンティティ概要

    項目
    内容

    RDF型

    DronePort

    語彙

    http://example.com/drone-port#

    (2) 主なプロパティ

    プロパティ
    型
    説明
    値の例

    dronePortId

    string

    ポートID

    DDDD2222-...0004

    dronePortName

    サンプルデータ

    ---

    エンティティ概要

    項目
    内容

    RDF型

    Uasl

    語彙

    http://example.com/uasl#

    航路エンティティ

    プロパティ
    型
    説明

    uaslId

    string

    航路ID

    uaslName

    string

    航路名称

    サンプルデータ

    ドメインアプリケーションからのRDF Patch更新通知をAMQPで受信する。

    • 少なくとも1回配送(at-least-once)

    • 到着順序は保証されない(分散カタログ側で順序制御)

    フィールド
    説明

    id

    更新シーケンス識別子(バージョンID)

    prev

    直前パッチのID(順序制御に使用)

    RDF Patch本体

    Apache Jena/Fuseki形式のパッチ

    ヘッダー名
    説明

    domain_app_id

    ドメインアプリ識別子(未指定時はデフォルト値を使用)

    要素
    説明

    H

    ヘッダー(id, prev等)

    TX / TC / TA

    トランザクション境界

    PA / PD

    prefix追加/削除


    Sent by・Resulting state(s)・Request・Response・Example・Error一覧・API固有のフィールド定義などの具体実装はAPI仕様書の記載を参照してください

    機能分類
    機能概要
    説明

    Metadata Publish

    RDF公開

    RDF登録

    Patch Notify

    差分通知

    RDF Patch送信


    Concrete Specification(実装例)

    Prerequisites(前提条件)

    {
      "query": "SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10",
      "target": "https://domain-app.example.com/sparql",
      "options": {}
    }
    http://localhost:8080/resource/aircraft/DDDD2222-0000-0000-4444-000000000004
    {
      "@type": "sf:Point",
      "geo:asWKT": {
        "@value": "POINT (130.408585 33.588344)",
        "@type": "geo:wktLiteral"
      }
    }
    H id <uuid:...>
    H prev <uuid:...>
    TX
    PA ex: <http://example.org/>
    A ex:subject ex:predicate "object" .
    D ex:subject ex:oldPredicate "oldObject" .
    TC

    Field Definitions(フィールド定義)

    SPARQLクエリ発行

    リソースメタデータ

    サンプルデータ表示

    ドローンポート(DronePort)

    サンプルデータ表示

    航路(UASL)

    サンプルデータ表示

    RDF Patch通知

    配送セマンティクス

    メッセージ形式

    AMQPヘッダー(オプション)

    RDF Patch形式(Apache Jena/Fuseki)

    Functional Description(機能詳細)

    Sequence Diagram(シーケンス図)

    SPARQLクエリ発行

    Protocol

    Overview(概要)

    本プロトコルは ODS-RAM の L4「Metadata Exchange」に対応する Fundamental Protocol であり、データの所在や意味に関するメタデータを連携し、分散環境でのデータ発見性と意味判断を成立させるものである。 メタデータは、情報モデルとしてRDF(Resource Description Framework)を採用し、データモデルとしてJSON-LD 形式やTurtle形式を採用する。データやサービスの提供者がこのメタデータを公開することで、データやサービスの発見や解釈、利用が容易になる。また、この基盤的なプロトコルの上位プロトコルとして、Discovery and Search 等を用いることで、データやサービスがネットワーク上で分散的に存在しても、Open Dataspaces全体が透過的に一つのシステムとして機能することを可能にする。 このメタデータは、モビリティやサプライチェーンといった実社会におけるエンティティと、クラウド上のデータやサービスのアクセスを対応づけることを主に意図されているが、前者は必須ではない。

    concept 1

    必須とする後者のメタデータにより、サービスの外部仕様がグローバルに意味解決可能となるように接地(意味定義を明確化)され、さらに、そこへのアクセスに必要な諸情報(宛先を含む)が明確になる。

    concept 2

    これらのメタデータは、一般のWebアプリケーションサーバ/クライアントの側に構築される。すなわち、メタデータサーバは、アプリケーションサーバからメタデータを静的あるいは動的に取得する。 メタデータクライアントは、アプリケーションクライアントに対してメタデータを提供する。ここで、設計方針としては、通常のWebアプリケーションシステムがデータベース指向のシステム要件(トランザクション、リアルタイム性、高スループット)を満たすものであるのに対して、メタデータ関連のシステムは、広域環境で多種多様なデータの中から必要なデータを発見することを重視する代償として、データの一貫性等は一旦犠牲にし、必要に応じて追加するものとする。 そもそも実世界のデータや、既存のアプリケーションサーバ等のシステムの多様データを統一的なメタデータとして形式を変換し複製する以上、メタデータ管理を厳密に一貫性管理をする必要がる用途は限られていることを前提としている。

    concept 2

    Abstract Normative Specification(抽象仕様)

    Concepts and Roles(概念および役割)

    Role
    説明

    • RDFメタデータ公開

    • RDF Patch同期

    • SPARQL取得


    • shall: メタデータは、RDFで表現されなければならない。

      • Rationale: メタデータで表される意味(セマンティクス)の表現方法を統一し、相互運用性を確保するため。

    • shall: メタデータには、データ授受あるいはサービス提供に関わるインターフェースの意味定義が、グローバルに意味解決可能な形で含まれなければならない(e.g. SAMM)。


    • Identity & Trust(L3) と連携可能であること。

    • メタデータ自体へのアクセスにも、適切なアクセス管理が必要な場合には、Identity & Trust(L3)と連携し、権限管理がされること。

    • RDFモデルはODSセマンティクス方針に準拠する。


    メタデータは、データやサービスを提供するシステムからメタデータサーバに提供され公開される。他のサービス提供者のメタデータを参照する、あるいはDiscovery Serviceに公開されるなどで、他のシステムから参照可能となる。

    メタデータは、データやサービスの意味定義や宛先情報に関わるサービスメタデータと、実社会における実体と対応するリソースメタデータから構成される。サービスメタデータは、サービス仕様自体の記述、これを当該環境に展開した状態(インスタンス)などから構成されるが、サービス仕様自体の記述は、別のメタデータサーバに格納され、これを参照するなどで表現される。当該サービスに独自な仕様は当該メタデータサーバに格納されうる。サービスメタデータは、リソースメタデータから参照され得る。サービス仕様の記述は、SAMMなどを用いてAspect Modelとして記述される。

    サービスメタデータは、二つのパートで構成される

    項目名
    型
    必須
    説明

    @context は、メタデータで使用されるプレフィックスと名前空間との対応を定義する。

    • 名前空間として以下を使用する。

      • @prefix http: .

      • @prefix dcterms: .

    キー
    型
    説明

    @graph は次の複数のオブジェクトから構成される。

    • DomainApp :ドメインアプリケーション全体を表す。

    • DomainAppEndpoint :SAMMによって定義されたエンドポイントのURI情報を表す。

    • BaseEndpoint :REST APIのエンドポイントの共通部分のURI情報を表す。

    • SparqlEndpoint :SPARQL用のエンドポイント情報を表す。


    DomainAppはドメインアプリケーション全体を表す。

    構造


    DomainAppEndpointはSAMMによって定義されたエンドポイントのURI情報を表す。

    共通構造


    BaseEndpointはREST APIのエンドポイントの共通部分のURI情報を表す。


    SparqlEndpointはSPARQL用のエンドポイント情報を表す。

    リソースメタデータは、当該用途のアプリケーションが生成・管理する様々な形式のデータをRDFにより表現し、共通の語彙により意味を持たせた、ドメイン内データのメタデータである。ドメイン依存であるため、具体例は、binding.mdで挙げる。

    (1) 基本構造

    • 本データは JSON-LD により RDF を表現する

    • 各ファイルは以下を基本単位とする

    要素
    説明

    ID表現

    • 各エンティティは @id により一意に識別される

    • HTTP URI形式を採用

    例:

    データ型

    • リテラル値は @value + @type で明示

    • 主な型

      • xsd:string


    種類
    送信元 ⇒ 送信先
    説明


    本プロトコルで使用されるエラー処理について記す。

    エラー種別
    説明
    エラー発生時の対応

    Michael Franklin, Alon Halevy, David Maier, "From Databases to Dataspaces: A New Abstraction for Information Management", SIGMOD Record, Vol. 34, No.4, Dec. 2005

    Protocol

    Overview(概要)

    本プロトコルは ODS-RAM の L4「Discovery and Search」に対応する Fundamental Protocol であり、メタデータをもとにした探索・検索の高度化を担うものであり、 Metadata Exchange 上に公開された情報を利用してリソース探索とエンドポイント解決を行う。


    Abstract Normative Specification(抽象仕様)

    Concepts and Roles

    Role
    説明

    事業ドメイン(Business Domain)

    特定のビジネス領域。事業ドメインごとにDiscovery Service等の共通サービスが構築され得る。

    データ/サービス提供者(Provider)


    (補足) 「」で記述されている「Discovery Service」は、本プロトコル仕様における「Discovery Finder」(Discovery Serviceの探索)と「Discovery Service」(宛先(エンドポイント)の探索)を包含する概念である点に注意のこと。

    • Discovery Service解決

    • リソース検索

    • エンドポイント取得


    • shall: Discovery Service は、検索可能とするリソースを登録できるAPI(register)を持たなければならない。

      • Rationale: Discoveryは、サービスの提供者やデータの保持者が、保有するデータやサービスを検索対象となるために利用するのを原則としているため。Discovery Serviceは、Webサーチエンジンのように受動的(Passive)なインデックス化ではなく、サイト側が登録する能動型(Active)なインデックス化を行う。

    • shall: クライアントが、データやサービスにアクセスするために必要なエンドポイントの解決をするために、属性をキーとして、エンドポイントを含むメタデータを返すAPI(find)を持たなければならない。


    種類
    送信元 ⇒ 送信先
    説明

    データ/サービス提供者に関する情報が、Discovery Serviceに登録されると、この情報のライフサイクル管理は次の状態遷移で管理される。

    状態
    説明
    イベント
    説明

    本プロトコルで使用されるエラー処理について記す。

    エラー種別
    説明
    エラー発生時の対応

    Rationale: 分散データマネジメントでは、データやサービスの場所がグローバルに任意とし、データやサービスの実態を各者が管理可能とすることでデータ利用制御を実現するが、クライアントからはデータの発見が課題となってしまうため、検索のキーとなる属性からデータやサービスのエンドポイントにアクセスできるようにする必要があるため。

  • shall: Discovery Serviceは、検索結果として、リソースのエンドポイントを含むメタデータを返却しなければならない。

    • Rationale: Discovery Serviceは、データやサービスの場所を特定するために利用されるため、検索結果としてエンドポイントを含むメタデータを返却する必要があるため。

  • should: Discovery Serviceは、キーワード検索をサポートすることを原則とする。文字列をキーとして、エンドポイントを含むメタデータを返すAPI(find)を持つ。

    • Rationale: キーワードの一致から、そこに関連したデータやサービスのメタデータを返すインデックスが広く有用であるため。

  • should: Discovery Serviceへのメタデータの登録は、一定時間(TTL)後に無効となることを原則とし、継続的に検索可能とするには、継続(Keep Alive)指示を行うことを原則とする。

    • Rationale: データ/サービス自体が存在しなくなった際に、そのメタデータのみが存在している状態を可能な限り排除するため(c.f. 分散システムにおけるソフトステート管理)

  • may: Discovery Serviceは、地理空間検索をサポートしてもよい。地理空間属性をキーとして、エンドポイントを含むメタデータを返すAPI(find)を持つ。

    • Rationale: 実世界における緯度・経度から、そこに関連したデータやサービスのメタデータを返すインデックスがユースケースによっては有用であるため。

  • may: Discovery Serviceにおけるメタデータ管理の一貫性要件は、Eventual Consistencyとしてもよい。

    • Rationale: 分散システムにおいてはスケーラビリティと障害耐性が重要であるため。Discovery Serviceに格納されるメタデータが、元のデータ/サービス提供者のメタデータとの一致性は、データ/サービスにアクセスする際に検証することで、多くの場合、問題とならない。

  • may: Discovery Service自体のメタデータも、前記要件と同様な形式(例:SAMMによるサービス定義)・手法で管理される。

    • Rationale: クライアントから統一的にアクセス可能となるため。

  • may: 各分野におけるDiscovery Serviceの構築は、インデックス化する属性の設定を前記メタデータ(例:SAMMによるサービス定義)を設定することで、Discovery Serviceの構築に必要な部品が構築される。

    • Rationale: 各分野におけるDiscovery Serviceの構築には、データベースの構築、メッセージの受理・応答などの処理が必要であるが、その多くは共通的な作業であり自動生成可能である。一方、Discovery Serviceの開発者が担うべき処理も多少存在することからテンプレートまでの生成とする。

  • shall: Discovery Finderは、クライアントが、Discovery Serviceにアクセスするために必要なエンドポイントの解決をするために、Discovery Service名あるいは利用する分野の名称等から、Discovery Serviceのエンドポイントを含むメタデータを返すAPIを持たなければならない。

    • Rationale: Discovery Serviceの宛先自体が、分野ごとに複数ありえるため、この宛先解決自体が必要となるため。

  • should: クライアントは、固定的にDiscovery Finderの宛先やAPIなどのメタデータ情報を予め保持していることを原則とする。

    • Rationale: Discovery Finderは、Open Dataspaces内にて唯一、あるいは少数の限定された数存在することを想定し、また分野ごとのDiscovery Serviceの取得が要求される頻度は高くないため、少数ノードで対応できるため。

  • keep alive

    データ/サービス提供者に関する情報を継続的に検索可能な状態とすることの指示

    System Error

    内部障害

    管理者通知

    事業ドメインに関するデータ/サービスを提供する。複数のリソースを管理することができる。

    データ/サービス利用者(Consumer)

    データ/サービス提供者のデータ/サービスを利用する。

    メタデータサーバ(Metadata Server)

    メタデータをRDFとして公開する。Metadata Endpointで外部からの取得要求を受け付け、静的データについてはMetadata Storeから取得し、動的データについてはApplication Serverなどに随時取得しにいく。

    メタデータストア(Metadata Store)

    メタデータをRDFとして格納する。主に静的データを扱う。

    メタデータクライアント(Metadata Client)

    メタデータを取得する。ブラウザの場合は、javascriptライブラリなど

    メタデータエンドポイント(Metadata Endpoint)

    Metadata ServerにおけるRDF取得エンドポイント。SPARQLエンドポイントも含む。

    ディスカバリーファインダー(Discovery Finder)

    どのディスカバリーサービスを用いるかを探すサービス。ディスカバリーサービスの宛先を含むメタデータが得られる。

    ディスカバリーサービス(Discovery Service)

    リソースの属性(緯度経度、文字列など)をもとにメタデータを検索する。メタデータには、検索対象のリソースの他に、これに関するデータ/サービス提供者のインターフェースの意味と宛先(エンドポイント)が含まれる。エンドポイントは、Metadata Endpointの他に、各サービス(予約など)のエンドポイントも含まれる。

    findDiscoveryService

    Metadata Client ⇒ Discovery Finder

    Discovery Serviceの検索

    findResource

    Metadata Client ⇒ Discovery Service

    リソースの検索

    初期状態

    Discovery Serviceに登録される前の状態

    Active

    Discovery Serviceに登録され、サービスの情報が検索可能となっている状態

    終了状態

    Discovery Serviceに登録されていない状態、あるいは無効化されている状態

    create

    データ/サービス提供者に関する情報のDiscovery Serviceへの登録

    delete

    データ/サービス提供者に関する情報のDiscovery Serviceからの削除

    timeout

    データ/サービス提供者に関する情報の作成/更新後、一定時間を経ったことを契機とする無効化

    Invalid Query

    条件不正

    入力修正

    Not Found

    該当なし

    通知のみ

    Why Open Dataspaces:設計思想とアーキテクチャパラダイム

    Scope

    Normative Requirements

    Message Types

    Protocol Flow

    State Machine(状態遷移)

    States(状態)

    State Machine Diagram(状態遷移図)

    Error Handling(エラー処理)

    メタデータエクスチェンジ(L4)

    メタデータサーバ(Metadata Server)

    メタデータをRDFとして公開する。Metadata Endpointで外部からの取得要求を受け付け、静的データについてはMetadata Storeから取得し、動的データについてはApplication Serverなどに随時取得しにいく。

    メタデータストア(Metadata Store)

    メタデータをRDFとして格納する。主に静的データを扱う。

    メタデータクライアント(Metadata Client)

    メタデータを取得する。ブラウザの場合は、javascriptライブラリなど

    メタデータエンドポイント(Metadata Endpoint)

    Metadata ServerにおけるRDF取得エンドポイント。SPARQLエンドポイントも含む。

    アプリケーションサーバ(Application Server)

    データ/サービス提供者の業務アプリケーションサーバ。一般のアプリケーションサーバを含む。

    アプリケーションクライアント(Application Client)

    業務アプリケーションを利用するクライアント。専用ソフトウェア、あるいはブラウザ

    Rationale: インターフェースの意味が曖昧では、データの受取り手やサービスの利用者が、意図しない利用になってしまうため。
  • shall: メタデータには、データあるいはサービス提供者が持つインターフェースの宛先情報を含まなければならない。

    • Rationale: 分散システムを一つのOpen Dataspaceとして透過的に見せるには、どこからでも、適切なアクセス管理のもと、そのサービスをグローバルにアクセス可能にする必要があるため。

  • should: メタデータは JSON-LD 形式で送受信されることを原則とする。

    • Rationale: Webベース実装との親和性が高く、広範な実装実績があるため。

  • should: データあるいはサービス提供者が、実社会における何らかの物理的・論理的な実体と関連する場合、これをメタデータとして持つことを原則とする。

    • Rationale: 実社会における実体と関連するサービスをネットワーク上で対応づけることが可能となるため。

  • should: 前記の実社会における何らかの物理的・論理的な実体が、他の提供者に関する実体と関連する場合、この参照関係をメタデータとして持つことを原則とする。

    • Rationale: 参照関係を辿ることで、他の提供者を発見し、システム全体の相互運用性を高めることができるため。

  • may: メタデータの差分を管理する機構が提供されてもよい(e.g. RDF Patch)。Eventual Consistencyを前提とするが、Lineage、タイムスタンプ、バージョン管理などで差分が管理されることが望ましい。

    • Rationale: 強い一貫性を必要とはしないものの、メタデータの鮮度が重要となる場合もあるため。

  • ○

    データ/サービス提供者に関するメタデータの中身

    @prefix xsd: http://www.w2.org/2001/XMLSchema# .
  • @prefix ods: https://github.com/ODS-DFS-L4/ods/ .

  • Aspect Modelを定義した名前空間 例:@prefix uasl: <urn:samm:com.foo.uasl:0.5.3#> .

  • APIを定義したドメインアプリケーションAPI定義ファイルが使用する名前空間 例:@prefix api: <https://uasl.foo.com/0.5.3/api#> .

  • ドメインアプリケーション用の名前空間 自社の名前空間を明示 例:@prefix inst: <http://www.example.com/uasl/instance#> .

    • 省略のprefixは使用せずprefixはinstを使用して明示する。

  • ドメインアプリケーションのインスタンスは、ods:DomainApp型として定義する。

    • dcterms:conformsTo を使用してAspect ModelとAPI定義と明示的に紐づける。

    • Aspect Modelでドメインアプリケーションのプロパティとしたものは、実際の値を設定する。

    • ods:hasBaseEndpointを使ってAPIのベースEndpointを示す。

      • APIベースエンドポイントはods:BaseEndpointクラス(ods:DomainAppEndpointのサブクラス)として定義する。

    • ods:hasSparqlEndpointを使ってSPARQL用のEndpointを示す。

      • SPARQLエンドポイントはods:SparqlEndpointクラス(ods:DomainAppEndpointのサブクラス)として定義する。

    • ods:hasEndpointを使って各API用のEndpointを示す。

      • 各APIエンドポイントはods:DomainAppEndpointクラス(ods:DomainAppEndpointのサブクラス)として定義する。

    • ods:accessURLプロパティを使って各エンドポイントのURLを示す。

  • api

    string (URI)

    API識別用名前空間

    inst

    string (URI)

    インスタンス識別用名前空間

    ods

    string (URI)

    ODS(Open Dataspace)関連

    service

    string (URI)

    サービス定義

    xsd:integer

  • xsd:double

  • xsd:boolean

  • xsd:dateTime

  • Patch不整合

    差分順序問題

    再同期

    事業ドメイン(Business Domain)

    特定のビジネス領域。事業ドメインごとにDiscovery Service等の共通サービスが構築され得る。

    データ/サービス提供者(Provider)

    事業ドメインに関するデータ/サービスを提供する。複数のリソースを管理することができる。

    データ/サービス利用者(Consumer)

    データ/サービス提供者のデータ/サービスを利用する。

    リソース(Resource)

    @context

    object

    ○

    名前空間定義

    @graph

    dcterms

    string (URI)

    Dublin Core Terms

    rdf

    string (URI)

    RDF名前空間

    @context

    名前空間定義、語彙定義

    @graph

    RDFリソースの配列

    sparqlQuery

    Metadata Client ⇒ Metadata Endpoint

    RDF取得

    patchNotify

    Metadata Endpoint ⇒ Metadata Client

    差分通知

    RDF形式エラー

    JSON-LD不正

    入力修正

    Endpoint接続不可

    ネットワーク問題

    再試行

    http://www.w2.org/2011/http#
    http://purl.org/dc/terms/

    Scope(適用範囲)

    Normative Requirements(規定要件)

    Non-functional / Cross-layer Requirements

    メタデータ

    サービスメタデータ全体構造

    名前空間定義  @context

    データ/サービス提供者に関するメタデータ @graph

    DomainApp

    DomainAppEndpoint

    BaseEndpoint

    SparqlEndpoint

    リソースメタデータ

    共通仕様

    Message Types(メッセージ種類)

    Protocol Flow(プロトコルフロー)

    Error Handling(エラー処理)

    References

    実社会における物理的・論理的な実体(エンティティ)と対応する、Open Dataspaces上で管理される情報。例えば、ドローンといった物理的な実体から、航路といった論理的な実体、企業間の商取引関係なども含まれる。Open Dataspaces内において、Discovery Serviceの検索対象となる。

    array

    -

    string

    発行先URL。省略時はキャッシュに発行

    options

    -

    object

    オプションパラメータ

    string

    機体名称

    B2ドローン

    modelName

    string

    型式名

    B2 Nimbus Pro V4

    modelNumber

    string

    型式番号

    B2-MD12348V1

    manufacturer

    string

    製造者

    株式会社STU-B2

    bodyWeight

    double

    機体重量

    9.0

    maxTakeoffWeight

    double

    最大離陸重量

    18.0

    maxFlightSpeed

    double

    最大速度

    65.0

    maxFlightTime

    double

    最大飛行時間

    160.0

    certification

    boolean

    認証有無

    true

    publicFlag

    boolean

    公開可否

    true

    string

    ポート名

    B2福岡離着陸場

    address

    string

    住所

    福岡県福岡市B2

    altitude

    double

    標高

    8.0

    latitude

    double

    緯度

    33.5986554

    longitude

    double

    経度

    130.4218919

    supportDroneType

    string

    対応機体

    中型ドローン

    activeStatus

    integer

    稼働状態

    2

    publicFlag

    boolean

    公開可否

    true

    storesAircraft

    IRI

    格納機体

    Aircraft参照

    flightPurpose

    string

    飛行目的

    createdAt

    dateTime

    作成日時

    updatedAt

    dateTime

    更新日時

    A / D

    トリプル追加/削除

    SPARQL Query

    RDF取得

    SPARQL検索

    {
      "@context": { ... },
      "@graph": [ ... ]
    }
    {
      "@id": "inst:MyServiceProd",
      "@type": "ods:DomainApp",
      "dcterms:conformsTo": [ ... ],
      "ods:hasBaseEndpoint": { ... },
      "ods:hasEndpoint": [ ... ],
      "ods:hasSparqlEndpoint": { ... },
      "service:serviceProviderName": { ... }
    }
    {
      "@id": "inst:xxxEndpoint",
      "@type": "ods:DomainAppEndpoint",
      "service:xxxRequestUri": {
        "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
        "@value": "https://example.com/api/v1/path"
      }
    }
    {
      "@id": "inst:myServiceBaseEndpoint",
      "@type": "ods:BaseEndpoint",
      "ods:accessURL": {
        "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
        "@value": "https://example.com/api/v1"
      }
    }
    {
      "@id": "inst:myServiceSparqlEndpoint",
      "@type": "ods:SparqlEndpoint",
      "ods:accessURL": {
        "@type": "http://www.w3.org/2001/XMLSchema#anyURI",
        "@value": "https://example.com/sparql"
      }
    }
    {
      "@context": { ... },
      "@graph": [ ... ]
    }
    http://localhost:8080/resource/aircraft/{UUID}
        "@graph": [
            {
                "@id": "http://localhost:8080/resource/aircraft/DDDD2222-0000-0000-4444-000000000004",
                "geo:hasGeometry": {
                    "@id": "http://localhost:8080/resource/aircraft/DDDD2222-0000-0000-4444-000000000004/geometry"
                },
                "publicFlag": {
                    "@value": "true",
                    "@type": "http://www.w3.org/2001/XMLSchema#boolean"
                },
                "ownerType": {
                    "@value": "1",
                    "@type": "http://www.w3.org/2001/XMLSchema#int"
                },
                "ownerId": "550e8400-e29b-41d4-a716-446655440018",
                "operatorId": "DDDD2222-0000-0000-0000-0000",
                "modelNumber": "B2-MD12348V1",
                "modelName": "B2 Nimbus Pro V4",
                "@type": "Aircraft",
                "aircraftId": "DDDD2222-0000-0000-4444-000000000004",
                "aircraftName": "B2ドローン",
                "aircraftType": {
                    "@value": "3",
                    "@type": "http://www.w3.org/2001/XMLSchema#int"
                },
                "bodyWeight": {
                    "@value": "9.0e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "certification": {
                    "@value": "true",
                    "@type": "http://www.w3.org/2001/XMLSchema#boolean"
                },
                "dipsRegistrationCode": "B2-DIPS126",
                "hasAircraftType": {
                    "@id": "http://example.com/aircraft#MultiRotor"
                },
                "hasOwnerType": {
                    "@id": "http://example.com/aircraft#OperatorOwned"
                },
                "latitude": {
                    "@value": "33.588344e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "longitude": {
                    "@value": "130.408585e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "manufacturer": "株式会社STU-B2",
                "manufacturingNumber": "B2-MN456792",
                "maxFlightSpeed": {
                    "@value": "65.0e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "maxFlightTime": {
                    "@value": "160.0e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "maxTakeoffWeight": {
                    "@value": "18.0e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                }
            },
            {
                "@id": "http://localhost:8080/resource/aircraft/DDDD2222-0000-0000-4444-000000000004/geometry",
                "geo:asWKT": {
                    "@value": "POINT (130.408585 33.588344 )",
                    "@type": "geo:wktLiteral"
                },
                "@type": "http://www.opengis.net/ont/sf#Point"
            }
        ],
        "@context": {
            "geo": "http://www.opengis.net/ont/geosparql#",
            "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
            "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
            "@vocab": "http://example.com/aircraft#"
        }
        "@graph": [
            {
                "@id": "http://localhost:8080/resource/dronePort/DDDD2222-0000-0000-3333-000000000004",
                "geo:hasGeometry": {
                    "@id": "http://localhost:8080/resource/dronePort/DDDD2222-0000-0000-3333-000000000004/geometry"
                },
                "visDronePortCompanyId": "B2-VIS126",
                "updateTime": {
                    "@value": "2025-10-03T09:00:00Z",
                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
                },
                "supportDroneType": "中型ドローン",
                "storesAircraft": {
                    "@id": "http://localhost:8080/resource/aircraft/DDDD2222-0000-0000-4444-000000000004"
                },
                "@type": "DronePort",
                "activeStatus": {
                    "@value": "2",
                    "@type": "http://www.w3.org/2001/XMLSchema#integer"
                },
                "address": "福岡県福岡市B2",
                "altitude": {
                    "@value": "8.0e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "dronePortId": "DDDD2222-0000-0000-3333-000000000004",
                "dronePortName": "B2福岡離着陸場",
                "hasActiveStatus": {
                    "@id": "http://example.com/drone-port#AvailableStatus"
                },
                "hasPortType": {
                    "@id": "http://example.com/drone-port#UnmannedDronePort"
                },
                "latitude": {
                    "@value": "33.5986554e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "longitude": {
                    "@value": "130.4218919e0",
                    "@type": "http://www.w3.org/2001/XMLSchema#double"
                },
                "manufacturer": "株式会社MNO-B2",
                "operatorId": "DDDD2222-0000-0000-0000-0000",
                "portType": {
                    "@value": "1",
                    "@type": "http://www.w3.org/2001/XMLSchema#integer"
                },
                "publicFlag": {
                    "@value": "true",
                    "@type": "http://www.w3.org/2001/XMLSchema#boolean"
                },
                "serialNumber": "B2-SN789015",
                "storedAircraftId": "DDDD2222-0000-0000-4444-000000000004"
            },
            {
                "@id": "http://localhost:8080/resource/dronePort/DDDD2222-0000-0000-3333-000000000004/geometry",
                "geo:asWKT": {
                    "@value": "POINT Z (130.4218919 33.5986554 8.0)",
                    "@type": "geo:wktLiteral"
                },
                "@type": "http://www.opengis.net/ont/sf#Point"
            }
        ],
        "@context": {
            "geo": "http://www.opengis.net/ont/geosparql#",
            "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
            "@vocab": "http://example.com/drone-port#"
        }
        "@graph": [
            {
                "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000",
                "updatedAt": {
                    "@value": "2025-01-24T05:36:26.021Z",
                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
                },
                "uaslName": "航路E",
                "uaslId": "22222222-EEEE-0000-0000-446655440000",
                "@type": "Uasl",
                "belongsToUaslAdministrator": {
                    "@id": "http://localhost:8080/resource/uaslAdministrator/22222222-678643e0-b4d4-4d0f-866c-c441a4659be4"
                },
                "createdAt": {
                    "@value": "2025-01-24T05:36:26.021Z",
                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
                },
                "droneId": [
                    {
                        "@value": "1",
                        "@type": "http://www.w3.org/2001/XMLSchema#integer"
                    },
                    {
                        "@value": "2",
                        "@type": "http://www.w3.org/2001/XMLSchema#integer"
                    }
                ],
                "flightPurpose": "飛行目的-航路E",
                "hasRepresentativePoint": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000/representativePoint"
                },
                "hasUaslPoint": [
                    {
                        "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002"
                    }
                ],
                "hasUaslSection": [
                    {
                        "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000002"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000004"
                    }
                ]
            },
            {
                "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000/representativePoint",
                "longitude": {
                    "@value": "130.42092",
                    "@type": "http://www.w3.org/2001/XMLSchema#decimal"
                },
                "latitude": {
                    "@value": "33.597",
                    "@type": "http://www.w3.org/2001/XMLSchema#decimal"
                },
                "@type": "UaslRepresentativePoint"
            },
            {
                "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003",
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslPoint"
            },
            {
                "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004",
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslPoint"
            },
            {
                "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001",
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslPoint"
            },
            {
                "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003",
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslPoint"
            },
            {
                "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002",
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslPoint"
            },
            {
                "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000003",
                "connectsUaslPoint": [
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004"
                    },
                    {
                        "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003"
                    }
                ],
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslSection"
            },
            {
                "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000002",
                "connectsUaslPoint": [
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004"
                    },
                    {
                        "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003"
                    }
                ],
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslSection"
            },
            {
                "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000001",
                "connectsUaslPoint": [
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004"
                    },
                    {
                        "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003"
                    }
                ],
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslSection"
            },
            {
                "@id": "http://localhost:8080/resource/uaslSection/22222222-EEEE-0000-2222-000000000004",
                "connectsUaslPoint": [
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000003"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000002"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000001"
                    },
                    {
                        "@id": "http://localhost:8080/resource/uaslPoint/22222222-EEEE-0000-1111-000000000004"
                    },
                    {
                        "@id": "http://uasl-system-a.revitie.org/resource/uaslPoint/11111111-DDDD-0000-1111-000000000003"
                    }
                ],
                "belongsToUasl": {
                    "@id": "http://localhost:8080/resource/uasl/22222222-EEEE-0000-0000-446655440000"
                },
                "@type": "UaslSection"
            }
        ],
        "@context": {
            "geo": "http://www.opengis.net/ont/geosparql#",
            "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
            "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
            "@vocab": "http://example.com/uasl#"
        }

    アイデンティティ・トラスト(L3)