artem_dev
@artem_dev

Методы или подходы для проектирования систем на основе спецификации в XML?

Проектирую библитеку на python-е для экспорта\импорта\сериализации\де-сереиализации данных в заданном формате. Формат данных описывается довольно обширной спецификацией на основе XML\XSD, сами данные тоже в XML. Сначала думал реализовать каждую сущность как отдельный класс, но сущностей довольно много, к тому же некоторые из сущностей могут быть как вложенными так и существовать отдельно.


Например:
<data>
    <some_container>
        <some_verb>...</some_verb>
        <some_noun>
            <profile1>
                <address>...</address>
                <other_data>...</other_data>
            </profile1>
            ...
        </some_noun>
    </some_container>
</data>



Я пробовал использовать пару библиотек которые генерируют классы на основе XSD, но получилось слишком громоздко и пользоваться сгенеренным кодом было не реально.


Подскажите существуют ли какие-нибудь устоявшиеся подходы\методы для проектирования и реализции такого рода задач?

Буду рад советам в виде ссылок на статьи, best-practices, книги и т.п. Заранее спасибо :)
  • Вопрос задан
  • 3324 просмотра
Пригласить эксперта
Ответы на вопрос 2
@s0rr0w
Для полноценной работы с XML вам понадобится примерно четыре библиотеки/класса

1. DOM
2. XSD
3. XSL
4. xPath

Иногда xPath входит в состав DOM-библиотек, иногда отдельно существует.

Для импорта используется DOM, тут же на загруженный документ натравливается XSD для проверки валидности структуры.
Экспорт обычнно делается без каких-либо проверок, или же перед экспортом можно провести лишнюю XSD-валидацию.

Сериализация и десериализация должна выполняться DOM-парсером (никак иначе).

XSL и xPath пригодятся, когда потребуется сделать экспорт не в исходный формат файла (HTML, XML другой структуры, csv, rtf, и многое другое), или импорт из произвольных XML-форматов. Процедура простая — на исходный документ натравливаем XSL трансформатор и получаем на выходе искомое.

Посоветовать конкретные библиотеки не смогу, так как не работаю с python'ом.
Выберите из списка лучшее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы