XDM欄位類型限制

在Experience Data Model(XDM)結構中,欄位的類型會限制欄位可包含的資料類型。 本檔案概略介紹每個核心欄位類型,包括可對應的其他序列化格式,以及如何在API中定義您自己的欄位類型,以強制執行不同的限制。

快速入門

使用本指南之前,請先檢閱架構組合基本介紹,以了解XDM架構、類別和架構欄位群組的簡介。

如果您打算在API中定義自己的欄位類型,強烈建議您從Schema Registry開發人員指南開始,了解如何建立欄位群組和資料類型,將您的自訂欄位納入。 如果您使用Experience PlatformUI來建立結構,請參閱UI🔗中定義欄位的指南,了解如何對您在自訂欄位群組和資料類型中定義的欄位實施限制。

基礎結構與範例

XDM是以JSON結構描述為基礎而建置,因此XDM欄位在定義其類型時會繼承類似的語法。 了解JSON結構描述中不同欄位類型的呈現方式,有助於指出每種類型的基本限制。

注意

如需Platform API中JSON結構描述和其他基礎技術的詳細資訊,請參閱 API基礎指南

下表概述每個XDM類型在JSON結構描述中的表示方式,以及符合類型的範例值:

XDM類型 JSON結構 範例
字串
{"type":"string"}
"Platinum"
Double
{"type":"number"}
12925.49
{
  "type":"integer",
  "maximum":9007199254740991,
  「最小」:-9007199254740991
}
1478108935
整數
{
  "type":"integer",
  "maximum":2147483648,
  「最小」:-2147483648
}
24906290
簡稱
{
  "type":"integer",
  "maximum":32768,
  「最小」:-32768
}
15781
位元組
{
  "type":"integer",
  "maximum":128,
  「最小」:-128
}
90
日期*
{
  "type":"string",
  "format":"date"
}
"2019-05-15"
DateTime*
{
  "type":"string",
  "format":"date-time"
}
"2019-05-15T20:20:39+00:00"
布林值
{"type":"string"}
true

*所有日期格式化字串必須符合ISO 8601標準(RFC 3339,第5.6節)。

將XDM類型對應至其他格式

以下各節說明各種XDM類型如何對應至其他常見序列化格式:

重要

在下表所列的標準XDM類型中,也包含Map類型。 當資料以對應至特定值的索引鍵來表示,或當索引鍵無法合理納入靜態架構且必須視為資料值時,標準架構中會使用地圖。

地圖類型欄位保留供業界和廠商結構使用,因此無法用於您定義的自訂資源。 如果現有資料目前是以下列任何格式儲存,下表中包含的對應類型僅能協助您判斷如何將現有資料對應至XDM。

Parquet、Spark SQL和Java

XDM類型 鑲木 Spark SQL Java
字串 類型:BYTE_ARRAY
注釋:UTF8
StringType java.lang.String
雙倍 類型:DOUBLE LongType java.lang.Double
類型:INT64 LongType java.lang.Long
整數 類型:INT32
注釋:INT_32
IntegerType java.lang.Integer
簡短 類型:INT32
注釋:INT_16
ShortType java.lang.Short
位元組 類型:INT32
注釋:INT_8
ByteType java.lang.Short
Date 類型:INT32
注釋:DATE
DateType java.util.Date
DateTime 類型:INT64
注釋:TIMESTAMP_MILLIS
TimestampType java.util.Date
布林值 類型:BOOLEAN BooleanType java.lang.Boolean
地圖 MAP — 注釋組

(<key-type> 必須 STRING)
MapType

(keyType 必須 StringType)
java.util.Map

Scala、.NET和CosmosDB

XDM類型 斯卡拉 .NET CosmosDB
字串 String System.String String
雙倍 Double System.Double Number
Long System.Int64 Number
整數 Int System.Int32 Number
簡短 Short System.Int16 Number
位元組 Byte System.SByte Number
日期 java.util.Date System.DateTime String
DateTime java.util.Date System.DateTime String
布林值 Boolean System.Boolean Boolean
地圖 Map (不適用) object

MongoDB、Aerospike和Protobuf 2

XDM類型 MongoDB 塞普克 Protobuf 2
字串 string String string
雙倍 double Double double
long Integer int64
整數 int Integer int32
簡短 int Integer int32
位元組 int Integer int32
日期 date Integer
(Unix毫秒)
int64
(Unix毫秒)
DateTime timestamp Integer
(Unix毫秒)
int64
(Unix毫秒)
布林值 bool Integer
(0/1二進位)
bool
地圖 object map map<key_type, value_type>

在API中定義XDM欄位類型

所有XDM欄位都是使用套用至其欄位類型的標準JSON結構限制來定義,而欄位名稱的其他限制則由Experience Platform強制執行。 Schema Registry API可讓您透過使用格式和選用限制來定義其他欄位類型。 XDM欄位類型由欄位層級屬性meta:xdmType公開。

注意

meta:xdmType 是系統產生的值,因此使用API時,您不需要將此屬性新增至欄位的JSON。最佳作法是使用JSON結構類型(例如stringinteger)搭配下表所定義的適當最小/最大限制。

下表概述了定義不同欄位類型(包括具有可選屬性的類型)的適當格式。 有關可選屬性和類型特定關鍵字的詳細資訊,請參閱JSON結構檔案

若要開始,請尋找所需的欄位類型,並使用所提供的范常式式碼來建立建立欄位群組建立資料類型的API請求。

XDM類型 可選屬性 範例
字串
  • pattern
  • minLength
  • maxLength
"sampleField":{
    "type":"string",
    "pattern":"^[A-Z]{2}$",
    "maxLength":2
}
URI
"sampleField":{
  "type":"string",
  "format":"uri"
}
枚舉
  • default
  • meta:enum
約束的列舉值提供在enum陣列下,而每個值的可選客戶對應標籤可提供在meta:enum下:
"sampleField":{
  "type":"string",
  "enum":[
      "value1",
      "value2",
      "value3"
  ],
  "meta:enum":{
      "value1":"值1",
      "value2":"值2",
      "value3":"值3"
  },
  "default":"value1"
}
編號
"sampleField":{
  "type":"number"
}
"sampleField":{
  "type":"integer",
  「最小」:-9007199254740992,
  "maximum":9007199254740992
}
整數
"sampleField":{
  "type":"integer",
  「最小」:-2147483648,
  "maximum":2147483648
}
簡稱
"sampleField":{
  "type":"integer",
  「最小」:-32768,
  "maximum":32768
}
位元組
"sampleField":{
  "type":"integer",
  「最小」:-128,
  "maximum":128
  }
布林值
  • default
"sampleField":{
  "type":"boolean",
  "default":false
}
日期
"sampleField":{
  "type":"string",
  "format":"date",
  "examples":["2004-10-23"]
}
DateTime
"sampleField":{
  "type":"string",
  "format":"date-time",
  "examples":["2004-10-23T12:00:00-06:00"]
}
陣列 基本標量類型的陣列(如字串):
"sampleField":{
  "type":"array",
  "items":{
    "type":"string"
  }
}
由另一個架構定義的對象陣列:
"sampleField":{
  "type":"array",
  "items":{
    "$ref":"https://ns.adobe.com/xdm/data/paymentitem"
  }
}
對象 properties下定義的每個子欄位的type屬性可使用任何標量類型來定義:
"sampleField":{
  "type":"object",
  "properties":{
    "field1":{
      "type":"string"
    },
    "field2":{
      "type":"number"
    }
  }
}
可通過引用資料類型的$id來定義對象類型欄位:
"sampleField":{
  "type":"object",
  "$ref":"https://ns.adobe.com/xdm/common/phoneinteraction"
}
地圖 映射不得定義任何屬性。 它必須定義單個additionalProperties架構,以說明映射中包含的值類型(每個映射只能包含單一資料類型)。 值可以是任何有效的XDM type屬性,或使用$ref屬性對其他架構的引用。

具有字串類型值的映射欄位:
"sampleField":{
  "type":"object",
  "additionalProperties":{
    "type":"string"
  }
}
值的字串陣列對應欄位:
"sampleField":{
  "type":"object",
  "additionalProperties":{
    "type":"array",
    "items":{
      "type":"string"
    }
  }
}
參考其他資料類型的對應欄位:
"sampleField":{
  "type":"object",
  "additionalProperties":{
    "$ref":"https://ns.adobe.com/xdm/data/paymentitem"
  }
}

本頁內容