4

我对用于读取符合此架构的输入文件的 Python XML 绑定感兴趣:http: //ddex.net/xml/ern/341/release-notification.xsd

不过,此 XSD 依赖于许多其他 XSD,最重要的是:http: //ddex.net/xml/20120404/ddexC.xsdhttp://ddex.net/xml/20120404/ddex.xsd

我的第一次尝试是使用generateDS。如果我使用 --no-process-includes ,我能够成功地为 release-notification.xsd 生成绑定:

./generateDS.py --no-process-includes -o release-notification.py release-notification.xsd

但是,这给我留下了一个几乎没用的 Python 对象,因为大多数 ComplexTypes 是在ddexC.xsd中定义的。

如果我在没有 --no-process-includes 的情况下尝试它,我会得到:

RuntimeError: Extension/restriction recursion detected.
Suggest you check definitions of types ArtistRole and ArtistRole.

所指的定义是这样的:

<xs:element name="ArtistRole" maxOccurs="unbounded" type="ddexC:ArtistRole">
....
<xs:complexType name="ArtistRole">
      <xs:simpleContent>
         <xs:extension base="ddex:ArtistRole">
....

因此,似乎 ddex 和 ddexC 命名空间以某种方式混合在一起,并创建了一个循环引用。

这里有什么建议吗?

4

2 回答 2

1

您可能想查看https://github.com/ddexnet,它有一个 ddex lint 脚本,您可以使用该脚本生成完整的 python 对象,这些对象根据位于http://ddex.net/xml/的完整 ERN 模式进行验证2010/ern-main/32

(linter 在底层也使用了 ddexC 命名空间)。

于 2013-09-20T06:22:23.417 回答
0

我已经为新发布消息创建了一个对象模型,作为我正在处理的DDEXUI的一部分,这可能会对您有所帮助,ddex 模块应该为您提供一些您可以使用的东西。我计划在某个时候将它剥离到一个单独的模块中。有关如何使用它的示例,请参见测试目录。

于 2014-01-20T00:45:15.113 回答