标准数据域
- 文章作者: flytreeleft - flytreeleft@crazydan.org
- 文章链接: https://nop.crazydan.io/docs/manual/dict/std-domain
- 版权声明: 本文章采用许可协议《署名 4.0 国际 (CC BY 4.0)》,转载或商用请注明文章来源及作者信息。
前言
数据域主要用于在 XDef 中声明节点属性的类型,在生成的 class 模型中, 成员变量也将被定义为数据域所对应的「目标数据类型」,而在解析 DSL 时, 也会自动根据数据域的约束对相应的属性值进行解析和校验,从而确保 DSL 模型的完整性和有效性:
定义 XDef
example.xdef<!-- 定义 Example 的属性类型 -->
<example xdef:name="Example"
name="string" type="generic-type" date="datetime"
/>生成 class
_Example.java// 根据数据域所代表的目标数据类型生成 Example 的成员变量
public class _Example ... {
private java.lang.String _name;
private io.nop.core.type.IGenericType _type;
private java.time.LocalDateTime _date;
}编写 DSL
<example name="Example" type="string" date="2025-06-06 08:55:21" />
<!-- Note: 通过表达式 ${xxx} 可以直接向属性直接传递非字符串数据 -->
<c:script><![CDATA[
import java.util.Date;
const date = new Date();
]]></c:script>
<example name="Example" type="string" date="${date}" />其等价于构造对象
Example example = new Example();
example.name = "Example";
example.type = new PredefinedRawType("java.lang.String", String.class, "STRING_TYPE");
example.date = ConvertHelper.toLocalDateTime("2025-06-06 08:55:21");
标准数据域的枚举值定义在 /dict/core/std-domain.dict.yaml
中,但其并不完整,完整的可选值详见 XDefConstants 中以 STD_DOMAIN_ 开头的常量值。
对标准数据域字典项的解析和校验在
SimpleStdDomainHandlers、XplStdDomainHandlers、ConverterStdDomainHandler
等中实现,并通过 StdDomainRegistry#registerStdDomainHandler 进行注册。
在 nop-xlang 模块中已注册的数据域详见 StdDomainRegistry#registerDefaults,
本手册所收录的数据域便来自于此。若是需要自定义数据域,
可参考《XDef - 注册并使用属性类型》注册新的类型。
基础数据域
def-type
| 名称 | 目标数据类型 |
|---|---|
| def-type |
|
一般在元元模型中设定,用于支持为元模型中的相应属性指定不同的数据域, 也就是,其描述的是 DSL 属性的属性类型。 其内容格式为
其中, /nop/schema/xdef.xdef 注:其由 | |
xdef-attr
| 名称 | 目标数据类型 |
|---|---|
| xdef-attr |
|
用于定义 XDef 的属性,解析生成的是 XDef 属性结构对象 当前仅用于元元模型 /nop/schema/xdef.xdef 其中, 所谓交叉定义就是, 注:其由 | |
any
| 名称 | 目标数据类型 |
|---|---|
| any |
|
接受任意类型的源数据,并保持不变,不对其做类型转换。 注:其由 | |
string
| 名称 | 目标数据类型 |
|---|---|
| string |
|
通过
注:其由 | |
int
| 名称 | 目标数据类型 |
|---|---|
| int |
|
通过
注:其由 | |
short
| 名称 | 目标数据类型 |
|---|---|
| short |
|
通过
注:其由 | |
long
| 名称 | 目标数据类型 |
|---|---|
| long |
|
通过
注:其由 | |
float
| 名称 | 目标数据类型 |
|---|---|
| float |
|
通过
注:其由 | |
double
| 名称 | 目标数据类型 |
|---|---|
| double |
|
通过
注:其由 | |
char
| 名称 | 目标数据类型 |
|---|---|
| char |
|
通过
注:其由 | |
byte
| 名称 | 目标数据类型 |
|---|---|
| byte |
|
通过
注:其由 | |
boolean
| 名称 | 目标数据类型 |
|---|---|
| boolean |
|
通过
注:其由 | |
boolFlag
| 名称 | 目标数据类型 |
|---|---|
| boolFlag |
|
通过
注:其由 | |
decimal
| 名称 | 目标数据类型 |
|---|---|
| decimal |
|
通过
注:其由 | |
bigint
| 名称 | 目标数据类型 |
|---|---|
| bigint |
|
通过
注:其由 | |
number
| 名称 | 目标数据类型 |
|---|---|
| number |
|
通过
| |
date
| 名称 | 目标数据类型 |
|---|---|
| date |
|
通过
注:其由 | |
time
| 名称 | 目标数据类型 |
|---|---|
| time |
|
通过
注:其由 | |
datetime
| 名称 | 目标数据类型 |
|---|---|
| datetime |
|
通过
注:其由 | |
timestamp
| 名称 | 目标数据类型 |
|---|---|
| timestamp |
|
通过
注:其由 | |
duration
| 名称 | 目标数据类型 |
|---|---|
| duration |
|
通过
注:其由 | |
enum
| 名称 | 目标数据类型 |
|---|---|
| enum | 由其 XDef 属性类型中
|
枚举类型。其有效值必须满足:
需要注意的是,对于以 io.nop.wf.core.model.WfExecGroupType 在从 DSL 到 Java 对象的解析过程中,将会调用枚举类中的该方法将 DSL 中的文本属性值转换为对应的枚举项。
| |
dict
| 名称 | 目标数据类型 |
|---|---|
| dict | |
regex
| 名称 | 目标数据类型 |
|---|---|
| regex |
|
其仅在从 DSL 到 Java 对象的解析过程中,通过 可通过 | |
string-map
| 名称 | 目标数据类型 |
|---|---|
| string-map | |
boolean-or-string
| 名称 | 目标数据类型 |
|---|---|
| boolean-or-string | |
boolean-or-number
| 名称 | 目标数据类型 |
|---|---|
| boolean-or-number | |
int-or-string
| 名称 | 目标数据类型 |
|---|---|
| int-or-string | |
int-size
| 名称 | 目标数据类型 |
|---|---|
| int-size | |
int-list
| 名称 | 目标数据类型 |
|---|---|
| int-list | |
int-range
| 名称 | 目标数据类型 |
|---|---|
| int-range | |
long-size
| 名称 | 目标数据类型 |
|---|---|
| long-size | |
long-range
| 名称 | 目标数据类型 |
|---|---|
| long-range | |
xdef-ref
| 名称 | 目标数据类型 |
|---|---|
| xdef-ref |
|
用于引用当前 XDef 中的 xdef 命名片段(由 xdef:name 指定其名字):
该类型也可以用于引用外部元模型文件: /nop/schema/query/query.xdef 注:其由 | |
method-ref
| 名称 | 目标数据类型 |
|---|---|
| method-ref |
|
对 Java class 方法的引用。其格式为 注:其由 | |
generic-type
| 名称 | 目标数据类型 |
|---|---|
| generic-type |
|
Java 泛型类型。源数据可以直接使用以下内置类型的名称:
对于其它类型则均需要使用其 class 全名称,如 对于泛型参数,可直接使用内置类型名称或 class 全名称,如
对于数组类型,只需要在类型名后加 若源数据为 注:其由 | |
generic-type-list
| 名称 | 目标数据类型 |
|---|---|
| generic-type-list |
|
通过
| |
std-domain
| 名称 | 目标数据类型 |
|---|---|
| std-domain |
|
在 DSL 中,对于该类型的属性,可按需填写包括 /nop/schema/xlib.xdef /nop/web/xlib/web.xlib 注:其由 | |
std-data-type
| 名称 | 目标数据类型 |
|---|---|
| std-data-type |
|
注:其由 | |
std-sql-type
| 名称 | 目标数据类型 |
|---|---|
| std-sql-type |
|
注:其由 | |
std-sql-type-list
| 名称 | 目标数据类型 |
|---|---|
| std-sql-type-list |
|
注:其由 | |
package-name
| 名称 | 目标数据类型 |
|---|---|
| package-name |
|
由 | |
java-name
| 名称 | 目标数据类型 |
|---|---|
| java-name |
|
一般为中英文字母和数字、 | |
class-name
| 名称 | 目标数据类型 |
|---|---|
| class-name |
|
由 package-name
和 java-name 组成,并以 | |
class-name-set
| 名称 | 目标数据类型 |
|---|---|
| class-name-set |
|
bean-name
| 名称 | 目标数据类型 |
|---|---|
| bean-name |
|
var-name
| 名称 | 目标数据类型 |
|---|---|
| var-name |
|
一般为中英文字母和数字、 | |
prop-name
| 名称 | 目标数据类型 |
|---|---|
| prop-name |
|
一般为中英文字母和数字、 | |
prop-name-set
| 名称 | 目标数据类型 |
|---|---|
| prop-name-set |
|
prop-path
| 名称 | 目标数据类型 |
|---|---|
| prop-path |
|
由一个或者多个 prop-name 构成,并通过字符 | |
conf-name
| 名称 | 目标数据类型 |
|---|---|
| conf-name |
|
由英文字母、数字、 | |
xml-name
| 名称 | 目标数据类型 |
|---|---|
| xml-name |
|
由英文字母、数字、 注:其校验逻辑见 | |
ns-name
| 名称 | 目标数据类型 |
|---|---|
| ns-name |
|
由英文字母、数字、 注:其实现逻辑见 | |
token-name
| 名称 | 目标数据类型 |
|---|---|
| token-name | |
nop-module-name
| 名称 | 目标数据类型 |
|---|---|
| nop-module-name | |
nop-module-id
| 名称 | 目标数据类型 |
|---|---|
| nop-module-id | |
xpl
| 名称 | 目标数据类型 |
|---|---|
| xpl | Xpl 片段 |
其输出模式 注:其实现逻辑见 | |
xpl-node
| 名称 | 目标数据类型 |
|---|---|
| xpl-node | 输出 XNode 的 Xpl 片段 |
其输出模式 注:其实现逻辑见 | |
xpl-text
| 名称 | 目标数据类型 |
|---|---|
| xpl-text | |
xpl-sql
| 名称 | 目标数据类型 |
|---|---|
| xpl-sql | |
xpl-xml
| 名称 | 目标数据类型 |
|---|---|
| xpl-xml | |
xpl-html
| 名称 | 目标数据类型 |
|---|---|
| xpl-html | |
xpl-predicate
| 名称 | 目标数据类型 |
|---|---|
| xpl-predicate | |
xpl-fn
| 名称 | 目标数据类型 |
|---|---|
| xpl-fn | Xpl 函数 |
自定义的 Lambda 函数,以 在编写其函数体时,可以通过 若是使用 Xpl 来输出 注:其实现逻辑见 | |
eval-code
| 名称 | 目标数据类型 |
|---|---|
| eval-code |
|
完整的 Xpl 脚本,如: 得到该类型的结果后,可按如下方式进行调用: 如果是以 xdef:value 指定节点内容的类型为
example.xdef example.xml
或者,也可以嵌入 Xpl 脚本: example.xml 注:支持在 <x:config/> 中统一导入 Java class 或 xlib 标签库。 注:其实现逻辑见 | |
expr
| 名称 | 目标数据类型 |
|---|---|
| expr |
|
可得到计算结果的 Xpl 表达式,如 得到该类型的结果后,可按如下方式进行调用: 注:可以使用 注:其实现逻辑见 | |
s-expr
| 名称 | 目标数据类型 |
|---|---|
| s-expr |
|
通过 得到该类型的结果后,可按如下方式进行调用: 注:其实现逻辑见 | |
t-expr
| 名称 | 目标数据类型 |
|---|---|
| t-expr |
|
在文本中嵌入零个或多个 s-expr 的 Xpl 模版,如
得到该类型的结果后,可按如下方式进行调用: 注:其实现逻辑见 | |
xt-expr
| 名称 | 目标数据类型 |
|---|---|
| xt-expr |
|
通过 得到该类型的结果后,可按如下方式进行调用: 注: 注:其实现逻辑见 | |
xt-value
| 名称 | 目标数据类型 |
|---|---|
| xt-value |
|
在文本中嵌入零个或多个 xt-expr 的 Xpl 模版,如
得到该类型的结果后,可按如下方式进行调用: 注:其实现逻辑见 | |
flags-expr
| 名称 | 目标数据类型 |
|---|---|
| flags-expr |
|
构造逻辑表达式(与/或/非),如
也即,若表达式中的某个标记存在于 在该表达式中,可以使用 注:可以使用 注:其实现逻辑见 | |
t-report-expr
| 名称 | 目标数据类型 |
|---|---|
| t-report-expr |
|
与 t-expr 相同,只是其在 注:Excel 函数由 注:其实现逻辑见 | |
xpath
| 名称 | 目标数据类型 |
|---|---|
| xpath |
|
XPath 选择器。其缺省由
其支持以下 XPath 选择器规则:
针对该类型数据的使用可参考以下代码: 注:其由 注:可通过 | |
jpath
| 名称 | 目标数据类型 |
|---|---|
| jpath | |
v-path
| 名称 | 目标数据类型 |
|---|---|
| v-path | |
v-path-list
| 名称 | 目标数据类型 |
|---|---|
| v-path-list | |
name-or-v-path
| 名称 | 目标数据类型 |
|---|---|
| name-or-v-path | |
csv-set
| 名称 | 目标数据类型 |
|---|---|
| csv-set | 逗号分隔的字符串集合(无重复) |
以 注:其处理逻辑见 | |
csv-list
| 名称 | 目标数据类型 |
|---|---|
| csv-list | 逗号分隔的字符串集合(可重复) |
以 注:其处理逻辑见 | |
multi-csv-set
| 名称 | 目标数据类型 |
|---|---|
| multi-csv-set | 含与/或关系的字符串集合 |
以 注:其处理逻辑见 | |
word-set
| 名称 | 目标数据类型 |
|---|---|
| word-set | 逗号分隔的字符串集合 |
与 csv-set 要求相同, 只是,其不能存在包含空白字符的项,否则,将会抛出校验异常。 注:其校验逻辑见 | |
tag-set
| 名称 | 目标数据类型 |
|---|---|
| tag-set | 逗号分隔的字符串集合 |
与 csv-set 要求相同。 注:其校验逻辑见 | |
filter-bean
| 名称 | 目标数据类型 |
|---|---|
| filter-bean | 过滤条件 |
由过滤运算符标签组成的过滤条件,其为 xml 结构,并且条件可嵌套,如: | |
field-selection
| 名称 | 目标数据类型 |
|---|---|
| field-selection | GraphQL 字段选择集合 |
GraphQL Field Selection 集合,用于指定可返回的字段,如: | |
json
| 名称 | 目标数据类型 |
|---|---|
| json | |
xjson
| 名称 | 目标数据类型 |
|---|---|
| xjson | |
xjson-list
| 名称 | 目标数据类型 |
|---|---|
| xjson-list | |
xjson-map
| 名称 | 目标数据类型 |
|---|---|
| xjson-map | |
xjson-node
| 名称 | 目标数据类型 |
|---|---|
| xjson-node | |
xml
| 名称 | 目标数据类型 |
|---|---|
| xml | |
xml-body
| 名称 | 目标数据类型 |
|---|---|
| xml-body | |