倭マン's BLOG

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

単純化 (16) : 制約

このステップでは新たな変形はせず、幾つかの制約を確認します。

名前クラス内の <except> 要素


<anyName> 要素下の <except> 要素は、子孫要素として <anyName> 要素を持ってはいけません(どんな名前にもマッチしなくなります*1)。 同様に、<nsName> 要素下の <except> 要素は、子孫要素として <nsName>, <anyName> 要素を持ってはいけません。

対象ノード*2
//rng:anyName/rng:except//rng:anyName
//rng:nsName/rng:except//*[self::rng:anyName or self::rng:nsName]
操作
例外を投げる。

xmlns 属性


<attribute> 要素の第1要素もしくは第1要素の子孫要素に現れる &name> 要素で、@ns 属性が空文字列のものの属性値は "xmlns" であってはいけません。 これは属性の名前が "xmlns" になる可能性を排除します。

対象ノード
操作
例外を投げる。

http://www.w3.org/2000/xmlns 名前空間に属する属性


<attribute> 要素の第1要素もしくは第1要素の子孫要素に現れる <name>, <nsName> 要素は、@ns 属性の値が "http://www.w3.rog/2000/xmlns" であってはいけません。 これは属性の属する名前空間が "http://www.w3.rog/2000/xmlns" になる可能性を排除します。

対象ノード
操作
例外を投げる。

データ型


<data>, <value> 要素が正しいデータ型を指定していなければなりません。 特に @type 属性で指定されるデータ型が、@datatypeLibrary 属性で指定されるデータライブラリに含まれている必要があります。 また、<data> 要素に関しては、パラメータのリストが、そのデータ型に許されたものでなければなりません。

対象ノード
操作
例外を投げる。

*1:子孫要素の <anyName> 要素がまた <except> 要素を持てばマッチする名前も無いではありませんが、この名前クラスはそもそも <except> 要素を使わずに書けるハズです。

*2:接頭辞 "rng" は「RELAX NG 名前空間」に関連づけられているとします。