倭マン's BLOG

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

単純化(10) : QName

単純化の第10段階は、QName の接頭辞による名前空間 URI の解決です。

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

QName の接頭辞を解決する

対象ノード
//rng:name
操作
<name> の子テキストが接頭辞を持つ名前なら*1、その接頭辞に対応する名前空間 URI を <name> 要素の @ns 属性に設定し、接頭辞を除去する。

サンプル

<element xmlns:p="an-ns">
  <name ns="another-ns">p:an-element</name>
</element>

<element xmlns:p="an-ns">
  <name ns="an-ns">an-element</name>
</element>

事後条件

  • <name> 要素の子テキストは接頭辞を持たない名前になっている(コロン ':' を含まない)。

*1:接頭辞を持たないなら接頭辞を解決しないことに注意しましょう。 @ns 属性にデフォルト名前空間が設定されたりはしません。