#?SuikaWiki/0.9 [1] [[XML]] [[型録]]を使った[[外部識別子]]の[[解決]]について。 , 参照。 [2] = [[公開識別子]]と[[システム識別子]]の一方又は両方が[DFN[入力]]として与えられているとします。 =- なお、両者とも[[正規化]]されているものとします。 = 公開識別子が [[RFC3151]] の [CODE(URI)[urn:publicid:]] な [[URN]] である場合は、[RUBYB[皮を剥いで] [unwrap して]]公開識別子を取り出し、それで置換えます。 = システム識別子が RFC 3151 の URN である場合は、 同様に皮を剥いで、 == 公開識別子が与えられていない場合は、 包まっていた公開識別子をこれに当て、システム識別子は無かったものとします。 == 与えられていた公開識別子と包まっていた公開識別子が同じ場合は、 システム識別子は無かったものとします。 == 与えられていた公開識別子と包まっていた公開識別子が[[一致]]しない場合は、[[誤り]]とします。 ==- [[応用]]は、システム識別子を捨てて、与えられていた公開識別子を使って処理を続行してもかまいません ([[may]])。 = 現在の[[型録項目ファイル]]並びの最初の型録項目ファイルを処理します。 = システム識別子が与えられている場合、 == 一致する [CODE(XML)[[[system]]]] 項目がある場合は、 そこに指定された[[絶対URI]] を結果とします。 (複数一致するものがある場合、最初のものを結果とします。以降同じ。) == 一致する [CODE(XML)[[[rewriteSystem]]]] 項目がある場合は、 その書換え結果を結果とします。 == 一致する [CODE(XML)[[[delegateSystem]]]] 項目がある場合は、 委譲します。 === 一致する''全て''の [CODE(XML)[delegateSystem]] 項目に指定された型録項目ファイルから、 新しい型録項目ファイル並びを用意します。 ===- この時、並べる順番は、一致部分が長い順とします。 === システム識別子''のみ''を入力として、 最初の手順に戻ります。その結果が得られれば、 これを返します。 === 委譲検索終了後、「現在の型録項目ファイル並び」 は元のもの (委譲前のもの) に戻ります。 = 公開識別子が与えられている場合、 == 一致する [CODE(XML)[[[public]]]] 項目があれば、 そこに指定されている絶対 URI を結果とします。 == 一致する [CODE(XML)[[[delegatePublic]]]] 項目がある場合は、システム識別子同様に委譲します。 = [CODE(XML)[[[nextCatalog]]]] 項目があれば、 全て、その出現順に、型録項目ファイル並びの現在の型録項目ファイルのすぐ後ろに追加します。 = 現在の型録項目ファイル並びに型録項目ファイルが残っていれば、 次の型録項目ファイルに移ります。 (最初の手順へ) = 結果が得られなかったと報告します。