XDM字段类型约束

在体验数据模型(XDM)架构中,字段的类型将限制字段可以包含的数据类型。 本文档概述了每个核心字段类型,包括可映射到的其他序列化格式,以及如何在API中定义您自己的字段类型以强制实施不同的限制。

入门指南

在使用本指南之前,请查阅架构组合基础知识 ,以了解XDM架构、类和架构字段组的简介。

如果您计划在API中定义自己的字段类型,强烈建议您从架构注册开发人员指南开始,以了解如何创建字段组和数据类型,以在中包含您的自定义字段。 如果您使用Experience PlatformUI创建架构,请参阅在UI中定义字段的指南,以了解如何对自定义字段组和数据类型中定义的字段实施约束。

基本结构和示例

XDM是基于JSON架构构建的,因此,XDM字段在定义其类型时会继承类似的语法。 了解不同字段类型在JSON模式中的表示方式有助于指示每种类型的基本约束。

注意

有关Platform API中JSON模式和其他基础技术的更多信息,请参阅 API基础知识指南

下表概述了每个XDM类型在JSON模式中的表示方式,以及符合该类型的示例值:

XDM类型 JSON架构 示例
字符串
{"type":"string"}
"Platinum"
Double
{"type":"number"}
12925.49
Long
{
  "type":"integer",
  "maximum":9007199254740991,
  "minimum":-9007199254740991
}
1478108935
整数
{
  "type":"integer",
  "maximum":2147483648,
  "minimum":-2147483648
}
24906290
Short
{
  "type":"integer",
  "maximum":32768,
  "minimum":-32768
}
15781
Byte
{
  "type":"integer",
  "maximum":128,
  "minimum":-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
日期 类型: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、塞式和Protobuf 2

XDM类型 MongoDB 气塞 原虫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 Schema约束来定义,这些约束适用于其字段类型,并对Experience Platform强制实施的字段名称施加其他约束。 架构注册表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"
}
Enum
  • default
  • meta:enum
约束枚举值在enum数组下提供,而每个值的可选面向客户的标签可在meta:enum下提供:
"sampleField":{
  "type":"string",
  "enum":[
      "value1",
      "value2",
      "value3"
  ],
  "meta:enum":{
      "value1":"值1",
      "value2":"值2",
      "value3":"值3"
  },
  "default":"value1"
}
Number
"sampleField":{
  "type":"number"
}
Long
"sampleField":{
  "type":"integer",
  "minimum":-9007199254740992,
  "maximum":9007199254740992
}
整数
"sampleField":{
  "type":"integer",
  "minimum":-2147483648,
  "maximum":2147483648
}
Short
"sampleField":{
  "type":"integer",
  "minimum":-32768,
  "maximum":32768
}
Byte
"sampleField":{
  "type":"integer",
  "minimum":-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"]
}
Array 基本标量类型(例如字符串)的数组:
"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"
  }
}

在此页面上