モジュール java.xml
パッケージ org.xml.sax

インタフェースEntityResolver

  • 既知のすべてのサブインタフェース:
    CatalogResolver, EntityResolver2
    既知のすべての実装クラス:
    DefaultHandler, DefaultHandler2, HandlerBase, XMLFilterImpl

    public interface EntityResolver
    エンティティを解決するための基本インタフェースです。
    このモジュールは、ソース・コード、文書ともに公開ドメインに置かれています。したがって、内容に関する保証は一切提供されません 詳細については、http://www.saxproject.orgを参照してください。

    外部エンティティのカスタム処理を実装する必要がある場合、SAXアプリケーションはこのインタフェースを実装し、setEntityResolverメソッドを使ってSAXドライバにインスタンスを登録する必要があります。

    その後、XMLリーダーにより、アプリケーションは外部エンティティ(外部DTDサブセット、外部パラメータ・エンティティを含む)を取り込む前に遮断できるようになります。

    このインタフェースを実装しなければならないSAXアプリケーションはあまりありません。しかし、このインタフェースは、データベースやその他の特殊な入力ソースからXML文書を構築するようなアプリケーション、あるいはURL以外のURI型を使用するアプリケーションにとって非常に有益です。

    次のリゾルバは、システム識別子「http://www.myhost.com/today」を使って、アプリケーションにエンティティの特殊文字ストリームを提供します。

     import org.xml.sax.EntityResolver;
     import org.xml.sax.InputSource;
    
     public class MyResolver implements EntityResolver {
       public InputSource resolveEntity (String publicId, String systemId)
       {
         if (systemId.equals("http://www.myhost.com/today")) {
                  // return a special input source
           MyReader reader = new MyReader();
           return new InputSource(reader);
         } else {
                  // use the default behaviour
           return null;
         }
       }
     }
     

    アプリケーションもまた、このインタフェースを使ってシステム識別子をローカルURIにリダイレクトしたり、カタログ内の置換値を検索したり(通常、公開識別子を使用)できます。

    導入されたバージョン:
    1.4, SAX 1.0
    関連項目:
    XMLReader.setEntityResolver(org.xml.sax.EntityResolver), InputSource
    • メソッドの詳細

      • resolveEntity

        InputSource resolveEntity​(String publicId,
                                  String systemId)
                           throws SAXException,
                                  IOException
        アプリケーションが外部エンティティを解決できるようにします。

        パーサーは、トップ・レベルの文書エンティティを除くあらゆる外部エンティティを開く前に、このメソッドを呼び出します。 このようなエンティティとして、外部DTDサブセットやDTD内で参照されるパラメータ・エンティティ(どちらの場合も、パーサーが外部パラメータ・エンティティを読み込む場合のみ)、文書要素内で参照される一般的な外部エンティティ(パーサーが一般的な外部エンティティを読み込む場合)があります。 アプリケーションは、パーサーにエンティティ自体の検出、代替URIの使用、またはアプリケーションによって提供されるデータの文字またはバイト入力ストリームとしての使用を要求できます。

        アプリケーションの作成者は、このメソッドを使って外部システム識別子をセキュアなローカルURIにリダイレクトしたり、カタログ内の公開識別子を検索したり、データベースやその他の入力ソース(たとえばダイアログ・ボックス)からエンティティを読み取ったりできます。 XMLもSAXも、公開またはシステムIDを使ってリソースを解決するための適切なポリシーを指定しません。 ただし、SAXは、このメソッドによって返されるInputSourceの解釈方法と、何も返されなかった場合はシステムIDがURLとして逆参照されることを指定します。

        システム識別子がURLの場合、SAXパーサーはこれをアプリケーションに報告する前に完全に解決する必要があります。

        パラメータ:
        publicId - 参照される外部エンティティの公開識別子。何も提供されなかった場合はnull。
        systemId - 参照される外部エンティティのシステム識別子。
        戻り値:
        新しい入力ソースを記述するInputSourceオブジェクト。パーサーにシステム識別子への正規URI接続を要求する場合はnull。
        例外:
        SAXException - 任意のSAX例外。ほかの例外をラップしている可能性があります。
        IOException - Java固有の入出力例外。InputSourceの新しいInputStreamまたはReaderの作成の結果として発生する可能性があります。
        関連項目:
        InputSource