注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
以下のセクションでは、オントロジー内のプロパティ、関係、アクセス制御をどのように構成するかについて説明します。
各事実は1か所に保存します。利便性のために派生プロパティを使用します。
非正規化されたデータ(リンクされたオブジェクトの値を親オブジェクトにコピーしたもの)にはリスクがあります。データソースが変更されると、すべてのコピーを更新する必要があります。正規化によってデータの一貫性を保持でき、派生プロパティを使用すれば、維持管理の手間をかけずに非正規化されたアクセスの利便性を得られます。
計算値をすべて同じように扱えるわけではありません。適切なアプローチは、安定した入力から値を安全に事前計算できるか、それともオントロジーの動的な変更と同期し続ける必要があるかによって異なります。
| 種類 | 特性 | 推奨ツール | 例 |
|---|---|---|---|
| 事前計算 | 同じオブジェクトのプロパティから計算されます。入力はほとんど変更されないか、パイプラインによる取り込みでのみ変更されます。 | パイプラインのトランスフォーム | fullName = firstName + " " + lastName 入力は安定しており、同じパイプラインで更新されるため、事前計算は安全で、実行時のオーバーヘッドも発生しません。 |
| 動的な派生 | リンクされたオブジェクト、またはアクション、自動化、その他のオントロジーレベルの操作によって変更される値に依存します。 | 派生プロパティ | directReportCount 従業員の配置転換、入社、退社はアクションを通じて行われます。リンクされた Employee オブジェクトの件数を計算する派生プロパティは、自動的に正しい値を保持します。 |
値がアクションによる変更に依存する場合、その値に影響を与える可能性があるすべてのアクションで、値も更新する必要があります。いずれかのアクションで更新に失敗すると、不整合が特定されるまで値は誤ったままになります。
Manager オブジェクトタイプで、直属の部下の件数を表示する必要がある場合。
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
Manager Manager
- directReportCount: 5 - directReportCount (derived):
(manually maintained integer; counts linked Employee objects
must be updated every time → at query time
an employee joins or leaves)
Employee
Employee - manager (link to Manager)
- managerName: "Alice"
(copied from the linked Manager;
breaks if the manager's name
changes)
派生プロパティは実行時に評価されます。パフォーマンス特性は規模によって異なります。
| 規模 | 推奨事項 |
|---|---|
| 小規模から中規模(クエリあたり約10,000個未満のオブジェクト) | 派生プロパティを積極的に使用します。実行時の評価は、ほとんどのワークフローで十分なパフォーマンスを発揮します。 |
| 大規模(クエリあたり約10,000個を超えるオブジェクト) | 派生プロパティでは、オーバーヘッドの大きいクエリ経路によって遅延が生じる場合があります。非正規化が適切なトレードオフになることもありますが、デフォルトとせず、意識的に判断して文書化する必要があります。 |
意味的に関連するフィールドを構造体にまとめます。
プロパティが本来複数のフィールドで構成される場合(たとえば、番地、市区町村、州、郵便番号からなる住所)は、個別のプロパティにフラット化するのではなく、構造体を使用します。構造体は意味的なグループ化を保持し、より豊富なメタデータを記録できます。
| シナリオ | 例 |
|---|---|
| 複数のフィールドで構成される値 | 住所(番地、市区町村、州、郵便番号)、座標(Geopoint、高度) |
| メタデータを伴う値 | 信頼度スコア、ソースへの参照、推論を伴う AI 生成の出力 |
| 選択ロジックを伴う複数値プロパティ | リデューサーによって主要な番号を取り出す、複数の電話番号 |
Facility オブジェクトタイプで住所をモデル化する場合。
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
Facility Facility
- addressStreet - address (struct array)
- addressCity - street (Main field)
- addressState → - city (Main field)
- addressPostalCode - state (Main field)
- addressCountry - postalCode (Main field)
- addressGeopoint - country (Main field)
- addressLastOccupied - geopoint
- addressDatasource - lastOccupied (used for reducer sorting)
- addressLlmConfidence - datasource
- addressLlmReasoning - llmConfidence
- llmReasoning
(Ten unrelated properties with a
naming convention as the only link (One semantic concept with main
between them) fields and structured sub-fields)
| 利点 | 詳細 |
|---|---|
| 意味的なグループ化 | 住所は1つの概念であり、無関係な10個のプロパティではありません。オントロジーにこれを反映できます。 |
| メタデータの記録 | 構造体には、主要な値とともにソース、信頼度、タイムスタンプの情報を格納できます。 |
| リデューサーのサポート | 複数の値がある場合、リデューサーによって最も関連性の高い値(たとえば、lastOccupied フィールドが最も新しい住所)を取り出せます。 |
| メインフィールドの動作 | 構造体では1個以上のメインフィールドを指定でき、インターフェースやクエリで、単純なプロパティとして、またはフィールドの一部を持つ構造体として動作します。 |
構造体は、大規模言語モデル(LLM)の出力に主要な結果と関連するメタデータ(推論、ソースへの参照、信頼度スコア)の両方が含まれる、AI を中心としたワークフローで特に有用です。これらを無関係なプロパティに分散させず、まとめて記録します。
インターフェースを使用して、再利用可能で将来の変更に対応できる抽象化を構築します。
インターフェースは、「繰り返しを避ける」設計原則とオープン・クローズドの拡張性を実現するための主要なツールです。複数のオブジェクトタイプが実装できる共通の形式(プロパティ、リンク、アクション)を定義することで、ワークフローが個別のタイプではなくインターフェースを対象にできるようにします。
| シナリオ | 例 |
|---|---|
| タイプ間で共通するプロパティ | lastInspectionDate と inspectionStatus を持ち、Vehicle、Equipment、Facility によって実装される Inspectable インターフェース |
| 共通のワークフロー | SchedulableResource を対象とするスケジューリングワークフローは、変更せずにアリーナ、会議室、車両に使用できます |
| 分類体系に基づくグループ化 | ドリルダウン集計ワークフロー向けに、Aircraft、Vessel、GroundVehicle によって実装される MilitaryAsset インターフェース |
| 多層の抽象化 | SchedulableResource が Trackable を拡張し、より広範な追跡の抽象化にスケジューリング固有のプロパティを追加します |
複数のオブジェクトタイプで検査の追跡が必要です。
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
Vehicle Interface: Inspectable
- lastInspectionDate - lastInspectionDate
- inspectionStatus - inspectionStatus
- (duplicate action: Schedule - (shared action: Schedule Inspection)
Vehicle Inspection)
→ Vehicle implements Inspectable
Equipment - make, model, mileage, ...
- lastInspectionDate
- inspectionStatus Equipment implements Inspectable
- (duplicate action: Schedule - serialNumber, warrantyExpiry, ...
Equipment Inspection)
Facility implements Inspectable
Facility - address, capacity, ...
- lastInspectionDate
- inspectionStatus (One interface, one shared action,
- (duplicate action: Schedule three implementing types)
Facility Inspection)
(Three copies of the same properties
and logic, maintained independently)
現在のプラットフォームツールがインターフェースベースのワークフローを完全にはサポートしていない場合でも、インターフェースを用いた設計は、サポートの拡大に伴って役立つ基盤となります。
| 状況 | ガイダンス |
|---|---|
| ワークフローでインターフェースが完全にサポートされている | インターフェースを直接対象にします。1つのワークフローで、実装するすべてのタイプをカバーできます。 |
| 特定のコンテキストでインターフェースがまだサポートされていない | インターフェースを今の段階で定義し、一時的な措置としてタイプごとにワークフローを複製します。この方法は、インターフェースを使用しない方法と比べて効率が劣るわけではなく、サポートが利用可能になった時点で統合するための明確な道筋を確立できます。 |
現在のサポートの詳細については、インターフェースのドキュメントを確認してください。
Inspectable、Schedulable、Billable などがあります。分類体系を表すインターフェースには、MilitaryAsset、MedicalDevice などがあります。リンクは、意味のある関係を表す必要があります。
すべてのリンクタイプは、次のようなドメインに関する明確な問いに答える必要があります。
| リンクタイプ | 使用する場面 | 例 |
|---|---|---|
| 直接リンク | 関係に意味はあるものの、関係自体のメタデータはない場合。 | Employee → Department |
| オブジェクトベースのリンク | 関係自体がメタデータ(日付、ロール、ステータス、割り当て)を持つ場合。 | Employee → VentureStaffing → Venture(role、startDate、allocation を含む) |
すべてのコンテキストで、すべてのリンク用オブジェクトを表示する必要があるわけではありません。結合のメタデータを重視するワークフローもあれば、直接のつながりだけを必要とするワークフローもあります。オブジェクトベースのリンクでは、ワークフローに応じてどちらの表示も提供できます。
従業員と事業の関係をモデル化します。各配属にはロールと開始日があります。
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
Employee → Venture (direct link) Employee → Venture Staffing → Venture
(no way to capture role,
start date, or allocation → Venture Staffing
per assignment) - role
- startDate
— OR — - allocationPercentage
- status
Employee
- ventureRole Workflows can expose either:
- ventureStartDate - Direct: Employee → Venture
(ambiguous if employee has - Detailed: Employee → Staffing → Venture
multiple venture assignments)
| 問題 | 影響 |
|---|---|
| メタデータの欠落 | 直接リンクでは、関係がいつ、なぜ、どのような立場で存在するのかを記録できません。 |
| 複数のリンクによる曖昧さ | エンティティが複数の関係に関わる場合、ソースオブジェクト上の ventureRole のようなプロパティは曖昧になります。 |
| 意味のないリンク | 2個のデータセットが外部キーを共有しているという理由だけで存在するリンクは、オントロジーにノイズを加え、ナビゲーションをわかりにくくします。 |
人間にとっての読みやすさと、エージェントにとっての探索しやすさを最適化します。
一貫性のある説明的な命名は、オントロジーの品質に対して最も大きな効果をもたらす取り組みの1つです。明確な名前は、人間と AI エージェントの双方がオントロジーを探索しやすくします。また、オントロジーが使用され始めてから名前を修正するのは、はるかに困難です。
| 要素 | 規則 | 良い例 | 悪い例 |
|---|---|---|---|
| オブジェクトタイプ | ドメインの専門家が理解できる、単数形の具体的な名詞 | Patient、WorkOrder、FlightSegment | Data、Item、Record |
| プロパティ | 簡潔で意味が明らかであり、データ型の情報や実装の詳細を名前に含めない | age、status、lastInspectionDate | dtLastInspMod、nVAL01、fieldX |
| リンク | それぞれの方向から自然に読める | department (Employee → Dept)、employees (Dept → Employee) | relatedItems、link1 |
| 日付 | オントロジー全体で1つの規則に一貫して従う | createdDate、updatedDate、effectiveDate | createdDate と dateOfCreation の混在 |
| 曖昧な用語 | 具体的な意味を示す語を付ける | monetaryValue、quantityOnHand、riskScore | value、quantity、score |
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
Object type: Item → Object type: Product
Property: dtLastInspMod → Property: lastInspectionDate
Property: value → Property: monetaryValue
Property: quantityOnHand
Link: Item → Related Item → Link: Product → Supplier
Link: Employee → Supervisor
createdDate が使用されている場合は、dateOfCreation を導入しないようにします。monetaryValue、quantityOnHand、riskScore を使用します。value、quantity、score は使用しないようにします。Employee から Department へのリンクは、従業員の視点では department、部門の視点では employees とする必要があります。最小権限の原則に従い、ドメインの意味に基づいてセキュリティを設計します。
オントロジーのセキュリティは、データインフラの用語ではなく、ドメインで意味を持つ用語で表現する必要があります。ユーザーがセキュリティ設定を見て、何が保護されているのか、またその理由を理解できるようにする必要があります。
行レベルと列レベルのセキュリティを組み合わせて、きめ細かなセルレベルのアクセス制御を実現します。
| セキュリティ層 | 制御対象 | 例 |
|---|---|---|
| 行レベル | ユーザーが閲覧できるオブジェクト | VIP 患者へのアクセスを上級スタッフに制限 |
| 列レベル | 閲覧可能なオブジェクトでユーザーが閲覧できるプロパティ | 診療記録へのアクセスをケアチームに制限 |
| セルレベル(組み合わせ) | 行と列の制限の積集合 | VIP 患者の診療記録は上級ケアチームのみが閲覧可能 |
機密性の高い患者データへのアクセス制御:
✗ Avoid ✓ Prefer
──────────────────────────────────────── ────────────────────────────────────────
PublicPatient (object type) Patient (single object type)
- name - name
- dob - dob
- diagnosis - diagnosis (column-restricted:
care team only)
RestrictedPatient (object type) → - clinicalNotes (column-restricted:
- name care team only)
- dob - mentalHealthRecords (column-
- diagnosis restricted: psychiatry team only)
- clinicalNotes
- mentalHealthRecords Row-level security:
- VIP patients: senior staff only
(Duplicated schemas; security
achieved by splitting types. Column-level security:
Properties added to one type are - clinicalNotes: care team only
easily forgotten on the other.) - mentalHealthRecords: psychiatry only
(One type; security achieved by policy.
Domain boundaries drive access rules.)
| 問題 | 影響 |
|---|---|
| セキュリティのためにタイプを重複させる | スキーマの同期が取れなくなり、一方のタイプに追加したプロパティをもう一方に追加し忘れやすくなります。「繰り返しを避ける」設計原則に違反します。 |
| デフォルトの権限が広すぎる | 広範なアクセスを許可した状態から始めて後から制限すると、制限が完了する前に機密データが公開されるリスクがあります。 |
| ポリシーの代わりに場当たり的な絞り込みを使用する | オントロジー層で強制されず、アプリケーションコード内に分散したセキュリティロジックは脆弱で、監査が困難です。 |
| 境界が一致していない | ドメインの境界に沿っていないセキュリティ境界は、理解が難しく、保護に抜けが生じる可能性が高くなります。 |
このページのガイダンスに沿ってセキュリティ境界をドメインの境界に揃えたうえで、設定の詳細についてはセキュリティとガバナンスのドキュメントを参照してください。アクセス制御は誰がデータを使用できるかを定めます。一方、プライバシーと市民的自由に関する計画では、ワークフローにそのデータが必要な理由や、より少ないデータで目的を達成できるかどうかも検討します。こうした設計上の判断を行う際には、プライバシーと市民的自由の実践を確認してください。