У меня проблемы с получением lxml для успешной проверки некоторых xml. Схема XSD и файл XML взяты из документации Amazon, поэтому должны быть совместимы. Но сам XML относится к другой схеме, которая не загружается.
Вот мой код, основанный на учебнике lxml :
xsd_doc = etree.parse('ProductImage.xsd')
xsd = etree.XMLSchema(xsd_doc)
xml = etree.parse('ProductImage_sample.xml')
xsd.validate(xml)
print xsd.error_log
"ProductImage_sample.xml: 2: 0: ОШИБКА: SCHEMASV: SCHEMAV_CVC_ELT_1: Элемент 'AmazonEnvelope': нет подходящего глобального объявления для корневого каталога проверки."
Я не получаю ошибок, если я проверяю по amzn-envelope.xsd вместо ProductImage.xsd, но это лишает смысла видеть, является ли данный канал изображений действительным. Кстати, все упомянутые xsd и xml файлы находятся в моем рабочем каталоге вместе с моим скриптом python.
Вот фрагмент примера xml, который обязательно должен быть действительным:
<?xml version="1.0"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>Q_M_STORE_123</MerchantIdentifier>
</Header>
<MessageType>ProductImage</MessageType>
<Message>
<MessageID>1</MessageID>
<OperationType>Update</OperationType>
<ProductImage>
<SKU>1234</SKU>
Вот фрагмент схемы (этот файл не является общедоступным, поэтому я не могу показать все это):
<?xml version="1.0"?>
<!-- Revision="$Revision: #5 $" -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:include schemaLocation="amzn-base.xsd"/>
<xsd:element name="ProductImage">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="SKU"/>
Я могу сказать, что после включения в amzn-base.xsd не будет достигнуто определение тега AmazonEnvelope
. Поэтому мои вопросы таковы: может ли lxml загрузить схемы с помощью тега типа <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
. И если нет, то как я могу проверить свой канал изображений?