

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 属性リファレンス
<a name="schemas_attributereferences"></a>

Amazon Cloud Directory ファセットには属性が含まれています。属性は、属性定義または属性参照のいずれかです。属性定義は、その名前とを宣言する属性とプリミティブ型 (文字列、バイナリ、ブール、DateTime、または数字) を宣言する属性です。また、オプションで必要な動作、デフォルト値、変更不可能なフラグ、および属性ルール (最小 / 最大長さなど) を宣言できます。

属性参照は、プリミティブ型、デフォルト値、変更不可能なフラグおよび別の既存の属性定義の属性ルールから取得される属性です。属性参照には、そのプロパティがターゲット属性定義から取得されるため、独自のプリミティブ型、デフォルト値、変更不可能なフラグまたはルールがありません。

属性参照は必要なターゲットの定義の動作を上書きする場合があります (詳細については以下を参照)。

属性リファレンスを作成する場合は、属性名と (ターゲットの属性定義のファセット名と属性名を含む) ターゲットの属性定義のみを指定します。属性リファレンスは、他の属性を参照しない場合があります。また、現時点では、属性リファレンスは別のスキーマからターゲットの属性定義は参照しない場合があります。

オブジェクトの 2 つ以上の属性に同じストレージの場所を参照させる場合に属性リファレンスを使用できます。たとえば、ユーザーのファセットと EnterpriseUser のファセットが適用されたオブジェクトがあるとします。ユーザーのファセットには、FirstName 属性定義があり、EnterpriseUser のファセットには User.FirstName をポイントする属性リファレンスがあります。両方の FirstName 属性が、同じストレージの場所を参照しているため、User.FirstName または EnterpriseUser.FirstName のいずれかに変更を加えると同じ結果が得られます。

## API の例
<a name="schemas_referenceapiexample"></a>

次の例では、クラウドディレクトリ API を使用した属性リファレンスの使用方法について説明します。この例では、ベースのファセットには属性定義が含まれ、別のファセットには、ベースのファセットの属性を参照する属性が含まれています。ベースの属性が不要の場合は、リファレンス属性は必須とマークされることに注意してください。

```
    // create base facet
    CreateFacetRequest req1 = new CreateFacetRequest()
      .withSchemaArn(devSchemaArn)
      .withName("baseFacet")
      .withAttributes(List(
        new FacetAttribute()
          .withName("baseAttr")
          .withRequiredBehavior(RequiredAttributeBehavior.NOT_REQUIRED)
          .withAttributeDefinition(new FacetAttributeDefinition().withType(FacetAttributeType.STRING))))
      .withObjectType(ObjectType.DIRECTORY)
    cloudDirectoryClient.createFacet(req1)

    // create another facet that refers to the base facet
    CreateFacetRequest req2 = new CreateFacetRequest()
      .withSchemaArn(devSchemaArn)
      .withName("facetA")
      .withAttributes(List(
        new FacetAttribute()
          .withName("ref")
          .withRequiredBehavior(RequiredAttributeBehavior.REQUIRED_ALWAYS)
          .withAttributeReference(new FacetAttributeReference()
            .withTargetFacetName("baseFacet")
            .withTargetAttributeName("baseAttr"))))
      .withObjectType(ObjectType.DIRECTORY)
    cloudDirectoryClient.createFacet(req2)
```

## JSON 例:
<a name="schemas_referencejsonexample"></a>

次の例では、JSON モデルでの属性リファレンスの使用方法を示します。このモデルで表されるスキーマは上記のモデルと同じです。

```
 {
  "facets" : {
    "baseFacet" : {
      "facetAttributes" : {
        "baseAttr" : {
          "attributeDefinition" : {
            "attributeType" : "STRING"
          },
          "requiredBehavior" : "NOT_REQUIRED"
        }
      },
      "objectType" : "DIRECTORY"
    },
    "facetA" : {
      "facetAttributes" : {
        "ref" : {
          "attributeReference" : {
            "targetFacetName" : "baseFacet",
            "targetAttributeName" : "baseAttr"
          },
          "requiredBehavior" : "REQUIRED_ALWAYS"
        }
      },
      " objectType" : "DIRECTORY"
    }
}
```

### 属性リファレンスに関する考慮事項
<a name="schemas_attributerefconsiderations"></a>

属性リファレンスは、同じスキーマでは既存の属性定義をターゲットとしている必要があります。
+ 属性リファレンスは、同じファセットまたは別のファセットで既存の属性定義をターゲットとする場合があります。
+ 属性リファレンスは、他の属性をターゲットとしない場合があります。
+ 別のファセットの属性リファレンスのターゲットである属性定義を含むファセットは、すべての参照が削除されるまで削除できません。

オブジェクトを作成するか、またはファセットを既存のオブジェクトに適用することによって、従来の属性定義を使用する場合と同じ方法で属性リファレンスを使用できます。

**注記**  
リファレンスを使用してファセットを他のファセットへ適用できますが、ターゲットファセットを直接適用する必要はありません。ターゲットファセットが適用されない場合は、属性リファレンスの動作に変更はありません。(ファセットの他の属性をオブジェクトに存在させる場合は、ターゲットファセットのみを適用する必要があります)。

### 属性リファレンス値の設定
<a name="schemas_settingattributerefvalues"></a>

属性の値を変更する場合は、[UpdateObjectAttributes](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_UpdateObjectAttributes.html) API アクションを呼び出すことができます。定義またはそのオブジェクトの同じ定義に対するその他のリファレンスのいずれかを更新 (削除) すると同じ結果が得られます。

### 属性リファレンス値の取得
<a name="schemas_gettingattributerefvalues"></a>

[ListObjectAttributes](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_ListObjectAttributes.html) API アクションを呼び出して、ストレージエイリアスを取得できます。この呼び出しは、それぞれが属性キーとそれに関連付けられている値が含まれる、タプルのリストを返します。属性キーは、そのオブジェクトに存在するストレージエイリアスのリストに対応しています。

**注記**  
属性キーはオブジェクトに明示的に適用されなかったファセットに返すことができます。これは属性リファレンスがオブジェクトに適用されていないファセットをターゲットにする場合に発生します。

たとえば、ユーザーファセットと EnterpriseUser ファセットがあるとします。この EnterpriseUser.FirstName 属性は、User.FirstName を参照します。ユーザーおよび EnterpriseUser ファセットの両方をオブジェクトに適用して、User.FirstName を Robert に設定し、EnterpriseUser.FirstName を Bob に設定します。ListObjectAttributes を呼び出すと、両方の FirstName 属性に 1 つのストレージエイリアスしかないため、「User.FirstName = Bob」のみが表示されます。

### 属性リファレンスを含むインデックスの使用
<a name="schemas_usingindexeswithattributeref"></a>

属性リファレンスではなく、属性定義を含むインデックスのみを作成できます。インデックスのリストは属性リファレンスの属性キーを返しません。ただし、インデックス化されたオブジェクトの既存のリファレンスが対象としている任意の属性定義には属性キーを返します。つまり、インデックスレイヤーで、属性リファレンスは、実行時の正しい属性定義識別子に解決される、属性の代替の識別子としてのみ扱われます。

たとえば、ファセットユーザー属性 FirstName のインデックスがあるとしましょう。EnterpriseUser ファセットのみが適用されたオブジェクトをアタッチします。次に、オブジェクトの EnterpriseUser.FirstName 属性の値を Bob に設定します。最後に、ListIndex アクションを呼び出します。結果には、「User.FirstName=Bob」のみが含まれます。

### 属性リファレンスの必須動作
<a name="schemas_requiredbehaviorattributeref"></a>

属性リファレンスには、そのターゲット属性定義とは異なる必須動作があります。これにより、基本定義をオプションにし、同じ定義への参照を必須にすることができます。オブジェクトに基本定義と同じ基本定義に 1 つ以上の参照がある場合は、基本定義とすべての参照は関連するすべての属性に存在する最強の必須動作に準拠する必要があります。
+ 属性定義と同様に、オブジェクトを作成、またはファセットを既存のオブジェクトにファセットを追加する際は、任意の必須属性定義の値を指定する必要があります。
+ 利便性を高めるため、オブジェクトの複数の属性が、同じストレージの場所を参照している場合は、そのストレージの場所の属性のいずれかの値を指定します。
+ 同様に、同じストレージの場所に複数の値を指定する場合は、値は同じである必要があります。