オフィスでは、与えられたスキーマに対してXMLファイルを生成するアプリケーションを現在作成中です。スキーマは.XSDファイルにあります。
生成されたXMLがスキーマと一致することを確認するための自動テストに使用できるツールやライブラリはありますか?
スキーマチェッカーをバンドルすることはしませんが、開発中に開発者が使用できるようにするだけでよいのですが、商用利用に適した無料のツールをお勧めします。
Xmlファイルを生成してからテストで別のプログラムを呼び出して検証を行うことができるので、私たちの開発言語はC++です。
いくつかの調査の結果、最良の答えは Xerces はXSDをすべて実装しているのでクロスプラットフォームで広く使用されていると思います。このコマンドから検証するための 小さなJavaプロジェクトgithub を作成しました)これはWindows/Mac/Linux上で使用することができます。
C++バージョンのXerces を使用する場合はこれを利用できます。 StdInParseユーティリティ を使用してコマンドラインから呼び出すこともできます。また、以下のコメンターはこの 詳細を示しています完全なラッパーユーティリティ 。
また、 libxml の一部であるxmllintを使用することもできます。既にインストール済みの場合もあります。使用例)
xmllint --noout --schema XSD_FILE XML_FILE
1つの問題は、libxmlが仕様のすべてを実装していないため、問題にぶつかる可能性があることです:(
あるいは、Windowsを使用している場合は、 msxml を使用できますが、この DDJの記事 で説明されているGUIなど)を呼び出すには、何らかのラッパーが必要になります。 Windowsでは、Notepad ++( Nate's answer )や XML Notepad 2007 as SteveC で推奨)に記述されているような)のようなXMLエディタを使用します。ここに)。
最後に、残念ながら、プログラムによって結果が異なることがわかります。これは主にXSD仕様の複雑さによるものです。スキーマをいくつかのツールでテストしたいと思うかもしれません。
UPDATE:私はこれを ブログ記事 )で詳しく説明しました。
Notepad ++ と呼ばれる XML Tools のプラグインがあり、XSDに対するXMLの検証と検証を提供します。
使い方を見ることができます ここ 。
xmlstarlet はこれ以上のことをするコマンドラインツールです。
$ xmlstarlet val --help XMLStarletツールキット:XML文書の検証 使用法:xmlstarlet val <オプション> [<xml-file-or-uri> ... ] where <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
Windowsには無料の XML Notepad 2007 があります。あなたはそれに対して検証するためのXSDを選択することができます
私はXercesを使います。
すばやく簡単にXML検証を行うためのXMLエディタは、 http://www.xml-buddy.com にあります。
インストーラを実行するだけで、使いやすいデスクトップアプリケーションまたはコマンドラインでXMLファイルを検証できます。さらに、SchematronとRelaxNGもサポートされています。バッチ検証もサポートされています...
Update 1/13/2012:コマンドラインツールは自由に使用でき、XMLパーサーとしてXercesを使用します。
(必ず「外部XMLスキーマに対して検証する」ボックスにチェックを付けてください)
私はスキーマを学んでいるだけです。私はRELAX NGを使っており、xmllintを使って検証しています。私はxmlllintから出てくるエラーにイライラしています。私は彼らがもう少し有益であることを願っています。
XMLに誤った属性がある場合、xmllintはサポートされていない属性の名前を教えてくれます。しかし、XMLに属性がない場合は、要素を検証できないというメッセージが表示されるだけです。
私は、非常に複雑な規則を使って非常に複雑なXMLを作成しています。これが初めてなので、どの属性が欠落しているかを突き止めるのには長い時間がかかります。
更新日:私はちょうど私が好きなJavaツールを見つけました。 xmllintのようにコマンドラインから実行でき、RELAX NGをサポートしています。 https://msv.dev.Java.net/
私は 'corefiling'からこのオンラインバリデータが非常に便利だと思いました -
http://www.corefiling.com/opensource/schemaValidate.html
私のxsdを検証するためにいくつかのツールを試した後、これは私に詳細なエラー情報を与えたものです - それで私はスキーマのエラーを修正することができました。
xMLからXSDを検証して生成するための優れたビジュアルツールの1つは、IntelliJ IDEAです。直感的でシンプルです。
XMLスキーマをMicrosoft Visual StudioのIntellisenseに接続できます。このオプションはリアルタイムの検証と自動補完の両方を提供します。
私は、Microsoft Visual C++ 2010 Expressの無料コピーで、この正確なシナリオを実行しています。
他のオンラインXMLスキーマ(XSD)バリデーター http://www.utilities-online.info/xsdvalidation/ 。
私は.NETファイルからxsdを生成するのを助けるためにマイクロソフトからのxsdを使用する傾向があります。私はまたxmlstarletを使用してxmlのセクションを解析します。あなたに役立つであろう最後の無料ツールはaltovaxmlです、これはこのURLで入手可能です: http://www.altova.com/download_components.html .
これは私がxmlを解析することによってどのxsdを使うべきかを選ぶすべてのxmlファイルをスキャンすることを可能にします。
# 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() sed '/ $ //'
これにより、xmlファイル内の要素タグを使用して正しいXSDをピックアップできます。
その結果、bash関数を呼び出してすべてのXMLファイルをスキャンし、それらを検証することができます。たとえそれらが複数のサブディレクトリにあるとしても。