Esto parece algo fácil de hacer, pero no lo es. XML Schema es un lenguaje de validación de documentos, no un lenguaje de producción de documentos. No te dice cómo hacer un nuevo documento; le dice si el documento que hizo es válido o no. Esas no son lo mismo por una posibilidad remota.
Por ejemplo, es trivial crear un tipo complejo en el esquema XML que consiste en una secuencia de opciones opcionales. Un elemento de foo
puede tener ya sea un niño bar
o baz
, entonces o bien un niño baz
o bat
, a continuación, un niño foo
, bar
, o bat
.Eso hace que para una regla que puede determinar que estos dos elementos son válidos:
<foo>
<baz/>
<baz/>
<bar/>
</foo>
<foo>
<foo>
<bar/>
</foo>
</foo>
Al mismo tiempo, esa regla le da casi cero ayuda en la determinación de cómo tomar una tupla de elementos de datos y crear un foo
elemento de ella.
Generalmente, cuando alguien hace esta pregunta, están viendo uno o dos esquemas que están usando, que definen una estructura de documento relativamente simple. Parece intuitivo que debería ser fácil usar esos esquemas como entrada para un proceso de mapeo. Probablemente lo sea Lo que no es fácil, o incluso posible, es un proceso de asignación que puede tomar como un esquema como entrada.
Lo que he hecho en cambio, en mis proyectos, es simplificar el problema. Creé programas que utilizan CSV y XML y que admiten la validación de esquema, pero en estos programas, el esquema es , salida. He definido un formato de metadatos XML simple, por ejemplo:
<item name="foo" type="string" size="10" allowNulls="true" .../>
<item name="bar" type="date" allowNulls="false" .../>
entonces puedo usar que los metadatos XML para controlar la producción desde la entrada CSV, y puedo también utilizarlo para producir un esquema XML que el programa de mi produce se ajustará a. Si cambio mis metadatos, mi XML y mi esquema cambian apropiadamente.
Por supuesto, si los esquemas son realmente una entrada a su proceso (por ejemplo, son proporcionados por un tercero), esto ni siquiera comenzará a ayudarlo.
¿Ha pensado en utilizar un xkcd? –
También debe especificar qué versión de XSLT tiene restricciones de uso (v1 o v2?): Hace una gran diferencia con la mejor respuesta. Además, ¿está restringido a un proveedor (¿cuál?), O ¿necesita una solución independiente de proveedor/plataforma? –