Как правильно использовать GenerateDS для привязки DDEX XML
Меня интересует привязка 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. Я могу успешно сгенерировать привязку для release-messages.xsd, если я использую --no-process-includes с:
./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 каким-то образом перепутаны, и создается циклическая ссылка.
Любой совет здесь?
2 ответа
Вы можете проверить https://github.com/ddexnet котором есть скрипт ddex lint, который вы можете использовать для генерации полных объектов Python, которые проверяются по полной схеме ERN, расположенной по адресу http://ddex.net/xml/2010/ern-main/32.
(Линтер также использует пространство имен ddexC под капотом).
Я создал объектную модель для сообщения New Release как часть DDEXUI, над которой я работаю, и который может вам помочь. Модуль ddex должен дать вам то, что вы можете использовать. Я планирую раздеть его в отдельный модуль в какой-то момент. Пример того, как его использовать, см. В тестовой директории.