JIS X 4177-2:2005 文書スキーマ定義言語(DSDL)―第2部:正規文法に基づく妥当性検証―RELAX NG | ページ 4

                                                                                             13
X 4177-2 : 2005 (ISO/IEC 19757-2 : 2003)

7.18 combine属性

 個々のgrammar要素において,同じ名前をもつすべてのdefine要素をそれぞれ結合
する。どの名前についても,その名前をもつdefine要素であってcombine属性をもたないものが一つより
多く存在してはならない。どの名前に対しても,その名前をもつdefine要素であってcombine属性の値が
choiceとなるものが存在する場合には,その名前をもつdefine要素であってcombine属性の値がinterleave
となるものがあってはならない。したがって,どの名前についても,その名前をもつdefine要素が一つよ
り多く存在する場合,その名前に対するcombine属性の値は一意に定まる。この値を確認した後で,combine
属性を取り除く。
<define name="n">
p1
</define>
<define name="n">
p2
</define>
この二つの定義は,次のとおりに結合される。
<define name="n">
<c>
p1
p2
</c>
</define>
ここでcはcombine属性の値とする。どの名前に対しても正確に一つのdefine要素になるまで,define
要素の対を結合することを繰り返す。
同様に,どのgrammar要素についても,すべてのstart要素を互いに結合する。combine属性をもたない
start要素が一つより多く存在してはならない。choiceという値のcombine属性をもつstart要素が存在する
場合は,interleaveという値のcombine属性をもつstart要素が存在してはならない。

7.19 grammar要素

 この規則によるスキーマ変換によって,スキーマの最上位要素はgrammarになり,
それ以外のgrammar要素は消える。
ある要素の直上の文法とは,最も近い祖先の grammar要素と定義する。ref要素がdefine要素を参照す
るのは,それらのname属性の値が同じであって,それらの直上の文法が同じときとする。parentRef要素
がdefine要素を参照するのは,それらのname属性の値が同じであって,parentRef要素の直上の文法の直
上の文法が,define要素の直上の文法と同じときとする。どのref 要素又はparentRef要素も,define要素
を参照しなければならない。grammar要素は,一つのstart子要素をもたなければならない。
最初に,最上位のパターンpを,<grammar><start>p</start></grammar>に置き換える。次に,define要素
の名前を,スキーマ内のいずれの二つのdefine要素も同じ名前をもたないように変える。define要素の名
前を変更するには,name属性の値を変更し,そのdefine要素を参照するすべてのref要素及びparentRef
要素のname属性の値を変更する。次に,すべてのdefine要素を最上位のgrammar要素の子になるように
移動させる。入れ子になった個々のgrammar要素をそのstart要素の子で置き換え,個々のparentRef要素
をref要素に名前を変更する。

7.20 define要素及びref 要素

 この規則による文法変換によって,element要素はいずれもdefine要素の
子となり,define要素の子はいずれもelement要素となる。

――――― [JIS X 4177-2 pdf 16] ―――――

14
X 4177-2 : 2005 (ISO/IEC 19757-2 : 2003)
最初に,到達可能ではないdefine要素を取り除く。define要素は,到達可能なref要素に参照されている
ときに到達可能とする。ref要素は,start要素又は到達可能なdefine要素の子孫であるとき,到達可能とす
る。この段階で,define要素の子ではない個々のelement要素について,grammar要素にdefine要素を追加
する。そして,追加したdefine要素を参照するref要素によって,element要素を置き換える。追加される
define要素のname属性の値は,他のいかなるdefine要素のもつname属性の値とも異なっていなければな
らない。追加されるdefine要素の子要素は,element要素とする。
ref要素が展開可能なのは,その参照するdefine要素が,element要素を子としてもたないときと定義す
る。展開可能なref要素であって,start要素又はelement要素の子孫であるものは展開する。展開をするに
は,参照されているdefine要素の子要素でref要素を置き換え,この置き換え後に含まれる展開可能なref
要素を再帰的に展開する。この結果ループが発生してはならない。言い換えれば,nという値のnameをも
つref要素の置き換えを展開するときに,再びnという値のnameをもつref要素の展開を必要としてはな
らない。最後に,子がelement要素ではないすべてのdefine要素を取り除く。

7.21 notAllowed要素

 この規則による文法変換によって,notAllowed要素はstart要素又はelement要素
の子要素としてしか出現することはなくなる。notAllowed子要素をもつattribute要素,list要素,group要
素, interleave要素又はoneOrMore要素は,notAllowed要素に変換する。二つのnotAllowed子要素をもつ
choice要素は,一つのnotAllowed要素に変換する。一つのnotAllowed子要素をもつchoice要素の子要素は,
もう一方の子要素に変換する。notAllowed子要素をもつexcept要素は取り除く。これらの変換は,適用で
きなくなるまで繰り返し適用する。到達可能ではないdefine要素は取り除く。

7.22 empty要素

 この規則による文法変換によって,empty要素がgroup要素, interleave要素若しくは
oneOrMore要素の子要素,又はchoice要素の2番目の子要素として出現することはなくなる。二つのempty
子要素をもつgroup要素, interleave要素又はchoice要素は一つのempty要素に変換する。一つのempty
子要素をもつgroup要素又はinterleave要素は,もう一方の子要素に変換する。2番目の子要素がempty要
素であるchoice要素は,二つの子要素を交換することによって変換する。empty子要素をもつoneOrMore
要素はempty要素に変換する。これらの変換は,適用できなくなるまで繰り返し適用する。

8. 単純な構文

  7.にあるすべての規則を適用した場合,スキーマは次の文法にマッチする。
grammar ::=
<grammar> <start> top </start> define* </grammar>
define ::=
<define name="NCName"> <element> nameClass top </element> </define>
top ::=
<notAllowed/>
| pattern
pattern ::=
<empty/>
| nonEmptyPattern
nonEmptyPattern ::=
<text/>
| <data type="NCName" datatypeLibrary="anyURI"> param* [exceptPattern] </data>

――――― [JIS X 4177-2 pdf 17] ―――――

                                                                                             15
X 4177-2 : 2005 (ISO/IEC 19757-2 : 2003)
| <value datatypeLibrary="anyURI" type="NCName" ns="string"> string </value>
| <list> pattern </list>
| <attribute> nameClass pattern </attribute>
| <ref name="NCName"/>
| <oneOrMore> nonEmptyPattern </oneOrMore>
| <choice> pattern nonEmptyPattern </choice>
| <group> nonEmptyPattern nonEmptyPattern </group>
| <interleave> nonEmptyPattern nonEmptyPattern </interleave>
param ::=
<param name="NCName"> string </param>
exceptPattern ::=
<except> pattern </except>
nameClass ::=
<anyName> [exceptNameClass] </anyName>
| <nsName ns="string"> [exceptNameClass] </nsName>
| <name ns="string"> NCName </name>
| <choice> nameClass nameClass </choice>
exceptNameClass ::=
<except> nameClass </except>
この文法は,明示的に示していない要素又は属性を許容しない。
参考 単純な構文は,この規格における純粋に内部的な人工物である。単純な構文は,RELAX NGの
もう一つの交換構文ではない。正しいRELAX NGスキーマには,完全な構文の形式であること
だけが要求され,単純な構文の形式であることは決して要求されない。

9. 意味

9.1 推論規則

 9.では,単純な構文に変換された正しいRELAX NGスキーマの意味を定義する。RELAX
NGスキーマの意味は,そのスキーマに照らして妥当なXML文書とは何かという規定とする。意味は形式
的に記述する。形式化には,公理及び推論規則を用いる。公理は,無条件に証明可能な命題とする。推論
規則は,一つ以上の前提条件をもち,正確に一つの結論をもつ。前提条件は,肯定的又は否定的とする。
推論規則の肯定的な前提条件のすべてが証明可能であって,否定的な推論規則のいずれも証明可能ではな
いとき,推論の結論は証明可能とする。XML文書がRELAX NGスキーマに照らして妥当であるのは,そ
れが妥当であるという命題が9.で示す形式化において証明可能なときとする。
参考 ここで用いた形式化は,証明システムに類似する。しかし,伝統的な証明システムは肯定的な
前提条件しかもたない。
推論規則のための記法は,前提条件と結論とを水平線で分ける。前提条件は線の上に,結論は線の下に
示す。前提条件がnot(p) の形をしている場合は,否定的な前提条件とする。そうでない場合には,肯定的
な前提条件とする。公理も推論規則も変数を用いることができる。変数は名前をもち,更に添え字をもつ
こともある。変数の名前はイタリックで示す。変数の名前から,その変数がとることができる値の範囲が
決まる。公理及び推論規則が同じ範囲の値をもつ幾つかの変数を含む場合は,添え字を用いて区別する。

――――― [JIS X 4177-2 pdf 18] ―――――

16
X 4177-2 : 2005 (ISO/IEC 19757-2 : 2003)
公理及び推論規則には,それが含む変数についての全称記号が暗黙に適用される。これについては,次に
詳しく説明する。
一つの推論規則又は公理において,ある変数が2回以上出現することがありうるので,変数がとること
ができるオブジェクトの種類ごとに同値関係を定義する必要がある。どの種類のオブジェクトについても,
同値関係は値に基づいて決まる。ある種類の二つのオブジェクトが同値であるのは,それらの構成物が同
値であるときとする。例えば,二つの属性が同じとみなすのは,それらの名前も値も同じときとする。二
つの文字が同値であるのは,そのUnicode符号位置が同じときとする。

9.2 名前クラス

  名前クラスについて主要な意味概念は,名前が名前クラスに属することとする。名前クラスは,生成規
則nameClassにマッチする要素とする。名前は,5.で定義されている。名前は,名前空間URI及び局所名
から成る。
最初の公理(anyName 1)を次に示す。
(anyName 1) n in <anyName/>
備考 この公理は,どんな名前nに対しても,nは名前クラス<anyName/>に属することを意味する。
言い換えれば,<anyName/>は任意の名前にマッチする。この公理に現れる変数には,全称記号
が暗黙に指定されていることに注意する。この暗黙の指定があるため,この公理はどんな名前
nについても適用できる。
最初の推論規則も同程度に簡単である。
(anyName 2) not(n in nc)
n in <anyName> <except> nc </except> </anyName>
備考 この推論規則は,どんな名前n及び名前クラスncに対しても,nがncに属さない場合には,n
は <anyName> <except> nc </except> </anyName>に属することを示す。言い換えれば,
<anyName> <except> nc </except> </anyName> は,ncにマッチしないどんな名前にもマッチす
る。
名前クラスについての他の公理及び推論規則を次に示す。
(nsName 1) name( u, ln ) n <nsName ns="u"/>
(nsName 2) not(name( u, ln ) n nc)
name( u, ln ) n <nsName ns="u"> <except> nc </except> </nsName>
(name) name( u, ln ) n <name ns="u"> ln </name>

――――― [JIS X 4177-2 pdf 19] ―――――

                                                                                             17
X 4177-2 : 2005 (ISO/IEC 19757-2 : 2003)
(name choice 1) n in nc1
n in <choice> n c1 n c2 </choice>
(name choice 2) n in nc2
n in <choice> n c1 n c2 </choice>

9.3 パターン

9.3.1  choiceパターン choiceパターンの意味を次のとおりに規定する。
(choice 1) cx a; m =~ p1
cx a; m =~ <choice> p1 p2 </choice>
(choice 2) cx a; m =~ p2
cx a; m =~ <choice> p1 p2 </choice>
9.3.2 groupパターン groupパターンの意味を次のとおりに規定する。
(group) cx a1; m1 =~ p1 cx a2; m2 =~ p2
cx <group> p1 p2 </ group >
a1 + a2; m1 ; m2 =~
参考 10.4に示す制限は,推論規則の結論において構築される属性集合に,同一の名前をもつ複数の
属性がないことを保証する。
9.3.3 emptyパターン emptyパターンの意味を次のとおりに規定する。
(empty) cx [{}]; ( ) =~ <empty/>
9.3.4 textパターン textパターンの意味を次のとおりに規定する。
(text 1) cx [{}]; ( ) =~ <text/>
(text 2) cx [{}]; m =~ <text/>
cx [{}]; m, s =~ <text/>
この規則は,textは0個以上の文字列にマッチすることを意味している。
9.3.5 oneOrMoreパターン oneOrMoreパターンの意味を次のとおりに規定する。
(oneOrMore 1) x a; m =~ p
cx a; m =~ <oneOrMore> p </oneOrMore>

――――― [JIS X 4177-2 pdf 20] ―――――

次のページ PDF 21

JIS X 4177-2:2005の引用国際規格 ISO 一覧

  • ISO/IEC 19757-2:2003(IDT)

JIS X 4177-2:2005の国際規格 ICS 分類一覧

JIS X 4177-2:2005の関連規格と引用規格一覧

規格番号
規格名称