📖 docs(UIGF):引入 UIGF v2.3

This commit is contained in:
BTMuli
2023-04-07 19:56:37 +08:00
parent 7a8c0892ea
commit 92672a86c5
2 changed files with 291 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ Update: 2023-04-07
> 本文档 [`Front-matter`](https://github.com/BTMuli/Mucli#FrontMatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于`2023-03-05 14:41:55` > 本文档 [`Front-matter`](https://github.com/BTMuli/Mucli#FrontMatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于`2023-03-05 14:41:55`
> >
> 更新于 `2023-04-07 16:56:13` > 更新于 `2023-04-07 19:55:56`
![](https://img.shields.io/github/last-commit/BTMuli/Tauri.Genshin?style=for-the-badge) ![](https://img.shields.io/github/commits-since/BTMuli/Tauri.Genshin/latest?include_prereleases&style=for-the-badge) ![](https://img.shields.io/github/v/release/BTMuli/Tauri.Genshin?include_prereleases&style=for-the-badge) ![](https://img.shields.io/github/license/BTMuli/Tauri.Genshin?style=for-the-badge) ![](https://img.shields.io/github/last-commit/BTMuli/Tauri.Genshin?style=for-the-badge) ![](https://img.shields.io/github/commits-since/BTMuli/Tauri.Genshin/latest?include_prereleases&style=for-the-badge) ![](https://img.shields.io/github/v/release/BTMuli/Tauri.Genshin?include_prereleases&style=for-the-badge) ![](https://img.shields.io/github/license/BTMuli/Tauri.Genshin?style=for-the-badge)
@@ -52,6 +52,7 @@ Tauri 练手项目
+ Changelog: [CHANGELOG](CHANGELOG.md) + Changelog: [CHANGELOG](CHANGELOG.md)
+ 资源来源:[项目资源说明](docs/项目资源说明.md) + 资源来源:[项目资源说明](docs/项目资源说明.md)
+ UIAF[UIAF v1.1](docs/UIAF.md) + UIAF[UIAF v1.1](docs/UIAF.md)
+ UIGF[UIGF v2.3](docs/UIGF.md)
## 开发 ## 开发

288
docs/UIGF.md Normal file
View File

@@ -0,0 +1,288 @@
---
Author: 目棃
Date: 2023-04-07
Description: UIGF v2.3 Backup
Update: 2023-04-07
---
> 本文档 [`Front-matter`](https://github.com/BTMuli/Mucli#FrontMatter) 由 [MuCli](https://github.com/BTMuli/Mucli) 自动生成于`2023-04-07 19:51:40`
>
> 更新于 `2023-04-07 19:51:40`
> 本文档为 [`UIGF`](https://github.com/UIGF-org/UIGF-org.github.io/blob/main/docs/zh/standards/UIGF-pre-release.md) 的备份。
# 统一可交换祈愿记录标准 v2.3
> Uniformed Interchangeable GachaLog Format standard (UIGF) v2.3
## 更新记录
|版本|说明|兼容|
|-|-|-|
|`v2.0`| 首个正式版本 | v2.0 |
|`v2.1`| 简化了部分语言表述,与 v2.0在数据格式上完全一致 | v2.1 and lower |
|`v2.2`| 新增 `info.export_timestamp` 填充 UNIX 时间戳 | v2.2 and lower |
|`v2.3`| 扩充至非中文语境,使用 Json Schema 表述 | v2.3 and lower |
## Id
原神的祈愿记录物品内包含了一项较为特殊的字段: `id` ,该值在 1.3版本后加入
所以**先前查询出的物品**若无特殊兼容性修改则不会包含相应的 `id`
App 导出 UIGF 时
* 需要确保每个物品的 `id` 的有效性。
* 从最后一个自带有效 `id` 的物品开始,向前(相对于时间)依次递减 `id` 的值,每次递减的值应保持为 `1`
导入 UIGF 到 App 时
* App不应假设所有的 `gacha_item` 都有有效的 `id`
* App应具有处理 `id` 字段为 `null`或 `` 空字符串的能力
## GachaType
祈愿包含了会共享保底与概率的卡池,所以需要一个额外的字段来界定
我们在`UIGF`的所有格式中注入了`uigf_gacha_type`字段
在导出到`UIGF`格式时需要注意添加对应的`uigf_gacha_type`字段
### 映射关系
|`uigf_gacha_type`|`gacha_type`|
|-|-|
|`100`|`100`|
|`200`|`200`|
|`301`|`301` or `400`|
|`302`|`302`|
## Json 格式
> Uniformed Interchangeable GachaLog Format standard of Json (UIGF.J)
Json 格式 由于 与从官方接口获取到的格式一致
更便于各App的导入与导出我们也在此做出规范
该格式应仅用于各App间的数据互通
### 导出的格式
```json
{
"type": "object",
"title": "UIGF object",
"properties": {
"info": {
"type": "object",
"properties": {
"uid": {
"type": "string",
"title": "Uid",
"description": "Uid"
},
"lang": {
"type": "string",
"title": "Language",
"description": "语言 ISO 3166"
},
"uigf_version": {
"type": "string",
"title": "UIGF Version",
"description": "UIGF 版本号"
},
"export_timestamp": {
"type": "number",
"title": "Export Timestamp",
"description": "导出时间戳(秒)"
},
"export_time": {
"type": "string",
"description": "导出时间",
"format": "date-time",
"pattern": "yyyy-MM-dd HH:mm:ss",
"title": "Export Time"
},
"export_app": {
"type": "string",
"title": "Export App",
"description": "导出应用"
},
"export_app_version": {
"type": "string",
"title": "Export App Version",
"description": "导出应用版本"
}
},
"title": "Infomation",
"required": [
"uid",
"lang",
"uigf_version"
],
"description": "包含导出方定义的基本信息"
},
"list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gacha_type": {
"type": "string",
"description": "祈愿类型"
},
"item_id": {
"type": "string",
"title": "Item Id",
"description": "空字符串"
},
"count": {
"type": "string",
"title": "Count",
"description": "数量"
},
"time": {
"type": "string",
"title": "Time",
"description": "物品获取时间",
"pattern": "yyyy-MM-dd HH:mm:ss",
"format": "date-time"
},
"name": {
"type": "string",
"title": "Name",
"description": "名称"
},
"item_type": {
"type": "string",
"title": "Item Type",
"description": "物品类型"
},
"rank_type": {
"type": "string",
"title": "Item Quality",
"description": "物品星级"
},
"id": {
"type": "string",
"title": "Id",
"description": "内部数据库Id"
},
"uigf_gacha_type": {
"type": "string",
"title": "Query Type",
"description": "向接口查询时需要的 gacha_type"
}
},
"required": [
"gacha_type",
"name",
"id",
"uigf_gacha_type",
"time"
],
"title": "Gacha Item",
"description": "祈愿物品"
},
"title": "List",
"description": "物品列表"
}
},
"required": [
"info",
"list"
],
"description": "UIGF 根对象"
}
```
## Excel 工作簿 (Workbook Format)
> Uniformed Interchangeable GachaLog Format standard of Workbook (UIGF.W)
### 单元格的格式
* 在填充单元格内的数据时,应统一转换到 `String` 字符串类型后填入
### 表名及内容
|表名|内容|类型|是否必要|
|-|-|-|-|
|统计分析|统计分析内容等|任意|否|
|角色活动祈愿|`gacha_type` : `301 or 400` 的祈愿数据|祈愿表|否,但是应该导出|
|武器活动祈愿|`gacha_type` : `302` 的祈愿数据|祈愿表|否,但是应该导出|
|常驻祈愿|`gacha_type` : `200` 的祈愿数据|祈愿表|否,但是应该导出|
|新手祈愿|`gacha_type` : `100` 的祈愿数据|祈愿表|否,但是应该导出|
|原始数据|全部祈愿数据|数据表|**详见下方原始数据表结构说明**|
* 表的顺序可以是任意的
* 可以隐藏部分表,防止用户随意篡改数据
* Sheet 的名称应与游戏内祈愿记录页面显示的名称保持一致
> App间应依据 `原始数据表` 的内容,来进行数据互通
### 祈愿表结构
本节内容是为了规范兼容分析类App
* 表头对应的内容填充**顺序需要严格按照下方说明**排布
* **共享保底的卡池**按祈愿类型 (`gacha_type`) 区分
* 此类 `Sheet` 存在的目的,是为了便于用户观看与祈愿分析工具的分析
|表头|内容|是否必要|
|-|-|-|
|时间|`yyyy-MM-dd HH:mm:ss` 格式的 `time` 时间|是|
|名称|`name`物品名称|是|
|物品类型|`item_type`|是|
|星级|`rank_type`|是|
|祈愿类型|`gacha_type` 的转义名称|是,尽管部分工具不会分析此项|
|...|...|否|
> 如果你认为有必要的话,可以额外增加其他表头,但请确保表头的前几列为上表规范的内容
> 表内的数据通常按祈愿Id升序或降序排列分析App不应假设表内的顺序为特定的升序与降序
#### `gacha_type` 转义名称
|gacha_type|名称|
|-|-|
|100|新手祈愿|
|200|常驻祈愿|
|301|角色活动祈愿|
|400|角色活动祈愿-2|
|302|武器活动祈愿|
#### 示例
|时间|名称|类别|星级|祈愿类型|...|
|-|-|-|-|-|-|
|2021-02-17 18:45:09|以理服人|武器|3|角色活动祈愿-2|...|
|...|...|...|...|...|...|
### 原始数据表结构
导出时
* App 在导出时应尽可能询问用户是否应包含原始数据表
* 一旦在工作簿内包含了名为 `原始数据` 的表,即表示支持本格式
* 该表内的内容应严格按照本格式所述填充
* **表头的顺序需严格按照下表设置**。
* 现有的字段采用**字典顺序**递增排序,后续新增的字段依添加的顺序排在后侧。
* 若无特殊需求我们建议导出所有json 数据内包含的字段
导入时
* 强烈建议您编写不依赖于列的顺序位置便可实现导入的程序,以达到最大化的兼容。
* 如果省略了其中某些非必要字段的值,请保持表头存在,对应的列则空置。
|表头|是否必要|
|-|-|
|`count`|否,但是建议保留,不排除后续会有`count`不为1的情况|
|`gacha_type`|是|
|`id`|是且大部分App按此字段排序数据|
|`item_id`|否,目前官方已经弃用了此字段|
|`item_type`|是|
|`lang`|否,但建议保留,以便国际化|
|`name`|是|
|`rank_type`|否,但建议保留,以便分析|
|`time`|否,但建议保留,以便分析|
|`uid`|否,但建议将选择权交予用户,保留以便分析|
|`uigf_gacha_type`|是|
#### 示例
|count|gacha_type|id|item_id|item_type|lang|name|rank_type|time|uid|uigf_gacha_type|
|-|-|-|-|-|-|-|-|-|-|-|
|1|301|1613556360008291100||武器|zh-cn|以理服人|3|2021-02-17 18:45:09|123456789|301|
|...|...|...|...|...|...|...|...|...|...|...|