# Configurable attributes Mapping Rule
**Repository Path**: willy2/attsMappingRule
## Basic Information
- **Project Name**: Configurable attributes Mapping Rule
- **Description**: 功能:基于规则表,检测 XML, JSON 等文件中的数据约束,或根据规则表刷新相关值。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2022-10-17
- **Last Updated**: 2023-01-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 开发工具:属性间的不一致性检测
> 可配置的属性映射关系(多对1或多对多)
----------
## 功能
通过可配置的属性关系映射表(规则表),检测或刷新 XML, JSON 等数据中的目标属性值。
- generate rule template.
适用于:不存在目标文件。只能打印规则模板。用户可据此看到属性集在数据中的分组形态。
- generate rule table (生成后仍需专家校正).
> 要求:已存在足够的源文件和目标文件,据此可自动建立映射。
> 生成中,工具自动进行**Inconsistency check**.
>
> **至此,可随时扫描源目录:基于规则配置,及时发现开发中出现的不一致冲突。**
- refresh attribute value (刷新目标属性的值).
在开发中可根据需要修改规则,并自动把结果刷新到源文件,避免手工处理造成错误。
本功能适用于文件重构,或根据配置值刷新目标值。
## 核心概念
- #### 属性间的函数关系
在XML, JSON, excel 或数据集中的数据之间(或元数据之间),存在着属性上的约束关系。
**可通过规则文件以及规则中目标属性上的函数关系式来集中表达这种约束关系。**
它类似于DB中的触发器所描述的约束关系。
- #### 规则文件(属性间的映射配置)
不同于常见的1对1映射配置,规则表集中表达:属性间的多对多映射。参见:
https://gitee.com/willy2/attsMappingRule/blob/master/doc/ruleTable_demo.txt
配置文件对规则的分组能力等价于嵌套的 "if else" 结构。
规则配置在某种程度上是业务知识的聚集。一组规则形如:
| 映射项(targetAtt 是目标属性,其值就是一个函数关系式) |
att1: false
att2: gt30
att3: always
att4: false
targetAtt: #abc# && {=${view>/$EditMode/add}}
att4: true
targetAtt: false
att1: true
...
|
| 映射项的伪码表达 |
if(typeOf(att1) == false){
if(typeOf(att2) >30){
if(typeOf(att3) == always){
if(typeOf(att4) == false){
targetAtt: #abc# && {=${view>/$EditMode/add}}
} else if(typeOf(att4) == true){
targetAtt: false
}
}
}
}else if(typeOf(att1) == true){
...
|
## 演示
- Generate rule template(1分钟)
>When we have old files with attributes, but haven’t new files.
>https://www.zhihu.com/zvideo/1582721353332768769 (english)
- Generate rule table(1分钟)
>When we have enough old and new files, so can scan them, to generate rule table.
>https://www.zhihu.com/zvideo/1582721372685312000 (english)
>通过经由专家校正的一个规则文件,可实现对一组属性的映射约束。
- Refresh attribute value(1分钟)
>By acceptable rule table, run refresh action:
>https://www.zhihu.com/zvideo/1582721375650963456 (english)
>
>
- 演示:用6分钟时间对一组属性实施规则约束(XML)
> https://www.zhihu.com/zvideo/1588133222109720577
>
>
- 长视频(13分钟)
> https://www.zhihu.com/zvideo/1569812945764323328
> https://www.zhihu.com/zvideo/1570142272531668993 (english)
## 应用场景
1. 文件重构中,**新旧文件之间必定存在大量的属性间的约束关系**。
自动化处理的可靠性和效率高于人。 已有实践效果。
2. 在现有系统的长期维护中,**文件内部可能存在属性间的约束关系**。
DTD和metadata 很少提供语义约束,开发人员也常常无权修改它们。
开发中,一不小心就会对语义关系产成破坏. 工具可定义表达式来约束这些关系。
3. **各类数据之间存在约束关系**。项目中,一些DB是没有触发器甚至主外键。
可借助本工具定义或挖掘属性约束:自动规则挖掘 + 人工规则定义。
## 用户是谁?
开发人员、业务专家?
## 展望 (下一个迭代)
自动生成的规则表, 需要dev或专家对其校准;
规则挖掘虽能生成大量规则,但其正确性和价值需要事实验证,这是风险所在。
针对数据集的规则挖掘:[http://mathy.xyz:8080/ruleMiner/data2rule](http://mathy.xyz:8080/ruleMiner/data2rule)
IO 规则挖掘: [http://mathy.xyz:8080/ruleMiner/data2methodsRule](http://mathy.xyz:8080/ruleMiner/data2methodsRule)
## 使用说明
首先,拉代码到 IDE 中,修改Att9.AppDir,使其指向 "attMappingRule" 目录。
然后打开 AttMapingRule_main.java, 该类默认执行3~5个例子(扫描项),可通过以下步骤增加您需要的 “扫描项”。
【以下5点的参考代码:IDE中,reference Att9.userDo()】
为了自动生成规则表,并刷新目标属性值,需实现接口:AttsConf.java, AttsDefine.java:
1. 定义新旧属性集。see XXXDefine.java
keyName, objName, attrList
2. 从旧文件集中**查找旧属性集**。see: conf.findOldAttsList(define)
所谓新称谓,只是为了区分文件集。依照接口实现,他们也可能指向同一文件集。
3. 从旧属性出发,(通过keyValue)**查找新属性集**。 see conf.findNewAttsList(oldAtts)
最终从哪里查找属性集,得由具体实现说了算。
4. 生成规则。see conf.genRules(oldAtts, newAtts)
也就是说,规则 =function(旧属性,新属性)
规则表达出新旧属性间的关系:拼接、算术、转换、引入新式、混合式.
5. 刷新属性值。see conf.refreshAttValue(oldAtts, ruleValue, newAtts)
也就是说,新属性= function(规则,旧属性)
第4,5函数本质相同,但仍需分别撰写。
简单例子参见:https://www.zhihu.com/zvideo/1588133222109720577
## 再见.