Dies scheint wie etwas, das leicht zu tun wäre, aber es ist nicht. XML-Schema ist eine Dokumentüberprüfungssprache, keine Dokumentproduktionssprache. Sie erfahren nicht, wie Sie ein neues Dokument erstellen. Sie erfahren, ob das von Ihnen erstellte Dokument gültig ist. Das sind bei weitem nicht die gleichen Dinge.
Zum Beispiel ist es einfach, einen komplexen Typ im XML-Schema zu erstellen, der aus einer Reihe von optionalen Optionen besteht. Ein foo
Element kann entweder ein bar
oder baz
Kind, dann entweder ein baz
oder bat
Kind, dann ein foo
, bar
oder bat
Kind.Das für eine Regel macht, die bestimmen kann, dass diese beiden Elemente sind gültig:
<foo>
<baz/>
<baz/>
<bar/>
</foo>
<foo>
<foo>
<bar/>
</foo>
</foo>
Zugleich, diese Regel gibt man so ziemlich Null Hilfe bei der Bestimmung, wie ein Tupel von Datenelementen zu nehmen und erstellen Sie ein foo
Element von ihm.
Im Allgemeinen, wenn jemand diese Frage stellt, betrachten sie ein oder zwei Schemas, die sie verwenden, die eine relativ einfache Dokumentenstruktur definieren. Es scheint intuitiv, dass es einfach sein sollte, diese Schemata als Eingabe für einen Mapping-Prozess zu verwenden. Es ist wahrscheinlich. Was nicht einfach oder sogar möglich ist, ist ein Mapping-Prozess, der irgendein Schema als eine Eingabe annehmen kann.
Was ich in meinen Projekten stattdessen getan habe, ist das Problem zu vereinfachen. Ich habe Programme erstellt, die CSV und XML verwenden und Schema-Validierung unterstützen, aber in diesen Programmen ist das Schema eine Ausgabe. Ich habe ein einfachen XML-Metadatenformat definiert, zB:
<item name="foo" type="string" size="10" allowNulls="true" .../>
<item name="bar" type="date" allowNulls="false" .../>
Dann kann ich diese Metadaten verwenden, um XML-Produktion aus CSV-Eingang zu steuern, und ich kann es auch ein Schema, das die XML mein Programm zu produzieren verwenden produziert wird entsprechen. Wenn ich meine Metadaten ändere, ändert sich mein XML und Schema entsprechend.
Natürlich, wenn die Schemas wirklich eine Eingabe für Ihren Prozess sind (z. B. werden sie von einer dritten Partei zur Verfügung gestellt), wird dies nicht einmal anfangen, Ihnen zu helfen.
Haben Sie sich Gedanken über eine xkcd mit? –
Sie sollten auch angeben, auf welche Version von XSLT Sie beschränkt sind (v1 oder v2?) - es macht einen großen Unterschied zur besten Antwort. Sind Sie auf einen Anbieter beschränkt (welcher?), Oder benötigen Sie eine hersteller-/plattformunabhängige Lösung? –