Frage

Im Büro sind wir derzeit eine Anwendung zu schreiben, die XML-Dateien gegen ein Schema generieren, die wir erhalten haben. Wir haben das Schema in einer XSD-Datei.

Gibt es Tool oder Bibliotheken, die wir für die automatisierte Testen verwenden können, um zu überprüfen, dass die erzeugte XML das Schema paßt?

Wir würden es vorziehen, kostenlose Tools, die für die kommerzielle Anwendung geeignet sind, obwohl wir nicht das Schema checker Bündelung werden, so dass es nur von Devs während der Entwicklung nutzbar sein muss.

Unsere Entwicklungssprache ist C ++, wenn das einen Unterschied macht, obwohl ich nicht glaube, es sollte, wie wir die XML-Datei generieren könnte und dann die Validierung tun, indem sie ein eigenes Programm im Test aufrufen.

War es hilfreich?

Lösung

Nach einigen Recherchen, ich denke, die beste Antwort ist Xerces , wie es alle XSD implementiert, ist Quer -Plattform und weit verbreitet. Ich habe eine rel="noreferrer"> von der Kommandozeile mit dem Standard-JRE-Parser validiert , der normalerweise Xerces. Dies kann unter Windows / Mac / Linux verwendet werden.

Es gibt auch eine C ++ Version von Xerces zur Verfügung, wenn Sie lieber, dass verwenden würden. Die StdInParse Dienstprogramm verwendet werden, kann es von der Kommandozeile aufrufen. Auch ein Kommentator unten zeigt auf diese komplettere Wrapper Utility .

Sie können auch xmllint verwenden, die Teil der Libxml ist. Sie können auch bereits installiert. Beispiel für die Verwendung:

xmllint --noout --schema XSD_FILE XML_FILE

Ein Problem ist, dass libxml nicht alle der Spezifikation nicht implementiert, so dass Sie auf Probleme stoßen kann: (

Alternativ, wenn Sie auf Windows verfügbar sind, können Sie verwenden, msxml , aber Sie werden eine Art Wrapper müssen es nennen, wie die GUI ein in dieser DDJ Artikel beschrieben . Allerdings scheint es die meisten Menschen unter Windows verwenden, um einen XML-Editor wie Notepad ++ (wie in Nate Antwort beschrieben) oder XML Notepad 2007 wie suggested von SteveC (es gibt auch einige kommerzielle Editoren, die ich hier nicht erwähnen).

Schließlich werden Sie verschiedene Programme finden, leider zu unterschiedlichen Ergebnissen führen. Dies ist im Wesentlichen auf Grund der Komplexität der XSD spec. Möglicherweise möchten Sie Ihr Schema mit mehreren Werkzeugen testen.

UPDATE : Ich habe in einem Blog-Post .

Andere Tipps

Es ist ein Plugin für Notepad ++ genannt XML-tools dass XML-Verifikation und Validierung gegen eine XSD bietet.

Sie können sehen, wie es zu benutzen hier .

xmlstarlet ist ein Kommandozeilen-Tool, das dies tun wird und mehr:

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
  -w or --well-formed        - validate well-formedness only (default)
  -d or --dtd <dtd-file>     - validate against DTD
  -s or --xsd <xsd-file>     - validate against XSD schema
  -E or --embed              - validate using embedded DTD
  -r or --relaxng <rng-file> - validate against Relax-NG schema
  -e or --err                - print verbose error messages on stderr
  -b or --list-bad           - list only files which do not validate
  -g or --list-good          - list only files which validate
  -q or --quiet              - do not list files (return result code only)

NOTE: XML Schemas are not fully supported yet due to its incomplete
      support in libxml2 (see http://xmlsoft.org)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

Verwendung in Ihrem Fall entlang der Linien würde:

xmlstarlet val --xsd your_schema.xsd your_file.xml

Für Windows gibt es das freie

Die Online- XML-Schema-Validator von Decisionsoft ermöglicht es Ihnen, eine XML-Datei gegen ein bestimmtes Schema zu überprüfen.

Ein XML-Editor für schnelle und einfache XML-Validierung finden Sie unter http: //www.xml -buddy.com

Sie müssen nur das Installationsprogramm starten und danach können Sie Ihre XML-Dateien mit einer einfach validieren Desktop-Anwendung oder die Befehlszeile zu verwenden. Darüber hinaus erhalten Sie auch Unterstützung für Schematron und RelaxNG. Batch-Validierung wird ebenfalls unterstützt ...

2012.01.13 aktualisieren. Das Kommandozeilen-Tool ist kostenlos zu benutzen und verwendet Xerces als XML-Parser

http://www.xmlvalidation.com/

(Achten Sie darauf, die "Validate gegen externes XML-Schema" Box zu überprüfen)

Ich lerne gerade Schema. Ich verwende RELAX NG und mit xmllint zu validieren. Ich bin immer durch die Fehler frustriert aus xmlllint kommen. Ich wünschte, sie waren ein wenig informativ.

Wenn es eine falsche Attribut in der XML ist dann xmllint sagt Ihnen den Namen des nicht unterstützten Attributs. Aber wenn Sie ein Attribut in der XML fehlen erhalten Sie nur eine Nachricht mit dem Element sagen, kann nicht bestätigt werden.

Ich arbeite an einigen sehr komplizierten XML mit sehr komplizierten Regeln, und ich bin neu in dieser so das Aufspüren, das Attribut fehlt, ist eine lange Zeit.

Update: Ich habe gerade ein Java-Tool, das mir viel bin gefallen. Es kann von der Kommandozeile wie xmllint ausgeführt werden und unterstützt RELAX NG: https://msv.dev.java. net /

Ich fand diesen Online-Validator von 'CoreFiling' sehr nützlich -
http://www.corefiling.com/opensource/schemaValidate.html

paar Werkzeuge Nach dem Versuch, meine XSD zu bestätigen, das ist die eine, die mir detaillierte Fehlerinfo gab -. So konnte ich den Fehler im Schema beheben

ein großes visuelles Werkzeug zur Validierung und erzeugen XSD von XML ist IntelliJ IDEA, intuitiv und einfach.

Sie können Ihr XML-Schema zu Microsoft Visual Studio Intellisense verbinden. Diese Option gibt Ihnen sowohl in Echtzeit-Validierung und die automatische Vervollständigung, die einfach genial ist.

Ich habe genau dieses Szenario auf meine kostenlose Kopie von Microsoft Visual C ++ 2010 Express ausgeführt wird.

Ein weiteres Online-XML-Schema (XSD) Validator: http://www.utilities-online.info/ xsdvalidation / .

Ich neige dazu, xsd von Microsoft zu verwenden, um die XSD aus einer .NET-Datei zu helfen, zu generieren. Ich analysieren auch Abschnitte des XML-out mit xmlstarlet. Das endgültige kostenlose Tool, das für Sie von Nutzen sein würde, ist AltovaXML, die unter folgenden URL verfügbar: http: // www.altova.com/download_components.html .

Dies ermöglicht es mir, alle XML-Dateien Kommissionierung bis zu scannen, die durch Analysieren der XML verwenden xsd.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

die XML generieren ich verwenden:    xsd DOTNET.dll / Typ: CFGCLASS & umbenennen schema0.xsd CFGCLASS.xsd

Um den XSD-Namen, den ich verwenden:     xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

Dies ermöglicht es mir, den richtigen XSD Pickup einen Element-Tag in der XML-Datei verwendet wird.

Das Nettoergebnis ist, dass ich ein Bash-Funktion aufrufen können alle XML-Dateien zu scannen und sie zu überprüfen. Auch wenn sie in mehreren Unterverzeichnissen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top