注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このページでは TSv1 について説明します。TSv2 と Python は、オントロジー SDK を通じてオブジェクトを読み取ります。言語別のオブジェクト API、または TSv2 のリンク走査 API については TypeScript オントロジー SDK リファレンスのリンクを参照してください。
プロジェクトにインポートされたすべてのオブジェクトタイプは TypeScript v1 API に変換されるため、Foundry で利用可能なオブジェクトに簡単にアクセスして操作できます。
各オブジェクトタイプのプロパティは、各オブジェクトタイプ用に生成される TypeScript インターフェースのフィールドに変換されます。生成されるフィールド名には、オントロジーで指定されたAPI名が使用されます。
各プロパティのフィールドには、単純なドット表記法でアクセスできます。
Copied!1const firstName = employee.firstName;
プロパティには具体的な値が設定されていない場合があるため、プロパティ値にアクセスしたときの戻り値の型は undefined になる可能性があります。TypeScript では、undefined のケースを明示的に処理しないと、コンパイラーがエラーを返します。詳しくは、このガイドを参照してください。
TypeScript v1 では、オブジェクトタイプの配列プロパティは ReadonlyArray 型に変換されます。これは、配列プロパティの編集の意味を明確にするためです。配列プロパティの値を変更する唯一の方法は、まったく新しい配列値で更新することです。
このため、配列プロパティの値を操作する前に、その配列プロパティをコピーしてください。
Copied!1 2 3 4// 新しい配列にコピーします let arrayCopy = [...myObject.myArrayProperty]; // コピーした配列を変更できるようになります arrayCopy.push(newItem);
TypeScript v2 では、配列プロパティの型が ReadonlyArray ではなく通常の T[] になるため、コンパイラーはその場での変更を許可します。ただし、編集によって配列値全体が置き換えられる点は変わらないため、どのバージョンでも新しい配列を作成し、プロパティに代入してください。Python も同様に動作します。オントロジーの編集を参照してください。
オブジェクトタイプ間のリンクタイプも、各オブジェクトタイプの TypeScript インターフェースの最上位フィールドに変換されます。リンクを走査するには、フィールドにアクセスしてから、オブジェクトを読み込むためのメソッドのいずれかを呼び出します。リンクタイプのフィールド名は、オントロジーで指定されたAPI名を使用して生成されます。
Foundry オントロジーでは、1対1、1対多、多対多のリンクタイプを定義できます。リンクの 1 側にアクセスするとき、生成されるフィールドは SingleLink 型となり、get() または getAsync() メソッドを使用してリンクされたオブジェクトにアクセスできます。
Copied!1const manager = employee.manager.get();
1対1または多対1のリンクを走査するとき、リンクされたオブジェクトがない場合は、戻り値が undefined になる可能性があります。これらのリンクの undefined 値を処理するには、ガイドに沿って進めてください。
リンクの many 側にアクセスするとき、生成されるフィールドは MultiLink 型となります。all() または allAsync() メソッドを使用して、リンクされたオブジェクトの配列にアクセスできます。リンクされたオブジェクトがない場合、これらのメソッドは空の配列を返します。
Copied!1const employees = employee.reports.all();
リンクの走査には、どのオブジェクトがリンクされているかをバックエンドで読み込む必要があるため、コストが高くなる場合があります。リンク走査をより効率的に行う方法については、このセクションを参照してください。
.all() または .allAsync() の呼び出しで返される、リンクされたオブジェクトの配列は ReadonlyArray です。配列を変更する場合は、先にコピーを作成してください。
Copied!1let copiedEmployees = [...employee.reports.all()];
リンクを ObjectSet として走査すると、リンクされたオブジェクトのインスタンスをメモリーに読み込まずに済みます。オントロジーでリンクが作成されると、このタイプのオブジェクトセットに、リンクされたほかのオブジェクトセットへの「関連検索」を行う API が生成されます。
Copied!1 2 3 4 5 6 7import { ObjectSet, Employee, OtherObjectType } from "@foundry/ontology-api"; // 次のオブジェクトセットが利用可能であると仮定します。 // const employee_id = "123"; // const employeeObjectSet : ObjectSet<Employee> = Objects.search().employee().filter(exactMatch(employee_id)); const linkedObjs: ObjectSet<OtherObjectType> = employeeObjectSet.searchAroundToOtherObjectType();
オブジェクトの単一のインスタンスを操作し、そこから関連検索を行うと、MultiLink<objectType> が返されます。この MultiLink を ObjectSet に変換することはできません。ほかのオブジェクトセットにピボットするには、オブジェクトのインスタンスをオブジェクトセットに変換する必要があります。
Copied!1 2 3 4 5 6 7 8 9 10 11// 次のように仮定します。 // const employee: Employee // MultiLink をメモリーに読み込んで、さらに処理できます。 const linkedObjs: MultiLink<objectType> = employee.reports // 単一のオブジェクトのインスタンスをオブジェクトセットに変換します。このステートメントは `employee().filter()` ステートメントよりも時間がかかります。 const employeeObjectSet : ObjectSet<Employee> = Objects.search().employee([employee]) // その後、上記の「searchAroundToOtherObjectType」を使用して、オブジェクトセットのみを処理できます。
TSv2 での形式については、TypeScript オントロジー SDK リファレンスのリンクを参照し、メソッドごとの変換については、リンク走査のマッピングを参照してください。各 TSv1 の識別子と型に対応する TSv2 の識別子と型については、識別子リファレンスを参照してください。
Functions は、オブジェクトとプロパティの一覧を提供することで、利用可能なオントロジーへのアクセスを提供します。各オブジェクトタイプの定数型にアクセスすることで、オントロジーメタデータの情報を取得できます。詳しくは、以下のセクションを参照してください。
これらのオントロジーメタデータ API は TSv1 専用であり、TSv2 または Python には相当する API がありません。
オブジェクトのプロパティには型のメタデータも含まれており、各プロパティのデータ型にプログラムからアクセスできます。この機能は、特定のデータ型のプロパティをすべて特定したり、指定したプロパティ名のデータ型が特定のデータ型であることを検証したりする、高度なワークフローに使用できます。
たとえば、従業員のオブジェクトタイプを含むオントロジーでは、そのオブジェクトタイプのプロパティの型情報に、次のようにアクセスできます。
Copied!1 2 3import { Employee } from "@foundry/ontology-api"; ... const type = Employee.properties.firstName;
この場合、firstName が Employee オブジェクトタイプの文字列プロパティであれば、その型は StringPropertyBaseType になります。
次のプロパティタイプが利用可能です。
BooleanPropertyBaseTypeBytePropertyBaseTypeDatePropertyBaseTypeFloatPropertyBaseTypeTimestampPropertyBaseTypeShortPropertyBaseTypeGeohashPropertyBaseType(Geopoint プロパティで使用します。以前は geohash プロパティという名前でした。)DecimalPropertyBaseTypeStringPropertyBaseTypeLongPropertyBaseTypeIntegerPropertyBaseTypeDoublePropertyBaseTypeArrayPropertyBaseTypeVectorPropertyBaseType