URI参照
uri
エントリを使用して目的のリソースを検索します。
uri
、rewriteURI
およびuriSuffix
などのURIタイプのエントリは、システム・タイプのエントリと同じように使用できます。
URIエントリの使用
XMLカタログ標準では、system
タイプのエントリにはDTD参照の解決、uri
タイプのエントリにはその他すべてのプリファレンスが指定されていますが、Java XMLカタログAPIではそのような区別がありません。これは、XMLResolver
およびLSResourceResolver
などの既存のJava XMLリゾルバの仕様ではプリファレンスを指定しないためです。uri
、rewriteURI
およびuriSuffix
などのuri
タイプのエントリは、system
タイプのエントリと同じように使用できます。uri
要素は、代替URI参照とURI参照を関連付けるために定義されます。system
参照の場合、これはsystemId
プロパティです。
そのため、system
エントリは一般的にはDTD参照に使用されますが、次の例のようにsystem
エントリをuri
エントリに置き換えることができます。
<system
systemId="http://openjdk.java.net/xml/catalog/dtd/example.dtd"
uri="example.dtd"/>
uri
エントリの例を次に示します。
<uri name="http://openjdk.java.net/xml/catalog/dtd/example.dtd" uri="example.dtd"/>
system
エントリがDTDのために使用されるのに対して、uri
エントリはXSDおよびXSLのインポートとインクルードなどのURI参照に使用されます。次の例では、XSLインポートの解決にuri
エントリが使用されています。
XMLカタログAPIのインタフェースで説明しているように、XMLカタログAPIでは、EntityResolver
、XMLResolver
、URIResolver
、LSResolver
などのJava XMLリゾルバを拡張するCatalogResolver
インタフェースが定義されています。そのため、CatalogResolver
オブジェクトは、SAX、DOM、StAX、スキーマ検証およびXSLT変換で使用できます。次のコードでは、CatalogResolver
オブジェクトがデフォルトの機能設定で作成されます。
CatalogResolver cr =
CatalogManager.catalogResolver(CatalogFeatures.defaults(), catalogUri);
コードでは次に、このCatalogResolver
オブジェクトをURIResolver
オブジェクトが予期されるTransformerFactory
クラスに登録します。
TransformerFactory factory = TransformerFactory.newInstance();
factory.setURIResolver(cr);
かわりに、コードでCatalogResolver
オブジェクトをTransformer
オブジェクトに登録することもできます。
Transformer transformer = factory.newTransformer(xslSource);
transformer.setURIResolver(cur);
XSLソース・ファイルに、xslImport.xsl
ファイルをXSLソースにインポートするためのimport
要素が含まれているとします。
<xsl:import href="pathto/xslImport.xsl"/>
import
参照をインポート・ファイルが実際にある場所に解決するには、Transformer
オブジェクトを作成する前にCatalogResolver
オブジェクトがTransformerFactory
クラスに設定されており、カタログ・エントリ・ファイルに次のようなuri
エントリが追加されている必要があります。
<uri name="pathto/xslImport.xsl" uri="xslImport.xsl"/>
システム参照における絶対URIと相対URI、およびsystemSuffix
エントリまたはuriSuffix
エントリの使用に関する検討は、uri
エントリにも当てはまります。