>サイトトップへ >このカテゴリの一覧へ

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

(1) 

まえがき

この規格は,工業標準化法第 12 条第 1 項の規定に基づき,財団法人日本規格協会(JSA)から,工業標準

原案を具して日本工業規格を制定すべきとの申出があり,日本工業標準調査会の審議を経て,経済産業大

臣が制定した日本工業規格である。

制定に当たっては,日本工業規格と国際規格との対比,国際規格に一致した日本工業規格の作成及び日

本工業規格を基礎にした国際規格原案の提案を容易にするために,ISO/IEC 19757-2:2003,Document

Schema Definition Languages (DSDL) - Part 2: Regular-grammar-based validation - RELAX NG

を基礎として用

いた。

この規格の一部が,技術的性質をもつ特許権,出願公開後の特許出願,実用新案権,又は出願公開後の

実用新案登録出願に抵触する可能性があることに注意を喚起する。経済産業大臣及び日本工業標準調査会

は,このような技術的性質をもつ特許権,出願公開後の特許出願,実用新案権,又は出願公開後の実用新

案登録出願にかかわる確認について,責任はもたない。

この規格には,次に示す附属書がある。

附属書 A(規定)RELAX NG のための RELAX NG スキーマ

附属書 B(参考)例

附属書 C(参考)文献

JIS X 4177

の規格群には,次に示す部編成がある。

JIS

X

4177-1

−第1部:概要

JIS

X

4177-2

−第2部:正規文法に基づく妥当性検証−RELAX NG

JIS

X

4177-4

−第4部:名前空間に基づく検証委譲言語


X 4177-2

:2005 (ISO/IEC 19757-2:2003)

(2) 

目  次

ページ

序文

1

0.

  導入

1

1.

  適用範囲

1

2.

  引用規格

1

3.

  定義

2

4.

  記法

4

4.1

  拡張 BNF

4

4.2

  推論規則

4

5.

  データモデル 6

6.

  完全な構文

7

7.

  単純化

9

7.1

  一般事項

9

7.2

  注釈

9

7.3

  空白

9

7.4

  datatypeLibrary 属性

9

7.5

  value 要素の type 属性

10

7.6

  href  属性

10

7.7

  externalRef 要素

10

7.8

  include  要素

10

7.9

  element 要素及び attribute 要素の name  属性

11

7.10

  ns  属性

11

7.11

  QName

11

7.12

  div  要素

11

7.13

  子要素の数

11

7.14

  mixed  要素

11

7.15

  optional  要素

12

7.16

  zeroOrMore  要素

12

7.17

  制約

12

7.18

  combine 属性

13

7.19

  grammar 要素

13

7.20

  define 要素及び ref  要素

13

7.21

  notAllowed 要素

14

7.22

  empty 要素

14

8.

  単純な構文

14

9.

  意味

15


X 4177-2

:0000 (ISO/IEC 19757-2:2003)

(3) 

9.1

  推論規則

15

9.2

  名前クラス

16

9.3

  パターン

17

9.4

  妥当性

20

10.

  制限

20

10.1

  一般事項

20

10.2

  禁止されるパス

20

10.3

  文字列の並び

22

10.4

  属性の制限

23

10.5

  interleave の制限

24

11.

  適合性

24

附属書 A(規定)RELAX NG のための RELAX NG スキーマ

25

附属書 B(参考)例

31

附属書 C(参考)文献

35

 


     

日本工業規格

JIS

 X

4177-2

:2005

(ISO/IEC 19757-2

:2003

)

文書スキーマ定義言語(DSDL)−第 2 部:正規文法に

基づく妥当性検証  - RELAX NG

Document Schema Definition Languages (DSDL) - Part 2:

Regular-grammar-based validation - RELAX NG

序文  この規格は,2003 年に第 1 版として発行された ISO/IEC 19757-2,Document Schema Definition

Languages (DSDL) - Part 2: Regular-grammar-based validation - RELAX NG

を翻訳し,技術的内容を変更する

ことなく作成した日本工業規格である。

0.

導入  この規格の構成を次に示す。5.は, データモデルを示し,6.以降で用いる XML 文書の抽象化を

示す。6.は,RELAX NG スキーマの構文を示す。7.は,RELAX NG スキーマを単純化するのに適用される一連

の変換を示し,更に RELAX NG スキーマの追加要件を規定する。8.は,変換を適用した結果の構文を示す。

この単純な構文は,完全な構文の部分集合とする。9.は,単純な構文を用いる正しい RELAX NG スキーマの

意味を示す。

この意味は,

どのような場合に要素が RELAX NG スキーマに照らして妥当になるかを規定する。

10.

は,RELAX NG スキーマが単純な形式に変換された後に RELAX NG スキーマが満たすべき要件を示す。最

後に 11.は,RELAX NG の妥当性検証器に関する適合性要件を示す。

この規格は,RELAX NG 規定(附属書 の[1])に基づく。RELAX NG に関する指導書が,この規格とは別に

用意されている[RELAX NG Tutorial(附属書 の[2])を参照]

1.

適用範囲  この規格は,XML に関するスキーマ言語 RELAX NG について規定する。RELAX NG スキーマは,

XML 文書の構造及び内容に関するパターンを規定する。そのパターンは,正規木文法を用いて規定される。

この規格は, RELAX NG スキーマが満たすべき要件を規定し, RELAX NG スキーマによって規定されるパタ

ーンに XML 文書がどんなときマッチするかを規定する。

備考  この規格の対応国際規格を,次に示す。

なお,対応の程度を表す記号は,ISO/IEC Guide21 に基づき,IDT(一致している)

,MOD(修

正している)

,NEQ(同等でない)とする。

ISO/IEC 19757-2:2003

, Document Schema Definition Languages (DSDL) — Part 2:

Regular-grammar-based validation — RELAX NG (IDT)

2.

引用規格  次に掲げる規格又は文書は,この規格に引用されることによって,この規格の規定の一部

を構成する。これらの引用規格のうちで,発効年又は発行年を付記してあるものは,記載の年の版だけが

この規格の規定を構成するものであって,その後の改正版・追補には適用しない。発行年を付記していな

い引用規格は,その最新版(追補を含む。

)を適用する。


2

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

備考  次の文書のそれぞれには,本文中で参照するための一意の識別子が付与されている。一意の識

別子は,太字で示した名称とする。

JIS X 4159:2005

  拡張可能なマーク付け言語(XML)

備考 W3C 勧告,Extensible Markup Language (XML) 1.0 (Third Edition),2004 年 2 月 4 日が,この規格

に一致している。

参考  この W3C 勧告は http://www.w3.org/TR/2004/REC-xml-20040204 から入手可能である。

W3C XML-Names, Namespaces in XML, W3C Recommendation, 14 January 1999

備考  TR X 0023:1999 XML 名前空間が,この W3C 勧告に一致している。

参考  この W3C 勧告は http://www.w3.org/TR/1999/REC-xml-names-19990114/から入手可能である。こ

の W3C 勧告に一致した規格は,JIS X 4158:2005  XML名前空間として発効が予定され,そ

れに伴って TR X 0023:1999 は廃止される。

W3C XLink, XML Linking Language (XLink) Version 1.0, W3C Recommendation, 27 June 2001

備考  TR X 0076:2003 XML リンク付け言語(Xlink) 1.0 が,  この W3C 勧告に一致している。

参考  この W3C 勧告は http://www.w3.org/TR/2001/REC-xlink-20010627/から入手可能である。この W3C

勧告に一致した規格は,JIS X 4176:2005  XMLリンク付け言語(XLink)1.0として

発効が予定され,それに伴って TR X 0076:2003 は廃止される。

W3C XML-Infoset, XML Information Set, W3C Recommendation, 24 October 2001 

参考  この W3C 勧告は http://www.w3.org/TR/2001/REC-xml-infoset-20011024/から入手可能である。

IETF RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies,

1996-11

備考  TS X 0069:2005  多目的インターネットメール拡張(MIME)  第 1 部  インターネットメッセージ

本体のフォーマットがこの IETF RFC に一致している。

参考  この IETF RFC は http://www.ietf.org/rfc/rfc2045.txt から入手可能である。

IETF RFC 2046, Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, 1996-11

備考  TS X 0070:2004  多目的インターネットメール拡張(MIME)  第 2 部  メディア型がこの IETF RFC

に一致している。

参考  この IETF RFC は http://www.ietf.org/rfc/rfc2046.txt から入手可能である。

IETF RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax, 1998-08

備考  TS X 0097:2003  統一資源識別子(URI)  共通構文が,  この IETF RFC に一致している。

参考  この IETF RFC は http://www.ietf.org/rfc/rfc2396.txt から入手可能である。

IETF RFC 2732, Format for Literal IPv6 Addresses in URL's

,  Internet Standards Track Specification, 1999 年

12

参考  この IETF RFC は http://www.ietf.org/rfc/rfc2732.txt から入手可能である。

IETF RFC 3023, XML Media Types

,Internet Standards Track Specification, 1998 年 8 月

参考  この IETF RFC は http://www.ietf.org/rfc/rfc3023.txt から入手可能である。

3.

定義  この規格で用いる主な用語の定義は,次による。

参考  この規格では,JIS X 4159 において定義される用語を用いることがある。

3.1

資源(resource)  識別可能なもの。

参考  統一資源識別子(URI)によって指し示すことが可能なこともある。


3

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

3.2

統一資源識別子(URI)  簡潔な文字列であって,IETF RFC 2396 に定義されている構文を用いて,抽

象的又は具体的な資源を参照するもの。

3.3

URI

参照(URI reference)  素片識別子がつくこともある URI 又は相対 URI。

3.4

相対 URI(relative URI)  URI 参照の形式であって,基底 URI に基づいて解決すると別の URI を生成

するもの。

3.5

基底 URI(base URI)  相対 URI を解決するために用いられる URI。

3.6

素片識別子(fragment identifier)  URI 参照に含まれる付加的な情報であって,URI に基づく取出し動

作が成功した後で利用者エージェントが利用するもの。

3.7

インスタンス(instance)  RELAX NG スキーマに照らして妥当かどうか検証中の XML 文書。

3.8

スペース文字(space character)  #x20 の符号位置をもつ文字。

3.9

空白文字(whitespace character)  #x20, #x9, #xA 又は#xD の符号位置をもつ文字。

3.10

名前(name)  URI と局所名との対。

3.11

名前空間 URI(namespace URI)  名前の一部である URI。

3.12

局所名(local name)  名前の一部である NCName。

3.13  NCName

  W3C XML-Names にある NCName 生成規則とマッチする文字列。

3.14

名前クラス(name class)  スキーマの一部であって,名前にマッチするもの。

3.15

パターン(pattern)  スキーマの一部であって,属性の集合並びに要素及び文字列からなる列とマッ

チするもの。

3.16

外来の属性(foreign attribute)  名前空間 URI が空文字列でも RELAX NG 名前空間 URI でもない属性。

3.17

外来の要素(foreign element)  名前空間 URI が RELAX NG 名前空間 URI ではない要素。

3.18

完全な構文(full syntax)  単純化の前の RELAX NG 文法の構文。 

3.19

単純な構文(simple syntax)  単純化の後の RELAX NG 文法の構文。

3.20

単純化(simplification)  完全な構文の RELAX NG スキーマを単純な構文のスキーマに変換すること。

3.21

データ型ライブラリ(datatype library)  局所名からデータ型への対応付け。

備考  データ型ライブラリは,URI によって特定される。

3.22

データ型(datatype)  文字列の集合であって,同値関係をもつもの。

3.23

公理(axiom)  無条件に証明可能とみなす命題。

3.24

推論規則(inference rule)  一つ以上の肯定的又は否定的な前提条件と,必ず一つの結論とをもつ規則

であって,すべての肯定的な前提条件が証明可能で,かつ,どの否定的な前提条件も証明可能でない場合,

結論を証明可能とするもの。

3.25

スキーマに照らして妥当(valid with respect to a schema)  スキーマによって記述される XML 文書の

集合に属すること。

3.26

スキーマ(schema)  XML 文書集合の指定。

3.27

文法(grammar)  NCName からパターンへの対応付けを伴う開始パターン。

3.28

正しいスキーマ(correct schema)  この規格の要求をすべて満たすスキーマ。

3.29

妥当性検証器(validator)  スキーマが正しいかどうか決定し,インスタンスがスキーマに照らして妥

当であるかどうか決定するソフトウェアモジュール。

3.30

パス(path)  /  又は // で区切られた NCName のリスト。

3.31

情報集合(infoset)  W3C XML-Infoset によって定義された XML 文書の抽象化。

3.32

情報項目(information item)  情報集合の構成要素。


4

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

3.33

データモデル(data model)  この規格によって定義される XML 文書の抽象表現。

3.34  XML

文書(XML document)  JIS X 4159 によって定義される整形式 XML 文書である文字列。

3.35

拡張 BNF(EBNF)  文脈自由文法を記述するために用いられる表記。

3.36

弱い意味でのマッチ(weak matching)  マッチの種類の一つで,9.3.7 に規定するもの。

3.37

直上の文法(in-scope grammar)  最も近い祖先であるような文法要素。

3.38

内容種別(content-type)  三つの値 empty,complex 又は simple のうちの一つ。

3.39

混在列(mixed sequence)  要素及び文字列のどちらも含んでよい列。

4.

記法

4.1

拡張 BNF  この規格は,拡張 BNF(EBNF)を用いて RELAX NG の完全な構文及び単純な構文を記述

する。EBNF による文法の記述は,一つ以上の生成規則から成る。各生成規則は,非終端記号名,その次

に ::=,その次に選択肢を | で区切って並べたものとする。一つの選択肢の中では,イタリック体は非終

端記号を参照するために用い,連結はその順番で出現することを示し,[ ]  は任意選択を示し,+  は一回以

上の繰返しを示し,*  は 0 回以上の繰返しを示し,これら以外の文字が普通の字体で書かれたときはそれ

自体を示す。

4.2

推論規則

4.2.1

変数  変数に用いる記号は,変数のとる値の範囲を次のとおりに示す。

a)  n

は,名前を値とする。

b)  nc

は,名前クラスを値とする。

c)

ln

は,局所名を値とする。ここで局所名とは文字列であって,W3C XML-NAMES の NCName 生成規

則にマッチするものとする(すなわちコロンを含まない名前とする。

d)  u

は,URI を値とする。

e)

cx

は,文脈(5.で定義した。

)を値とする。

f)

a

は,属性の集合を値とする。一つの属性しか含まない集合は,その属性と同一視する。

g)  m

は,要素及び文字列から成る列を値とする。一つの要素又は文字列しか含まない列は,その要素又

は文字列と同一視する。の値である列は,文字列が連続したものを含んでもよく,空の文字列を含

んでもよい。

備考  の値である列であって,要素の子としては出現できないものがある。

h)  p

は,パターン(pattern 生成規則にマッチする要素とする。

)を値とする。

i)

s

は,文字列を値とする。

j)

ws

は,空白だけから構成される文字列又は空列を値とする。

k)  params

は,パラメタの列を値とする。

l)

e

は,要素を値とする。

m)  ct

は,内容種別を値とする。

4.2.2

命題  次の表記は,命題を示す。

a)  n in nc

n

が名前クラス nc に属することを意味する。

b)  cx |- am =~ p

文脈 cx において,

(複数の)属性 並びに要素及び文字列からなる列 がパターン にマッチするこ

とを意味する。


5

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

c) disjoint(a

1

,  a

2

)

a

1

にある属性の名前であって,しかも a

2

にある属性の名前であるものは存在しないことを意味する。

d)  m

1

 interleaves m

2

m

3

m

1

が m

2

及び m

3

のインタリーブ(適当に重ねたもの。9.3.6 を参照。

)であることを意味する。

e)

cx |- am =~

weak

 p

文脈 cx において,属性 並びに要素及び文字からなる列 がパターン と弱い意味でマッチするこ

とを意味する。

f) okAsChildren(m)

混在列 が,要素の子として出現できることを示す。すなわち,空の文字列が現れることはなく,二

つの文字列が連続して現れることはない。

g) deref(ln) = <element> nc p </element>

文法が <define name="ln"> <element> nc p </element> </define>を含むことを意味する。

h) datatypeAllows(u

 ln

 params

  s

 cx)

URI u

が示すデータ型ライブラリで,文脈 cx において解釈される文字列 は,パラメタ params をもつ

データ型 ln の合法的な値であることを意味する。

i) datatypeEqual(u

 ln

  s

1

 cx

1

  s

2

 cx

2

)

URI u

が示すデータ型ライブラリで,文脈 cx

1

において解釈される文字列 s

1

と文脈 cx

2

において解釈さ

れる文字列 s

2

とは,データ型 ln の同じ値をもつことを意味する。

j)

s

1

 = s

2

s

1

及び s

2

が同一であることを意味する。

k) valid(e)

要素 が文法に照らして妥当であることを意味する。

l) start()

=

p

文法が <start> p </start>  を含むことを意味する。

m) groupable(ct

1

,  ct

2

)

内容種別 ct

1

及び ct

2

が,

“グループ化可能”であることを意味する。

n)  p :

c

 ct

パターン は,内容種別 をもつことを意味する。

o) incorrectSchema()

スキーマが正しくないことを意味する。

4.2.3

式  次の表記は,命題中の式を示す。

a) name(u

,  ln)

URI u

及び局所名 ln をもつ名前を返す。

b)  m

1

,  m

2

列 m

 1

及び列 m

2

を連結したものを返す。

c)

a

1

 + a

2

a

1

及び a

2

の和集合を返す。

d) (

)

空の列を返す。

e) {

}


6

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

空の集合を返す。

f) ""

空の文字列を返す。

g) attribute(n

,  s)

名前 及び値 をもつ属性を返す。

h) element(n

,  cx  a  m)

名前が で,文脈が cx で,

(一般に複数の)属性が で,

(一般に複数の)子が混在列 である要素

を返す。

i) max(ct

1

,  ct

2

)

ct

1

及び ct

2

の大きい方を返す。ここで,内容種別は empty( ), complex( ), simple( )の順に大きいとす

る。

j) normalizeWhiteSpace(s)

文字列 の先頭及び末尾にある空白文字を取り除き,  それ以外の空白文字の列を単一のスペース文字

に置き換えたものを返す。

k) split(s)

空白によって s を幾つかのトークンに区切り,それらのトークン(文字列)からなる列を返す。返さ

れた列に含まれる各文字列は,空ではなく空白を含まない。

l) context(u

,  cx)

cx

と同一だが,デフォルトの名前空間が である点だけが異なる文脈を返す。が空文字列の場合は,

構築された文脈はデフォルト名前空間をもたない。

m) empty(

)

empty

内容種別を返す。

n) complex(

)

complex

内容種別を返す。

o) simple(

)

simple

内容種別を返す。

p)

パターンを表す開始タグの中の[cx]

そのパターン要素の文脈を返す。

5.

データモデル  RELAX NG では,スキーマ及びインスタンスのどちらを表現する XML 文書も抽象デ

ータモデルによって扱う。スキーマ及びインスタンスを表現する XML 文書は,JIS X 4159 に適合する整

形式でなければならず,W3C XML-Names の制約に適合しなければならない。

XML

文書は,要素によって表現される。要素は,次のものから成る。

a)

名前

b)

文脈

c)

属性の集合

d)  0

個以上の子の順序付き並び。どの子も,要素又は空でない文字列のどちらかとし,並びの中に二つ

の文字列が続いて現れてはならない。

名前は,次のものから成る。

a)

名前空間 URI を表す文字列。空文字列は,特別な意味をもち,名前空間がないことを表す。


7

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

b)

局所名を表す文字列。この文字列は,W3C XML-Names の NCName 生成規則とマッチする。

文脈は,次のものから成る。

a)

基底 URI

b)

名前空間対応付け。これは,接頭辞を名前空間 URI に対応付ける。さらにデフォルト名前空間 URI

(xmlns 属性によって宣言されるもの。

)を指定してもよい。

属性は,次のものから成る。

a)

名前

b)

値を表す文字列

文字列は 0 個以上の文字の並びから成り,文字は JIS X 4159 において定義される。

XML

文書のための要素は,次に示すとおりに W3C XML-Infoset のインスタンスから構成される。情報

項目の  x 特性の値を参照するために,記法 [x]を用いる。要素を文書情報項目から構成するには,[document

element]

から要素を構成する。要素を要素情報項目から構成するには,名前を[namespace name]及び[local

name]

から構成し,文脈を[base URI]及び[in-scope namespaces]から構成し,

(一般に複数の)属性を[attributes]

から構成し,

(一般に複数の)子を [children]から構成する。要素の(一般に複数の)属性を属性情報項目

の順序なし集合から構成するには,各属性情報項目から属性を構成することを繰り返す。要素の(一般に

複数の)子を子情報項目のリストから構成するには,まず要素情報項目及び文字情報項目以外の情報項目

を削除し,次にリストの中の各要素情報項目から要素を構築し,  連続する文字情報項目をできるだけ連結

することによって文字列を構成する。属性を属性情報項目から構成するには,名前を[namespace name]及び

[local name]

から構成し,値を[normalized value]から構成する。  要素及び属性の名前を[namespace name]及

び[local name]から構成するとき,[namespace name]特性が存在しない場合には,空の文字列及び[local name]

から構成する。文字列を文字情報項目の並びから構成するには,各文字情報項目の[character code]から文字

を構成することを繰り返す。

単一の XML 文書について複数の異なる情報集合が存在する可能性がある。これは,すべての DTD 宣言

を処理し,すべての外部解析対象実体を展開することが,XML パーサに義務付けられていないことによる。

これらの複数の情報集合の中には,[all declarations processed]が真であって,未拡張実体参照情報項目を全

く含まない情報集合が正確に一つだけ存在する。この情報集合を,RELAX NG データモデルを定義するた

めの基礎とする。

6.

完全な構文  拡張 BNF で書かれた次の文法は,RELAX NG の構文を要約する。ここでの記法は,

RELAX NG

スキーマを XML で表現したものを,文字の並びとして扱う。しかし,文法はデータモデルレ

ベルのものとする。例えば,ここでの構文は<text/>を用いているが,インスタンス又はスキーマでは

<text></text>

を代わりに使用できる。これは,データモデルレベルでは,どちらも同じ要素を表すことに

よる。この文法に示されるすべての要素は,次に示す名前空間 URI で修飾される。

http://relaxng.org/ns/structure/1.0

記号 QName 及び NCName は,W3C XML-NAMES において定義される。anyURI 記号は,文字列であっ

て,許可されない値を  W3C XLINK の 5.4  に示すとおりに別扱いすると,IETF RFC 2396(これは IETF 

RFC 2732

によって修正されている。

)において定義される URI 参照となるものを示す。記号 string は,ど

んな文字列ともマッチする。


8

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

明示的に示される属性に加えて,どの要素も ns 属性をもつことができ,どの要素も datatypeLibrary 属

性をもつことができる。ns 属性は,どんな値でももつことができる。datatypeLibrary 属性の値は,前の段

落に示される anyURI 記号とマッチしなければならない。さらに,URI 参照の相対形式は用いてはならず,

素片識別子をもってはならない。例外として,この属性の値は空文字列であってもよい。

どの要素も,文法に示される属性に加えて,外来の属性をもつこともできる。外来の属性とは,属性で

あって,その名前が属する名前空間 URI が空文字列でも RELAX NG 名前空間 URI でもないものとする。

文字列である子をもつことができないどの要素(つまり,value, param 及び name 以外の要素とする。

)も,

文法に示される子要素に加えて,外来の子要素をもつことができる。外来の要素とは,要素であって,そ

の名前が属する名前空間 URI が RELAX NG 名前空間 URI でないものとする。他の子要素と外来の子要素

との間の相対的な位置についての制約はない。

どの要素も,子として,完全に空白文字だけから成る文字列をもつことができる。ここで空白文字は,

#x20

,#x9,#xD 又は#xA の一つとする。空白文字列である子と子要素との間の相対的な位置についての制

約はない。

name

,type 及び combine の各属性の値,並びに各 name 要素の内容は,先頭及び末尾に空白をもっても

よい。

pattern  ::=

<element name="QName"> pattern+ </element>

| <element> nameClass pattern+ </element>

| <attribute name="QName"> [pattern] </attribute>

| <attribute> nameClass [pattern] </attribute>

| <group> pattern+ </group>

| <interleave> pattern+ </interleave>

| <choice> pattern+ </choice>

| <optional> pattern+ </optional>

| <zeroOrMore> pattern+ </zeroOrMore>

| <oneOrMore> pattern+ </oneOrMore>

| <list> pattern+ </list>

| <mixed> pattern+ </mixed>

| <ref name="NCName"/>

| <parentRef name="NCName"/>

| <empty/>

| <text/>

| <value [type="NCName"]> string </value>

| <data type="NCName"> param* [exceptPattern] </data>

| <notAllowed/>

| <externalRef href="anyURI"/>

| <grammar> grammarContent* </grammar>

param  ::=

<param name="NCName"> string </param>

exceptPattern  ::=


9

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

<except> pattern+ </except>

grammarContent  ::=

start

define

| <div> grammarContent* </div>

| <include href="anyURI"> includeContent* </include>

includeContent  ::=

start

define

| <div> includeContent* </div>

start  ::=

<start [combine="method"]> pattern </start>

define   ::=

<define name="NCName" [combine="method"]> pattern+ </define>

method  ::=

choice

| interleave

nameClass  ::= 

<name> QName </name>

| <anyName> [exceptNameClass] </anyName>

| <nsName> [exceptNameClass] </nsName>

| <choice> nameClass+ </choice>

exceptNameClass  ::=

<except> nameClass+ </except>

7.

単純化

7.1

一般事項  6.で与えられた完全な構文は,7.で示す変換規則を順番どおりに適用することによって,

より単純な構文に変換される。それぞれの規則は,次の規則が適用される前に,スキーマ内のすべての要

素に適用された場合と同じ効果をもつものとする。個々の変換規則は,正しいスキーマが満たさなければ

ならない制約を指定している場合がある。変換規則は,データモデルのレベルで適用する。変換を適用す

る前に,スキーマを解析してデータモデルのインスタンスを構築する。

7.2

注釈  外来の属性及び要素を,取り除く。

参考  この段階で xml:base 属性を取り除くことは安全である。なぜなら,xml:base 属性は要素情報項

目の[base URI]を確定するために用いられ,更に [base URI]から要素の文脈の基底 URI が作ら

れている。したがって,文書を解析してデータモデルの要素を得た後では,xml:base 属性を破

棄することができる。

7.3

空白  value 及び param を除くどの要素についても,空白文字だけからなる文字列である子を取り除

く。

name

, type 及び combine 属性の値,並びに name 要素の内容から,先頭及び末尾の空白文字を取り除く。


10

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

7.4

datatypeLibrary

属性  datatypeLibary 属性の値は,W3C XLINK の 5.4 で指定されるとおりに,許容

されない文字を別扱いすることによって変換する。

datatypeLibrary

属性をもたないどの data 要素又は value 要素にも,datatypeLibrary 属性を追加する。追加

さ れ る datatypeLibrary 属 性 の 値 は , datatypeLibrary 属 性 を も つ 祖 先 要 素 で あ っ て 最 も 近 い も の の

datatypeLibrary

属性の値とする。

DatatypeLibrary

属性をもつ祖先が存在しない場合は空文字列とする。

次に,

datatypeLibrary

属性であって,data 又は value 以外の要素に附属するものを取り除く。

7.5

value

要素の type 属性  type 属性をもたない value 要素には,値が token である type 属性を付け加え,

datatypeLibrary

属性の値を空文字列に置き換える。

7.6

href 

属性  externalRef 要素又は include 要素の href 属性の値は,まず,W3C XLINK の 5.4 で指定さ

れるとおりに,許されない文字を別扱いすることによって変換する。次に,URI 参照を IETF RFC 2396 

5.2

に規定したとおりに絶対形式に帰着させる。これは,href 属性をもつ要素の文脈から得られる基底 URI

を用いて行う。

href

属性の値は要素(5.で示されたもの。

)を構築するために使用する。これは,次のとおりに行わなけ

ればならない。URI 参照は,URI それ自体及び素片識別子からなる(素片識別子は省いてもよい。

。まず,

URI

によって特定される資源を取り出す。

その結果は MIME 実体(IETF RFC 2045 を参照。

)

であって,

MIME

メディア型(IETF RFC 2046 を参照。)がラベルとして付されたバイト列になる。MIME 実体及び素片識別

子(素片識別子はなくてもよい。

)から要素がどのように構築されるかは,メディア型によって定まる。メ

ディア型が,

application/xml

又は text/xml のとき,

適用される RFC

(この規格の制定時点では IETF RFC 3023

が適用される。

)に従って,MIME 実体は XML 文書として解析されなければならない。そして,解析結果

から,5.で指定されたとおりに要素を構築しなければならない。特に,charset パラメタは,この RFC で指

定されたとおりに扱われなけばならない。この規格は,application/xml 及び text/xml を除き,メディア型の

取扱いを定義しない。href 属性によって特定される資源のもつメディア型の登録が,そのメディア型のた

めの素片識別子の解釈の仕方を定義している場合を除いて,href 属性は素片識別子を含んではならない。

参考 IETF

RFC 3023

は,application/xml 又は text/xml の素片識別子の解釈を定義しない。

7.7

externalRef

要素  externalRef 要素は次のとおりに変換する。7.6 で指定されたとおりに,href 属性の

値である URI 参照を用いて要素を構築する。この要素は,パターンの構文にマッチしなければならない。

この要素を,7.7 で与えた規則及び 7.7 より前の箇条で与えた規則を適用して再帰的に変換する。この変換

は,繰返しに陥ってはならない。言い換えれば,参照された要素を変換するとき,同じ値の href 属性をも

つ externalRef 要素への参照が起こってはならない。

参照された要素が ns 属性をもたない場合は,externalRef 要素の ns 属性を参照された要素に記述する。

次に,externalRef 要素を,参照された要素で置き換える。

7.8

include 

要素  include 要素は,次のとおりに変換する。7.6 で指定されたとおりに,href 属性の値を

URI

参照として用いて要素を構築する。この要素は,文法の構文にマッチする grammar 要素でなければな

らない。 

この grammar 要素は,7.8 で与えた規則及び 7.8 より前の節で与えた規則を適用して再帰的に変換する。

この変換は,繰返しに陥ってはならない。言い換えれば,grammar 要素を変換するとき,同じ値の href 属

性をもつ include 要素の参照が起こってはならない。

ある要素の構成部品とは,その要素のすべての子及びすべての div 子要素の構成部品であると定義する。

include

要素が start 構成部品をもつ場合,grammar 要素は,少なくとも一つの start 構成部品をもたなければ

ならない。この場合は,すべての start 構成部品を grammar 要素から取り除く。include 要素が define 構成


11

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

部品をもつ場合,grammar 要素は,同じ名前の define 構成部品を少なくとも一つもたなければならない。

これらの define 構成部品すべてを grammar 要素から取り除く。

include

要素を div 要素に変換する。まず,div 要素の属性は,include 要素の属性から href 属性を除いた

ものとする。div 要素の子は,grammar 要素(直前の段落で示したとおりに start 構成部品及び define 構成

部品を取り除いた後のものとする。

)に include 要素のすべての子を付け加えたものとする。次に,grammar

要素を div 要素に変換する。

7.9

element

要素及び attribute 要素の name  属性  element 要素及び attribute 要素の name 属性は,name

子要素に変換する。

attribute

要素が name 属性をもち ns 属性をもたない場合,ns=""属性を name 子要素に追加する。

7.10  ns

属性  ns 属性をもたない name 要素,nsName 要素及び value 要素には,ns 要素を追加する。追加

される ns 属性の値は,ns 属性をもつ最も近い祖先要素の ns 属性の値とする。ns 属性をもつ祖先要素が存

在しない場合には空文字列とする。次に,ns 属性であって,name,nsName 又は value 以外の要素にあるも

のを取り除く。

備考 ns 属性の値には,許されない文字を別扱いする変換又は他のいかなる変換も適用しない。これ

は,インスタンスの中の名前空間 URI にはどのような変換も適用されず,ns 属性の値はこの名

前空間 URI と比較されることによる。

参考 include 要素及び externalRef 要素が解決されるのは,datatypeLibrary 属性が追加された後かつ ns

属性が追加される前なので,ns 属性は外部スキーマにも継承されるが,datatypeLibrary 属性は

継承されない。

7.11  QName

  接頭辞をもつどの name 要素についても,接頭辞を取り除き,ns 属性を追加する。既存の

ns

属性があっても置き換える。追加する ns 属性の値は,name 要素の文脈での名前空間対応付けにおいて

この接頭辞に対応付けられたものとする。この文脈は,この接頭辞についての対応付けをもたなければな

らない。

7.12  div 

要素  div 要素は,その子によって置き換える。

7.13

子要素の数  define 要素,oneOrMore 要素,zeroOrMore 要素,optional 要素,list 要素及び mixed 要

素は,正確に一つの子要素をもつように変換する。一つより多くの子要素をもつ場合,それらを group 要

素によってまとめる。同様に,element 要素は正確に二つの子要素をもつように変換する。最初のものは名

前クラスとし,2 番目のものはパターンとする。二つより多くの子要素をもつ場合,最初の要素以外の子

要素を group 要素にまとめる。

except

要素は,正確に一つの子要素をもつように変換する。一つより多くの子要素をもつ場合,子要素

を choice 要素によってまとめる。

attribute

要素がただ一つの子要素(名前クラス)をもつ場合,text 要素を追加する。

choice

要素, group 要素又は interleave 要素は,正確に二つの子要素をもつように変換する。一つの子要

素をもつ場合,その子要素によって置き換える。二つより多くの子要素をもつ場合,親要素と同じ名前の

新しい要素によって最初の二つの子要素をまとめる。

<choice> p1 p2 p3 </choice>

これは,次のとおりに変換する。

<choice> <choice> p1 p2 </choice> p3 </choice>

この操作は,子要素の数を一つ減らす。子要素の数が正確に二つになるまで,この変換を繰り返し適用

する。


12

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

7.14  mixed 

要素  mixed 要素は,text 要素を伴うインタリーブに変換する。

<mixed> p </mixed>

これは,次のとおりに変換する。

<interleave> p <text/> </interleave>

7.15  optional 

要素  optional 要素は,choice 要素に変換する。この choice 要素の片方の子は,optional 要

素の子とし,もう一方の子は empty とする。

<optional> p </optional>

これは,次のとおりに変換する。

<choice> p <empty/> </choice>

7.16  zeroOrMore 

要素  zeroOrMore 要素は,choice 要素に変換する。この choice 要素の片方の子は,

<oneOrMore> p </oneOrMore>

要素とし,もう一方の子は empty 要素とする。ここで,p  は zeroOrMore 要素

の子とする。

 <zeroOrMore>

p

</zeroOrMore>

これは,次のとおりに変換する。

<choice> <oneOrMore> p </oneOrMore> <empty/> </choice>

7.17

制約  この規則は,変換は行わないが,様々な制約を検査する。

参考  7.17 の制約は,10.で規定される制約とは異なり,いかなる ref 要素も解決することなしに検査

できる。そのために,これらの制約は,到達可能ではない(7.20 参照)という理由又は notAllowed

7.21 参照)が原因でこの後の段階の単純化によって消えてしまうパターンにも適用される。

anyName

要素の子要素である except 要素は,anyName 子孫要素をもってはならない。nsName 要素の子

要素である except 要素は,nsName 子孫要素又は anyName 子孫要素をもってはならない。

attribute

要素の最初の子,又は attribute 要素の最初の子の子孫として出現し,ns 要素が空文字列と等し

い name 要素は,xmlns と等しい内容をもってはならない。

attribute

要素の最初の子,又は attribute 要素の最初の子の子孫として出現する,name 要素又は nsName

要素は,http://www.w3.org/2000/xmlns という値の ns 属性をもってはならない。

参考  W3C XML-Infoset は,名前空間宣言属性の名前空間 URI を http://www.w3.org/2000/xmlns とす

ると定義している。

data

要素又は value 要素は,データ型を正しく使用しなければならない。特に,type 属性は,datatypeLibrary

属性の値で識別されるデータ型ライブラリに含まれるデータ型を特定しなければならない。data 要素にお

いて,パラメタリストはこのデータ型(9.3.8 参照)で許されるものでなければならない。


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 要素となる。


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

要素を再帰的に展開する。この結果ループが発生してはならない。言い換えれば,という値の name をも

つ ref 要素の置き換えを展開するときに,再び という値の 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>


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)  の形をしている場合は,否定的な前提条件とする。そうでない場合には,肯定的

な前提条件とする。公理も推論規則も変数を用いることができる。変数は名前をもち,更に添え字をもつ

こともある。変数の名前はイタリックで示す。変数の名前から,その変数がとることができる値の範囲が

決まる。公理及び推論規則が同じ範囲の値をもつ幾つかの変数を含む場合は,添え字を用いて区別する。


16

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

公理及び推論規則には,それが含む変数についての全称記号が暗黙に適用される。これについては,次に

詳しく説明する。

一つの推論規則又は公理において,ある変数が 2 回以上出現することがありうるので,変数がとること

ができるオブジェクトの種類ごとに同値関係を定義する必要がある。

どの種類のオブジェクトについても,

同値関係は値に基づいて決まる。ある種類の二つのオブジェクトが同値であるのは,それらの構成物が同

値であるときとする。例えば,二つの属性が同じとみなすのは,それらの名前も値も同じときとする。二

つの文字が同値であるのは,その Unicode 符号位置が同じときとする。

9.2

名前クラス   

名前クラスについて主要な意味概念は,名前が名前クラスに属することとする。名前クラスは,生成規

則 nameClass にマッチする要素とする。名前は,5.で定義されている。名前は,名前空間 URI 及び局所名

から成る。

最初の公理(anyName 1)を次に示す。

(anyName 1)

in <anyName/>

備考  この公理は,どんな名前 に対しても,は名前クラス<anyName/>に属することを意味する。

言い換えれば,<anyName/>は任意の名前にマッチする。この公理に現れる変数には,全称記号

が暗黙に指定されていることに注意する。この暗黙の指定があるため,この公理はどんな名前

n

についても適用できる。

最初の推論規則も同程度に簡単である。

not(

n

in

nc

)

(anyName 2)

n

in <anyName> <except>

nc

</except> </anyName>

備考  この推論規則は,どんな名前 及び名前クラス nc に対しても,が nc に属さない場合には,n

は  <anyName> <except> nc </except> </anyName> に 属 す る こ と を 示 す 。 言 い 換 え れ ば ,

<anyName> <except> nc </except> </anyName>

は,nc にマッチしないどんな名前にもマッチす

る。

名前クラスについての他の公理及び推論規則を次に示す。

(nsName 1)

name(

u

ln

) in <nsName ns="

u

"/>

not(name( u

,  ln ) in nc)

(nsName 2)

name( u

,  ln ) in <nsName ns="u"> <except> nc </except> </nsName>

(name)

name( u

,  ln ) in <name ns="u"> ln </name>


17

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

in nc

1

(name choice 1)

in <choice> n c

1

n c

2

</choice>

in nc

2

(name choice 2)

in <choice> n c

1

n c

2

</choice>

9.3

パターン

9.3.1

choice

パターン  choice パターンの意味を次のとおりに規定する。

cx  ⊦  a=~  p

1

(choice 1)

cx  ⊦  a=~  <choice> p

1

p

2

</choice>

cx  ⊦  a=~  p

2

(choice 2)

cx  ⊦  a=~  <choice> p

1

p

2

</choice>

9.3.2

group

パターン  group パターンの意味を次のとおりに規定する。

cx  ⊦  a

1

m

1

 =~  p

1

cx  ⊦  a

2

m

2

 =~  p

2

(group)

cx  ⊦  a

1

 a

2

m

1

 m

2

=~  <group> p

1

p

2

</ group >

参考  10.4 に示す制限は,推論規則の結論において構築される属性集合に,同一の名前をもつ複数の

属性がないことを保証する。

9.3.3

empty

パターン  empty パターンの意味を次のとおりに規定する。

(empty)

cx  ⊦  { }; ( ) =~ <empty/>

9.3.4

text

パターン  text パターンの意味を次のとおりに規定する。

(text 1)

cx  ⊦  { }; ( ) =~ <text/>

cx  ⊦ { }; =~ <text/>

(text 2)

cx  ⊦ { }; m

,  =~ <text/>

この規則は,text は 0 個以上の文字列にマッチすることを意味している。

9.3.5

oneOrMore

パターン  oneOrMore パターンの意味を次のとおりに規定する。

cx  ⊦  a=~ p

(oneOrMore 1)

cx  ⊦  a=~ <oneOrMore> </oneOrMore>

cx  ⊦  a

1

m

1

=~ p   cx ⊦  a

2

m

2

=~ <oneOrMore> p</oneOrMore>   disjoint(a

1

a

2

)

(oneOrMore 2)

cx  ⊦  a

1

 a

2

m

1

 m

2

=~  <group> p

1

p

2

</group>


18

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

9.3.6

interleave

パターン  インタリーブの意味を次の推論規則によって規定する。

(interleaves 1)

( ) interleaves ( ); ( )

m

1

interleaves m

2

m

3

(interleaves 2)

m

4

,  m

1

interleaves m

4

,  m

2

m

3

m

1

interleaves m

2

m

3

(interleaves 3)

m

4

,  m

1

interleaves m

2

,  m

4

m

3

例  <a/><a/>及び<b/>のインタリーブは,<a/><a/><b/>,<a/><b/><a/>及び<b/><a/><a/>である。

インタリーブパターンの意味を次のとおりに規定する。

cx  ⊦  a

1

m

1

=~ p

1

cx  ⊦  a

2

m

2

=~ p

2

m

3

interleaves m

1

m

2

(interleave)

cx  ⊦  a

1

a

2

m

3

=~ <interleave> p

1

p

2

</interleave>

参考  10.4 にある制限は,  推論規則の結論において構築される属性集合は,同一の名前をもつ複数の

属性をもたないことを保証する。

9.3.7

element

パターン及び attribute パターン  属性の値は,常に単一の文字列とする。文字列が空であ

ってもよい。したがって,空の列は属性の値とはなり得ない。一方,要素の(一般に複数の)子は空の列

であってもよいが,空の文字列であることはない。検証が要素及び属性を統一的に扱うことを保証するた

めに,マッチの変種として弱い意味でのマッチを導入する。弱い意味でのマッチは,属性の値をパターン

にマッチさせるとき,又は(一般に複数の)属性及び要素の(一般に複数の)子をパターンにマッチさせ

るときに用いる。

弱い意味でのマッチの意味を次のとおりに規定する。

cx  ⊦  a=~ p

(weak match 1)

cx  ⊦  a=~

weak

p

 
cx  ⊦  a; ( ) =~ p

(weak match 2)

cx  ⊦  aws =~

weak

p

 
cx  ⊦  a; "" =~ p

(weak match 3)

cx  ⊦  a; ( ) =~

weak

p

attribute

パターンの意味を,次のとおりに規定する。

cx  ⊦ { }; =~

weak

p    n in nc

(attribute)

cx  ⊦ attribute( n

,  ); ( ) =~ <attribute> nc p </attribute>

element

パターンの意味を,次のとおりに規定する。


19

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

cx

1

⊦  a=~

weak

p   n in nc   okAsChildren(m)

deref(ln) = <element> nc p </element>

(element)

cx

2

⊦ { }; ws

1

, element( n,  cx

1

,  a,  ),  ws

2

=~ <ref name="ln"/>

9.3.8

data

パターン及び value パターン  RELAX NG は,データ型についてはデータ型ライブラリに委

ねている。データ型ライブラリは,URI によって特定する。あるデータ型ライブラリに属するデータ型は,

NCName

によって特定する。データ型ライブラリは,次の二つの機能をもつ。

a)

ある文字列が,あるデータ型において許される表現かどうかを決定することができる。この機能は,0

個以上のパラメタから成るリストを受け取る。例えば,文字列データ型は,文字列の長さを指定する

パラメタをもつかもしれない。データ型ライブラリは,各データ型に適用できるパラメタが何かを規

定する。

b)

二つの文字列が,あるデータ型の同じ値を表すかどうかを決定することができる。この機能は,パラ

メタをもたない。

いずれの機能も,文字列が現れる文脈を用いてもよい。例えば,QName を表すデータ型は,名前空間対

応付けを用いる。

datatypeEqual

関数は,反射的,推移的及び対称的でなければならない。すなわち,次の推論規則が成立

しなければならない。

datatypeAllows(u

,  ln,  params,  s,  cx)

(datatypeEqual reflexive)

datatypeEqual(u

,  ln,  s,  cx,  s,  cx)

 
datatypeEqual(u

,  ln,  s

1

,  cx

1

,  s

2

,  cx

2

)

datatypeEqual(u

,  ln,  s

2

,  cx

3

,  s

3

,  cx

3

)

(datatypeEqual transitive)

datatypeEqual(u

,  ln,  s

1

,  cx

1

,  s

3

,  cx

3

)

 
datatypeEqual(u

,  ln,  s

1

,  cx

1

,  s

2

,  cx

2

)

(datatypeEqual symmetric)

datatypeEqual(u

,  ln,  s

2

,  cx

2

,  s

1

,  cx

1

)

data

パターン及び value パターンの意味を次のとおりに規定する。

datatypeEqual(u

1

,  ln,  s

1

,  cx

1

,  s

2

, context( u

2

,  cx

2

))

(value)

cx

1

⊦ { }; s

1

=~ <value datatypeLibrary="u

1

" type="ln" ns="u

2

" [cx

2

]> s

2

</value>

 
datatypeAllows(u

,  ln,  params,  s,  cx)

(data 1)

cx  ⊦ { }; =~ <data datatypeLibrary="u" type="ln"> params </data> 
 
datatypeAllows(u

,  ln,  params,  s,  cx)          not(cx  ⊦  a=~ p)

(data 2)

cx  ⊦ { }; =~ <data datatypeLibrary="u" type="ln"> params <except> </except> </data> 

9.3.9

組込みデータ型ライブラリ  空の URI は,特別の組込みデータ型ライブラリを特定する。このラ

イブラリは,二つのデータ型 string 及び token を提供する。いずれのデータ型もパラメタをもつことはでき

ない。

二つの組込みデータ型の意味を次のとおりに規定する。


20

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

(string allows)

datatypeAllows(""

, "string", ( ),  s,  cx)

(string equal)

datatypeEqual(""

, "string",  s,  cx

1

,  s,  cx

2

)

(token allows)

datatypeAllows(""

, "token", ( ),  s,  cx)

 
normalizeWhiteSpace( s

1

) = normalizeWhiteSpace( s

2

)

(token equal)

datatypeEqual(""

, "token",  s

1

,  cx

1

,  s

2

,  cx

2

)

9.3.10  list

パターン  list パターンの意味を次のとおりに規定する。

cx  ⊦  { }; split( ) =~ p

(list)

cx  ⊦  { }; =~ <list> </list> 

参考  この推論規則において,パターンと照合される列は連続する幾つかの文字列を含んでもよいこ

とに注意。

9.4

妥当性  要素が妥当であるのは,この要素に空の属性集合を組合せたものが,文法の start パターン

にマッチするときとする。

start() = p          cx  ⊦  { }; =~ p

(valid)

valid(e

10.

制限

10.1

一般事項  次に示す制約は文法が 8.で規定した単純な形式に変換された後にすべて確認される。  こ

れらの制限は,利用者の誤りの検出及び実装の簡略化を目的とする。

10.2

禁止されるパス  10.では,スキーマにおいて要素が出現できる位置についてのパスを,祖先要素の

名前に基づいて規定する。これらの制限を規定するために,禁止されたパスの概念を使用する。パスは,/

又は // で区切られた NCName の並びとなる。

a)

ある要素がパス x にマッチするのは,その要素の局所名が x のときに限る。ここで,x は NCName と

する。

b)

ある要素がパス x/p にマッチするのは,この要素の局所名が x であって,この要素が p にマッチする

子をもつときに限る。ここで,x は NCName であって,p はパスとする。

c)

ある要素がパス x//p にマッチするのは,この要素の局所名が x であって,この要素が p にマッチする

子孫をもつときに限る。ここで,x は NCName であって,p はパスとする。

次に例を示す。

<foo>

  <bar>

        <baz/>

    </bar>

</foo>


21

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

この要素は,パス foo,foo/bar,foo//bar,foo//baz,foo/bar/baz,foo/bar//baz 及び foo//bar/baz にマッチす

るが,foo/baz 又は foobar にはマッチしない。

単純な形式に変換された後の正しい RELAX NG スキーマは,禁止されたパスにマッチする要素を含ん

ではならない。

10.2.1  attribute

パターン  次に示すパスは禁止されている。

a) attribute//ref

b) attribute//attribute

10.2.2  oneOrMore

パターン  次に示すパスは禁止されている。

a) oneOrMore//group//attribute

b) oneOrMore//interleave//attribute

10.2.3  list

パターン  次に示すパスは禁止されている。

a) list//list

b) list//ref

c) list//attribute

d) list//text

e) list//interleave

10.2.4  data

中の except パターン  次に示すパスは禁止されている。

a) data/except//attribute

b) data/except//ref

c) data/except//text

d) data/except//list

e) data/except//group

f) data/except//interleave

g) data/except//oneOrMore

h) data/except//empty

参考  これは data を親にもつ except 要素は,data 要素,value 要素及び choice 要素だけを含むことが

できることを意味する。

10.2.5  start

要素  次に示すパスは禁止されている。

a) start//attribute

b) start//data

c) start//value

d) start//text

e) start//list

f) start//group

g) start//interleave

h) start//oneOrMore

i) start//empty

10.3

文字列の並び  RELAX NG  は,次のパターンを許可しない。

<element name="foo">


22

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

  <group>

    <data type="int"/>

    <element name="bar">

            <empty/>

        </element>

  </group>

</element>

次のパターンも許可しない。

<element name="foo">

  <group>

    <data type="int"/>

        <text/>

  </group>

</element>

備考  明確さのため,直前の二つの例は単純な構文に変換していない。これは,10.3 における制約が,

10.

における他の制約と同様に,単純な構文に変換されたあとに検査されるという要求を変える

ものではない。

一般的に説明する。要素又は属性の内容のためのパターンが次の二つを含む場合,これら二つのパター

ンが同時に適用されることはない。

a)

子にマッチすることができるパターン(element,data,value,list  又は text パターン)

b)

一つの文字列にマッチするパターン(data,value  又は list パターン)

この規則は,list パターンの中に出現するパターンには適用しない。

この規則を形式化するために,

内容種別の概念を用いる。

要素の内容として許可されるパターンは,

emtpy

complex

及び simple の三つの内容種別のうちの一つをもつ。

empty

内容種別は,どの内容種別ともグループ化可能とする。さらに,complex 内容種別は,complex 内

容種別とグループ化可能とする。次に示す規則はこれを形式化している。

(group empty 1)

groupable(empty( )

,  ct)

(group empty 2)

groupable(ct

, empty( ))

(group empty 3)

groupable(complex( )

, complex( ))

幾つかのパターンは内容種別をもつ。次に示す規則は,パターンが内容種別をもつのはどんな場合か,

その場合の内容種別は何かを定義している。

(value)

<value datatypeLibrary="u

1

" type="ln" ns="u

2

"> </value> :

c

simple( )

(data 1)

<data datatypeLibrary="u" type="ln"> params </data> :

c

simple( )


23

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

:

c

ct

(data 2)

<data datatypeLibrary="u" type="ln"> params <except> </except> </data> :

 c

simple( )

(list)

<list> </list> :

 c

simple( )

(text)

<text/> :

 c

complex( )

(ref)

<ref name="ln"/> :

 c

complex( )

(empty)

<empty/> :

 c

empty( )

:

c

ct

(attribute)

<data datatypeLibrary="u" type="ln"> params <except> </except> </data> :

 c

simple( )

 
p

1

:

 c

ct

1

p

2

:

 c

ct

2

groupable(ct

1

,  ct

2

)

(group)

<group> p

1

p

2

</group> :

 c

max( ct

1

,  ct

2

)

 
p

1

:

 c

ct

1

p

2

:

 c

ct

2

groupable(ct

1

,  ct

2

)

(interleave)

<interleave> p

1

p

2

</interleave > :

 c

max( ct

1

,  ct

2

)

 
p

:

 c

ct

groupable(ct

,  ct)

(oneOrMore)

<oneOrMore> p

</oneOrMore > :

 c

ct

 
p

1

:

 c

ct

1

p

2

:

 c

ct

2

(choice)

<choice> p

1

p

2

</choice > :

 c

max( ct

1

,  ct

2

)

参考  10.2.5 において幾つかのパスを禁止したので,規則(data2)の条件は冗長になっている。

次に制限を記載する。要素パターンの内容として出現するパターンはすべて内容種別をもたなければな

らない。

deref(ln) = <element> nc p </element>    not(:

c

ct)

(element)

incorrectSchema()

10.4

属性の制限  属性の重複は許可しない。より正確には,パターン <group> p1 p2 </group> 又は

<interleave> p1 p2 </interleave>

に対して,p1 の中で出現する attribute パターンの名前クラスと p2 の中で出

現する attribute パターンの名前クラスとの両方に属する名前があってはならない。パターン p1 がパターン

p2

の中に出現するのは,次のいずれかの場合とする。

a) p1

が p2 である場合。

b) p2

が choice 要素,interleave 要素,group 要素又は oneOrMore 要素であって,p1 が p2 の片方又は両方

の子の中に出現する場合。

無限名前クラスを用いる attribute は,繰り返さなければならない。より正確には,anyName 子孫要素又

は nsName 子孫要素をもつ attribute 要素は,oneOrMore 祖先要素をもたなければならない。

参考  この制限は否定の下での閉包のために必要になる。

無限名前クラスを用いる attribute は,text を内容としてもたなければならない。より正確には,anyName


24

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

子孫要素又は nsName 子孫要素をもつ attribute  要素は,text 子要素をもたなければならない。

参考  この制限は否定の下での閉包のために必要になる。

10.5  interleave

の制限  実装を容易にするため,ある名前をもつ要素は,インタリーブパターンの高々一

つのオペランドでしか許されない。同様に,text パターンは高々一つのオペランドでしか許されない。よ

り正確には,<interleave> p1 p2 </interleave>  パターンに対して,次の二つの制限を設ける。

a) p1

の中に出現する ref パターンに参照されている element  パターンの名前クラスと,p2 の中に出現す

る ref パターンに参照されている element パターンの名前クラスとの両方に属する名前があってはなら

ない。

b) text

パターンは,p1 と p2 の両方に出現してはならない。

パターンが他のパターンの中に出現するのはどんな場合かは,10.4 で定義されている。

11.

適合性

適合する RELAX NG 妥当性検証器は,XML 文書が正しい RELAX NG スキーマであるかどうか決定で

きなければならない。適合する RELAX NG 妥当性検証器は,XML 文書が正しい RELAX NG スキーマに

照らして妥当かどうか決定できなければならない。

ただし,前段落で述べた要件は,妥当性検証器が実装していないデータ型ライブラリをスキーマが用い

ていたときには適用されない。適合する RELAX NG 妥当性検証器は,9.3.9 で規定した組込みデータ型ラ

イブラリを実装することだけが要求される。RELAX NG に適合すると主張する妥当性検証器は,実装する

データ型ライブラリを文書化することが望ましい。スキーマが externalRef 要素又は include  要素をもって

おり,妥当性検証器がその URI  によって特定される資源を取り出せないとき,又は取り出した資源から要

素を構築できないときにも,前段落の要件は適用されない。RELAX NG に適合すると主張する妥当性検証

器については,URI 参照の取扱い能力を文書化しておくことが望ましい。


25

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

附属書 A(規定)RELAX NG のための RELAX NG スキーマ

正しい RELAX NG スキーマは,次のスキーマに照らして妥当とする。

 
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" 
  ns="http://relaxng.org/ns/structure/1.0" 
  xmlns="http://relaxng.org/ns/structure/1.0"> 
 
  <start> 
    <ref name="pattern"/> 
    </start> 
 
  <define name="pattern"> 
        <choice> 
      <element name="element"> 
                <choice> 
                    <attribute name="name"> 
                        <data type="QName"/> 
                    </attribute> 
                    <ref name="open-name-class"/> 
                </choice> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="attribute"> 
                <ref name="common-atts"/> 
                <choice> 
                    <attribute name="name"> 
                        <data type="QName"/> 
                    </attribute> 
                    <ref name="open-name-class"/> 
                </choice> 
                <interleave> 
                    <ref name="other"/> 
                    <optional> 
                        <ref name="pattern"/> 
                    </optional> 
                </interleave> 
            </element> 
      <element name="group"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="interleave"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="choice"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="optional"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element>


26

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

      <element name="zeroOrMore"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="oneOrMore"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="list"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="mixed"> 
                <ref name="common-atts"/> 
                <ref name="open-patterns"/> 
            </element> 
      <element name="ref"> 
                <attribute name="name"> 
                    <data type="NCName"/> 
                </attribute> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
      <element name="parentRef"> 
                <attribute name="name"> 
                    <data type="NCName"/> 
                </attribute> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
      <element name="empty"> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
            <element name="text"> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
      <element name="value"> 
                <optional> 
                    <attribute name="type"> 
                        <data type="NCName"/> 
                    </attribute> 
                </optional> 
                <ref name="common-atts"/> 
                <text/> 
            </element> 
            <element name="data"> 
                <attribute name="type"> 
                    <data type="NCName"/> 
                </attribute> 
                <ref name="common-atts"/> 
                <interleave> 
                    <ref name="other"/> 
                    <group> 
                        <zeroOrMore> 
                            <element name="param"> 
                                <attribute name="name"> 
                                    <data type="NCName"/>


27

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

                                </attribute> 
                                <ref name="common-atts"/> 
                                <text/> 
                            </element> 
                        </zeroOrMore> 
                        <optional> 
                            <element name="except"> 
                                <ref name="common-atts"/> 
                                <ref name="open-patterns"/> 
                            </element> 
                        </optional> 
                    </group> 
                </interleave> 
            </element> 
      <element name="notAllowed"> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
      <element name="externalRef"> 
                <attribute name="href"> 
                    <data type="anyURI"/> 
                </attribute> 
                <ref name="common-atts"/> 
                <ref name="other"/> 
            </element> 
      <element name="grammar"> 
                <ref name="common-atts"/> 
                <ref name="grammar-content"/> 
            </element> 
    </choice> 
  </define> 
 
  <define name="grammar-content"> 
    <interleave> 
            <ref name="other"/> 
            <zeroOrMore> 
                <choice> 
                    <ref name="start-element"/> 
                    <ref name="define-element"/> 
                    <element name="div"> 
                        <ref name="common-atts"/> 
                        <ref name="grammar-content"/> 
                    </element> 
                    <element name="include"> 
                        <attribute name="href"> 
                            <data type="anyURI"/> 
                        </attribute> 
                        <ref name="common-atts"/> 
                        <ref name="include-content"/> 
                    </element> 
                </choice> 
            </zeroOrMore> 
    </interleave> 
  </define> 
 
  <define name="include-content"> 
    <interleave> 
            <ref name="other"/> 
            <zeroOrMore>


28

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

                <choice> 
                    <ref name="start-element"/> 
                    <ref name="define-element"/> 
                    <element name="div"> 
                        <ref name="common-atts"/> 
                        <ref name="include-content"/> 
                    </element> 
                </choice> 
            </zeroOrMore> 
    </interleave> 
  </define> 
 
  <define name="start-element"> 
    <element name="start"> 
            <ref name="combine-att"/> 
      <ref name="common-atts"/> 
      <ref name="open-pattern"/> 
        </element> 
  </define> 
 
  <define name="define-element"> 
    <element name="define"> 
      <attribute name="name"> 
                <data type="NCName"/> 
            </attribute> 
            <ref name="combine-att"/> 
      <ref name="common-atts"/> 
      <ref name="open-patterns"/> 
        </element> 
  </define> 
 
  <define name="combine-att"> 
    <optional> 
      <attribute name="combine"> 
                <choice> 
                    <value>choice</value> 
                    <value>interleave</value> 
                </choice> 
            </attribute> 
    </optional> 
  </define> 
 
  <define name="open-patterns"> 
    <interleave> 
            <ref name="other"/> 
            <oneOrMore> 
                <ref name="pattern"/> 
            </oneOrMore> 
    </interleave> 
  </define> 
 
  <define name="open-pattern"> 
    <interleave> 
            <ref name="other"/> 
      <ref name="pattern"/> 
    </interleave> 
  </define> 
 
  <define name="name-class">


29

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

        <choice> 
            <element name="name"> 
                <ref name="common-atts"/> 
                <data type="QName"/> 
            </element> 
      <element name="anyName"> 
                <ref name="common-atts"/> 
                <ref name="except-name-class"/> 
            </element> 
            <element name="nsName"> 
                <ref name="common-atts"/> 
                <ref name="except-name-class"/> 
            </element> 
      <element name="choice"> 
                <ref name="common-atts"/> 
                <ref name="open-name-classes"/> 
            </element> 
    </choice> 
  </define> 
 
  <define name="except-name-class"> 
    <interleave> 
            <ref name="other"/> 
            <optional> 
                <element name="except"> 
                    <ref name="open-name-classes"/> 
                </element> 
            </optional> 
    </interleave> 
  </define> 
 
  <define name="open-name-classes"> 
    <interleave> 
            <ref name="other"/> 
            <oneOrMore> 
                <ref name="name-class"/> 
            </oneOrMore> 
    </interleave> 
  </define> 
 
  <define name="open-name-class"> 
    <interleave> 
            <ref name="other"/> 
      <ref name="name-class"/> 
    </interleave> 
  </define> 
 
  <define name="common-atts"> 
    <optional> 
      <attribute name="ns"/> 
    </optional> 
    <optional> 
      <attribute name="datatypeLibrary"> 
                <data type="anyURI"/> 
            </attribute> 
    </optional> 
    <zeroOrMore> 
            <attribute> 
                <anyName>


30

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

                    <except> 
                        <nsName/> 
                        <nsName ns=""/> 
                    </except> 
                </anyName> 
            </attribute> 
    </zeroOrMore> 
  </define> 
 
  <define name="other"> 
    <zeroOrMore> 
            <element> 
                <anyName> 
                    <except> 
                        <nsName/> 
                    </except> 
                </anyName> 
                <zeroOrMore> 
                    <choice> 
                        <attribute> 
                            <anyName/> 
                        </attribute> 
                        <text/> 
                        <ref name="any"/> 
                    </choice> 
                </zeroOrMore> 
            </element> 
    </zeroOrMore> 
  </define> 
 
  <define name="any"> 
        <element> 
            <anyName/> 
            <zeroOrMore> 
                <choice> 
                    <attribute> 
                        <anyName/> 
                    </attribute> 
                    <text/> 
                    <ref name="any"/> 
                </choice> 
            </zeroOrMore> 
        </element> 
  </define> 
 
</grammar> 
 


31

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

附属書 B(参考)例

この附属書は,本体及び附属書 A(規定)に関連する事柄を補足するものであって,規定の一部ではな

い。

B.1 

例  文書 http://www.example.com/doc.xml が,次に示すものとする。

 
 <?xml

version="1.0"?>

 <foo><pre1:bar1

xmlns:pre1="http://www.example.com/n1"/><pre2:bar2

  xmlns:pre2="http://www.example.com/n2"/></foo>

この文書を表す要素は,次をもつ。

a)

名前。これは,次をもつ。

1)

名前空間 URI としての空文字列。名前空間がないことを表す。

2)

局所名としての foo。

b)

文脈。これは,次をもつ。

1)

基底 URI として http://www.example.com/doc.xml

2)

名前空間対応付け。これは,次のとおりとする。

2.1)

接頭辞 xml を名前空間 URI http://www.w3.org/XML/1998/namespace に対応付ける。xml 接頭辞は,

すべての XML 文書において暗黙的に宣言される。

2.2)

デフォルトの名前空間 URI として空文字列を指定する。

c)

属性の空集合。

d)

二つの子要素から成る並び。一番目の要素は,次をもつ。

1)

名前。これは,次をもつ。

1.1)

名前空間 URI としての http://www.example.com/n1

1.2)

局所名として bar1

2)

文脈。これは,次をもつ。

2.1)

基底 URI としての http://www.example.com/doc.xml

2.2)

名前空間対応付け。これは,次のとおりとする。

2.2.1)

接頭辞 pre1 を名前空間 URI http://www.example.com/n1 に対応付ける。

2.2.2)

接頭辞 xml を名前空間 URI http://www.w3.org/XML/1998/namespace に対応付ける。

2.2.3)

デフォルトの名前空間 URI として空文字列を指定する。

3)

属性の空集合。

4)

子の空の並び。

二番目の要素は,次をもつ。

1)

名前。これは,次をもつ。

1.1)

名前空間 URI としての http://www.example.com/n2

1.2)

局所名としての bar2。


32

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

2)

文脈。これは,次をもつ。

2.1)

基底 URI としての http://www.example.com/doc.xml

2.2)

名前空間マップ。これは,次のとおりとする。

2.2.1)

接頭辞 pre2 を名前空間 URI http://www.example.com/n2 に対応付ける。

2.2.2)

接頭辞 xml を名前空間 URI http://www.w3.org/XML/1998/namespace に対応付ける。

2.2.3)

デフォルトの名前空間 URI として空文字列を指定する。

3)

属性の空集合。

4)

子の空の列。

B.2 

例  B.1 の文書のためのスキーマの例を完全な構文で示す。

 
 <?xml

version="1.0"?>

 <element

name="foo"

         xmlns="http://relaxng.org/ns/structure/1.0"

         xmlns:a="http://relaxng.org/ns/annotation/1.0"

         xmlns:ex1="http://www.example.com/n1"

         xmlns:ex2="http://www.example.com/n2">

  <a:documentation>A foo element.</a:documentation>

  <element name="ex1:bar1">

        <empty/>

  </element>

  <element name="ex2:bar2">

        <empty/>

  </element>

 </element>

B.3 

例  次の例は,B.2 のスキーマが単純な構文にどう変換されるかを示す。

 
 <?xml

version="1.0"?>

 <grammar

xmlns="http://relaxng.org/ns/structure/1.0">

  <start>

    <ref name="foo.element"/>

    </start>

  <define name="foo.element">

        <element>

            <name ns="">foo</name>

            <group>

                <ref name="bar1.element"/>

                <ref name="bar2.element"/>

            </group>

        </element>

  </define>

  <define name="bar1.element">

        <element>

      <name ns="http://www.example.com/n1">bar1</name>

            <empty/>

        </element>

  </define>

  <define name="bar2.element">


33

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

        <element>

      <name ns="http://www.example.com/n2">bar2</name>

            <empty/>

        </element>

  </define>

 </grammar>

備考  厳密に言えば,

単純化の結果はデータモデルに従うインスタンスであって XML 文書ではない。

簡便さのために,データモデルに従うインスタンスを XML 文書によって表現する。

B.4 

妥当性検証の例  e

0

の値が,次のとおりと仮定する。

 element(

name(

""

, "foo" ),  cx

0

, { },  m )

ここで,は次のとおりとする。

 

e

1

,  e

2

さらに,e

1

は及び e

2

はそれぞれ次のとおりとする。

 element(

name(

"http://www.example.com/n1"

, "bar1" ),  cx

1

, { },  ( ) )

 element(

name(

"http://www.example.com/n2"

, "bar2" ),  cx

2

, { },  ( ) )

cx

0

,  cx

1

及び cx

2

が適切に定義されている場合,これらは B.1 に示す文書を表現する。

B.3

のスキーマに照らして e

0

が妥当であることをどのように示すかを説明する。このスキーマは,次の

命題と同等になる。

 
start() = <ref name="foo"/>

deref("foo.element") = <element> <name ns=""> "foo" </name> <group> <ref name="bar1"/>

<ref name="bar2"/> </group> </element>

deref("bar1.element") = <element> <name ns="http://www.example.com/n1"> "bar1" </name>

 <empty/>

</element>

deref("bar2.element") = <element> <name ns="http://www.example.com/n2"> "bar2" </name>

 <empty/>

</element>

名前クラス nc

1

及び nc

2

が,それぞれ次であるとする。

<name ns="http://www.example.com/n1"> "bar1" </name>

<name ns="http://www.example.com/n2"> "bar2" </name>


34

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

このとき,9.2 の推論規則(name)によって,次の二つを得る。

 name(

"http://www.example.com/n1"

,  "bar1" ) in nc

1

 name(

"http://www.example.com/n2"

,  "bar2" ) in nc

2

9.3.3

の推論規則(empty)によって,次の二つを得る。

 cx

1

 |- { }; ( ) =~ <empty/>

 cx

2

 |- { }; ( ) =~ <empty/>

9.3.7

の推論規則(element)によって,次を得る。

 cx

0

 |- { }; e

1

 =~ <ref name="bar1"/>

ここで,任意の文脈が利用できるので,cx

0

を選んでいることに注意する。

同様にして,次を得る。

 cx

0

 |- { }; e

2

 =~ <ref name="bar2"/>

9.3.1

の推論規則(group)によって,次を得る。

 cx

0

 |- { }; e

1

,  e

2

 =~ <group> <ref name="bar1"/> <ref name="bar2"/> </group>

9.3.7

の推論規則(element)によって,次を得る。

 cx

3

 |- { }; element( name( ""

, "foo" ),  cx

0

, { },  m ) =~ <ref name="foo"/>

ここで,cx

3

は任意の文脈とする

このようにして,9.4 の推論規則(valid)が適用できて,次を得る。

 valid(e

0

)


35

X 4177-2

:2005 (ISO/IEC 19757-2:2003)

     

附属書 C(参考)文献

この附属書は,本体及び附属書 A(規定)に関連する事柄を補足するもので,規定の一部ではない。

[1] RELAX NG

仕様書,  OASIS Committee Specification, 2001 年 12 月 3 日,

 http://www.oasis-open.org/committees/relax-ng/spec-20011203.html

から入手可能。

[2] RELAX NG

チュートリアル, OASIS Committee Specification, 2001 年 12 月 3 日,

http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html

から入手可能。