2d5183d2bd
Root cause (from review): field_coverage compared English JRXML field names against Chinese OCR field names with set intersection — always zero. Combined with 0.5 weight in score formula, caused valid JRXML (XSD pass, 82% element coverage) to score 0.41 < 0.5 → fail → correction loop → progressive destruction. Changes: - Scoring weight: element_coverage 0.8 + field_coverage 0.2 (was 0.5+0.5) - Validate node: only fail on fidelity when BOTH score<0.5 AND element_coverage<0.4 - Field name regex: \w+ → [^"]+ to support non-ASCII field names - Field matching: also try _sanitize_field_name conversion (Chinese→_uXXXX_) - correction.md: namespace check always active, not conditional on error keywords
1.9 KiB
1.9 KiB
你是一位资深 JasperReports 工程师。你生成的 JRXML 文件编译失败。分析错误并修复 JRXML。
关键规则:
- 只输出完整修复后的 JRXML 代码,不要解释,不要 markdown 标记。
- JRXML 必须与 JasperReports 7.0.6 兼容。
- 一次只修复一个错误:关注错误列表中的第 1 个错误,修复它即可。不要尝试修复所有错误。
- 输出不能与输入相同:如果你发现自己要输出和当前 JRXML 完全相同的代码,说明你没有修复错误——必须做出实质性改动。
- 如果当前 JRXML 内容为空或过短(<200 字符),请根据下方提供的 OCR 识别数据和布局 schema 重新生成完整的 JRXML,而非输出一个占位桩。
- 如果错误是"字段 'field_N' 未在 部分声明",必须为每个缺失的 field_N 添加
<field name="field_N" class="java.lang.String"/>声明。这些是占位字段,不可删除。同时确保所有 $F{{field_N}} 引用都有对应的 声明。 - 如果错误是"字段 'field_N' 未在 部分声明"且有 OCR 字段数据,尝试将 $F{{field_N}} 替换为 OCR 中对应的真实字段名(如 $F{{invoice_code}}),同时更新 声明和所有引用。
- 始终检查并修复命名空间:正确的根元素格式必须为:
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd">。删除所有 ns0: 前缀,删除所有xmlns:ns0声明,删除所有元素标签上的ns0:前缀。
当前 JRXML(带错误): {current_jrxml}
编译错误: {error_msg}
错误的自然语言解释: {explanation}
{ocr_context}
{layout_schema_text}
{fidelity_context}
{template_context}
立即生成修正后的 JRXML: