113

XML ファイルと別のファイルに XML スキーマがあり、XML ファイルがスキーマに準拠していることを検証したいと考えています。Pythonでこれを行うにはどうすればよいですか?

標準ライブラリを使用したいのですが、必要に応じてサードパーティのパッケージをインストールできます。

4

8 に答える 8

64

XSDファイルを使用することを意味していると思います。驚くべきことに、これをサポートする Python XML ライブラリは多くありません。ただし、lxml はそうします。lxmlで検証を確認します。このページには、lxml を使用して他のスキーマ タイプで検証する方法もリストされています。

于 2008-11-18T18:16:53.587 に答える
27

「純粋なpython」ソリューションについては、パッケージインデックスリスト:

  • pyxsdの説明では、「純粋な python」ではない (ただし stdlib に含まれている) xml.etree.cElementTree を使用していると書かれていますが、ソース コードは xml.etree.ElementTree にフォールバックすることを示しているため、これは純粋な python としてカウントされます。使用していませんが、ドキュメントによると、スキーマ検証を行います。
  • minixsv : 「「純粋な」Python で書かれた軽量の XML スキーマ バリデーター」。ただし、「現在、XML スキーマ標準のサブセットがサポートされています」と記載されているため、これでは不十分な場合があります。
  • XSVは、W3C のオンライン xsd バリデーターに使用されていると思います (古い pyxml パッケージを使用しているようで、これはもはや維持されていないと思います)
于 2011-04-06T12:53:52.580 に答える
13

http://pyxb.sourceforge.net/にあるPyXBパッケージは、XMLスキーマドキュメントからPythonの検証バインディングを生成します。ほぼすべてのスキーマ構造を処理し、複数の名前空間をサポートします。

于 2009-12-22T12:54:33.477 に答える
7

lxml は etree.DTD を提供します

http://lxml.de/api/lxml.tests.test_dtd-pysrc.htmlのテストから

...
root = etree.XML(_bytes("<b/>")) 
dtd = etree.DTD(BytesIO("<!ELEMENT b EMPTY>")) 
self.assert_(dtd.validate(root)) 
于 2008-11-18T18:09:40.027 に答える