PyXB:具有相同命名空间的两个版本的 XSD [英] PyXB: two versions of XSDs with same namespace
问题描述
我正在为 TRIAS API v 1.0 和 v 实现一个客户端1.1 使用 PyXB.我面临的问题是,两个 XSD 集合都具有相同的命名空间,但具有相同的元素和不同的内容.所以我用 pyxbgen
为每个版本构建了两个类绑定.但是我现在不能在同一个程序中同时使用它们,因为 PyXB 会抛出 pyxb.exceptions_.NamespaceUniquenessError
:
I am implementing a client for the TRIAS APIs v 1.0 and v 1.1 using PyXB.
The problem I'm facing is, that both XSD collections have the same namespace with same elements with differing content.
So I built two class bindings with pyxbgen
for each version.
However I now cannot use them both within the same program, since PyXB will throw a pyxb.exceptions_.NamespaceUniquenessError
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.7/dist-packages/trias/v1_1/trias.py", line 31, in <module>
import trias.v1_1.siri as _ImportedBinding_trias_v1_1_siri
File "/usr/local/lib/python3.7/dist-packages/trias/v1_1/siri.py", line 30, in <module>
import trias.v1_1._nsgroup as _ImportedBinding_trias_v1_1__nsgroup
File "/usr/local/lib/python3.7/dist-packages/trias/v1_1/_nsgroup.py", line 31, in <module>
import trias.v1_1._D2LogicalModel as _ImportedBinding_trias_v1_1__D2LogicalModel
File "/usr/local/lib/python3.7/dist-packages/trias/v1_1/_D2LogicalModel.py", line 93, in <module>
Namespace.addCategoryObject('typeBinding', 'AbnormalTrafficTypeEnum', AbnormalTrafficTypeEnum)
File "/usr/lib/python3/dist-packages/pyxb/namespace/__init__.py", line 346, in addCategoryObject
raise pyxb.NamespaceUniquenessError(self, '%s: name %s used for multiple values in %s' % (self, local_name, category))
pyxb.exceptions_.NamespaceUniquenessError: http://datex2.eu/schema/1_0/1_0: name AbnormalTrafficTypeEnum used for multiple values in typeBinding
如何在同一个程序中同时使用两个类绑定?我无法编辑源 XSD 文件,因为它们不是由我自己维护并且无法合并,因为它们包含显着差异.
How can I use both class bindings within the same program? I cannot edit the source XSD files, since they are not maintained by myself and cannot merge them, since they contain significant differences.
推荐答案
事实证明,问题出在名为Siri 1.4"的共享子包中.trias API 实际上确实有不同的命名空间,但每个 API 都将 Siri 1.4 作为一个子包发布.单独构建Siri解决了这个问题:
As it turned out, the problem was in a shared sub-package called "Siri 1.4". The trias APIs actually do have different name spaces, but each ship Siri 1.4 as a sub package. Building Siri seperately solved the issue:
Makefile
摘录:
dom: | siri trias-1.0 trias-1.1
siri:
@ echo "Building Siri 1.4."
@ pyxbgen --schema-root=xsd/trias-xsd-v1.1/siri-1.4 -u siri.xsd -m siri --module-prefix=trias.siri --archive-to-file=xsd/archive/siri.wxs
trias-1.0:
@ echo "Building TRIAS v 1.0."
@ pyxbgen --schema-root=xsd/trias-xsd-v1.0 -u Trias.xsd -m trias --module-prefix=trias.v1_0 --archive-path=xsd/archive
trias-1.1:
@ echo "Building TRIAS v 1.1."
@ pyxbgen --schema-root=xsd/trias-xsd-v1.1 -u Trias.xsd -m trias --module-prefix=trias.v1_1 --archive-path=xsd/archive
这篇关于PyXB:具有相同命名空间的两个版本的 XSD的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!