Java で XMLSchema に対して検証を行っていますが、無効なコンテンツ モデルがあると SAXParseExceptions がスローされます。
これらの例外を使用して、検証が失敗した場所を強調しますが、SAXParseExceptions は少しレベルが低すぎるようです。
たとえば、列挙の失敗の場合、提供された値が 1 つの例外でコンテンツ モデルと一致せず、次の例外でそれが適用される要素と一致しないという有効性エラーが発生します。
関連するエラーをまとめてマージし、例外テキストを使用可能な例外プロパティに解析するために、少し抽象化するユーティリティが必要だと考えています。
これは合理的なアプローチですか、それとも何か不足しているだけですか、それともライブラリまたはヘルパー クラスですか?
@timgilbert を更新してください。返信ありがとうございます。
たとえば、インターネットで見つけた SAXParseException
cvc-pattern-valid: Value 'en' is not facet-valid
with respect to pattern '([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*'
私にとって重要なことは
- この例外が適用される要素「en」。exception.getElement() などを呼び出せないのはなぜですか? また、問題の要素への XPath を呼び出せないのはなぜですか? 行番号と列番号よりもメモリ内ドキュメントの方が便利です!
- パターン検証の失敗です。考えられる失敗の種類の列挙と適切な失敗への参照のようなものを取得できないのはなぜですか?
- 検証が失敗した実際のパターン。
- 次に別の例外がスローされ、マージする必要がある問題の原因となった「en」要素の値が通知されます
私ができるようにしたいことの例は、人々にドキュメントを送信してもらい、検証が失敗した場所でユーザーフレンドリーなメッセージでドキュメントを強調表示することです-上記のエラーメッセージはあまりフレンドリーではないようです...解析する必要があります一重引用符で囲むと、事故が起こるのを待っているように感じます:)
「要素への参照」のやり方が間違っているのではないかと思います。おそらく、検証の一部としてデフォルトでドキュメントのアイデンティティ変換を行い、検証エラー属性で変換を強化する必要がありますCSSで抽出できます。メッセージをより使いやすくするためにメッセージを解析する必要がある場合、それでも役に立ちません...
Re: タイト バインディング、javax.xml.validation.Validator.validate() はとにかく org.xml.sax.SAXException をスローします。
乾杯