Выбор элементов из схемы XSD для заполнения в приложении Flask - PullRequest
0 голосов
/ 01 апреля 2020

В конечном счете, я хотел бы создать пример файла xml на основе схемы XSD в приложении Flask, а затем экспортировать входные данные как действительный файл xml.

Я использую xmlschema пакет тоже.

У меня есть структура basi c приложения flask и страница с выпадающим меню, отображающим элементы из XSD.

@app.route('/xml_builder')
def xml_builder():
    xs = xmlschema.XMLSchema('schema_file.xsd')
    dict = sorted(xs.maps.elements.keys())

    return render_template('public/xml-builder.html', get = dict)

Однако я изо всех сил чтобы понять / понять, как заставить его отображать только элементы из основного xsd (схема file.xsd, как описано далее) - при выборе этого элемента из выпадающего меню он должен отображать соответствующие подэлементы / атрибуты из другого xsd файл (schema_types.xsd, как описано далее) в виде меток с текстовым полем рядом с ним, чтобы пользователь мог ввести значение.

Схема состоит из нескольких схем

schema_file.xsd is основная схема и описывает структуру xml файла

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema
            attributeFormDefault="unqualified"
            elementFormDefault="qualified"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:include schemaLocation="schema_types.xsd" />

<xsd:complexType name="InfoData">
        <xsd:sequence>
            <xsd:element name="Shop"
                         type="test:ShopType"
                         maxOccurs="unbounded" />
            <xsd:element name="Town"
                         type="test:TownType"
                         minOccurs="0"
                         maxOccurs="unbounded" />
           </xsd:element>
        </xsd:sequence>
</xsd:complexType>
</xsd:schema>

, а файл schema_types.xsd содержит структуру для элемента

<xsd:complexType name="ShopType">
        <xsd:sequence>
            <xsd:element name="Country"
                         type="xsd:string"
                         minOccurs="0">
            </xsd:element>
            <xsd:element name="City"
                         type="xsd:string"
                         minOccurs="0">
            </xsd:element>
            <xsd:element name="Note"
                         type="xsd:string"
                         minOccurs="0"
                         maxOccurs="unbounded">
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id"
                       type="xsd:string"
                       use="required">
        </xsd:attribute>
        <xsd:attribute name="name"
                       type="xsd:string"
                       use="required">
        </xsd:attribute>
    </xsd:complexType>

Любое направление / г Руководство будет очень признателен

1 Ответ

0 голосов
/ 01 апреля 2020

Различие между «основной схемой» и «другим xsd-файлом» определяется c для вашего сценария. XML Схема не делает такого различия, и я ожидаю, что модуль xmlschema Python тоже не будет.

Если возможно, вы должны объявить targetNamespace для основной схемы и другое targetNamespace для подэлементов схемы. Вам также необходимо изменить xs: include на xs: import. Затем вы можете выбирать элементы на основе их пространства имен.

Имейте в виду, что это решение будет очень точно c для вашей собственной схемы. Универсальный пример генератора документов для XSD - большой проект.

...