public interface EntityResolver2 extends EntityResolver
XMLReader.setEntityResolver()
メソッドを使用してパーサーにこのインタフェースの実装を提供します。パーサーがこのインタフェースのメソッドを使用する場合、古いSAX 1.0 EntityResolver.resolveEntity()
メソッドの代わりに、このインタフェースのEntityResolver2.resolveEntity()
メソッドを使用します。
このモジュールは、ソース・コード、文書ともに公開ドメインに置かれています。したがって、内容に関する保証は一切提供されません。
SAXアプリケーションは、このインタフェースによって定義される外部エンティティのカスタム処理を必要とする場合、http://xml.org/sax/features/use-entity-resolver2機能フラグがtrue (機能が認識された場合のデフォルト値)に設定されたXMLReaderを使用する必要があります。そのフラグが認識されない場合やその値がfalseの場合、またはリゾルバがこのインタフェースを実装しない場合には、EntityResolver
メソッドだけを使用します。
このインタフェースはエンティティ解決を変更する3種類のアプリケーションをサポートします。Old Styleアプリケーションはこのインタフェースについては認識せず、EntityResolverを提供します。Transitional ModeはEntityResolver2を提供し、EntityResolver2をサポートするすべてのシステム(パーサーまたはその他のツール)でそのメソッドの利点が自動的に得られます(多相性のため)。Old StyleアプリケーションもTransitional Modeアプリケーションも、任意のSAX2パーサーで動作します。New styleアプリケーションは、この特定の機能をサポートしているSAX2パーサー以外では動作しません。元のSAX 1.0スタイル・エンティティ解決メソッドが呼び出された場合、これらのアプリケーションは機能フラグが「true」の値を持つように要求し、提供するEntityResolver2実装によって例外をスローできます。
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)
修飾子と型 | メソッドと説明 |
---|---|
InputSource |
getExternalSubset(String name, String baseURI)
アプリケーションは、明確に定義していない文書の外部サブセットを提供できます。
|
InputSource |
resolveEntity(String name, String publicId, String baseURI, String systemId)
アプリケーションは外部エンティティ参照を入力ソースへマッピングするか、一般的なURI解決を使用するようパーサーに通知できます。
|
resolveEntity
InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException
startDTD()
メソッドを通して、すでに文書には外部サブセットが含まれていたかのように報告されます。このコールバックは、すべての内部サブセット・データやエラーが報告される前に行われます。
また、このメソッドはDOCTYPE宣言を持たない文書にも使用できます。ルート要素が検出されてもDOCTYPE宣言が見つからなかった場合にこのメソッドが呼び出されます。外部サブセットの値を返す場合、このルート要素はルート要素として宣言され、無効になる文書の最初にDOCTYPE宣言をつなぐ効果をもたらします。そのパーサー・コールバックのシーケンスは論理的には次のケースと似ています。
... comments and PIs from the prolog (as usual) startDTD ("rootName", source.getPublicId (), source.getSystemId ()); startEntity ("[dtd]"); ... declarations, comments, and PIs from the external subset endEntity ("[dtd]"); endDTD (); ... then the rest of the document (as usual) startElement (..., "rootName", ...);
InputSourceではこれ以上の解決は取得されません。このメソッドの実装ではresolveEntity()
を呼び出してDTDエンティティのローカル・キャッシュを使用するなどの利点を得ることができます。また、妥当性を検証せず、外部パラメータ・エンティティを含んでいないプロセッサではこのメソッドを使用できません。
外部エンティティに対して好ましくないネットワーク・アクセスを常に要求するXMLプロセッサと互換性がある場合、このメソッドに使用するとデータの検証も容易になります。また、他の理由にはDTD以外のポリシーをインポートします。妥当性を検証できない原因には、文書にDTDを含めるよう要求します。これによって属性がむらなく処理されます。たとえば、XPathプロセッサは、広く使用されている参照の型を処理する前に型「ID」を持つ属性を認識する必要があります。
警告: 外部サブセットを返すと入力文書が変更されます。一般のエンティティに定義を与えることによって不正な文書を整形できます。
name
- 文書のルート要素の識別。利用可能なDOCTYPE宣言または実際のルート要素からの名前。baseURI
- 文書のベースURI。外部サブセットを選択する追加ヒントとして機能する。XMLReaderにInputSourceしか提供されなかったためにnullとなる場合を除き、常に絶対URIである。SAXException
- 任意のSAX例外。ほかの例外をラップしている可能性があります。IOException
- 新しいInputStreamやReaderの作成失敗、または不正なURLを示している可能性があります。InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
EntityResolver
インタフェースに比べて柔軟性があり、OASIS XML Catalogs仕様で定義されているようなより複雑なカタログ・スキームの実装をサポートします。
このリゾルバ・メソッドを使用するように設定されたパーサーは、リゾルバ・メソッドを呼び出してXMLテキストの参照によって含まれている外部エンティティに使用する入力ソースを決定します。その場合、文書エンティティとgetExternalSubset()
によって返された外部エンティティは除外されます。妥当性を検証できないプロセッサが機能フラグを使用してエンティティ(パラメータ・エンティティまたは一般エンティティ)のクラスを含めないように設定されていると、このメソッドはそれらのエンティティでは呼び出されません。
ここで使用されるエンティティ命名スキームは、LexicalHandler
またはContentHandler.skippedEntity()
メソッドで使用されるものと同じです。
name
- 解決される外部エンティティの識別。外部サブセットの「[dtd]」やパラメータ・エンティティを示す「%」で開始される名前、またはそれ以外の一般エンティティの名前。SAX2パーサーによって呼び出される場合nullにはなりません。publicId
- 参照される外部エンティティの公開識別子(XML仕様で要求されるように正規化されている)。提供されなかった場合はnull。baseURI
- 相対的なsystemIDを解釈するときに基準にするURI。XMLReaderはInputSourceに指定された可能性があるので、nullでないかぎり常に絶対URI。このURIは、関連する宣言を開始する「<」に関連付けられているXML仕様によって定義されます。systemId
- 参照される外部エンティティのシステム識別子。相対URIまたは絶対URI。SAX2パーサーによって呼び出される場合nullにはなりません。宣言されたエンティティと外部サブセットのみが、そうしたパーサーによって解決されます。SAXException
- 任意のSAX例外。ほかの例外をラップしている可能性があります。IOException
- 新しいInputStreamやReaderの作成失敗、または不正なURLを示している可能性があります。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.