Skip to content

Repository files navigation

言据

CI 言序 许可

言据(YanJu)1.2.0 是言序生态的统一配置与数据交换基础,文件后缀为 .yj。它保留 JSON 简单、递归、易交换的值模型,同时使用中文结构词,提供确定性序列化、结构校验、路径操作、可校验补丁、格式转换、显式资源限制以及换行分帧流。

据【
  「项目」:「言据」,
  「后缀」:「.yj」,
  「格式版本」:1,
  「实现语言」:「言序」,
  「稳定」:真,
  「能力」:列【「配置」,「交换」,「流」】,
  「备注」:空
】

.yj 的解析器和序列化器全部由言序实现,没有 Rust 版言据解析器,也不借用 JSON 解析言据。JSON 互转只在明确调用转换接口时复用言序标准 JSON 模块。

格式一览

数据 言据写法 言序值
据【「键」:值】
列【值,值】
文字 「青青子衿」
数值 7-3.14
逻辑
空值

言据只接受全角 【】。据键必须是文字,重复键与尾随逗号会被拒绝;规范序列化按键排序,因而相同数据可以得到稳定文本。完整定义见言据格式规范 v1

引入项目

需要言序 1.1.6 或更高版本。在应用的 言序.toml 格式 2 中声明 Git 依赖:

[依赖]
言据 = { git = "https://github.com/yanxulang/yanju.git", 修订 = "v1.2.0", 版 = "^1.2" }

然后从包的显式默认导出导入:

引「包:言据」为 言据;

定 配置:典 为 言据.解析据("据【「语言」:「言序」,「版本」:1】");
言 言据.美化(配置);
言 言据.查询文(配置,「语言」);

在源码仓库内也可以直接导入 src/言据.yx

能力

校验配置

规则自身也是言据,可随配置一同交换和审阅:

定 规则:典 为 {
    「类型」:「据」,
    「必需」:【「端口」】,
    「允许额外」:假,
    「属性」:{
        「端口」:{「类型」:「数」,「最小」:1,「最大」:65535,「整数」:真}
    }
};

定 各错:列 为 言据.检查类型({「端口」:70000},规则);

支持类型或联合类型、枚举、数值范围、整数、长度、列项目、必需键、属性与额外键策略。详见校验规则 v1

查询、合并与比较

定 端口 为 言据.查询文(配置,「服务/端口」);
定 新配置:典 为 言据.设定据(配置,【「服务」,「端口」】,9090);
定 最终:典 为 言据.合并据(默认配置,用户配置);
定 各差:列 为 言据.差异(默认配置,最终);
定 已重放 为 言据.应用补丁(默认配置,各差);

路径使用全角斜线 \/ 表示键内斜线,\\ 表示键内反斜线。设定、合并和补丁都深复制容器,不改写输入。列合并可选择 替换连接去重。差异项按路径稳定输出,包含 新增删除修改及新旧值;补丁重放会校验旧值,拒绝覆盖并发修改。

资源限制

默认解析限制为 1,048,576 个 Unicode 字符、64 层容器和全树 100,000 个容器项。服务端应按协议需要进一步收紧:

定 值 为 言据.解析受限(正文,{
    「最大字符」:65536,
    「最大深度」:24,
    「最大容器项」:4096
});

定 所流 为 言据.流式解析器().限制({「最大字符」:8192});

未知限制键或非正整数配置会返回 YJ_LIMIT_CONFIG;超限分别返回 YJ_SIZEYJ_DEPTHYJ_ITEMS

HTTP 与数据库

推荐 HTTP 内容类型为 application/vnd.yanxu.yanju; version=1是言据媒体类型 会拒绝其他显式格式版本,且不会把 application/json 误认成言据。

所有数据库都可用 数据库文本 把值写为确定性的 TEXT/CLOB;自数据库文本 恢复值,自规范数据库文本 可用于要求存量文本已经规范化的严格读取。数据库原生 JSON 仍是另一种表示,不等同于 .yj 文本。

格式化与格式转换

定 紧凑:文 为 言据.压缩(原文);
定 四格:文 为 言据.格式化(原文,4);
定 来自JSON:典 为 言据.自JSON据(JSON文);
定 TOML文:文 为 言据.转TOML(来自JSON);

JSON 支持言序标准 JSON 的完整原生值范围。TOML 接口面向配置互操作,支持单行键值、表、点分键、基础/字面文字、逻辑、十进制数、列、行内表和注释;日期时间、非十进制数、指数、多行文字、表列及 TOML 不可表示的空值会明确报 YJ_TOML,避免静默损失。

流式解析

定 所流 为 言据.流式解析器();
定 已完成:列 为 所流.送入(第一块);
逐 值 于 所流.送入(第二块)则 处理(值);终
逐 值 于 所流.结束()则 处理(值);终

言据流 v1 使用一行一个完整言据值的分帧方式,支持任意文字块边界和无换行的末帧。详见言据流规范 v1

结构化错误

解析、类型、校验规则、路径、合并、格式、序列化、JSON、TOML、流和文件错误使用稳定的 YJ_* 代码。无需异常控制流时可使用:

定 结果:典 为 言据.尝试解析(原文);
若 非 结果【「成功」】则
    言 结果【「错误」】【「代码」】;
终

捕获到的 可传给 错误详情,得到 代码消息输入位置数据路径源位置踪迹

公共接口分组

分组 接口
核心 解析解析据解析列校验序列化美化读取写入
限制 默认限制规范限制解析受限校验受限读取受限
格式 美化为格式化压缩是规范文本
路径 路径分段路径呈现查询查询文路径存在查询或设定设定据
数据 深复制相同合并合并据合并为差异应用补丁
校验 检查类型符合规则断验
转换 自JSON自JSON据自JSON列转JSON自TOML转TOML及文本直转接口
流式解析器解析流序列化流
集成 媒体类型版本媒体类型是言据媒体类型数据库文本自数据库文本
错误 尝试解析错误详情

精确签名见 API 文档,任务式教程见使用指南,版本边界见兼容策略。文件接口受调用程序 言序.toml[权限].文件 约束;纯文字与内存 API 不需要文件、网络、进程或原生权限。

验证与性能

在仓库根目录执行:

yanxu 查 src/言据.yx
yanxu 试 tests
yanxu 字节 tests/解析与往返.yx
yanxu benchmarks/性能.yx

解析与序列化使用字符列和片段联结,避免在主要循环中反复复制逐渐增长的文字;基准输出本身是言据,便于记录不同版本的结果。CI 会静态检查全部模块,并在 Linux、macOS 与 Windows 上运行规格及树解释器/字节码 VM 对照。

仓库结构

src/言据.yx              稳定公共入口
src/核心.yx              `.yj` 解析、序列化与文件接口
src/类型校验.yx          声明式校验
src/路径.yx              路径操作
src/操作.yx              深比较、合并与差异
src/转换.yx              JSON/TOML 互转
src/错误.yx              结构化错误协议
规范/                    格式、校验规则与流规范
tests/                   规格与回归测试
benchmarks/              可重复微基准
examples/                `.yj` 与言序调用示例
docs/API.md              公共接口参考
言序.toml                言序包清单

已知限制

  • 格式 v1 的数值限于言序安全十进制范围,不接受指数形式、NaN 或无穷值。
  • 流协议是一行一帧,不是任意多行文档流;帧内换行必须转义。
  • TOML 转换刻意只覆盖不会静默丢失的配置子集。
  • 媒体类型为项目约定,尚未向 IANA 注册。

言据按 MIT 许可证开放。格式或公共 API 的不兼容改动必须提升主版本。

About

言序专用的纯中文数据交换格式与纯言序标准库(.yj)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors