#?SuikaWiki/0.9
[1] [[XML型録]]を使った [[URI]] の[[解決]]について。
<http://www.oasis-open.org/committees/entity/spec.html#s.uri.res>
参照。

[WEAK[なお、 [[相対URI]] の解決については [[相対URI//解決]], 一般の [[URN]] の解決については [[URN//解決]]参照。]]

[2]
= URI が[DFN[入力]]として与えられているとします。
= URI が [[RFC3151]] の [CODE(URI)[urn:publicid:]]
な [[URN]] である場合は、[RUBYB[皮を剥いで] [unwrap して]]公開識別子を取り出し、[[外部識別子//解決]]の手順で解決します。
そうでない場合はこのまま続行します。

= 現在の[[型録項目ファイル]]並びの最初の型録項目ファイルを処理します。
= 一致する [CODE(XML)[[[uri]]]] 項目がある場合は、
そこに指定された[[絶対URI]] を結果とします。
(複数一致するものがある場合、最初のものを結果とします。以降同じ。)
== 一致する [CODE(XML)[[[rewriteURI]]]] 項目がある場合は、
その書換え結果を結果とします。
== 一致する [CODE(XML)[[[delegateURI]]]] 項目がある場合は、
委譲します。
=== 一致する''全て''の [CODE(XML)[delegateURI]]
項目に指定された型録項目ファイルから、
新しい型録項目ファイル並びを用意します。
===- この時、並べる順番は、一致部分が長い順とします。
=== 与えられた URI を入力として、
最初の手順に戻ります。その結果が得られれば、
これを返します。
=== 委譲検索終了後、「現在の型録項目ファイル並び」
は元のもの (委譲前のもの) に戻ります。
= [CODE(XML)[[[nextCatalog]]]] 項目があれば、
全て、その出現順に、型録項目ファイル並びの現在の型録項目ファイルのすぐ後ろに追加します。
= 現在の型録項目ファイル並びに型録項目ファイルが残っていれば、
次の型録項目ファイルに移ります。 (最初の手順へ)
= 結果が得られなかったと報告します。

* 関連

[3] 
[[外部識別子の解決]]も参照。
