xs:import schemaLocation redirect not following/https在lxml中不受支持?

2024-06-09 20:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我们最近在生产基础设施上采用了https everywhere策略,这导致了XML模式验证方面的一些问题,我想知道是否有人可以帮助我澄清这一点。在

我们在服务器上的静态路径上有可用的模式文档,它们曾经在http://path.to/schema.xsd上可用。它们在那里不再可用,而是位于https://path.to/schema.xsd,但是对原始URL的任何调用都会导致301(永久移动)。在

模式文档本身具有相互引用,特别是父模式包含以下行:

<xs:import namespace="http://example.com/schemas/iso_639-2b/1.0" 
   schemaLocation="http://example.com/static/iso_639-2b.xsd">

(请注意,schemaLocation仍然指向URL的http版本,因为我们没有预料到必须更改它,在重定向到位的情况下)

尝试根据架构验证传入的XML文档时

^{pr2}$

根架构.xsd加载(因为它来自本地磁盘),但是在最后一行,当我们初始化XMLSchema(使用lxml作为底层etree实现)时,我们得到一个异常:

{XMLSchemaParseError}element decl. 'language', attribute 'type': The QName value '{http://example.com/schemas/iso_639-2b/1.0}LanguageCodeType' does not resolve to a(n) type definition., line 41

我的工作原理是,lxml(甚至xmlschema规范,尽管我还没有找到任何文档)要么不遵循重定向,要么不支持https(或者两者都支持!)。在

如果您能提供任何信息和建议,我们将不胜感激。在


Tags: topath文档httpscomhttpurlexample