
# 数据分类管理实践
#### 概述
数据分类管理是工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）为了方便用户将同维度的数据实例进行分门别类管理、实例数据统一归集的能力。数据分类管理指的是数据实例之间存在的"多对多"关系数据结构，主要包含"数据分类"和"数据分类对象"两个部分。
- 数据分类："父模型"为"AbstractCategory"的数据实体。"AbstractCategory"是xDM-F用于将用户自定义数据实体设置为数据分类的抽象概念。一个"父模型"为"AbstractCategory"的数据实体表示一种数据分类。
- 数据分类对象：具有"数据分类管理"功能的数据实体，即用户在应用设计态创建数据实体时，在"功能列表"中勾选了"数据分类管理"功能。具有"数据分类管理"功能的数据实体对外提供如下数据分类相关接口。
  表1数据分类管理相关接口 
  | 接口名称               | 描述                       |
  |:---|:---|
  | addToCategory      | 将数据分类对象数据实例添加至数据分类数据实例中。 |
  | removeFromCategory | 将数据分类数据实例从数据分类对象数据实例中移除。 |
     
  更多数据分类管理的接口信息请参见[全量数据服务](https://support.huaweicloud.com/usermanual-idme/idme_clientog_0154.html)。
  
 
#### 使用说明
- 如果数据实体的父模型具有数据分类管理，该数据实体自动继承数据分类管理，且不可去除勾选。如果后续父模型删除了数据分类管理功能，该数据实体将不再继承父模型的数据分类管理功能，但可以自己重新勾选数据分类管理功能。
- 如果数据实体为Master-Branch-Version（M-V）模型数据实体（即"父模型"选择为"VersionObject"），则只能在Version模型上选择数据分类管理功能，Master模型和Branch模型不支持选择数据分类管理功能。
 
#### 示例场景
汽车是道路交通管理最重要的一个对象之一，对汽车进行准确分类才能对汽车的车辆属性进行准确地定位，才能对汽车的特点进行合理地分析，才能对汽车进行有效、到位地管理。例如核定车型、车辆等级、车辆类型、车辆用途等。按照不同的分类方法，汽车大致分为如下几种类型。
图1汽车分类   
![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001976222421.png "点击放大")
由此可得知，同一辆汽车按照不同的分类方法，可以分配到不同的分类中。同时，一个分类下包含多辆汽车。
#### 步骤1：创建数据分类
1. [登录应用设计态](https://support.huaweicloud.com/consog-idme/idme_consog_0013.html)。
2. 在左侧导航栏中，选择"数据模型管理 \> 数据实体"，进入数据实体页面。
3. 按照[图1]所示，依次为汽车创建"数据分类"的数据实体。
   
   图2创建数据分类   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001947944962.png "点击放大")
   主要配置说明如下，其他配置请保持默认。
   表2创建数据分类配置说明 
   | 英文名称             | 中文名称  | 中文描述                             | 父模型                   | 其他配置项 |
   |:---|:---|:---|:---|:---|
   | Drive_mode       | 驱动方式  | 包含全轮驱动汽车、前轮驱动汽车和后轮驱动汽车           | 选择"AbstractCategory"。 | 保持默认。 |
   | Automobile_use   | 用途    | 包含乘用车、客车、货车和牵引汽车。                | 选择"AbstractCategory"。 | 保持默认。 |
   | Power_plant      | 动力装置  | 包含内燃机汽车、电动汽车和燃气轮机汽车。             | 选择"AbstractCategory"。 | 保持默认。 |
   | Class_of_vehicle | 等级    | 包含轿车、微型轿车、普通级轿车、中级轿车、中高级轿车和高级轿车。 | 选择"AbstractCategory"。 | 保持默认。 |
   | Vehicle_model    | 车型    | 包含轿车、MPV和SUV。                    | 选择"AbstractCategory"。 | 保持默认。 |
   | Engine_location  | 发动机位置 | 包含发动机前置汽车、发动机中置汽车和发动机后置汽车。       | 选择"AbstractCategory"。 | 保持默认。 |
      
   
   
 
#### 步骤2：创建数据分类对象
1. 在左侧导航栏中，选择"数据模型管理 \> 数据实体"，进入数据实体页面。
2. 单击"创建"，创建一个"汽车"数据实体。 
   图3创建数据分类对象   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000002497714636.png "点击放大")
   主要配置说明如下，其他配置请保持默认。
   表3创建数据分类对象配置说明 
   | 类型   | 配置项  | 配置说明                     |
   |:---|:---|:---|
   | 基本信息 | 英文名称 | Automobile。              |
   | 基本信息 | 中文名称 | 汽车。                      |
   | 基本信息 | 中文描述 | 某企业制造的汽车。                |
   | 基本信息 | 父模型  | 保持默认，此处以"BasicObject"为例。 |
   | 功能列表 | 可选功能 | 添加"数据分类管理"功能。            |
      
   为篇幅起见，这里不展示汽车的具体属性内容。如需添加数据实体属性请参见[管理数据实体属性](https://support.huaweicloud.com/usermanual-idme/idme_usermanual_0008.html)。
   
   
 
#### 步骤3：管理数据分类对象
1. 勾选刚创建的数据实体，依次完成"发布数据实体 \> 发布应用 \> 部署应用"的操作，具体操作请参见[发布数据实体](https://support.huaweicloud.com/usermanual-idme/idme_usermanual_0010.html)、[发布应用](https://support.huaweicloud.com/usermanual-idme/idme_usermanual_0085.html)和[部署应用](https://support.huaweicloud.com/consog-idme/idme_consog_0022.html)。
2. 待应用完成部署后，[登录应用运行态](https://support.huaweicloud.com/consog-idme/idme_consog_0023.html)。
3. 在"数据模型管理 \> 数据实体"中，找到并编辑刚创建的数据实体，将"实例界面显示"设置为"是"。 
   即：分别将"Drive_mode"、"Automobile_use"、"Power_plant"、"Class_of_vehicle"、"Vehicle_model"、"Engine_location"和"Automobile"数据实体的"实例界面显示"参数设置为"是"。
   
   
4. 在"数据模型管理 \> 数据实例"中，按照[图1]所示，依次为[步骤3]创建的数据实体创建如下对应的数据实例。
   
   图4"Drive_mode"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001949019220.png "点击放大")
   图5"Automobile_use"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001978819969.png "点击放大")
   图6"Power_plant"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001949020852.png "点击放大")
   图7"Class_of_vehicle"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001949021296.png "点击放大")
   图8"Vehicle_model"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001949021968.png "点击放大")
   图9"Engine_location"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001978662309.png "点击放大")
   图10"Automobile"数据实例   
   ![](https://support.huaweicloud.com/bestpractice-idme/figure/zh-cn_image_0000001949044924.png "点击放大")
   表4数据实例信息 
   | 数据实体             | 数据实例的唯一编码（ID） | 数据实例的中文名称（Name） |
   |:---|:---|:---|
   | Drive_mode       | 10001         | 全轮驱动汽车          |
   | Drive_mode       | 10002         | 后轮驱动汽车          |
   | Drive_mode       | 10003         | 前轮驱动汽车          |
   | Automobile_use   | 20001         | 乘用车             |
   | Automobile_use   | 20002         | 客车              |
   | Automobile_use   | 20003         | 货车              |
   | Automobile_use   | 20004         | 牵引汽车            |
   | Power_plant      | 30001         | 内燃机汽车           |
   | Power_plant      | 30002         | 电动汽车            |
   | Power_plant      | 30003         | 燃气轮机汽车          |
   | Class_of_vehicle | 40001         | 轿车              |
   | Class_of_vehicle | 40002         | 微型轿车            |
   | Class_of_vehicle | 40003         | 普通级轿车           |
   | Class_of_vehicle | 40004         | 中级轿车            |
   | Class_of_vehicle | 40005         | 中高级轿车           |
   | Class_of_vehicle | 40006         | 高级轿车            |
   | Vehicle_model    | 50001         | 轿车              |
   | Vehicle_model    | 50002         | MPV             |
   | Vehicle_model    | 50003         | SUV             |
   | Engine_location  | 60001         | 发动机前置汽车         |
   | Engine_location  | 60002         | 发动机中置汽车         |
   | Engine_location  | 60003         | 发动机后置汽车         |
   | Automobile       | 88880         | -               |
   | Automobile       | 88881         | -               |
      
   
   
5. 使用[curl](https://curl.haxx.se/)、[Postman](https://www.getpostman.com/)或直接编写代码等方式，调用addToCategory接口，将数据分类对象的数据实例添加至数据分类中。
   
   - URI格式
     ```
     POST http://{Endpoint}/rdm_{appID}_app/services/dynamic/api/{modelNameEn}/addToCategory
     ```
     
   
   - URI参数说明
     表5URI参数说明 
     | 参数          | 是否必填 | 参数类型   | 描述                                                                                   |
     |:---|:---|:---|:---|
     | Endpoint    | 是    | String | 承载REST服务端点的服务器域名或IP地址。 示例：example.com |
     | appID       | 是    | String | 应用ID。 示例：testapp                        |
     | modelNameEn | 是    | String | 数据分类对象的英文名称。 示例：Automobile              |
        
     
   
   - 请求参数说明
     表6请求Header参数 
     | 参数           | 是否必选 | 参数类型   | 描述                                                                      |
     |:---|:---|:---|:---|
     | X-Auth-Token | 是    | String | 用户的token。 示例：ABCDEFG.... |
     | Content-Type | 是    | String | 编码格式。 示例：application/json |
        
     表7请求Body参数 
     | 参数                        | 是否必选 | 参数类型   | 描述                                                                        |
     |:---|:---|:---|:---|
     | params                    | 否    | Object | 参数对象。                                                                     |
     | params.category           | 否    | Object | 数据分类的实例对象。                                                                |
     | params.category.id        | 是    | Long   | 数据分类的实例ID。 示例：10001         |
     | params.category.clazz     | 否    | String | 数据分类的英文名称。 示例：Drive_mode   |
     | params.categoryable       | 否    | Object | 数据分类对象的实例对象。                                                              |
     | params.categoryable.id    | 是    | Long   | 数据分类对象的实例ID。 示例：88880      |
     | params.categoryable.clazz | 否    | String | 数据分类对象的英文名称。 示例：Automobile |
        
     
   
   - 响应参数说明
     表8响应Body参数 
     | 参数     | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                               |
     |:---|:---|:---|
     | result | String | 调用是否成功。 - SUCCESS：成功  - FAIL：失败   |
     | data   | List   | 调用的返回结果。                                                                                                                                                                                                                                                                                                                         |
     | errors | List   | 异常信息列表。                                                                                                                                                                                                                                                                                                                          |
        
     
   
   - 请求示例
     将"Automobile"数据分类对象的"88880"数据实例添加到"Drive_mode"数据分类的"10001"数据实例中，其请求示例如下：
     ```
     POST https://example.com/rdm_testapp_app/services/dynamic/api/Automobile/addToCategory
     X-Auth-Token: ABCDEFG....
     Content-Type: application/json
     {
       "params": {
         "category": {
           "id": 10001,
           "clazz": "Drive_mode"
         },
         "categoryable": {
           "id": 88880,
           "clazz": "Automobile"
         }
       }
     }
     ```
     
   
   - 响应示例
     ```
     {
       "result": "SUCCESS",
       "data": [
         1
       ],
       "errors": []
     }
     ```
     
   
   
   
   
6. 使用[curl](https://curl.haxx.se/)、[Postman](https://www.getpostman.com/)或直接编写代码等方式，调用removeFromCategory接口，将已添加至数据分类的数据实例从数据分类中移除。
   
   - URI格式
     ```
     POST http://{Endpoint}/rdm_{appID}_app/services/dynamic/api/{modelNameEn}/removeFromCategory
     ```
     
   
   - URI参数说明
     表9URI参数说明 
     | 参数          | 是否必填 | 参数类型   | 描述                                                                                                                |
     |:---|:---|:---|:---|
     | Endpoint    | 是    | String | 承载REST服务端点的服务器域名或IP地址。 示例：example.com |
     | appID       | 是    | String | 应用ID。 示例：testapp                        |
     | modelNameEn | 是    | String | 数据分类对象的英文名称。 示例：Automobile              |
        
     
   
   - 请求参数说明
     表10请求Header参数 
     | 参数           | 是否必选 | 参数类型   | 描述                                                                                                   |
     |:---|:---|:---|:---|
     | X-Auth-Token | 是    | String | 用户的token。 示例：ABCDEFG.... |
     | Content-Type | 是    | String | 编码格式。 示例：application/json |
        
     表11请求Body参数 
     | 参数                        | 是否必选 | 参数类型   | 描述                                                                                                     |
     |:---|:---|:---|:---|
     | params                    | 否    | Object | 参数对象。                                                                                                  |
     | params.category           | 否    | Object | 数据分类的实例对象。                                                                                             |
     | params.category.id        | 是    | Long   | 数据分类的实例ID。 示例：10001         |
     | params.category.clazz     | 否    | String | 数据分类的英文名称。 示例：Drive_mode   |
     | params.categoryable       | 否    | Object | 数据分类对象的实例对象。                                                                                           |
     | params.categoryable.id    | 是    | Long   | 数据分类对象的实例ID。 示例：88880      |
     | params.categoryable.clazz | 否    | String | 数据分类对象的英文名称。 示例：Automobile |
        
     
   
   - 响应参数说明
     表12响应Body参数 
     | 参数     | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                             |
     |:---|:---|:---|
     | result | String | 调用是否成功。 - SUCCESS：成功  - FAIL：失败   |
     | data   | List   | 调用的返回结果。                                                                                                                                                                                                                                                                                                                       |
     | errors | List   | 异常信息列表。                                                                                                                                                                                                                                                                                                                        |
        
     
   
   - 请求示例
     将"Automobile"数据分类对象的"88880"数据实例从"Drive_mode"数据分类的"10001"数据实例中移除，其请求示例如下：
     ```
     POST https://example.com/rdm_testapp_app/services/dynamic/api/Automobile/removeFromCategory
     X-Auth-Token: ABCDEFG....
     Content-Type: application/json
     {
       "params": {
         "category": {
           "id": 10001,
           "clazz": "Drive_mode"
         },
         "categoryable": {
           "id": 88880,
           "clazz": "Automobile"
         }
       }
     }
     ```
     
   
   - 响应示例
     ```
     {
       "result": "SUCCESS",
       "data": [
         1
       ],
       "errors": []
     }
     ```
     
   
   
   
   
 
#### 相关操作
此外，xDM-F在XDM应用中预置DataCategoryLink关系实体，您可以通过调用该实体的相关接口，用于查询数据分类详细情况。关于DataCategoryLink的接口详细信息请参见[全量数据服务](https://support.huaweicloud.com/usermanual-idme/idme_clientog_0154.html)。
