You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cxml-rng验证XML与XSD Schema时遇未定义函数错误

问题描述

尝试使用cxml-rng验证一批XML文件与指定XSD格式Schema,已知cxml-rng支持XSD,但无法成功运行。

验证函数代码如下:

(defun validate (xml xsd)
  (let* ((schema    (cxml-rng:parse-schema xsd))
         (validator (cxml-rng:make-validator schema)))
    (cxml:parse-file xml validator))

运行时出现错误:

Error: Call to  (SETF CXML-RNG::GRAMMAR-START) which was not defined at compile time with arguments (#S(CXML-RNG::DEFINITION :NAME :START :COMBINE-METHOD NIL :HEAD-P NIL :REDEFINITION NIL :CHILD #) #S(CXML-RNG::GRAMMAR :START NIL :PARENT NIL :DEFINITIONS #))

已通过xmllint完成相同验证,确认该Schema文件有效,求解决建议。

解决建议
  • 升级cxml-rng版本:这个错误大概率是版本兼容性问题,旧版cxml-rng在处理XSD转RelaxNG的逻辑中存在未定义函数的bug,建议升级到最新稳定版。
  • 显式指定Schema类型:parse-schema默认可能按RelaxNG格式解析,尝试传入:type :xsd参数明确指定处理XSD文件:
    (cxml-rng:parse-schema xsd :type :xsd)
    
  • 排查XSD特殊构造:虽然xmllint验证通过,但部分XSD的复杂构造(如多层继承、自定义约束)可能在cxml-rng的XSD解析逻辑中存在处理盲区。可以先简化XSD(移除非核心的自定义类型或约束),测试是否能正常解析,逐步定位问题点。
  • 提前转换为RNG文件:使用trang、xmllint等工具先将XSD转换为RelaxNG格式文件,再用cxml-rng验证XML与转换后的RNG,绕开cxml-rng内置的XSD解析环节:
    转换命令示例(trang):
    trang your-schema.xsd your-schema.rng
    
    修改后的验证函数:
    (defun validate (xml rng)
      (let* ((schema    (cxml-rng:parse-schema rng))
             (validator (cxml-rng:make-validator schema)))
        (cxml:parse-file xml validator))
    

内容的提问来源于stack exchange,提问作者mhevesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:52:44