Ich habe mehrere große DTD-Dateien. Ich habe trang verwendet, um sie in XSD-Dateien zu konvertieren, also könnte ich es leicht von JAXB und anderen Dienstprogrammen verwenden. Die generierte XSD-Datei hat jedoch alle Elemente auf der obersten Ebene deklariert. Dies bedeutet, dass jedes Element das Stammelement einer XML-Eingabe sein kann. Ich möchte nur ein bestimmtes Element angeben.Convert DTD zu XSD mit definierten Root (Start) Element
Diese mehreren Wurzelelemente verursachen einige Probleme, z.B. xjc
generiert @XmlRootElement
für alle Klassen, also muss ich zusätzliche Prüfungen hinzufügen.
Wie ich verstehe, ich brauche das generierte XSD neu zu schreiben, <xs:element>
s <xs:complexType>
s bewegen, element ref
s in element type
s verändert und so weiter, aber das ist zu viel Affe Arbeit sein würde, ohne die Möglichkeit, wenn alles getan, um zu überprüfen korrekt.
Gibt es einen effizienteren Weg, dies zu tun?
+1 für eine Frage, die Sinn macht, aber lasst uns auch klarstellen, dass die Konvertierung von DTD zu XSD immer nur ungefähr ist. –
@JirkaHanika Wie ich verstehe, approximiert die generierte XSD eine DTD sehr gut. Außer vielleicht DOCTYPE-Definitionen (keine Überraschung) und etwas Namespace-Zeug. Auch einige seltsame DTD-Konstrukte konnten nicht sauber in XSD umgewandelt werden. Das einzige Problem, mit dem ich momentan konfrontiert bin, ist, dass DTD den Begriff des Wurzelelements nicht definiert. (RelaxNG definiert es mit '', aber es wird schlecht unterstützt, 'xjc' ist damit fehlgeschlagen). –
kan
Ja, aber das Namensraum-Zeug ist ein großes Problem.Zusätzlich bedeuten viele Konstrukte, die ähnlich benannt sind, ziemlich unterschiedliche Dinge. +1 zur ersten Antwort, weil keine XSD-Semantik vorgetäuscht wird. –