Ho diversi file DTD di grandi dimensioni. Ho usato trang per convertirli in file XSD, quindi ho potuto facilmente usarlo da JAXB e altre utilità. Tuttavia, il file XSD generato ha tutti gli elementi dichiarati al livello più alto. Significa che qualsiasi elemento potrebbe essere l'elemento radice di un XML di input. Voglio specificare solo un particolare elemento.Converti DTD in XSD con elemento radice definito (iniziale)
Avere questi elementi radice multipli causa alcuni problemi, ad es. xjc
genera @XmlRootElement
per tutte le classi, quindi ho bisogno di aggiungere ulteriori controlli aggiuntivi.
A quanto ho capito, ho bisogno di riscrivere il XSD generato, spostando <xs:element>
s per <xs:complexType>
s, cambiando element ref
s in element type
s e così via, ma questo sarebbe troppo lavoro scimmia, e non c'è modo di verificare se tutto fatto correttamente.
Esiste un modo più efficiente per farlo?
+1 per una domanda che ha senso, ma chiariamo anche che la conversione da DTD a XSD è sempre solo approssimativa. –
@JirkaHanika Come ho capito, l'XSD generato si avvicina molto bene a un DTD. Tranne forse le definizioni DOCTYPE (nessuna sorpresa però) e alcune cose del namespace. Inoltre alcuni costrutti DTD strani non possono essere trasformati in XSD in modo ordinato. L'unico problema che sto affrontando al momento, che DTD non definisce nozione di elemento radice. (RelaxNG lo definisce con '', ma è mal supportato, 'xjc' non è riuscito con esso). –
kan
Sì, ma lo spazio dei nomi è un problema.Inoltre molti costrutti denominati simili, significano cose piuttosto diverse. +1 alla prima risposta perché non pretende alcuna semantica XSD. –