100 MB を超える大きな XML ファイルがあり、このファイルの構造が有効かどうかを確認したいと考えています。
このファイルをロードしようとすることができますDOMDocument
; たとえば、「XML ドキュメントを解析できますが、検証はできません」という PHP XML パーサーで読み取ることができます。
XMLファイルをメモリに完全にロードせずにこれを行う方法はありますか?
100 MB を超える大きな XML ファイルがあり、このファイルの構造が有効かどうかを確認したいと考えています。
このファイルをロードしようとすることができますDOMDocument
; たとえば、「XML ドキュメントを解析できますが、検証はできません」という PHP XML パーサーで読み取ることができます。
XMLファイルをメモリに完全にロードせずにこれを行う方法はありますか?
まず、検証に使用しているスキーマの種類がわかりません:DTD、XSD、RelaxNG?
次に、PHP について言及していますが、ソリューションが PHP に基づく必要があるかどうかについては言及していません。たとえば、Java を使用できますか。
一般に、スキーマに対する XML ドキュメントの検証はストリーミング可能な操作であり、XML ドキュメントのツリー表現をメモリ内に構築する必要はありません。自分の環境で動作するストリーミング バリデーターを見つけるのは難しくありませんが、環境が何であるか (および使用しているスキーマ言語) を知る必要があります。
XMLReaderクラスを調べる必要があると思います。より具体的には、 XMLReader::setSchemaです。
あなたが言っていることについて考えてみてください。メモリ内にないデータに対して操作を実行したい。それはまったく意味がありません...操作から参照したい場合は、最終的にはメモリ内にある必要があります。
一度にすべてのデータをメモリにロードしたくない場合は、分割統治法を実行できます。ファイルが非常に大きい場合は、マップ削減ジョブを複数のプロセスで実行できますが、使用されるメモリの量は減りません。
XML 構造が有効かどうかを確認するだけであれば、PHP の XML パーサーを使用できます。DTD に対してドキュメントを検証しません。つまり、検証しないということです。
これらのエラー コードはすべて、解析中に XML 構造が無効であることが判明した場合に返される可能性があります。