Страница 1 из 1
Создание объектов паскаля по XSD схмеме
Добавлено: 25.12.2019 16:34:58
alexs
Кто либо таким занимался?
Или надо будет самому велосипедить?
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 25.12.2019 19:24:57
Pavia
Такого нету. Если сделаете выложите.
Лучше всего run-time создание.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 26.12.2019 08:37:26
alexs
Pavia писал(а):Такого нету. Если сделаете выложите.
Похоже именно так и будет.
Pavia писал(а):Лучше всего run-time создание.
Вот это как?
Я планирую делать на базе своей библиотеки для сериализации объектов. Буду в итоге получать паскалевский модуль. Будет ли перенос всех правил валидации вводимых данных - пока не решил. Мне сейчас хотя бы структуру правильно формировать научиться. А то вручную это делать ...
Оформлю в виде отдельной утилиты для компиляции - по аналогии со своей же утилитой по переводу protobuf в паскаль.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 26.12.2019 10:10:38
Ichthyander
Можно подглядеть у WST... Или даже использовать получится
http://wiki.freepascal.org/Web_Service_Toolkit
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 26.12.2019 10:13:50
alexs
Ichthyander
Спасибо
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 04.01.2020 10:59:18
alexs
Сделал.
Генерим по XSD схеме объекты паскаля для работы с данными из XML
В первом приближении вроде работает.
Тесты проходят - xmllint соглашается с данными.
Исходники
https://github.com/lalexs75/protobuf-fpc в папке compiler/xsd_pas
там же примеры схем, на которых я проверял.
сам конвертер в 2х видах - виузальная утилита и консольное приложение.
для сериализации использую пакет xmlobjects.lpk из этого же репозитария.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 09.07.2020 15:57:42
alexs
Начал работу над поддержкой сериализации объектов в виде JSON.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 09.07.2020 19:07:01
Ichthyander
alexs писал(а): сериализации объектов в виде JSON
Нативный fpjsonrtti это не то? Я этим модулем пользуюсь для сериализации и десериализации JSON
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 10.07.2020 17:39:38
alexs
В принципе смысл тот же
Я его раньше не видел. Надо попробовать.
Мой родился как ответвление от сериализации XML. А там я в первую очередь делал создание объектов на основе XSD схем.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 11.07.2020 18:07:54
alexs
Ichthyander писал(а):alexs писал(а): сериализации объектов в виде JSON
Нативный fpjsonrtti это не то? Я этим модулем пользуюсь для сериализации и десериализации JSON
Попробовал
В постейших случаях поведение одинаково.
Но если надо обрабатывать не заполненные поля - тут уже штатным не получается.
Также некоторые сложные json ответы от других сервисов тоже не получается штатным смоделировать.
Ну и открытые массивы он не умеет.
Для меня эти 3 пункта - критичны.
Ну и тот факт, что я планирую компилятор xsd доработать для вывода json объектов - то же будет хорошо.
Re: Создание объектов паскаля по XSD схмеме
Добавлено: 14.07.2020 10:13:53
serbod
Если интересна сериализация в runtime, то у меня есть пара новых типов Variant - VarDict (словарь, ассоциативный массив) и VarList (список, динамический массив).
Пример использования VarDict:
Код: Выделить всё
var MyDict: Variant;
MyDict := VarDictCreate();
MyDict.Field1 := 1;
MyDict.Field2 := 'test';
WriteLn(MyDict); // {Field1:1,Field2:"test"}
То есть, у переменной типа Variant можно "на ходу" создавать и использовать новые поля типа Variant, в том числе вложенные VarDict и VarList.
Методы:
GetCount() - get stored items count
GetValue(Index) - get item value for given Index (0..GetCount()-1)
GetName(Index) - get item name for given Index (0..GetCount()-1)
GetNameIndex(Name) - get index of item Name, or <0 if Name not found
Исходники:
https://github.com/serbod/NovaLib/blob/ ... rDicts.pas https://github.com/serbod/NovaLib/blob/ ... rLists.pas Модули для сериализации:
https://github.com/serbod/NovaLib/blob/ ... zeBase.pas - базовый класс сериализатора
https://github.com/serbod/NovaLib/blob/ ... onUnit.pas - сериализация JSON
https://github.com/serbod/NovaLib/blob/ ... deUnit.pas - сериализация Bencode