オントロジーの構築ファンクションオブジェクトの関数オブジェクト識別子

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

オブジェクト識別子

このページでは、typeId と primaryKey を使用してオブジェクトを識別する TSv1 について説明します。TSv2 のフィールドと各フィールドの対応関係については、オブジェクトの識別をご覧ください。

Foundry では、オブジェクトの属性は複数の異なる方法で表現されます。関数で正しいコードを書くには、これらの表現の違いを理解することが重要になる場合があります。このセクションでは、オブジェクトを識別するさまざまな方法と、それらがコードに与える影響について説明します。

識別子の種類

オブジェクト RID

「RID」とは、エンティティを識別するために使用される Palantir のオープンソース仕様である Resource Identifier ↗ を指します。オントロジーのオブジェクトには、元データセットのインデックス化によって作成される場合も、アクションの一部として作成される場合も、作成時に RID が割り当てられます。

TypeScript v1 の関数では、すべてのオントロジーのオブジェクトに、string | undefined 型の rid フィールドがあります。RID が未定義になる場合があるのは、オブジェクト作成 API を使用して関数内で新しいオブジェクトを作成できるためです。新しく作成されたオブジェクトの rid 値は常に undefined であり、既存のオブジェクトの rid は常に定義されています。

主キー

オブジェクトは、オブジェクトタイプと主キーによっても一意に識別できます。主キーは、propertyId と値の一意の組み合わせです。たとえば、Employee オブジェクトタイプは、employeeId という名前の string プロパティによって一意に識別される場合があります。

新しく作成されたオブジェクトを含め、すべてのオントロジーのオブジェクトには、常に typeId フィールドと primaryKey フィールドが存在します。これは、新しいオブジェクトを作成する際に主キーを指定する必要があるためです。

オブジェクト指定子

TypeScript v1 では、オブジェクトタイプと主キーが別々のフィールドであるため、オブジェクトを一意に識別するには typeId と primaryKey の両方が必要です。

コードへの影響

等価性の確認

関数内では、各オントロジーのオブジェクトは JavaScript オブジェクト ↗ を使用して表現されます。1 個のオントロジーのオブジェクトが、複数の JavaScript オブジェクトとして表現される場合があります。たとえば、オブジェクト検索からオントロジーのオブジェクトを複数回読み込む場合や、パラメーターとして渡されたオブジェクトをオブジェクト検索からも読み込む場合に、この状況が発生することがあります。

Copied!
1 2 3 4 5 6 7 8 public myFunction(employee: Employee): void { const employee2 = Objects.search().employee() .filter(e => e.id.exactMatch(employee.id)) .all()[0]; console.log(employee == employee2); // false console.log(employee === employee2); // false console.log(employee.id === employee2.id); // true }

上記の例では、employee と employee2 はどちらも概念上は同じオントロジーのオブジェクトを指していますが、変数が 2 個の異なる JavaScript オブジェクトを指しているため、== 演算子と === 演算子を使用して比較すると false が返されます。新しく作成されたオブジェクトの rid は undefined であるため、単純に rid フィールドを比較すると問題が生じる可能性があります。

そのため、2 個のオントロジーのオブジェクトの等価性を比較する最適な方法は、typeId と primaryKey を比較することです。

Copied!
1 2 3 4 function isEqual(o1: OntologyObject, o2: OntologyObject) { return o1.typeId === o2.typeId && JSON.stringify(o1.primaryKey) == JSON.stringify(o2.primaryKey); }

主キーは単一のオブジェクトタイプ内でのみ一意であるため、両方の値が必要です。

オブジェクトのマッピング

オブジェクトから何らかの値へのマッピングを保存しておくと便利な場合がよくあります。たとえば、オブジェクトの配列を反復処理し、より効率的に参照できるように値を保存したい場合があります。

前述の等価性の確認に関する問題があるため、オントロジーのオブジェクト自体を JavaScript の Map のキーとして使用することはできません。代わりに、OntologyObjects をキーとして使用できるように設計された FunctionsMap を使用できます。