如何正确使用GenerateDS进行DDEX XML绑定

时间:2012-11-06 18:48:48

标签: python xml-parsing xsd xml-binding ddex

我对Python XML绑定感兴趣,因为它读取符合此模式的输入文件: http://ddex.net/xml/ern/341/release-notification.xsd

这个XSD虽然取决于其他一些,但最重要的是: http://ddex.net/xml/20120404/ddexC.xsdhttp://ddex.net/xml/20120404/ddex.xsd

我的第一次尝试是使用generateDS。如果我使用--no-process-includes with:

,我能够成功生成release-notification.xsd的绑定
./generateDS.py --no-process-includes -o release-notification.py release-notification.xsd

然而,这给我留下了一个大部分无用的Python对象,因为大多数ComplexType都是在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名称空间以某种方式混淆并创建循环引用。

这里有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

(linter也使用了引擎盖下的ddexC名称空间。)

答案 1 :(得分:0)

我已经为新发布消息创建了一个对象模型作为我正在研究的DDEXUI的一部分,它可以帮助你,ddex模块应该给你一些你可以使用的东西。我打算在某个时候将它剥离到一个单独的模块中。有关如何使用它的示例,请参阅测试目录。