外部識別子//解決

外部識別子の解決 (XML型録)

[1] XML型録を使った外部識別子解決について。 <http://www.oasis-open.org/committees/entity/spec.html#s.ext.input>, <http://www.oasis-open.org/committees/entity/spec.html#s.ext.resx> 参照。

[2]

  1. 公開識別子システム識別子の一方又は両方が入力として与えられているとします。
    • なお、両者とも正規化されているものとします。
  2. 公開識別子が RFC3151urn:publicid:URN である場合は、皮を剥いで (unwrap して) 公開識別子を取り出し、それで置換えます。
  3. システム識別子が RFC 3151 の URN である場合は、 同様に皮を剥いで、
    1. 公開識別子が与えられていない場合は、 包まっていた公開識別子をこれに当て、システム識別子は無かったものとします。
    2. 与えられていた公開識別子と包まっていた公開識別子が同じ場合は、 システム識別子は無かったものとします。
    3. 与えられていた公開識別子と包まっていた公開識別子が一致しない場合は、誤りとします。
      • 応用は、システム識別子を捨てて、与えられていた公開識別子を使って処理を続行してもかまいません (may)。

  1. 現在の型録項目ファイル並びの最初の型録項目ファイルを処理します。
  2. システム識別子が与えられている場合、
    1. 一致する system 項目がある場合は、 そこに指定された絶対URI を結果とします。 (複数一致するものがある場合、最初のものを結果とします。以降同じ。)
    2. 一致する rewriteSystem 項目がある場合は、 その書換え結果を結果とします。
    3. 一致する delegateSystem 項目がある場合は、 委譲します。
      1. 一致する全てdelegateSystem 項目に指定された型録項目ファイルから、 新しい型録項目ファイル並びを用意します。
        • この時、並べる順番は、一致部分が長い順とします。
      2. システム識別子のみを入力として、 最初の手順に戻ります。その結果が得られれば、 これを返します。
      3. 委譲検索終了後、「現在の型録項目ファイル並び」 は元のもの (委譲前のもの) に戻ります。
  3. 公開識別子が与えられている場合、
    1. 一致する public 項目があれば、 そこに指定されている絶対 URI を結果とします。
    2. 一致する delegatePublic 項目がある場合は、システム識別子同様に委譲します。
  4. nextCatalog 項目があれば、 全て、その出現順に、型録項目ファイル並びの現在の型録項目ファイルのすぐ後ろに追加します。
  5. 現在の型録項目ファイル並びに型録項目ファイルが残っていれば、 次の型録項目ファイルに移ります。 (最初の手順へ)
  6. 結果が得られなかったと報告します。

関連

[3] URLの解決も参照。