cml-rust

Crates.iocml-rust
lib.rscml-rust
version0.9.0
created_at2026-01-24 11:59:41.949385+00
updated_at2026-01-24 11:59:41.949385+00
descriptionCML (Context Mark Language) 核心语法编解码的 Rust 实现
homepagehttps://doc-war.com/CML
repositoryhttps://github.com/ContextMark/cml-rust
max_upload_size
id2066565
size52,010
越石父 (doc-war)

documentation

https://doc-war.com/CML

README

CML

上下文标记语言CML(Context Mark Language)的核心语法编解码的 Rust 实现。

Quick Start

use cml_rust::{new, CMLDouble};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let c_double = new(vec![
        "万有引力".to_string(),
        ":".to_string(),
        "牛顿".to_string(),
        "+".to_string(),
        "自然哲学的数学原理".to_string(),
        "@".to_string(),
        "1687 年".to_string(),
    ])?;
    
    let cml_a = c_double.encode_a()?;
    println!("CML-A: {}", cml_a);
    
    Ok(())
}

What is CML

CML 不是

  • ❌ JSON / YAML 的替代品
  • ❌ 图数据库
  • ❌ 自然语言
  • ❌ LLM Prompt 语法糖

✅CML是语义时代的Markdown。它的目标是让兼具人类可读和机器可运算特征的关系结构片段,成为可大规模计算任意传输分布式存储的语义中间层。

What problem does CML solve?

CML 提供了一种 介于自然语言与图库结构之间的语义存储方式

CML 解决的问题是:

  • 将1维、模糊的自然标记语言的主干关系,转换成1.5维、显式、可分形的动态标记,提供大规模的可计算性
  • 当你希望向LLM主动公开知识的语义,你会发现自然语言过于模糊无法一致性计算,JSON/Graph又过于静态,表达效率传输嵌入都不友好。

Use Cases

CML语言语法层,以单字符串编码的优势为中心,专注纯粹、极简、跨媒介、可运算的特性:

比如上图,就可以通过html的标签属性,来主动公开明确的图片语义,让LLM更好的推断。

<img src='./assets/contextMarkLanguage.png',data-cml="..." />

也可以通过markdown规范来零成本兼容承载:

![cml-...](./assets/contextMarkLanguage.png)

Encoding & Decoding

graph LR
A(cml编码字符串)
E(基元双序列)
F(基元单序列)
M(Markdown标记、数组)
M<-->|上层方法|E
M<-->|上层方法|F
E<-->|语法层编解码|A
F<-->|语法层编解码|A
  • 编码在不同模式之间互转
//支持4种等价的编码模式,分别面向普适性、大规模性能、低熵不可读性、最低熵
fn is_cml(encoded: &str) -> Result<(), Box<dyn std::error::Error>>   //验证CML是否合法
fn cml_to_a(encoded: &str) -> Result<String, Box<dyn std::error::Error>>   //转换成a模式存储,双层Base58
fn cml_to_c(encoded: &str) -> Result<String, Box<dyn std::error::Error>>   //转换成c模式存储,双层Base64URL
fn cml_to_p(encoded: &str) -> Result<String, Box<dyn std::error::Error>>   //转换成p模式存储, 单层明文混编
fn cml_to_q(encoded: &str) -> Result<String, Box<dyn std::error::Error>>   //转换成q模式存储, 双层混编
  • 编码转基元序列
//中间结构转换
fn cml_to_elements(encoded: &str) -> Result<CMLSingle, Box<dyn std::error::Error>> //将cml编码解析为基元序列
fn cml_to_fragments(encoded: &str) -> Result<CMLDouble, Box<dyn std::error::Error>> //将cml编码解析为双序列
//上层markdown转换
fn to_markdown(encoded: &str) -> String //将cml编码转换成md反引号格式
fn from_markdown(md: &str) -> Result<Vec<String>, Box<dyn std::error::Error>>  //将反引号编码的md格式转换成基元序列
fn new(slice: Vec<String>) -> Result<CMLDouble, Box<dyn std::error::Error>>    //手动构造
  • 基元序列的构造、验证、编码
//基元类型抽象的单序列
//- 单序列<token>,<separator>,<token>,<separator>,...<token>
impl CMLSingle {
    fn encode_a(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_c(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_p(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_q(&self) -> Result<String, Box<dyn std::error::Error>>
    fn is_valid(&self) -> Result<(), Box<dyn std::error::Error>>
}

//基元类型的分类双序列编码
//- 奇数序列<token>,<token>,...<token> 
//- 偶数序列<separator>,<separator>,...<separator>
impl CMLDouble {
    fn encode_a(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_c(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_p(&self) -> Result<String, Box<dyn std::error::Error>>
    fn encode_q(&self) -> Result<String, Box<dyn std::error::Error>>
    fn is_valid(&self) -> Result<(), Box<dyn std::error::Error>>
}

Documentation

本项目采用MIT宽松授权。本项目是对 Context Mark Language (CML)核心规范的标准实现。

原始语言文档 :doc-war.com/CML

原始协议仓库链接:https://github.com/ContextMark/CML

Commit count: 3

cargo fmt