---
title: "xConnectモデル"
slug: "the-xconnect-model"
abstract: "xConnectモデルの概要。"
---
# xConnectモデル

xConnectモデルは、xConnectによって収集されるデータの構造とタイプの表現です。xConnectモデルは以下を定義します:

-   接触および相互作用の側面、例えばPersonalInformationIpInfo
-   イベントタイプ、例えばGoalOutcome
-   ファセットやイベントで使用される System.String やカスタムクラスなど、すべてのCLRタイプ

xConnectモデルはより小さな部分モデルで構成されています。xConnectサービスはモデル全体を認識しています。クライアントは、CRMシステムのようなものを使っている部分モデルだけを認識すればよくなります。xConnectにまだデプロイされていないモデルを使うことはできません。

## xConnectモデルはコードで定義されています

xConnectモデルはコードで定義され、複数のDLLに分散させることができます。例えば、SitecoreのデフォルトのファセットやイベントはSitecore.XConnect.Collection.Model DLLに保存されますが、エクスペリエンス最適化機能で必要なファセットはSitecore.ContentTesting.Model.xConnect.Models DLLに保存されます。

モデル作成についての詳細は、以下をご覧ください:

-   [モデルの作成](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/create-a-custom-model.html "Create a custom model")
-   [イベントの創設](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/events.html "Events")
-   [ファセットの作成](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/create-a-custom-facet.html "Create a custom facet")

## xConnectはすべての部分モデルのJSONバージョンをホストしています

xConnect内の \\App\_data\\ModelsフォルダにはすべてのモデルのJSON表現が必要です。新しいモデルが作成された場合、使用前にxConnectにデプロイしなければなりません。モデルのxConnectバージョンが権威あるバージョンと見なされます。xConnectクライアントAPIが初期化されると、すべてのクライアント側モデルはxConnectバージョンと比較して検証されます。クライアントモデルの以下のプロパティはxConnectモデルと一致しなければなりません:

-   モデル名
-   モデルバージョン
-   側面、出来事、タイプ

## クライアントは自分たちが必要なモデルを参照します

クライアントは使用するモデルDLLのコピーを持っているはずです。以下の例では、CRMサーバーはDocumentation.Modelモデルのみを認識しています。Content DeliveryサーバーはDocumentation.ModelとデフォルトのSitecoreモデルを認識しています。

![simple-schema1.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/simple-schema1.png)

SitecoreのコアロールであるContent ManagementやContent Deliveryは、設定済みのモデルリストから実行時モデルを構築します。xConnect Client APIを非Sitecoreコンテキストで使用する場合は、クライアントに必要なモデルをインスタンス化する必要があります。詳細については以下をご覧ください:

-   [Sitecoreコンテキスト内でクライアントのインスタンスを取得する方法](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/instantiate-client-in-a-sitecore-context.html "Instantiate client in a Sitecore context")
-   [Sitecore以外のコンテキストでクライアントのインスタンスを取得する方法](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/instantiate-client-in-a-non-sitecore-context.html "Instantiate client in a non-Sitecore context")

## 種類制限

以下の制限は、ファセットやイベントのプロパティタイプを含むモデルで使用されるすべてのタイプに適用されます。

-   .RegisterType<T>で登録できるのはオブジェクト型と数型のみで、List<string>
-   すべての型はパラメータレス構造体を持つ必要があり、その構造体は公開である必要はありません
-   コレクションにはコンクリート型 List<T> を使います
-   辞書には具体的なタイプ Dictionary<K,V> を使います
-   型は参照されるスキーマ間で一意でなければなりません。通常は、手動で型を登録しない限り問題ありません。 .RegisterType<T>
-   プロパティはnullable(nullable)になることがあります。例えば public?intLoyaltyNumber。

モデルビルダーは常にFacetやEventなどのコア型を登録します。これにはGoalやOutcomeなど、すべての組み込み型Eventが含まれます。

> !注ファセットやカスタムイベントのList<T>プロパティをnullに設定すると、そのリストプロパティは再度読み込まれたときにnullではなく空になります。oDataはこの文脈でnull値をサポートしませんが、コレクションデータベースでは値がnullです。しかし、Contact上のInteractionsプロパティは、RelatedInteractionExpandOptionsが指定されていない場合nullを返します。oDataコンテキストでは、連絡先とインタラクションは関連したエンティティです。

## 個人識別情報(PII)

xConnectモデルには、個人識別情報(PII)を含む可能性のある標準フィールドが含まれています。以下は、少なくとも1つのフィールドがPIISensitiveとしてマークされているファセットのリストです:

PersonalInformation
	Birthdate { get; set; }
	FirstName { get; set; }
	MiddleName { get; set; }
	LastName { get; set; }
	Nickname { get; set; }

Avatar
	Picture { get; set; }

Address (Record from AddressList facet)
	AddressLine1 { get; set; }
	AddressLine2 { get; set; }
	AddressLine3 { get; set; }
	AddressLine4 { get; set; }
	GeoCoordinate { get; set; }

PhoneNumber (Record from PhoneNumberList facet)
	Extension { get; set; }
	Number { get; set; }
	AreaCode { get; set; }

EmailAddress (Record from EmailAddressList facet)
 SmtpAddress { get; set; }Birthdate { get; set; }
FirstName { get; set; }
MiddleName { get; set; }
LastName { get; set; }
Nickname { get; set; }

## 命名規則

以下の命名規則は、型名、プロパティ名、列挙、面キー、モデル名に適用されます。

-   小文字または大文字の英語で始まらなければなりません
-   最初の文字の後には、大小文字の英語の文字、数字、またはアンダースコアの組み合わせが自由に続くことができます

モデル名や名前空間は、ドットで区切られた複数の識別子を含むことができます。例えば、*My.Name\_Space0*や*My.Model\_Name1*などです。

## ファセットとイベントの独自性

ファセットとイベントはモデル内および参照モデル間で一意でなければなりません。ファセットの一意性は以下の組み合わせによって決まります。

-   ファセットタイプ
-   ファセットキー
-   ファセットエンティティ( Contact または Interaction)

コンタクトとインタラクションの両方で同じ型とキーを持つファセットを定義できます:

modelBuilder.DefineFacet<Contact, FacetType>("FacetKey");
modelBuilder.DefineFacet<Interaction, FacetType>("FacetKey");

イベントは型によって定義されます。2つのモデルが同じイベントタイプを共有している場合、イベント型が別の共有モデルで指定されていない限り、両モデルを一緒に使用することはできません。以下の例では、Documentation.Model.dllとTesting.Model.dllの両方が*RegisterEvent*という名前のイベントを定義しています:

![model-ref1.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/model-ref1.png)

Documentation.Model.dllとTesting.Model.dllを一緒に使用するためには、共有イベントタイプをDocumentation.Model.dllとTesting.Model.dll参照する別のモデルに移動する必要があります。

![model-ref-21.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/105/sitecore-experience-platform/images/model-ref-21.png)

## 参照モデル間でのモデル名の一意性

モデル名は、二次参照を含むすべての参照モデルで一意でなければなりません。例えば:

-   CRMというモデルです。モデルはCRMという名前の別のモデルを参照することはできません。モデル
-   CRMというモデルです。モデルはドキュメントを参照できません。モデルはさらにCRMという別のモデルを参照しています。モデル

モデル名が一意でない場合はDuplicateModelNameException例外が投げられます。以下の例はDuplicateModelNameExceptionを導きます:

var model1 = new XdbModel("Test", new XdbModelVersion(0, 1), new XdbNamedType0, new XdbFacetDefinition0, new XdbModel0);
var model2 = new XdbModel("Test", new XdbModelVersion(0, 1), new XdbNamedType0, new XdbFacetDefinition0, new XdbModel0);

var model3Builder = new XdbModelBuilder("Composite", new XdbModelVersion(0, 1));

model3Builder.ReferenceModel(model2);
model3Builder.BuildModel(); // This will work, since only one model named "Test"

model3Builder.ReferenceModel(model1);
model3Builder.BuildModel(); // This will fail, as there is already a model named "Test"