2009-07-23 10 views
14

私はいつもスキーマに対する妥当性検査がthinkosに対して非常に重要であると判断しており、XMLファイルを手書きで書く必要のあるプロジェクトの一部として検証チェックを組み込むことを望みます長さが100ライン。私のテキストエディタにはかなり良いCLI統合機能があるので、私はコマンドラインバリデーターを探しています。Windows用のコマンドラインXMLバリデータ

私はグーグル経由で任意の明確な勝者を見つけられませんでしたとき、私はここの周りの突きとsimilar questionを見つけましたが、ツールのどれもが非常に私のニーズが合うよう提案しません:

  • libxml(cygwinの経由) - ん行番号を報告しない。私には分かりませんここでエラーがあります。
  • msxml - コマンドラインから実行できません。
  • xerces-c - Visual Cのコピーが必要ですか?
  • ​​- コマンドラインから実行できません。
  • xmlstarlet - 不適切、それはプロジェクトの外部ですので、私はそれを変更することはできません - - 不十分なXSDのサポート*

(*スキーマは、私が置換グループを使用してに対して有効だ窒息するxmlstarletを引き起こします有効なファイルでさえも)

これは、既存のソリューションを探してPythonのハンマーに達することをあきらめてしまう問題を解決するポイントですが、PythonのXMLサポートはよく知られています。実際には、それを「悪名高い」に任せておきましょう。

私は元のツールを探しています。私の要件は非常に単純です:Win32で

  • 実行する(Windows XP SP3は、具体的に)
  • コマンドライン;私のエディタはstdin/-out/-err、引数、一時ファイルなどのあらゆる組み合わせで動作します。
  • XSDのサポート(特に名前空間と置換グループ)
  • はエラーが発生した行番号を報告します!

このようなツールはありますか?私はVisual Studioや友達(あまりにも肥満、IMO)をインストールする必要はありませんが、私はすでにCygwinとPythonの両方をインストールしている。

答えて

13

最初のオプションxmllint(libxml2)は、xml(およびxsd)のエラーの行番号を示します。おそらく、それ以降のバージョンが必要です。私は要素を受け入れることxmllintに気づいた:

> xmllint --version 
xmllint: using libxml version 20627 

出力例:

invalidXml.xml:4: element c: Schemas validity error : Element 'c': This element is not expected. Expected is (b). 
invalidXml.xml fails to validate 
<?xml version="1.0"?> 
<invalidXmlEg> 
    <a/> 
<!-- <b></b> --> 
    <c/> 
</invalidXmlEg> 

のxsdがある:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="invalidXmlEg"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="a" type="xs:string" /> 
     <xs:element name="b" type="xs:string" /> 
     <xs:element name="c" type="xs:string" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

NOTE私はちょうどである私のコピーを使用して、両方の確認しました名前を付けてはならない(例: "<invalidXml.xsd>")が、これはあなたの仕事に影響しないようです。バージョンの一部 "でコンパイルさ" を追加

EDIT

compiled with: Threads Tree Output Push Reader 
Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy 
C14N Catalog XPath XPointer XInclude Iconv ISO8859X 
Unicode Regexps Automata Expr Schemas Schematron 
Modules Debug Zlib 
+0

興味深い!私が使っているバージョンは20703で、これは "Element 'c'を生成します:この要素は期待されていません。(b)。"(ほとんど同じですが行番号がありません)私が掘り起こすことができるかどうか、そして古いバージョンを見なければならないでしょう。 –

+0

後ろのステップと思われる...ライン番号が含まれているかどうかのオプションを追加したのだろうか?ドキュメントをチェックする価値があるかもしれません(多分--verbose)。または...それはおそらく、コンパイルされたものと関係があるでしょうか?私はそれを含んでいませんでしたが、私はそれを追加します(私はLinuxでも動いていますが、違いはありません):スレッドツリー出力プッシュリーダーパターンライターSAXv1 FTP HTTP DTDValid HTML Legacy C14NカタログXPath XPointer XインクルードIconv ISO8859X Unicode Regexps Automata ExprスキーマSchematronモジュールDebug Zlib – 13ren

+0

Cygwinの 'libxml'のバージョンが同じオプションでコンパイルされているように見え、' --verbose'のようなオプションはないようです。私は公式サイトから2.6.27のWin32バイナリを入手してしまった。うまくいく。確かに後ろのステップ。 :-) –

1

Visual Studio 2008 Expressのいずれかのエディションを試してみることもできます。検証はもちろん、XML Intellisense、XMLスニペット、XMLスキーマビューなど、今よりはるかに優れたXMLサポートが提供されています。

+0

私は、devenvがコマンドライン上でXMLファイルを検証できるのではないかと疑います。 – Joey

+0

私はそれを示唆していませんでした。私はUIの経験があなたがXMLファイルでどのように作業するかを変更するのに十分良いかもしれないことを示唆しています。 –

2

Windows PowershellPowerShell Community eXtensionsとすることをお勧めします。ウェル構成判別用

テストおよび任意XMLスキーマに対して検証:PSCXは以下Get-Helpの詳細な説明を持つテスト-XMLコマンドレットを有します。 targetName スペースの指定は処理されません。検証エラーメッセージを表示するには、-Verboseフラグを指定します。

私はそれが列番号でエラーを報告するかどうかわかりませんが、3アウト4は悪くありません。

0

のXerces-Jは、サンプルアプリケーション、jaxp.SourceValidatorが付属しています。 XMLファイルをフィードして検証することができます。

Xerces-Cについては、自分で使ったことはありませんが、Visual C++をすべて必要としないことが分かっています。ランタイムファイルです。これらは、マイクロソフトとは別にダウンロードできます。 StdInParse

3

上記のように、libxmlのxmllintは行番号を報告します - おそらくバージョンの問題があります。 libxml/libxsltのネイティブ(非Cygwin版)のツールを入手すると便利でしょう。http://www.zlatkovic.com/libxml.en.html

また、Sunからmsvを見ることもできます。 XSDの完全な実装ではありませんが、仕事をする可能性があります(一般的にRelaxNGの検証に使用します)。

1

コメントできませんが、xmllint(20708)の最新バージョンはIgor Zlatkovicのよく

関連する問題