Страница 1 из 1

Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 25.12.2019 17:34:58
alexs
Кто либо таким занимался?
Или надо будет самому велосипедить?

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 25.12.2019 20:24:57
Pavia
Такого нету. Если сделаете выложите.
Лучше всего run-time создание.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 26.12.2019 09:37:26
alexs
Pavia писал(а):Такого нету. Если сделаете выложите.

Похоже именно так и будет.
Pavia писал(а):Лучше всего run-time создание.

Вот это как?
Я планирую делать на базе своей библиотеки для сериализации объектов. Буду в итоге получать паскалевский модуль. Будет ли перенос всех правил валидации вводимых данных - пока не решил. Мне сейчас хотя бы структуру правильно формировать научиться. А то вручную это делать ...
Оформлю в виде отдельной утилиты для компиляции - по аналогии со своей же утилитой по переводу protobuf в паскаль.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 26.12.2019 11:10:38
Ichthyander
Можно подглядеть у WST... Или даже использовать получится http://wiki.freepascal.org/Web_Service_Toolkit

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 26.12.2019 11:13:50
alexs
Ichthyander
Спасибо

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 04.01.2020 11:59:18
alexs
Сделал.
Генерим по XSD схеме объекты паскаля для работы с данными из XML
В первом приближении вроде работает.
Тесты проходят - xmllint соглашается с данными.
Исходники https://github.com/lalexs75/protobuf-fpc в папке compiler/xsd_pas
там же примеры схем, на которых я проверял.
сам конвертер в 2х видах - виузальная утилита и консольное приложение.
для сериализации использую пакет xmlobjects.lpk из этого же репозитария.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 09.07.2020 16:57:42
alexs
Начал работу над поддержкой сериализации объектов в виде JSON.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 09.07.2020 20:07:01
Ichthyander
alexs писал(а): сериализации объектов в виде JSON

Нативный fpjsonrtti это не то? Я этим модулем пользуюсь для сериализации и десериализации JSON

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 10.07.2020 18:39:38
alexs
В принципе смысл тот же
Я его раньше не видел. Надо попробовать.
Мой родился как ответвление от сериализации XML. А там я в первую очередь делал создание объектов на основе XSD схем.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 11.07.2020 19:07:54
alexs
Ichthyander писал(а):
alexs писал(а): сериализации объектов в виде JSON

Нативный fpjsonrtti это не то? Я этим модулем пользуюсь для сериализации и десериализации JSON

Попробовал
В постейших случаях поведение одинаково.
Но если надо обрабатывать не заполненные поля - тут уже штатным не получается.
Также некоторые сложные json ответы от других сервисов тоже не получается штатным смоделировать.
Ну и открытые массивы он не умеет.
Для меня эти 3 пункта - критичны.

Ну и тот факт, что я планирую компилятор xsd доработать для вывода json объектов - то же будет хорошо.

Re: Создание объектов паскаля по XSD схмеме

СообщениеДобавлено: 14.07.2020 11: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