From 83e801a0b805bffb0f849224eff53c1148a8eb47 Mon Sep 17 00:00:00 2001 From: panda <1415243231@qq.com> Date: Sat, 23 May 2026 09:44:08 +0800 Subject: [PATCH] fix: auto-inject JasperReports namespace before XSD validation AI-generated JRXML often omits the xmlns declaration on the root element. The XSD schema requires targetNamespace, so validation would fail with "Element 'jasperReport': No matching global declaration available". _ensure_jr_namespace() detects missing xmlns and injects it before schema validation, making the validator tolerant of namespace-free JRXML. --- validation_service/main.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/validation_service/main.py b/validation_service/main.py index 2a95d29..185ca7c 100644 --- a/validation_service/main.py +++ b/validation_service/main.py @@ -111,11 +111,28 @@ def _check_minimum_content(jrxml: str) -> list[str]: return issues +JR_NAMESPACE = "http://jasperreports.sourceforge.net/jasperreports" + + +def _ensure_jr_namespace(jrxml: str) -> str: + """如果 JRXML 根元素缺少命名空间声明,自动补上。""" + import re + if 'xmlns=' not in jrxml[:500]: + return re.sub( + r'( tuple[bool, str]: """根据 JasperReports XSD schema 验证 JRXML。""" if not SCHEMA_FILE.exists(): return True, "" + jrxml = _ensure_jr_namespace(jrxml) + try: schema_doc = etree.parse(str(SCHEMA_FILE)) xmlschema = etree.XMLSchema(schema_doc)