使用XJC和xml.xsd导入时出错:“无法读取模式文档’xml.xsd’”
我正在尝试在第三方的架构文件(它是Amazon.com的产品API)上运行xjc.好吧,我遇到了麻烦,因为有一个文件,default.xsd,xjc在下面的导入中是borking(它是模式声明后的第一个):
<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" /> 我不是XML专家,但我认为xml.xsd是“核心”XML / XSD库的一部分,XJC默认会知道这个库的细节.但是当我运行任务时,我得到了这个错误:
我尝试将xml.xsd文件从http://www.w3.org/2001/03/xml.xsd下载到包含这些模式文件的目录并再次运行该命令,但xml.xsd不验证:
我准备开始走下兔洞,为什么这不会得到验证,但我决定推迟,因为我认为我错过了一些非常简单或小的东西.我是否需要手动包含xml.xsd导入或者我错过了其他内容? 我正在使用的架构的URL目前在这里: http://g-ecx.images-amazon.com/images/G/01/mwsportal/doc/en_US/products/default.xsd 和这里 http://g-ecx.images-amazon.com/images/G/01/mwsportal/doc/en_US/products/ProductsAPI_Response.xsd 而我只是使用: xjc dirname 解决方法
我下载了你的XSD文件以模仿错误,实际上,当它们按原样下载时,它们会准确地给出你报告的错误.
发生的事情并不是很明显.是的,XML名称空间http://www.w3.org/XML/1998/namespace是特殊的并且是保留的.您不必声明它是否存在,但xml.xsd文件用于Schema合规性,因此这些预定义类型也在XSD架构中定义,以便可以在使用架构时使用这些类型. 所以我的第一个想法是需要将XML命名空间声明为xmlns:xml =“http://www.w3.org/XML/1998/namespace”(通常这是永远不需要的),以便XJC正常运行,但是变化不大. 经过一段时间的来回,我决定使用选项-nv运行xjc,这会转换某些严格的验证规则.这一次,我收到的错误更清楚,并立即指出原因,以及明显的解决方案:
显然,XJC尝试下载DOCTYPE声明引用的DTD: <!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" > 实际上,这不是XJC,而是XSD验证之前的XML解析器.使用的XML解析器是一个验证解析器,这意味着它尝试查找DTD,如果不能,则会中断.您收到的错误不是很有帮助,但正确,如在XML术语中,指向DTD的XML文件不是有效的XML文件(但它可以是格式良好的XML文件和非验证XML处理器,而不是要与XSD架构验证混淆,只需加载XML). 解 但是,XML不需要DTD才能被认为是正确的.您可以使用download the XMLSchma DTD,或者更简单地删除该行,并且无论是否使用-nv开关,处理都将成功. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |