0

Haskell での XML ファイルの検証は、HXTRelax NGで正常に機能しますが、結果を取得するにはどうすればよいでしょうか?

次のコードでは、XML ファイルxmlFilenameが Relax NG スキームに対して検証されますrngFilename。エラーの場合、 にエラーが出力されstderr、評価が続行されます。

v <- runX
    ( readDocument
        [ withRemoveWS yes   -- remove redundant whitespace
        , withValidate no    -- don't validate source by DTD
        ] xmlFilename
      >>>
      -- validate source by Relax NG
      validateDocumentWithRelaxSchema [] rngFilename
    )

エラーが発生した場合、hxt-relaxng のドキュメントvに従って、変数には次の情報が保持されます。

検証エラーの場合、ルートにステータス情報を含む空のドキュメントが[出力されます]

欠陥のあるドキュメントを含む結果のツリーは、実際にはstatus(and module) 属性を保持します。

NTree (XAttr "module") [NTree (XText "validate document with Relax NG schema") []],
NTree (XAttr "status") [NTree (XText "2") []]

今質問:

validateDocumentWithRelaxSchema検証エラーがあったかどうかの出力を確認するにはどうすればよいですか?

そのために使用できる定義済みの関数はありますか (ただし、まだ見つかりません)。

4

1 に答える 1

1

わかりました、私は自分で答えを見つけました:

HXT エラー処理は、Text.XML.HXT.Arrow.XmlState.ErrorHandling内の興味深い関数にありますgetErrStatus

v <- runX
    ( readDocument
        [ withRemoveWS yes   -- remove redundant whitespace
        , withValidate no    -- don't validate source by DTD
        ] xmlFilename
      >>>
      -- validate source by Relax NG
      validateDocumentWithRelaxSchema [] rngFilename
      >>>
      getErrStatus
    )

case v of
    --severity [0]=[c_ok]
    [0] -> --continue processing

    --severity: [1]=[c_warn], [2]=[c_err], [3]=[c_fatal], else=something_really_really_bad_happened
    _ -> --do error handling
于 2011-04-05T21:14:14.883 に答える