倭マン's BLOG

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

単純化(6) : <externalRef> 要素

単純化の第6段階は <externalRef> 要素の解決です。

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

<externalRef> 要素を参照要素で置き換える


@href 属性が参照しているスキーマ定義からパターンを定義する要素を構築し、<externalRef> 要素を置き換えます。

対象ノード
//rng:externalRef
操作
参照対象のスキーマ定義が定義するパターンで置き換える。

サンプル

参照対象のスキーマ定義 "referee.rng" と、単純化を実行しているスキーマ定義が次のように与えられているとき、単純化は以下のように行います:

<!-- 参照対象のスキーマ定義 referee.rng -->
<element name="referee"><emtpy/></element>
<!-- 単純化を実行しているスキーマ定義 -->
<element name="referer">
  <include href="referee.rng"/>
</element>

f:id:waman:20080515152431p:image

<element name="referer">
  <element name="referee"><emtpy/></element>
</element>

注意1

参照対象のスキーマ定義に <externalRef> 要素があった場合、このステップまでの単純化を同じように適用します。

注意2

<externalRef> 要素に @ns 属性が付加されている場合、解決後のパターンを定義する要素にその @ns 属性を付加します。

<element name="referer">
  <include href="referee.rng" ns="http://org.sample"/>
</element>

f:id:waman:20080515152431p:image

<element name="referer">
  <element name="referee" ns="http://org.sample"><emtpy/></element>
</element>

事後条件

  • <externalRef> 要素が存在しない。