 查询已注册 Validator 注册表)
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载导读本文围绕 Xberg C# 绑定的XbergConverter.ListValidators()接口讲解如何在 .NET 应用中查询当前已注册的全部 Validator文档校验插件并梳理其背后的 Rust 注册表实现、FFI 调用链与配套的插件生命周期管理方法帮助读者快速掌握 Validator 插件体系的查询与自检能力。读完本文你将能够在 C# 中安全地枚举 Validator 注册表、判断插件注册状态、并结合ClearValidators()等接口完成插件管理闭环。一、功能定位为什么需要列出 ValidatorXberg 的插件体系支持注册自定义文档校验器Validator用于在提取管线中对ExtractedDocument结果执行后置校验例如检查内容是否为空、MIME 类型是否符合预期等。当系统中动态注册了多个 Validator 时开发者需要一种只读、无副作用的方式来查询当前注册状态——这正是validators_list接口即list_validators的用途。该接口由 fixtures/plugin_api/validators_list.json 定义为契约测试用例其关键元数据如下字段值说明idvalidators_list契约用例标识categoryvalidator_management归属Validator 管理类别calllist_validators对应的 Rust 导出函数名side_effectssafe无副作用操作可安全重复调用assertionsnot_error断言调用不抛错从源码结构看validators_list与validators_clear、validators_list同属validator_management管理组是插件管理 API 中查询一侧的核心能力与 fixtures/plugin_api/validators_clear.json 的清空形成互补。二、C# 侧调用XbergConverter.ListValidators()关联文档 docs-site/src/snippets-generated/csharp/plugin_api/validators_list.md 给出了最简调用方式using System; using Xberg; var result XbergConverter.ListValidators(); Console.WriteLine(result);该文档由 alef 工具自动生成alef e2e generate对应的 C# 实现位于 packages/csharp/src/Xberg/XbergConverter.cs/// summary /// List names of all registered validators. /// /summary public static Liststring ListValidators() { var nativeResult NativeMethods.ListValidators(); if (NativeMethods.LastErrorCode() ! 0) { throw GetLastError(); } var json global::System.Runtime.InteropServices.Marshal.PtrToStringUTF8(nativeResult); NativeMethods.FreeString(nativeResult); var returnValue JsonSerializer.DeserializeListstring(json ?? null, JsonOptions)!; return returnValue; }实现要点如下FFI 调用通过NativeMethods.ListValidators()进入原生层返回一个 UTF-8 JSON 字符串指针错误检查调用后立即检查NativeMethods.LastErrorCode() ! 0非零则抛出GetLastError()包装的异常保证原生层错误能被安全地映射为 C# 异常内存管理使用Marshal.PtrToStringUTF8将指针转为托管字符串后立即调用NativeMethods.FreeString释放原生内存避免泄漏反序列化将 JSON 反序列化为Liststring即返回的是Validator 名称列表而非对象每个元素对应一个已注册插件的名称。实际返回内容由原生注册表决定。在默认情况下未注册任何自定义 Validator 时列表可能为空注册插件后列表会包含对应插件名称如测试中的mock-validator见下文。三、底层实现Rust 侧 list_validators 与注册表Rust 侧对应实现位于 crates/xberg/src/plugins/validator/mod.rs/// List names of all registered validators. pub fn list_validators() - crate::ResultVecString { use crate::plugins::registry::get_validator_registry; let registry get_validator_registry(); let registry registry.read(); Ok(registry.list()) }关键点通过 crates/xberg/src/plugins/registry/mod.rs 中的get_validator_registry()获取全局注册表的ArcRwLockValidatorRegistry以读锁read()方式访问保证并发安全且不阻塞其他读取者——这与clear_validators()使用写锁形成对比直接调用registry.list()返回名称集合是无副作用操作对应契约中side_effects: safe的声明。在插件生命周期中Validator 注册表的同类操作还包括见 crates/xberg/src/plugins/validator/mod.rs函数作用锁类型register_validator(validator: Arcdyn Validator)注册校验插件写锁unregister_validator(name: str)按名称注销插件写锁list_validators()列出全部插件名称读锁clear_validators()清空并执行shutdown_all()优雅关停写锁这些函数通过#[cfg_attr(alef, alef(skip))]标注在 alef 生成 FFI 与绑定代码时会被跳过不重复导出。四、Validator 插件是什么trait 与执行管线中的位置要理解查询结果的业务含义需先了解 Validator 的定义。Validatortrait 位于crates/xberg/src/plugins/validator/下其核心签名可从前文模块文档与测试代码推断实现者需同时满足Plugintrait提供name()、version()、initialize()、shutdown()与Validatortrait 的validate(ExtractedDocument, ExtractionConfig)异步方法。模块内测试crates/xberg/src/plugins/validator/mod.rs展示了典型实现struct MockValidator { should_fail: bool } impl Plugin for MockValidator { fn name(self) - str { mock-validator } fn version(self) - String { 1.0.0.to_string() } // initialize / shutdown ... } #[async_trait] impl Validator for MockValidator { async fn validate(self, _result: ExtractedDocument, _config: ExtractionConfig) - Result() { if self.should_fail { Err(XbergError::validation(Validation failed.to_string())) } else { Ok(()) } } }在提取管线中Validator 注册表被 crates/xberg/src/core/pipeline/execution.rs 引用于提取完成后对结果执行校验因此ListValidators()的查询结果可以直接用于在运行时确认校验插件是否已就位是插件调试与启动自检的重要依据。五、C# 侧配套管理接口ClearValidators 与完整生命周期除了列出C# 绑定还提供配套的管理入口。同名文件 packages/csharp/src/Xberg/XbergConverter.cs 附近定义了ClearValidators()用于清空全部已注册 Validatorpublic static void ClearValidators() { var nativeResult NativeMethods.ClearValidators(); // ... 错误检查与资源释放逻辑 }对应的 Rust 实现crates/xberg/src/plugins/validator/mod.rs在清空前调用registry.shutdown_all()确保每个插件的shutdown()被触发完成优雅关停——这体现了 Xberg 插件管理对资源释放的严谨设计。完整的 Validator 生命周期因此为注册Rust 侧register_validator→ 2.查询ListValidators()本文主题→ 3.执行管线内validate→ 4.注销/清空unregister_validator/ClearValidators()。六、E2E 测试验证契约如何被机器校验为了确保各语言绑定的行为一致Xberg 通过 alef 生成了跨语言 E2E 测试。C# 侧测试位于 e2e/csharp/tests/ValidatorManagementTests.cs其中Test_ValidatorsList直接验证了本文接口[Fact] public void Test_ValidatorsList() { // List all registered validators var result XbergConverter.ListValidators(); Assert.NotNull(result); }要点断言result非空NotNull确保调用不抛错、返回结构正确对应契约中assertions: not_error同文件的Test_ValidatorsClear先调用ClearValidators()并断言无异常说明清空与查询常组合使用形成管理闭环该测试文件同样由 alef 自动生成保证文档片段、FFI 声明与测试三者保持同步文件头部的alef:hash用于校验新鲜度可通过alef verify检查。七、实战建议与使用注意事项调用前无需初始化ListValidators()是纯查询可在应用启动后任意时刻调用用于日志输出或插件自检结合错误码判断环境若ListValidators()抛出异常通常意味着原生库加载失败或 FFI 通道异常而非注册表为空应检查NativeMethods.LastErrorCode()相关信息区分空列表与异常返回空列表是合法结果表示无自定义校验器不应误判为错误配对使用生命周期方法在测试或动态插件场景中常先ClearValidators()再注册、最后ListValidators()验证注册数与 e2e/csharp/tests/ValidatorManagementTests.cs 的用法一致文档可再生成本文引用的文档片段由 alef 管理若仓库 API 演进可通过alef e2e generate重新生成、alef verify校验新鲜度保证示例与实现始终同步。参考路径速查关联文档docs-site/src/snippets-generated/csharp/plugin_api/validators_list.md契约用例fixtures/plugin_api/validators_list.jsonC# 绑定实现packages/csharp/src/Xberg/XbergConverter.csRust 核心实现crates/xberg/src/plugins/validator/mod.rs注册表访问入口crates/xberg/src/plugins/registry/mod.rs管线调用位置crates/xberg/src/core/pipeline/execution.rsE2E 测试e2e/csharp/tests/ValidatorManagementTests.cs赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐使用 C 绑定列出 Xberg 已注册验证器Validator 插件注册表实战指南使用 C 绑定列出 Xberg 已注册验证器Validator 插件注册表实战指南 导读 本文以 Xberg 开源仓库中的 C 绑定能力为核心讲解如何通过一后端AI 应用NLPXberg C 插件 API 实战使用 ListPostProcessors 查询已注册后处理器Xberg C 插件 API 实战使用 ListPostProcessors 查询已注册后处理器 导读 本文围绕 Xberg一个以 Rust 为核心的多语言后端AI 应用NLPxberg C FFI 实战用 xberg_list_post_processors 查询已注册的后处理器xberg C FFI 实战用 xberg_list_post_processors 查询已注册的后处理器 在 xberg 的插件体系中后处理器post后端AI 应用NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考