倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

単純化(5) : @href 属性

単純化の第5段階は <externalRef> 要素と <include> 要素の @type 属性の修正です。

  • 対象ノードの箇所では接頭辞 "rng" は「RELAX NG 名前空間」に関連づけられているとします。
  • サンプルでは見やすさのために空白や改行を入れているところがありますが、実際には単純化の第2段階で除去されています。

@href 属性のエスケープ


@datatype 属性と同じように、@href 属性で指定されている URI をエスケープします。

対象ノード
//@href
操作
URI をエスケープする

サンプル

<include href="いろは"/>

f:id:waman:20080515152431p:image

<include href="%E3%81%84%E3%82%8D%E3%81%AF"/>

URI の絶対形式への解決


単純化している文書のベース URI を用いて、@href 属性が指定している URI を絶対形式へ解決します。

対象ノード
//@href
操作
URI を絶対形式へ解決する

サンプル

単純化している RELAX NG スキーマが "http://org.sample.relaxng/sample.rng" であったとします。 このとき、URI の絶対形式へ解決は以下のようになります:

<include href="includee.rng"/>

f:id:waman:20080515152431p:image

<include href="http://org.sample.relaxng/includee.rng"/>

事後条件

  • @href 属性の値がエスケープされた絶対 URI に変換されている。