2011-03-16 12 views
5

¿Hay una manera fácil de pasar de un tipo de datos Ocaml a una representación xml correspondiente?¿Cómo convertir un tipo de datos Ocaml a xml y al revés?

Supongamos que tengo los siguientes tipos:

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

type B = B1 | B2 

type C = { 
    my_field: int; 
} 

para el valor SecondA (C {my_field=10}, "just a value") me gustaría llegar tal vez algo como esto:

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

¿Hay alguna biblioteca que puede hacer algo como esto ? O, si tengo que hacerlo yo mismo, ¿cuál sería el mejor enfoque? Tenga en cuenta que quiero aplicar esto a múltiples tipos de datos diferentes.

Conozco las técnicas de programación genéricas de tipo de datos, pero son demasiado "pesadas" para usar en mi caso.

Respuesta

6

Si he entendido bien su pregunta, hay IoXML que puede hacerlo:

IoXML es una extensión de la sintaxis Camlp5 para MLI OCaml y archivos ml que genera analizadores XML e impresoras para todos los tipos que defina .

Hay una similar para JSON: https://github.com/mirage/shelf

Si usted está muy bien con el uso de JSON, sugeriría también mirando ATD/yojson. Este sistema se basa en un lenguaje de definición de datos externo, pero todavía produce definiciones idiomáticas de tipo OCaml.

ACTUALIZACIÓN (15/08/2011): Ahora mi propio Piqi project puede hacer esto también. Puede serializar datos OCaml utilizando 4 formatos diferentes: Google Protocol Buffers, JSON, XML y Piq.

5

No estoy seguro de lo que quiere decir con "técnicas de programación genéricas de tipo de datos". Hay varias bibliotecas que utilizan el preprocesador camlp4 para derivar automáticamente serializadores de declaraciones de tipo:

Aunque ninguno de estos produce XML, podrían ser de alguna ayuda. Especialmente s-expresiones generadas por sexplib no son muy diferentes a XML.

Cuestiones relacionadas