---
title: "参照データモデルの概要"
slug: "reference-data-model-overview"
abstract: "参照データサービスへのデータの読み書きに使用されるモデルの概要。"
---
# 参照データモデルの概要

このトピックでは、リファレンスデータサービスへのデータの読み書き時に用いられるモデルについて説明します。完全なコードサンプルについては [リファレンスデータクライアントAPI](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/reference-data-client-api.html "Reference Data Client API")を参照してください。

## 種類

定義タイプは「Sitecore XP自動化計画」「Sitecore XP目標」「空港コード」などの一意の文字列nameで識別されます。定義タイプはカスタムクラスではなく文字列です。

以下の例では、「Airport Code」という定義型を取得しています。定義型が存在しない場合は、.EnsureDefinitionTypeAsync() メソッドがそれを作成します。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Code");
## あだ名

参照データサービス内の定義は、**モニカー**と呼ばれる文字列識別子で識別されます。モニカーは特定の定義タイプ内で一意であり、2つの異なる定義タイプに対して同じモニカーを使用することが可能です。

以下の例は、「空港コード」型の「LHR」という名称で定義を作成する方法を示しています。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);
## 定義データ

参照データの定義は2つのDTOタイプで定義されます。1つのクラスは定義のためにすべての言語に共通する属性を定義し、もう1つは定義の文化固有の属性を定義します。これらのタイプはDefinition<TCommon,TCulture> クラスの型パラメータとして提供され、TCommonDataやTCultureDataはstringのような単純な型や [カスタム型](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/create-custom-reference-data-types.html "Create custom reference data types")でもあります。

以下の例では、新しいDefinition<string,string> インスタンスが定義キーでインスタンス化され、文化固有のエントリが追加されます。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);

var definition = new Sitecore.Xdb.ReferenceData.Model.Definition<string, string>(definitionKey);

definition.CultureDatanew CultureInfo("en") = "London Heathrow Airport";

### 文化特異的データおよび共通データ

リファレンスデータサービスは、文化固有のデータと共通のデータをサポートします。文化固有のデータには名前や説明が含まれ、共通データは文化間で同じもの(例えば値など)を含みます。以下の例では、共通データが入力され、文化固有のエントリ( **en**と**dk**)が2つ追加されています。

var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

DefinitionTypeKey definitionType = await client.EnsureDefinitionTypeAsync("Airport Codes");

var definitionKey = new Sitecore.Xdb.ReferenceData.Model.DefinitionKey("LHR", definitionType, 1);

var definition = new Sitecore.Xdb.ReferenceData.Model.Definition<string, string>(definitionKey)
{
 IsActive = true, // Denotes that this version is active (version 1)
 CommonData = "Common data about this airport code",
 CultureData = {
 { new CultureInfo("en"), "London Heathrow Airport" },
 { new CultureInfo("dk"), "Danish London Heathrow Airport" }
 }
};

### 培養不変データ

場合によっては、表示すべきデータがあるものの、そのデータの文化が指定されていないこともあります。特に外部のデータ提供者からのデータの場合です。例えば、GeoIPのデータプロバイダーはIPが存在する都市名を提供します。都市名は英語で表記されます。ただし、名前が英語であることを明示的に指定していないため、この事実は仮定できません。そのような場合、データを **文化不変**として保存すべきです。

> !注特定の培養が利用できない場合、培養不変データはバックアップ手段として利用できます。

#### 文化不変データを保存する

以下の例は、文化不変データの保存方法を2通り示しています。

definition.CultureDataCultureInfo.InvariantCulture = "Swedenland";
definition.CultureDatanew CultureInfo("") = "Swedenland";

#### 培養不変データの取得

定義を取得する際に培養を指定しなければ、利用可能なすべての培養が返されます。**培養不変**データのみを見たい場合は、DefinitionCriteriaのCultureとしてCultureInfo.Invariantを通してください。

DefinitionCriteria criteria = new DefinitionCriteria("moniker", definitionTypeKey)
{
 Culture = CultureInfo.InvariantCulture
};

定義が返されると、培養不変データを次のように得ることができます。

var data = definition.CultureDataCultureInfo.InvariantCulture;

## バージョン

定義は番号によってバージョン割り当てられます。個別のバージョンはアクティブまたは非アクティブにすることができます。定義を削除する際は、すべてのバージョンを個別に削除しなければなりません。定義バージョンは非アクティブとしてマークされている場合のみ削除可能です。

> !注この操作は、開発者が誤って定義を削除しないように意図的に手間をかけています。