PyXB:具有相同命名空间的两个版本的 XSD [英] PyXB: two versions of XSDs with same namespace

查看:24
本文介绍了PyXB:具有相同命名空间的两个版本的 XSD的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆