3. 导入 EcoSpold2 报错:命名空间与必填字段校验
EcoSpold2 导入失败的校验链路
EcoSpold2 数据集本质是一个 XML 文件(通常为 .spold 或 .xml),OpenLCA 在导入时会先做 XML 结构解析,再做 EcoSpold2 模式校验。报错信息通常分两类:一类是解析器直接抛出的命名空间/标签错误,另一类是校验器提示某个必填字段缺失或为空。两类错误的定位入口不同,需要先分清。
第一步:从错误提示判断失败阶段
OpenLCA 导入 EcoSpold2 时,错误提示的措辞能直接指向失败阶段。常见提示与对应判断如下:
| 错误提示关键词 | 失败阶段 | 优先检查对象 |
|---|---|---|
| “Unexpected element”“not bound”“namespace” | XML 解析 | 根节点 xmlns 声明、元素前缀 |
| “missing required”“empty”“null” | 模式校验 | 必填字段标签与内容 |
| “reference”“UUID not found” | 模式校验(引用) | 流/单位/地理引用 UUID |
如果提示里出现命名空间相关字样,先不要急着改字段,因为解析器在命名空间不匹配时可能连字段都读不到,后续校验报错只是连带结果。
第二步:定位命名空间缺失
用文本编辑器打开 .spold 文件,查看根元素。合法的 EcoSpold2 根节点应类似:
<ecoSpold xmlns="http://www.EcoInvent.org/EcoSpold/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<metaInformation>...</metaInformation>
<processInformation>...</processInformation>
</ecoSpold>
常见问题有三种:根节点完全没有 xmlns;xmlns 值写成了旧版或其他命名空间;子元素使用了未声明的前缀(如 es2:ecoSpold 却没有声明 xmlns:es2)。修正方式是补全或改正根节点声明,并确保所有带前缀的元素都有对应声明。
第三步:定位必填字段为空
命名空间修正后重新导入,若仍失败,错误提示会指向具体字段。EcoSpold2 过程数据集里高频必填项包括:
activityName:活动名称,不能为空字符串。geography下的shortName:地理范围代码,如CN、GLO。unitName:参考单位,如kg、MJ。amount:交换量数值,不能为空或非数字。UUID:数据集唯一标识,缺失会导致引用无法建立。
注意“字段存在但内容为空”和“标签缺失”是两种不同情况。前者形如 <activityName></activityName>,后者是整段标签不存在。校验器对两者的报错措辞可能不同,但修正方式都是补上有效值。
第四步:修正并重新导入验证
修正后不要直接覆盖原文件,先另存为 _fixed 版本,再导入。验证时关注三点:导入日志中不再出现命名空间或必填字段错误;数据集出现在导航树对应分类下;打开数据集能看到活动名称、地理、单位与交换量均正确显示。若导入成功但字段显示为空,说明修正时填入了占位值而非真实值,需要回查。
导入前可用任意 XML 格式化工具先检查文件是否良构(well-formed)。良构是模式校验的前提,标签未闭合、属性引号缺失这类问题会先于命名空间错误暴露。
不要为了通过校验而随意编造 UUID 或地理代码。UUID 冲突会导致数据集覆盖或引用错乱,地理代码不合法会在后续计算中产生错误结果。