XML属性中无法解析图片外部实体的问题求助
XML外部实体在属性中无法解析的解决方法
问题场景
我有一份将图片作为外部实体的XML文档,XML Schema规定<image>元素的src属性类型为xs:ENTITY,但在Visual Studio Code中验证时触发错误:
The value 'su.jpg' of attribute 'src' on element 'image' is not valid with respect to its type, 'ENTITY'.xml(cvc-attribute.3)
XML文档内容:
<!DOCTYPE catalog [ <!NOTATION jpg SYSTEM "image/jpg"> <!ENTITY su.jpg SYSTEM "su.jpg" NDATA jpg> ]> <catalog> ... <image src="su.jpg" /> ... </catalog>
XML Schema相关片段:
... <xs:element name="image"> <xs:complexType> <xs:attribute name="src" type="xs:ENTITY" use="required" /> </xs:complexType> </xs:element> ...
项目要求二进制数据必须以XML实体形式存在,无法将属性类型改为xs:string。
错误原因
xs:ENTITY类型的属性要求值是已声明的实体名称,而非实体指向的文件名。当前直接填写su.jpg是文件名,并非实体的合法引用;同时实体名su.jpg虽符合XML命名规范,但部分验证工具对包含句点的实体名兼容性较差,也可能引发识别问题。
解决步骤
- 修正实体名称:将实体名改为无特殊字符(如句点)的合法名称,例如
su_jpg,避免兼容性问题; - 属性中引用实体名:将
<image>的src属性值改为修正后的实体名,让验证器识别为合法的实体引用。
修改后的XML文档:
<!DOCTYPE catalog [ <!NOTATION jpg SYSTEM "image/jpg"> <!ENTITY su_jpg SYSTEM "su.jpg" NDATA jpg> ]> <catalog> ... <image src="su_jpg" /> ... </catalog>
这样修改后,XML验证器会正确识别su_jpg为已声明的外部实体,符合xs:ENTITY类型的验证要求。
内容的提问来源于stack exchange,提问作者Kotaka Danski
相关产品推荐
相关产品推荐

