PyXB:具有相同命名空间的两个版本的 XSD

PyXB: two versions of XSDs with same namespace

我正在使用 PyXB 实现 TRIAS API v 1.0 和 v 1.1 的客户端。 我面临的问题是,两个 XSD 集合具有相同的命名空间,具有相同的元素和不同的内容。 所以我为每个版本构建了两个 class 与 pyxbgen 的绑定。 但是我现在不能在同一个程序中同时使用它们,因为 PyXB 会抛出 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

如何在同一个程序中使用两个 class 绑定? 我无法编辑源 XSD 文件,因为它们不是由我自己维护的,也无法合并它们,因为它们包含显着差异。

事实证明,问题出在名为 "Siri 1.4" 的共享子包中。 trias API 实际上确实有不同的名称空间,但每个 Siri 1.4 都作为子包提供。单独构建 Siri 解决了问题:

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