XMLスキーマ(XSD)検証ツール?[閉まっている]


266

オフィスでは現在、与えられたスキーマに対してXMLファイルを生成するアプリケーションを作成しています。スキーマは.XSDファイルにあります。

生成されたXMLがスキーマと一致することを確認する自動テストに使用できるツールまたはライブラリはありますか?

スキーマチェッカーはバンドルしないため、商用利用に適した無料のツールをお勧めします。開発者が開発中に使用できるようにするだけです。

開発言語はC ++です。違いがある場合はxmlファイルを生成し、テストで別のプログラムを呼び出して検証を行うことができるので、そうする必要はないと思います。


132
これらの「建設的でない」質問の多くが、私が検索したものの上位のGoogle検索結果であり、答えが役に立つ
マットフリーク

1
私は建設的でないからどこから来るのか理解しています。正直なところ、これは素晴らしい質問であり、討論や議論が素晴らしい答えにつながることもあります
Matt

22
これにより、管理者は、カウンタ生産される正確な場合である
anon58192932

Maven構築ツールのコンテキストで同様の質問を検討することは価値があるかもしれません。
アルベルト

試してみてくださいcodverter.com/src/xmltoxsd
jonathana

回答:


239

いくつかの調査の結果、XSDのすべてを実装するクロスプラットフォームで広く使用されているXercesが最良の答えだと思います。デフォルトのJREパーサー(通常はXerces)を使用してコマンドラインから検証するために、githubで小さなJavaプロジェクトを作成しました。これは、Windows / Mac / Linuxで使用できます。

使用する場合は、XercesのC ++バージョンもあります。StdInParseユーティリティは、コマンドラインからそれを呼び出すために使用することができます。また、以下のコメンターは、このより完全なラッパーユーティリティを示しています

libxmlの一部であるxmllintを使用することもできます。すでにインストールされている可能性があります。使用例:

xmllint --noout --schema XSD_FILE XML_FILE

1つの問題は、libxmlがすべての仕様を実装していないため、問題が発生する可能性があることです:(

または、Windowsを使用している場合はmsxmlを使用できますが、このDDJ記事で説明されているGUIなど、ラッパーを呼び出すには何らかのラッパーが必要になります。しかし、それは(で説明したようにWindows上のほとんどの人が++メモ帳などのXMLエディタ、使いようでネイトの答え)または2007をXMLメモ帳としてSteveCによって提案(私はここでは言及しませんいくつかの商用のエディタもあります)。

最後に、残念なことに、さまざまなプログラムがさまざまな結果をもたらすことがわかります。これは主にXSD仕様の複雑さによるものです。いくつかのツールを使用してスキーマをテストすることができます。

更新:これについてはブログの投稿で詳しく説明しています。


1
次の情報が役に立ちました。jmvanel.free.fr
マシューヘ

StdinParseの使用例(Linuxの場合)は便利です:StdInParse -n -s -f -v = always <XML_FILE。XML_FILEにはスキーマの場所を含める必要があります。私にとっては、xmllintよりも完全な結果が得られます。
helcim 2013

3
すべてのXSDを手動でフィードする代わりに、xsi:schemaLocationを使用するようにプログラムに要求する方法はありますか?
Gabor Garami 2014

@GaborGarami現時点ではありませんが、機能のリクエストです:github.com/amouat/xsd-validator/issues/5
Adrian Mouat 2014

1
xmllint残念ながら、XML正規表現に準拠していないため、一部の有効なXML正規表現は通過しません
Sergey

112

XSDに対するXML検証と検証を提供するXMLツールと呼ばれるNotepad ++のプラグインがあります。

使い方はこちらから


5
-1、このプラグインはインストールが
面倒です

2
npp 5.8.6、XMLTools 2.3.1 unicode beta2 r805でテストしましたが、正常に動作します。
パラニ

5
素晴らしいプラグイン。インストールのヘルプについては、Notepad ++ XmlToolsがインストールさないを参照してください。
ladenedge 2011

16
また、バージョン5.8.7では、Notepad ++独自のプラグインマネージャ(「プラグイン/プラグインマネージャ」)により、インストールプロセスが自動化されます。
2011

1
@FranzEbner私はこれと同じ問題を抱えていました。たとえば、XMLそれ自体がXSDファイルを参照している場合、xsi:noNamespaceSchemaLocation="file.xsd"XMLツールは「設定」ダイアログを表示する代わりに、それを使用しようとします。
theblang 2013

22

xmlstarletは、これ以上のことを行うコマンドラインツールです。

$ xmlstarlet val --help
XMLStarletツールキット:XMLドキュメントの検証
使用法:xmlstarlet val <options> [<xml-file-or-uri> ...]
ここで<options>
  -wまたは--well-formed-整形式のみを検証します(デフォルト)
  -dまたは--dtd <dtd-file>-DTDに対して検証
  -sまたは--xsd <xsd-file>-XSDスキーマに対して検証
  -Eまたは--embed-埋め込みDTDを使用して検証
  -rまたは--relaxng <rng-file>-Relax-NGスキーマに対して検証
  -eまたは--err-stderrに詳細なエラーメッセージを出力します
  -bまたは--list-bad-検証しないファイルのみをリストします
  -gまたは--list-good-検証するファイルのみをリストします
  -qまたは--quiet-ファイルをリストしません(結果コードのみを返します)

注:XMLスキーマは不完全であるため、まだ完全にはサポートされていません
      libxml2でのサポート(http://xmlsoft.orgを参照)

XMLStarletは、クエリ/編集/チェック/変換するコマンドラインツールキットです。
XMLドキュメント(詳細については、http://xmlstar.sourceforge.net/を参照)

あなたの場合の使用法は次のようなものです:

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
警告がXMLスキーマを完全にサポートしていないことについてどれほど深刻か知っていますか?
Jason Dagit 2008

2
他の回答による判断xmlstarletは、そのxsd実装では少し弱いです。
Jason Dagit 2008

3
xmlstarletは内部でlibxml2を使用するだけなので、libxml2にバンドルされ、受け入れられた回答で説明されているxmllintを使用する方がおそらく簡単です。
Adrian Mouat 2013年

@JasonDagit、...それはxmllintとまったく同じように弱く、同じライブラリ実装を使用しています。
Charles Duffy

コンテンツモデルは決定論的ではありません。:-(
グレッグ

16

Windowsには、無料のXML Notepad 2007があります。検証するXSDを選択できます

更新:さらに良いことに、XMLツールプラグインでNotepad ++を使用します



3

私はXercesを使用しています:

http://xerces.apache.org/xerces-c/


1
XSLT 2.0のXSDに対してXSLTファイルの検証をチェックするためにコンソールから使用できるコマンドラインはありますか?
Alexis Wilke

はい。CLIツールをでインストールしsudo apt install libxerces-c-samples、でドキュメントを確認できますStdInParse -v=always -n -s < document.xml
jgrocha


2

私はスキーマを学んでいます。私はRELAX NGを使用し、xmllintを使用して検証しています。xmlllintから発生するエラーに不満を感じています。もう少し情報があったらいいのにと思います。

XMLに誤った属性がある場合、xmllintはサポートされていない属性の名前を通知します。ただし、XMLに属性がない場合は、要素を検証できないことを示すメッセージが表示されます。

非常に複雑なルールを使用して非常に複雑なXMLに取り組んでいますが、これは初めてなので、どの属性が欠落しているかを追跡するのに時間がかかります。

更新:とても気に入っているJavaツールを見つけました。xmllintのようなコマンドラインから実行でき、RELAX NGをサポートしますhttps : //msv.dev.java.net/


2

「corefiling」からのこのオンライン検証ツールは非常に便利であることがわかりました-http
://www.corefiling.com/opensource/schemaValidate.html

私のxsdを検証するためにいくつかのツールを試した後、これは私に詳細なエラー情報を与えたものです-したがって、スキーマのエラーを修正することができました。


2

XML検証をすばやく簡単に行うためのXMLエディターは、http: //www.xml-buddy.comから入手できます

インストーラを実行するだけで、使いやすいデスクトップアプリケーションまたはコマンドラインでXMLファイルを検証できます。さらに、SchematronとRelaxNGもサポートされます。バッチ検証もサポートされています...

アップデート1/13/2012:コマンドラインツールは無料で使用でき、XercesをXMLパーサーとして使用します。


1

XMLからXSDを検証および生成する優れたビジュアルツールの1つは、直観的でシンプルなIntelliJ IDEAです。


1

XMLスキーマをMicrosoft Visual StudioのIntellisenseに接続できます。このオプションは、リアルタイムの検証とオートコンプリートの両方を提供します。

私は、Microsoft Visual C ++ 2010 Expressの無料コピーでこのシナリオを実行しています。



0

マイクロソフトのxsdを使用して、.NETファイルからxsdを生成する傾向があります。また、xmlstarletを使用してxmlのセクションを解析します。あなたに役立つ最後の無料ツールはaltovaxmlで、次のURLから入手できます:http : //www.altova.com/download_components.html

これにより、すべてのxmlファイルをスキャンして、xmlを解析することで使用する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
}

私が使用するxmlを生成するには:xsd DOTNET.dll / type:CFGCLASS&schema0.xsd CFGCLASS.xsdの名前を変更します

私が使用するxsd名を取得するには:xmlstarlet sel -t -m / XXX / * -v local-name()$ 1 | sed 's / $ //'

これにより、xmlファイル内のelementタグを使用して正しいXSDを取得できます。

最終的な結果として、bash関数を呼び出してすべてのXMLファイルをスキャンし、検証することができます。複数のサブディレクトリにある場合でも。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.