Gibt es Tools zum Generieren eines XSD-Schemas aus einem XML-Instanzdokument? [geschlossen]

146

Ich suche ein Tool, das ein XML-Instanzdokument verwendet und ein entsprechendes XSD-Schema ausgibt.

Ich bin mir sicher bewusst, dass das generierte XSD-Schema im Vergleich zum manuellen Erstellen eines Schemas begrenzt ist (es werden wahrscheinlich keine optionalen oder sich wiederholenden Elemente oder Datenbeschränkungen behandelt), aber es könnte zumindest als schneller Ausgangspunkt dienen.

Matt Dillard
quelle

Antworten:

65

Das Microsoft XSD-Inferenz-Tool ist eine gute, kostenlose Lösung. Viele XML-Bearbeitungstools wie XmlSpy (von @Garth Gilmour erwähnt) oder OxygenXML Editor verfügen ebenfalls über diese Funktion. Sie sind jedoch ziemlich teuer. BizTalk Server verfügt auch über ein XSD-Inferenz-Tool.

edit: Ich habe gerade die .net XmlSchemaInference- Klasse entdeckt. Wenn Sie also .net verwenden, sollten Sie dies berücksichtigen

Danimal
quelle
1
Wow, Monate später haben Sie mich auf eine großartige Lösung für eine schnelle Konvertierung von XDR in XSD hingewiesen! Vielen Dank!
Bethlakshmi
6
Es war schwierig für mich, einen Download für dieses Tool (xsd.exe) zu finden, aber es befand sich bereits auf meinem System unter C: \ Programme \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin. Ich dachte nur, ich würde teilen, falls das jemandem hilft.
oob
2
Falls jemand Visual Studio nicht installiert hat, ist hier ein alternativer Link zum Herunterladen von xsd: juliankay.com/development/download-xsd-exe
MD
5
Das Verzeichnis scheint xsd.exesich unter Windows 7 geändert zu haben. Ich habe es in vielen Microsoft SDKsVerzeichnissen (also scheint es nicht mehr unbedingt von Visual Studio abhängig zu sein?), Darunter dieses : C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools. Ich musste es in dem Verzeichnis ausführen, das die XML enthält, um einen Fehler über "unzulässige Zeichen im Pfad" zu verhindern, aber das kann an dem langen Dateinamen liegen, den ich habe.
Yahoo Serious
Hat noch jemand Probleme mit dem MS XSD-Inferenz-Tool, eine OutOfMemoryException für eine 200-MB-XML-Datei mit immer noch mehr als 8 GB freiem RAM auszulösen?
Felipe Sabino
54

Sie können eine Open Source- und plattformübergreifende Option verwenden: inst2xsd aus Apaches XMLBeans . Ich finde es sehr nützlich und einfach.

Einfach herunterladen, entpacken und spielen (es erfordert Java).

Dario
quelle
toller Tipp, das hat mir sehr geholfen, danke!
IAdapter
2
OMG Das ist so viel besser als all dieser Powershell-Bullshit! Zumal ich keine XSD-Datei hatte!
Chloe
3
funktionierte wie ein Zauber :: cd <xml_bean_bin_directory>; ./inst2xsd -design ss -simple-content-types smart -enumerations 4 <input_file.xml> -outDir <output_Directory>
Tagebuch
3
Beachten Sie, dass XMLBeans nach attic.apache.org verschoben wurde , der Heimat von Apache-Projekten im Ruhestand. Mit anderen Worten, es wurde seit 2012 nicht aktualisiert.
Magnilex
51

Trang ist hier die beste Option. Open Source und plattformübergreifend (obwohl Java erforderlich ist)

Von der Trang-Website:

Trang konvertiert zwischen verschiedenen Schemasprachen für XML. Es unterstützt die folgenden Sprachen

  • RELAX NG (XML-Syntax)
  • RELAX NG kompakte Syntax
  • XML 1.0-DTDs
  • W3C-XML-Schema

Ein in einer der unterstützten Schemasprachen geschriebenes Schema kann in eine der anderen unterstützten Schemasprachen konvertiert werden, mit der Ausnahme, dass das W3C-XML-Schema nur für die Ausgabe und nicht für die Eingabe unterstützt wird.

Trang kann ein Schema auch aus einem oder mehreren XML-Beispieldokumenten ableiten.

Download-Link

Derferman
quelle
Trang ist auch das in OxygenXML integrierte Tool, um seine XSD-Inferenz aus einem oder mehreren XMl-Dokumenten durchzuführen. Auf den ersten Blick scheint es hier gut zu funktionieren.
Redcalx
4
Wenn Sie nur xsd aus einer XML-Datei generieren müssen, ist trang meiner Meinung nach die beste, schnellste und einfachste.
Kriver
2
Die Trang-Dokumentation ist etwas dünn. Führen Sie aus, um ein Schema zu generieren $ trang file.xml schema.xsd.
Joe Mornin
unter Windows ausführen: java -jar trang.jar file.xml schema.xsd
Alexey Obukhov
Trang hatte Unterstrukturen, die in meinem XML-Beispiel an verschiedenen Stellen in derselben Form erscheinen, und hat die Wiederholung perfekt erkannt und eine minimale XSD generiert, was ich brauchte. Sehr schön!
Tomislav Nakic-Alfirevic
17

Wenn Sie in VS2010 eine XML-Datei in den Editor laden, klicken Sie auf das XML-Menü >> Schema erstellen.

Nathan Donnellan
quelle
3
Und in höheren Versionen
Jay Jay Jay
12

Es gibt auch XML schema learnerwelche auf Github .

Es kann mehrere XML-Dateien aufnehmen und aus all diesen Dateien eine gemeinsame XSD extrahieren .

edorian
quelle
1
Beachten Sie, dass dieses Tool in PHP geschrieben ist, daher ist es nicht trivial einzurichten.
79E09796
5
@ 79E09796 Installieren eines CLIP-PHP mit sudo apt-get install php5-cliund Ausführen ./learn --help--- Ich sehe nicht wirklich den Unterschied zwischen diesem und einem in Java, Python oder Ruby geschriebenen Tool :)
Edorian
1
gerade unter Windows ausprobiert - funktionierte super mit PHP 5.4 ohne Installation. Sowohl PHP- als auch XML-Schema-Lernende wurden gerade entpackt und unter Verwendung der vollständigen Pfade ausgeführt;)
vak
kleiner Kommentar zum localityFeld: Wenn ein Feldname an mehreren Stellen im XML verwendet wird, der sich auf verschiedene Elemente bezieht , ist ein größerer localityWert als 1 erforderlich, z. B. root/itemund root/something/itembezieht sich auf verschiedene Typen, dann --locality 2ist er mindestens erforderlich
Shadi
10

Wenn Sie .Net installiert haben, ist standardmäßig bereits ein Tool zum Generieren von XSD-Schemas und -Klassen enthalten.
Für mich ist das XSD-Tool unter der folgenden Struktur installiert. Dies kann je nach Installationsverzeichnis unterschiedlich sein.

C:\Program Files\Microsoft Visual Studio 8\VC>xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.

xsd.exe -
   Utility to generate schema or class files from given source.

xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]
xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]
xsd.exe <instance>.xml [/outputdir:]
xsd.exe <schema>.xdr [/outputdir:]

Normalerweise funktionieren die Klassen und Schemas, die dieses Tool generiert, recht gut, insbesondere wenn Sie sie in einer .NET-Sprache verwenden

/o:<your path>Normalerweise nehme ich das gewünschte XML-Dokument, schiebe es mit dem Flag durch das XSD-Tool , um ein Schema (xsd) zu generieren, und schiebe dann die xsd-Datei mithilfe der /classes /L:VB (or CS) /o:<your path>Flags durch das Tool zurück , um Klassen zu erhalten, die ich importieren und verwenden kann in meinen täglichen .Net-Projekten

Pat Hermens
quelle
6

Wenn Sie nur XSD möchten, bietet LiquidXML eine kostenlose Version für XSDs und eine grafische Benutzeroberfläche, mit der Sie die XSD optimieren können, wenn Sie möchten. Heutzutage schreibe ich sowieso meine eigenen XSDs von Hand, aber das alles dank dieser App.

http://www.liquid-technologies.com/

Robert Gould
quelle
4

Wenn Sie in der Java-Welt arbeiten, bietet die IntelliJ-Idee auch umfangreiche XML-Unterstützung, einschließlich xsd-Generierung und samle xml aus der xsd-Generierung. Mit Plugins können Sie xslt-Debugger erhalten. - Besonders schön, wenn Sie später Tools wie jaxb verwenden möchten.

Andreas Petersson
quelle
2
Und dies ist auch in der kostenlosen Community-Edition von Idea verfügbar.
lbalazscs
3

Altova XmlSpy macht das gut - eine Übersicht finden Sie hier

Garth Gilmour
quelle
3

Dies ist ein alter Thread, aber ich dachte, es könnte nützlich sein, diesen Link zu posten: Ich habe gerade dieses Tool gefunden: xsd-gen XML-Schema aus XML generieren

und es hat einfach getan, was ich brauchte.

v_e
quelle