任意のXMLドキュメントを検証する方法を決定するための100%確実なプロセスはありません。
たとえば、このバージョン2.4のWebアプリケーションデプロイメント記述子は、ドキュメントを検証するためのW3スキーマを指定します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
ただし、これは同じことを表現するための同様に有効な方法です。
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee">
RELAX NGには、ドキュメント内で使用すべきヒントを提供するメカニズムがないようです。検証メカニズムは、プロデューサーではなく、ドキュメントのコンシューマーによって決定されます。私が誤解していなければ、これはDTDからより最新の検証メカニズムへの切り替えを推進する推進力の1つでした。
私の意見では、最善の策は、処理しているドキュメントタイプのセットに合わせてメカニズム検出器を調整し、ヘッダー情報を読み取り、適切に解釈することです。StAXパーサーはこれに適しています-プルメカニズムであるため、ファイルの先頭を読み取ってから、最初の要素の解析を終了することができます。
同じサンプルコードなどへのリンク。