我对Python XML绑定感兴趣,因为它读取符合此模式的输入文件: http://ddex.net/xml/ern/341/release-notification.xsd
这个XSD虽然取决于其他一些,但最重要的是: http://ddex.net/xml/20120404/ddexC.xsd和 http://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名称空间以某种方式混淆并创建循环引用。
这里有什么建议吗?
答案 0 :(得分:1)
您可能需要查看具有ddex lint脚本的https://github.com/ddexnet,您可以使用该脚本生成完整的python对象,这些对象根据位于http://ddex.net/xml/2010/ern-main/32的完整ERN架构进行验证。
(linter也使用了引擎盖下的ddexC名称空间。)
答案 1 :(得分:0)
我已经为新发布消息创建了一个对象模型作为我正在研究的DDEXUI的一部分,它可以帮助你,ddex模块应该给你一些你可以使用的东西。我打算在某个时候将它剥离到一个单独的模块中。有关如何使用它的示例,请参阅测试目录。