Как преобразовать тип данных Ocaml в XML и наоборот? - PullRequest
5 голосов
/ 16 марта 2011

Есть ли простой способ перейти от типа данных Ocaml к соответствующему представлению XML?

Предположим, у меня есть следующие типы:

type A =
  | FirstA of B list
  | SecondA of C * string

type B = B1 | B2

type C = {
  my_field: int;
}

Для значения SecondA (C {my_field=10}, "just a value")Я хотел бы получить что-то вроде этого:

<A constructor="FirstA">
   <C><my_field>10</my_field></C>
   <string>just a value</string>
</A>

Есть ли библиотека, которая может сделать что-то подобное?Или, если мне придется сделать это самому, что будет лучшим подходом?Обратите внимание, что я хочу применить это к нескольким различным типам данных.

Мне известны общие методы программирования типов данных, но они слишком «тяжелы» для использования в моем случае.

Ответы [ 2 ]

6 голосов
/ 17 марта 2011

Если я правильно понял ваш вопрос, есть IoXML , который может это сделать:

IoXML - это расширение синтаксиса Camlp5 для файлов OCaml mli и ml, которое генерирует парсеры и принтеры XMLдля всех типов, которые вы определяете.

Для JSON есть аналогичный: https://github.com/mirage/shelf

Если вы хорошо используете JSON, я бы посоветовал также посмотреть ATD / yojson .Эта система опирается на язык определения внешних данных, но все равно выдает идиоматические определения типов OCaml.

ОБНОВЛЕНИЕ (15/15/2011): Теперь мой собственный проект Piqi также может это делать.Он может сериализовать данные OCaml, используя 4 различных формата: буфер протокола Google, JSON, XML и Piq.

5 голосов
/ 17 марта 2011

Я не уверен, что вы имеете в виду под "общими методами программирования типов данных".Существует несколько библиотек, использующих препроцессор camlp4 для автоматического получения сериализаторов из объявлений типов:

Хотя ни один из них не создает XML, они могут быть полезны. Особенно s-выражения, генерируемые sexplib, не слишком отличаются от XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...