倭マン's BLOG

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

単純化(1) : アノテーション

RELAX NG スキーマでのアノテーション(注釈)とは、RELAX NG 名前空間 ("http://relaxng.org/ns/structure/1.0") に属さない要素や、NULL 名前空間 ("") に属さない属性のことを指します。 これは、それらがスキーマ定義としては意味を持たないため、コメントとして扱えるからです。

単純化のプロセスでは、まず最初にこれらの要素・属性が除去されます。

RELAX NG 名前空間に属さない要素を除去する

対象ノード
//*[namespace-uri() != "http://relaxng.org/ns/structure/1.0"]
操作
除去する。

サンプル

<element name="aaa" xmlns="http://relaxng.org/ns/structure/1.0">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <body>abc</body>
  </html>
  <text/>
</element>

f:id:waman:20080515152431p:image

<element name="aaa" xmlns="http://relaxng.org/ns/structure/1.0">

  <text/>
</element>

NULL 名前空間に属さない属性を除去する

対象ノード
//@*[(namespace-uri() != "")]
操作
除去する。

サンプル

<attribute name="xxx" xlink:href="abc" xmlns:xlink="http://www.w3.org/1999/xlink/">

f:id:waman:20080515152431p:image

<attribute name="xxx" xmlns:xlink="http://www.w3.org/1999/xlink/"/>

注意

事後条件


この操作が終わった後には、次の条件が満たされている必要があります: