X 4177-2:2005 (ISO/IEC 19757-2:2003)
(1)
2019年7月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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
目 次
ページ
序文 ··································································································································· 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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
日本工業規格 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規定(附属書Cの[1])に基づく。RELAX NGに関する指導書が,この規格とは別に
用意されている[RELAX NG Tutorial(附属書Cの[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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
備考 次の文書のそれぞれには,本文中で参照するための一意の識別子が付与されている。一意の識
別子は,太字で示した名称とする。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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は,要素及び文字列から成る列を値とする。一つの要素又は文字列しか含まない列は,その要素又
は文字列と同一視する。mの値である列は,文字列が連続したものを含んでもよく,空の文字列を含
んでもよい。
備考 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 |- a; m =~ p
文脈cxにおいて,(複数の)属性a並びに要素及び文字列からなる列mがパターンpにマッチするこ
とを意味する。
5
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
c) disjoint(a1, a2)
a1にある属性の名前であって,しかもa2にある属性の名前であるものは存在しないことを意味する。
d) m1 interleaves m2; m3
m1がm2及びm3のインタリーブ(適当に重ねたもの。9.3.6を参照。)であることを意味する。
e) cx |- a; m =~weak p
文脈cxにおいて,属性a並びに要素及び文字からなる列mがパターンpと弱い意味でマッチするこ
とを意味する。
f)
okAsChildren(m)
混在列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において解釈される文字列sは,パラメタparamsをもつ
データ型lnの合法的な値であることを意味する。
i)
datatypeEqual(u, ln, s1, cx1, s2, cx2)
URI uが示すデータ型ライブラリで,文脈cx1において解釈される文字列s1と文脈cx2において解釈さ
れる文字列s2とは,データ型lnの同じ値をもつことを意味する。
j) s1 = s2
s1及びs2が同一であることを意味する。
k) valid(e)
要素eが文法に照らして妥当であることを意味する。
l)
start() = p
文法が <start> p </start> を含むことを意味する。
m) groupable(ct1, ct2)
内容種別ct1及びct2が,“グループ化可能”であることを意味する。
n) p :c ct
パターンpは,内容種別cをもつことを意味する。
o) incorrectSchema()
スキーマが正しくないことを意味する。
4.2.3
式 次の表記は,命題中の式を示す。
a) name(u, ln)
URI u及び局所名lnをもつ名前を返す。
b) m1, m2
列m 1及び列m2を連結したものを返す。
c) a1 + a2
a1及びa2の和集合を返す。
d) ( )
空の列を返す。
e) { }
6
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
空の集合を返す。
f)
""
空の文字列を返す。
g) attribute(n, s)
名前n及び値sをもつ属性を返す。
h) element(n, cx, a, m)
名前がnで,文脈がcxで,(一般に複数の)属性がaで,(一般に複数の)子が混在列mである要素
を返す。
i)
max(ct1, ct2)
ct1及びct2の大きい方を返す。ここで,内容種別はempty( ), complex( ), simple( )の順に大きいとす
る。
j)
normalizeWhiteSpace(s)
文字列sの先頭及び末尾にある空白文字を取り除き, それ以外の空白文字の列を単一のスペース文字
に置き換えたものを返す。
k) split(s)
空白によってsを幾つかのトークンに区切り,それらのトークン(文字列)からなる列を返す。返さ
れた列に含まれる各文字列は,空ではなく空白を含まない。
l)
context(u, cx)
cxと同一だが,デフォルトの名前空間がuである点だけが異なる文脈を返す。uが空文字列の場合は,
構築された文脈はデフォルト名前空間をもたない。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
明示的に示される属性に加えて,どの要素も 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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
部品をもつ場合,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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
最初に,到達可能ではない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>
15
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
| <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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
公理及び推論規則には,それが含む変数についての全称記号が暗黙に適用される。これについては,次に
詳しく説明する。
一つの推論規則又は公理において,ある変数が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 ) in <nsName ns="u"/>
(nsName 2)
not(name( u, ln ) in nc)
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(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
a1 + a2; m1 ; m2 =~ <group> p1 p2 </ group >
参考 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) cx
a; m =~ p
cx
a; m =~ <oneOrMore> p </oneOrMore>
18
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(oneOrMore 2) cx
a1; m1 =~ p cx
a2; m2 =~ <oneOrMore> p</oneOrMore> disjoint(a1,a2)
cx
a1 + a2; m1 ; m2 =~ <group> p1 p2 </group>
9.3.6
interleaveパターン インタリーブの意味を次の推論規則によって規定する。
(interleaves 1)
( ) interleaves ( ); ( )
(interleaves 2)
m1 interleaves m2; m3
m4, m1 interleaves m4, m2; m3
(interleaves 3)
m1 interleaves m2; m3
m4, m1 interleaves m2, m4; m3
例 <a/><a/>及び<b/>のインタリーブは,<a/><a/><b/>,<a/><b/><a/>及び<b/><a/><a/>である。
インタリーブパターンの意味を次のとおりに規定する。
(interleave)
cx
a1; m1 =~ p1 cx
a2; m2 =~ p2 m3 interleaves m1; m2
cx
a1 + a2; m3 =~ <interleave> p1 p2 </interleave>
参考 10.4にある制限は, 推論規則の結論において構築される属性集合は,同一の名前をもつ複数の
属性をもたないことを保証する。
9.3.7
elementパターン及びattributeパターン 属性の値は,常に単一の文字列とする。文字列が空であ
ってもよい。したがって,空の列は属性の値とはなり得ない。一方,要素の(一般に複数の)子は空の列
であってもよいが,空の文字列であることはない。検証が要素及び属性を統一的に扱うことを保証するた
めに,マッチの変種として弱い意味でのマッチを導入する。弱い意味でのマッチは,属性の値をパターン
にマッチさせるとき,又は(一般に複数の)属性及び要素の(一般に複数の)子をパターンにマッチさせ
るときに用いる。
弱い意味でのマッチの意味を次のとおりに規定する。
(weak match 1)
cx
a; m =~ p
cx
a; m =~weak p
(weak match 2)
cx
a; ( ) =~ p
cx
a; ws =~weak p
(weak match 3)
cx
a; "" =~ p
cx
a; ( ) =~weak p
attributeパターンの意味を,次のとおりに規定する。
19
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(attribute)
cx
{ }; s =~weak p n in nc
cx
attribute( n, s ); ( ) =~ <attribute> nc p </attribute>
elementパターンの意味を,次のとおりに規定する。
(element)
cx1
a; m =~weak p n in nc okAsChildren(m)
deref(ln) = <element> nc p </element>
cx2
{ }; ws1, element( n, cx1, a, m ), ws2 =~ <ref name="ln"/>
9.3.8
dataパターン及びvalueパターン RELAX NGは,データ型についてはデータ型ライブラリに委
ねている。データ型ライブラリは,URIによって特定する。あるデータ型ライブラリに属するデータ型は,
NCNameによって特定する。データ型ライブラリは,次の二つの機能をもつ。
a) ある文字列が,あるデータ型において許される表現かどうかを決定することができる。この機能は,0
個以上のパラメタから成るリストを受け取る。例えば,文字列データ型は,文字列の長さを指定する
パラメタをもつかもしれない。データ型ライブラリは,各データ型に適用できるパラメタが何かを規
定する。
b) 二つの文字列が,あるデータ型の同じ値を表すかどうかを決定することができる。この機能は,パラ
メタをもたない。
いずれの機能も,文字列が現れる文脈を用いてもよい。例えば,QNameを表すデータ型は,名前空間対
応付けを用いる。
datatypeEqual関数は,反射的,推移的及び対称的でなければならない。すなわち,次の推論規則が成立
しなければならない。
(datatypeEqual reflexive)
datatypeAllows(u, ln, params, s, cx)
datatypeEqual(u, ln, s, cx, s, cx)
(datatypeEqual transitive)
datatypeEqual(u, ln, s1, cx1, s2, cx2)
datatypeEqual(u, ln, s2, cx3, s3, cx3)
datatypeEqual(u, ln, s1, cx1, s3, cx3)
(datatypeEqual symmetric)
datatypeEqual(u, ln, s1, cx1, s2, cx2)
datatypeEqual(u, ln, s2, cx2, s1, cx1)
dataパターン及び valueパターンの意味を次のとおりに規定する。
(value)
datatypeEqual(u1, ln, s1, cx1, s2, context( u2, cx2 ))
cx1
{ }; s1 =~ <value datatypeLibrary="u1" type="ln" ns="u2" [cx2]> s2 </value>
(data 1) datatypeAllows(u, ln, params, s, cx)
cx
{ }; s =~ <data datatypeLibrary="u" type="ln"> params </data>
20
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(data 2) datatypeAllows(u, ln, params, s, cx) not(cx
a; s =~ p)
cx
{ }; s =~ <data datatypeLibrary="u" type="ln"> params <except> p </except> </data>
9.3.9
組込みデータ型ライブラリ 空のURIは,特別の組込みデータ型ライブラリを特定する。このラ
イブラリは,二つのデータ型string及びtokenを提供する。いずれのデータ型もパラメタをもつことはでき
ない。
二つの組込みデータ型の意味を次のとおりに規定する。
(string allows)
datatypeAllows("", "string", ( ), s, cx)
(string equal)
datatypeEqual("", "string", s, cx1, s, cx2)
(token allows)
datatypeAllows("", "token", ( ), s, cx)
(token equal)
normalizeWhiteSpace( s1 ) = normalizeWhiteSpace( s2 )
datatypeEqual("", "token", s1, cx1, s2, cx2)
9.3.10 listパターン listパターンの意味を次のとおりに規定する。
(list)
cx
{ }; split( s ) =~ p
cx
{ }; s =~ <list> p </list>
参考 この推論規則において,パターンと照合される列は連続する幾つかの文字列を含んでもよいこ
とに注意。
9.4
妥当性 要素が妥当であるのは,この要素に空の属性集合を組合せたものが,文法のstartパターン
にマッチするときとする。
(valid)
start() = p cx
{ }; e =~ p
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にマッチする
21
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
子孫をもつときに限る。ここで,xはNCNameであって,pはパスとする。
次に例を示す。
<foo>
<bar>
<baz/>
</bar>
</foo>
この要素は,パス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
22
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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">
<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)
23
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(group empty 2)
groupable(ct, empty( ))
(group empty 3)
groupable(complex( ), complex( ))
幾つかのパターンは内容種別をもつ。次に示す規則は,パターンが内容種別をもつのはどんな場合か,
その場合の内容種別は何かを定義している。
(value)
<value datatypeLibrary="u1" type="ln" ns="u2"> s </value> :c simple( )
(data 1)
<data datatypeLibrary="u" type="ln"> params </data> :c simple( )
(data 2)
p :c ct
<data datatypeLibrary="u" type="ln"> params <except> p </except> </data> : c simple( )
(list)
<list> p </list> : c simple( )
(text)
<text/> : c complex( )
(ref)
<ref name="ln"/> : c complex( )
(empty)
<empty/> : c empty( )
(attribute)
p :c ct
<data datatypeLibrary="u" type="ln"> params <except> p </except> </data> : c simple( )
(group)
p1 : c ct1 p2 : c ct2 groupable(ct1, ct2)
<group> p1 p2 </group> : c max( ct1, ct2 )
(interleave)
p1 : c ct1 p2 : c ct2 groupable(ct1, ct2)
<interleave> p1 p2 </interleave > : c max( ct1, ct2 )
(oneOrMore) p : c ct groupable(ct, ct)
<oneOrMore> p </oneOrMore > : c ct
(choice)
p1 : c ct1 p2 : c ct2
<choice> p1 p2 </choice > : c max( ct1, ct2 )
参考 10.2.5において幾つかのパスを禁止したので,規則(data2)の条件は冗長になっている。
次に制限を記載する。要素パターンの内容として出現するパターンはすべて内容種別をもたなければな
らない。
(element)
deref(ln) = <element> nc p </element> not(p :c ct)
incorrectSchema()
24
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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
子孫要素又は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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<element>
<name ns="http://www.example.com/n2">bar2</name>
<empty/>
</element>
</define>
</grammar>
備考 厳密に言えば,単純化の結果はデータモデルに従うインスタンスであってXML文書ではない。
簡便さのために,データモデルに従うインスタンスをXML文書によって表現する。
B.4 妥当性検証の例 e0の値が,次のとおりと仮定する。
element( name( "", "foo" ), cx0, { }, m )
ここで,mは次のとおりとする。
e1, e2
さらに,e1は及びe2はそれぞれ次のとおりとする。
element( name( "http://www.example.com/n1", "bar1" ), cx1, { }, ( ) )
element( name( "http://www.example.com/n2", "bar2" ), cx2, { }, ( ) )
cx0, cx1及びcx2が適切に定義されている場合,これらはB.1に示す文書を表現する。
B.3のスキーマに照らしてe0が妥当であることをどのように示すかを説明する。このスキーマは,次の
命題と同等になる。
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>
名前クラスnc1及びnc2が,それぞれ次であるとする。
<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)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
このとき,9.2の推論規則(name)によって,次の二つを得る。
name( "http://www.example.com/n1", "bar1" ) in nc1
name( "http://www.example.com/n2", "bar2" ) in nc2
9.3.3の推論規則(empty)によって,次の二つを得る。
cx1 |- { }; ( ) =~ <empty/>
cx2 |- { }; ( ) =~ <empty/>
9.3.7の推論規則(element)によって,次を得る。
cx0 |- { }; e1 =~ <ref name="bar1"/>
ここで,任意の文脈が利用できるので,cx0を選んでいることに注意する。
同様にして,次を得る。
cx0 |- { }; e2 =~ <ref name="bar2"/>
9.3.1の推論規則(group)によって,次を得る。
cx0 |- { }; e1, e2 =~ <group> <ref name="bar1"/> <ref name="bar2"/> </group>
9.3.7の推論規則(element)によって,次を得る。
cx3 |- { }; element( name( "", "foo" ), cx0, { }, m ) =~ <ref name="foo"/>
ここで,cx3 は任意の文脈とする
このようにして,9.4の推論規則(valid)が適用できて,次を得る。
valid(e0)
35
X 4177-2:2005 (ISO/IEC 19757-2:2003)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書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から入手可能。
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。