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にリダイレクトしたり、カタログ内の置換値を検索したり(通常、公開識別子を使用)できます。
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)
, InputSource
修飾子と型 | メソッドと説明 |
---|---|
InputSource |
resolveEntity(String publicId, String systemId)
アプリケーションが外部エンティティを解決できるようにします。
|
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
- 参照される外部エンティティのシステム識別子。SAXException
- 任意のSAX例外。ほかの例外をラップしている可能性があります。IOException
- Java固有の入出力例外。InputSourceの新しいInputStreamまたはReaderの作成の結果として発生する可能性があります。InputSource
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.