Я пытаюсь написать XML с рекурсивно вложенными элементами.Я хотел бы создать что-то вроде:
main.xsd: определить элементы корня и фрейма.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="sub.xsd"/>
<xsd:element name="root" type="element"/>
<xsd:element name="frame" type="element"/>
<xsd:complexType name="element" mixed="true">
<xsd:choice >
<xsd:element name="subelement" type="sub" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="frame" type="element" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
<xsd:attribute name="id" use="optional" type="xsd:string"/>
</xsd:complexType>
sub.xsd: определить новый субэлемент sub.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="sub" type="sometype"/>
<xsd:complexType name="sometype" mixed="true">
<xsd:choice >
<xsd:element name="somelement" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:>
<xsd:attribute name="id" use="optional" type="xsd:string"/>
</xsd:complexType>
Я хочу проверить приведенный ниже файл xml на python.Я использую lxml / elementree для этого простого xml:
<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="main.xsd"
<root>
<frame>
<sub/>
</frame>
</root>
Идея состоит в том, чтобы иметь элементы типа фрейма, которые могут рекурсивно содержать в себе неограниченные фреймы и подэлементы, следовательно, неограниченные. Проблема в том, что я не могу заставить проверку работать. Правильно ли я определяю xml и xsd? Правильна ли рекурсивная структура для xsd?Там будет несколько элементов, таких как sub.Пример является самым простым (я думаю).Я использую pycharm, поэтому я не вижу никаких ошибок в редакторе, но проверка с помощью lxml не проходит.Могут ли некоторые предоставить решение, которое может быть проверено с использованием libxml в этом случае, когда разные подэлементы определены в разных xsd.
Дайте мне знать, если нужна дополнительная информация.Это первый раз, когда я создаю схему с нуля, так что извините за мой xml.Я проверил другие примеры в стеке, где были определены рекурсивные элементы, но я не могу заставить их работать.Не уверен, что я делаю не так.Любая помощь очень ценится.
Спасибо