Was ist der beste Weg, um eine XML-Datei gegen eine XSD-Datei zu validieren?
Ich bin Generierung von xml-Dateien, die Bedürfnisse zu entsprechen, eine xsd-Datei, die wurde mir geschenkt. Was ist der beste Weg, um zu überprüfen, ob Sie konform sind?
InformationsquelleAutor der Frage Jeff | 2008-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Java-Laufzeit-Bibliothek unterstützt die Validierung. Letztes mal habe ich überprüft, das war der Apache Xerces-parser unter der Decke. Sie sollten wahrscheinlich ein javax.xml.die Validierung.Validator.
Schema Fabrik "Konstante" ist die Zeichenfolge
http://www.w3.org/2001/XMLSchema
definiert XSDs. Der obige code prüft ein KRIEG deployment-descriptor gegen die URLhttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
aber Sie könnten genauso leicht validieren gegen eine lokale Datei.Sollten Sie nicht verwenden die DOMParser, um ein Dokument prüfen (es sei denn, Ihr Ziel ist, erstellen Sie ein Dokument-Objekt-Modell jedenfalls). Dies wird starten Sie die Erstellung von DOM-Objekten, wie es analysiert das Dokument - verschwenderisch, wenn Sie nicht gehen, um Sie zu benutzen.
InformationsquelleAutor der Antwort McDowell
Hier ist, wie man es Xerces2. Ein tutorial für diese, hier (req. signup).
Original Namensnennung: krass kopiert von hier:
InformationsquelleAutor der Antwort SCdF
Bauen wir unser Projekt mit Hilfe von ant, so können wir die schemavalidate Aufgabe, zu prüfen, unsere config-Dateien:
Nun frech config-Dateien werden nicht unser bauen!
http://ant.apache.org/manual/Tasks/schemavalidate.html
InformationsquelleAutor der Antwort chickeninabiscuit
Habe ich diese Seite gefunden, hilfsbereit zu sein, auch.
http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html
Es ist das eine, die tatsächlich für mich gearbeitet, mit einem minimum an Aufwand.
InformationsquelleAutor der Antwort Michael Campbell
Da dies ist eine beliebte Frage, ich möchte auch darauf hinweisen, dass java überprüfen kann, gegen ein "bezeichnet" xsd, zum Beispiel wenn die .xml-Datei selbst gibt ein XSD, mit
xsi:SchemaLocation
oderxsi:noNamespaceSchemaLocation
(oder xsi für bestimmte namespaces) wie angegeben hier:oder SchemaLocation (immer eine Liste von namespace xsd-mappings)
"Wenn Sie ein schema erstellen, ohne Angabe einer URL, Datei oder Quelle, dann der Java-Sprache erstellt, sieht in dem Dokument, das validiert wird, zu finden, das schema zu verwenden. Zum Beispiel:"
und das funktioniert für mehrere namespaces, etc.
Das problem bei diesem Ansatz ist, dass die
xmlsns:xsi
ist wahrscheinlich ein Speicherort im Netzwerk, so dass es dann gehen und traf das Netzwerk mit jedem Validierung, nicht immer optimal.Hier ist ein Beispiel, validiert eine XML-Datei gegen jede XSD-s Referenzen (auch wenn es, ziehen Sie Sie aus dem Netzwerk):
Können Sie vermeiden, ziehen referenzierten XSD ' s aus dem Netz, obwohl die xml-Dateien, die Referenz-url, indem Sie die xsd-manuell (siehe einige andere Antworten hier) oder ein "XML-Katalog" Stil resolver. Der Frühling scheinbar auch abfangen kann die URL-Anfragen zu servieren lokale Dateien-Validierungen. Oder Sie können Ihre eigenen über setResourceResolverex:
Siehe auch hier für ein anderes tutorial.
InformationsquelleAutor der Antwort rogerdpack
Verwendung von Java 7 können Sie die Dokumentation im Paket-Beschreibung.
InformationsquelleAutor der Antwort Paulo Fidalgo
Eine weitere Antwort: da Sie sagten, Sie brauchen, um zu überprüfen Dateien, die Sie generieren (schriftlich), möchten Sie vielleicht zu überprüfen Inhalte, während Sie schreiben, anstatt zuerst das schreiben, dann das Lesen wieder für die Validierung. Sie können sich wahrscheinlich machen, dass mit dem JDK-API für Xml-Validierung, wenn Sie SAX-basierte writer: wenn ja, nur link im validator durch Aufruf von 'Validator.validate(source, result)', wo die Quelle stammt von Ihrem Autor, und das Ergebnis ist wo Ausgabe gehen muss.
Alternativ, wenn Sie verwenden Stax für das schreiben von content (oder eine Bibliothek, die verwendet oder verwenden kann, stax), Woodstox kann auch direkt Unterstützung von Validierung, wenn mit XMLStreamWriter. Hier ist ein Blogeintragdie zeigen, wie das geschehen ist:
InformationsquelleAutor der Antwort StaxMan
Wenn Sie bei der Generierung von XML-Dateien über ein Programm, möchten Sie vielleicht Blick auf die XMLBeans Bibliothek. Über ein Kommandozeilen-tool, XMLBeans wird automatisch generiert und Paket eine Reihe von Java-Objekten auf Basis einer XSD. Dann können diese Objekte zum erstellen eines XML-Dokuments basierend auf diesem schema.
Es hat eine eingebaute Unterstützung für schema-Validierung, und können umwandeln von Java-Objekten ein XML-Dokument und Umgekehrt.
Castor und JAXB andere Java-Bibliotheken dienen einem ähnlichen Zweck zu XMLBeans.
InformationsquelleAutor der Antwort Todd
Wenn Sie eine Linux-Maschine, können Sie das Kostenlose Kommandozeilen-tool SAXCount. Ich fand dies sehr nützlich.
Überprüft er gegen dtd-und xsd.
5s für eine 50MB-Datei.
In debian squeeze es befindet sich im package "libxerces-c-Proben".
Die definition der dtd und xsd in xml! Kann man nicht config Ihnen getrennt.
InformationsquelleAutor der Antwort jens
Sind Sie auf der Suche nach einem tool oder einer Bibliothek?
Soweit Bibliotheken geht, so ziemlich die de-facto-standard ist Xerces2die beide C++ und Java Versionen.
Leb gewarnt, aber es ist ein schweres Gewicht-Lösung. Aber dann wieder, Validierung XML gegen XSD-Dateien ist ein ziemlich schweres problem.
Als für ein Werkzeug, dies zu tun für Sie, XMLFox zu sein scheint, einen anständigen freeware-Lösung, aber nicht dass Sie es nicht persönlich, ich kann nicht sicher sagen.
InformationsquelleAutor der Antwort Adam
Mit JAXB, könnten Sie folgenden code verwenden:
InformationsquelleAutor der Antwort razvanone
Hatte ich für die Validierung einer XML gegen XSD-nur einmal, also habe ich versucht XMLFox. Ich fand es sehr verwirrend und komisch. Die Hilfe-Anweisungen scheinen nicht zu passen das interface.
Landete ich mit LiquidXML Studio 2008 (v6), das war viel einfacher zu bedienen und mehr vertraut (das UI ist sehr ähnlich zu Visual Basic 2008 Express, die ich Häufig verwende). Der Nachteil: die Validierungs-Funktionen nicht in der kostenlosen version, also musste ich die 30-Tage-Testversion.
InformationsquelleAutor der Antwort KnomDeGuerre