URI参照

uriエントリを使用して目的のリソースを検索します。

urirewriteURIおよびuriSuffixなどのURIタイプのエントリは、システム・タイプのエントリと同じように使用できます。

URIエントリの使用

XMLカタログ標準では、systemタイプのエントリにはDTD参照の解決、uriタイプのエントリにはその他すべてのプリファレンスが指定されていますが、Java XMLカタログAPIではそのような区別がありません。これは、XMLResolverおよびLSResourceResolverなどの既存のJava XMLリゾルバの仕様ではプリファレンスを指定しないためです。urirewriteURIおよび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では、EntityResolverXMLResolverURIResolverLSResolverなどの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エントリにも当てはまります。