Tengo varios archivos DTD grandes. He usado trang para convertirlos en archivos XSD, por lo que podría usarlo fácilmente desde JAXB y otras utilidades. Sin embargo, el archivo XSD generado tiene todos los elementos declarados en el nivel superior. Significa que cualquier elemento podría ser un elemento raíz de un XML de entrada. Quiero especificar solo un elemento en particular.Convertir DTD en XSD con el elemento raíz (inicio) definido
Tener estos elementos raíz múltiples causa algunos problemas, p. xjc
genera @XmlRootElement
para todas las clases, así que necesito agregar más controles adicionales.
Según entiendo, necesito volver a escribir el XSD generado, moviendo <xs:element>
s a <xs:complexType>
s, cambiando element ref
s en element type
s y así sucesivamente, pero esto sería demasiado trabajo mono, y no hay forma de verificar si todo se hace correctamente.
¿Hay una manera más eficiente de hacer esto?
+1 para una pregunta que tenga sentido, pero también deje en claro que la conversión de DTD a XSD siempre es solo aproximada. –
@JirkaHanika Según tengo entendido, el XSD generado se aproxima mucho a una DTD. Excepto tal vez las definiciones DOCTYPE (aunque no es sorpresa) y algunas cosas del espacio de nombres. Además, algunas construcciones de DTD raras no pudieron transformarse en XSD de forma clara. El único problema al que me estoy enfrentando en este momento es que DTD no define la noción de elemento raíz. (RelaxNG lo define con '', pero es mal soportado, 'xjc' falló con él). –
kan
Sí, pero las cosas del espacio de nombres son un problema.Además, muchas construcciones que se llaman similares, significan cosas bastante diferentes. +1 a la primera respuesta porque no pretende ninguna semántica XSD. –