Nexo规则字段说明
Nexo检查端的规则字段可以分为三块内容,文件类型判断,关键数据获取,数据需要满足的条件,使用到的字段如下:
字段 | 中文名 | 数据类型 | 说明 | 举例 |
---|---|---|---|---|
name | 名称 | str | 规则名称 | |
xpath | 路径 | str | 资源文件内部关键数据获取路径,取出来的内容存到的一个list内 | 数据为data={‘a’:{‘b’:1,’c’:2},‘d’:{‘b’:3,’c’:4}},如果我们要取出key为b的值,那么xpath=’data/a/b’或者xpath=’*/a/b’,那么取出来的数据data将为[1,3] |
filter | 过滤器 | str | 对xpath取出来的数据进行转换或者过滤,支持正则或自定义函数 | 当filter类型是个str的时候,将会使用re.match(filter,d),d时取出来的单个数据,如数据为[“abcd-1223”, “0000-1223”],可以使用filter=’0000-.*’来进行过滤,那么只会检查[“abcd-1223”] |
not_filter | 反向过滤器 | str | 资源文件反向过滤器 | |
confition | 满足条件 | list | 关键数据满足条件,关键数据data会被遍历执行,每一条数据作为变量d,内置包含存在,存在于,不存在,不存在于,满足表达式,多文件关联,存在于检查目录 | 见补充说明 |
only_name | 只取文件名 | bool | 使用文件名作为关键数据 | |
rpath | 正则路径名 | str | 正则路径名,匹配满足正则的资源文件,用re.match(rpath,文件路径)来进行正则匹配 | |
not_rpath | 过滤正则路径 | str | 反向正则路径名,匹配不成功,则该文件使用该规则进行检查,与rpath作用相反 | |
subxpath | 二级文件中的关键字路径 | str | 二级文件中的关键字路径,跨文件时使用,当xpath取出来的数据为一个文件名的时候,如果我们需要这些文件的内容进行检查,那么我们可以使用subxpath进行再次取值,格式和xpath保持一致 | |
subfilter | 二级过滤器 | str | 二级过滤器,同过滤器 | |
ignor | 是否加入检查 | str | 是否加入检查 | |
desc | 描述 | str | 描述 | |
func_str | 附加函数 | str | 附加函数,filter过滤器的自定义函数 | 见补充说明 |
补充说明
1. condition举例: condition支持的类型包括 存在,存在于,不存在,不存在于,满足表达式和存在于检查目录 参考写法: [‘存在’] [‘不存在] ["存在于","../../../../Char/ "] ,表示存在于某个路径下。 ["满足表达式","d == 'PBR_Foliage'"] #d是xpath对取出来的数据data中的遍历的单值,for d in data,例如xpath取出来了['PBR_Foliage', 'PBR_Foliage2'],那么d就依次是PBR_Foliage与PBR_Foliage2。 2. filter的fun_str过滤数据举例:* 过滤掉0000开头的数据,函数写法
def filter_zero(**pdata):
ret = []
data = pdata.get(“data”,[])
for d in data:
if d.startswith(“0000-“):
continue
ret.append(d)
return ret
规则编写举例
Nexo检查的文件类型格式主要有2种,xml格式和二进制格式。其中,二进制资源文件,包括mesh,gis,png,dds,bmp,tga,jpg文件等;XML类资源文件,包括scn,gim,sfx,mtg文件。二进制文件的规则较为特殊,每个文件类型都有一套定义。XML文件比较通用,通过XML解析可以得到具体关键数据。
如图所示为一个gim文件,作为基本规则举例 例子1,gim文件的submesh数量不能大于5。(读取dom元素) 第一步,需要过滤出gim文件,因此rpath需要填写一个正则表达式.*gam$,过滤出满足后缀的文件。
第二步,需要找到gim文件中SubMesh的属性,gim文件是按照XML格式生成的,所以我们需要找到所有的SubMesh属性*/SubMesh.{dom},可以看上图中有1个SubMesh,每个SubMesh下还有5个子属性
第三步,判断找到的关键数据是否满足条件,对于上面取出来的属性,会放到一个data=[
例子2,gim关联文件检查(读取属性的值) 第一步,仍然是过滤出gim文件,因此rpath需要填写一个正则表达式.*gam$
第二步,读取属性的值,可以使用模糊匹配的方式找到我们关心的属性FileName,* / * / FileName:value,获取FileName下value属性的值。
第三步,拿到value的值为一个路径地址,可以根据自身需求使用自定义filter对数据进行改造,或者使用subxpath进行二级过滤。
例子3,gim文件取值(tag下的数值)
第一步,过滤gim文件,因此rpath需要填写一个正则表达式.*gam$
第二步,我们要获取TEST1下面name的值,可以*/TEST1.name,拿到对应的值data=[aaaaa]
第三步,根据拿到的值去自定义规则条件