この標準情報(TR)は,日本規格協会 情報技術標準化研究センター(INSTAC)に設立された高速Web環境における標準化に関する調査研究委員会で,1999年度に行われた高速Web言語の調査研究をもとに,工業標準化の促進に関連して特に重要と判断される技術情報をまとめ,標準情報(TR)(タイプII)として公表するものである。
RELAX (REgular LAnguage description for XML)は,XMLベースの言語を記述するための機構を提供する。例えば,XHTML 1.0はRELAX によって記述することができる。
同様の機構であるDTDと比較して,RELAXは次の特徴を備えている。
RELAXは,RELAX Core及びRELAX Namespaceの二つの部分からなる。RELAX Coreは,単一の名前空間だけを扱う。この標準情報(TR)は,RELAX Coreを規定する。RELAX Namespaceは,RELAX Coreで書かれた記述を組み合わせることによって,複数の名前空間を扱う。別の標準情報(TR)がRELAX Namespaceを規定する。
RELAX Coreプロセサというソフトウェアモジュールは,要素(及びその子孫要素)の並びを与えられて,RELAX Coreによる記述と照合し,結果を出力する。RELAX Coreプロセサは,ユーザが直接起動することができる。別のソフトウェアモジュールであるRELAX Namespaceプロセサから呼び出すこともできる。
RELAX Coreの機能のうち,DTDの機能にデータ型を加えた部分だけを備えたサブセットを用意する。このサブセットは, 実装が特に容易であり,データ型に関する情報以外の欠落なく, DTDとの間で相互に変換することができる。
次に示す規定は,この標準情報(TR)の文中での引用によって, この標準情報(TR)の規定の一部となる。
TR X 0008:1999 拡張可能なマーク付け言語(XML) 1.0
備考 W3C (World Wide Web Consortium), Extensible Markup Language (XML) 1.0 (eds. Tim Bray, Jean Paoli, and C. M. Sperberg-McQueen), Recommendation, http://www.w3.org/TR/REC-xml, 1998が[TR X 0008]に一致している。
TR X 0023:1999 XML名前空間
備考 W3C (World Wide Web Consortium), Name Spaces in XML, Recommendation, eds., Tim Bray, Dave Hollander, and Andrew Layman, http://www.w3.org/TR/REC-xml-names, 1999が[TR X 0023]に一致している。
W3C (World Wide Web Consortium), XML Information Set, W3C Working Draft, ed. John Cowan, http://www.w3.org/TR/REC-xml, 1999
W3C (World Wide Web Consortium), XML Schema Part 2, W3C Working Draft, eds. Paul Biron and Ashok Malhotra, http://www.w3.org/TR/xmlschema-2. 2000
IETF RFC 2396 IETF (Internet Engineering Task Force). RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, eds. T. Berners-Lee, R. Fielding, and L. Masinter, 1998.
この標準情報(TR)では,XML 1.0で定義されている次の用語をそのまま用いる。
次の用語は,XML 1.0とは異なる意味をもつので注意すること。
この標準情報(TR)では,XML名前空間で定義されている次の用語を用いる。
この標準情報(TR)では,XML Schema Part 2で定義されている次の用語を用いる。
この標準情報(TR)では,XML Information Setで定義されている次の用語を用いる
この標準情報(TR)は,RELAXモジュールの構文を規定するため,DTD記法の一部を用いる。DTDは名前空間を正しく扱えないので,DTDをそのまま採用せずに一部だけを用いる。
要素がどんな内容をもつかを記述するため,内容モデルを採用する。これは,XML 1.0 の非終端記号contentspecにマッチするものとする。
例えば,要素fooが内容をもたないとき,要素fooの内容を次のとおりに記述する。
EMPTY
要素がどんな属性をもつかを記述するため,属性リスト宣言の一部を採用する。これは,XML 1.0 の非終端記号AttDefにマッチするものとする。
例えば,要素fooが属性barだけをもち,barは省略可能で,barの値は任意の文字列のとき,要素fooの属性定義を次のとおりに記述する。
bar CDATA #IMPLIED
RELAX Coreの設計原則を次に示す。
XML文書を表す文書情報項目をインスタンスと言う。あるRELAX文法に従っているインスタンスは,そのRELAX文法に照らして合法であると言う。文脈から明らかな場合は,どのRELAX文法に照らして合法なのかを明示せずに, 単に合法であると言う。
備考 XML 1.0で言う妥当性とこの標準情報(TR)で言う合法性とは異なる。妥当でない文書が合法なことも,合法な文書が妥当でないこともある。
XML文書を表す文書情報項目であって,RELAX Namespaceが規定する制約条件を満たしているものをRELAX文法と言う。
RELAXの構文をRELAXで可能な範囲で表現したもの(すなわちRELAX文法)をRELAXメタ文法と言う。どんなRELAX文法も,RELAXメタ文法に照らして合法なインスタンスになる。
XML文書を表す文書情報項目であって,この標準情報(TR)が規定する制約条件を満たしているものをRELAXモジュールと言う。RELAXモジュールは,単一の名前空間に属する要素,並びにその属性及び内容を扱う。
複数の名前空間を扱うRELAX文法は,複数のモジュールを参照し,互いの間の関連付けを行う。このようなRELAX文法は,RELAX Namespaceによって表現する。
単一の名前空間を扱うRELAX文法は,一つのモジュールだけを参照する。このようなRELAX文法は,モジュールを参照する以外の役割をもたず,参照されるモジュールだけで代用できる。
一般に,一つのインスタンスは複数の名前空間に属しており,複数のモジュールから構成される文法と照合される。この照合は,インスタンスを幾つかの島に分割し,それぞれの島と一つのモジュールとの照合を繰り返すことによって行われる(図1参照)。一つの島は,一つの名前空間に属する生け垣になる。
単一の名前空間からなるインスタンスは,そのまま島と見なすことができる。
照合 モジュール ←─ 島 │ │ │ │ ↓ ↓ 照合 文法 ←─ インスタンス |
図1. モジュール及び文法並びに島及びインスタンスの関係 |
島及びRELAXモジュールを与えられて,島がRELAXモジュールに照らして合法であるかどうかを調べるソフトウェアモジュールを, RELAX Coreプロセサと言う。合法であるかどうかを調べる処理を照合と言う。
RELAX Coreプロセサ,XMLプロセサ及びアプリケーションプログラムの関係を図2に示す。
RELAX Coreプロセサは,島及びRELAXモジュールをXMLプロセサから情報セットとして受け取る。情報セットに含まれる情報項目のコア特性だけを, RELAX Coreプロセサは利用する。
参考 現実の実装では,SAX, DOMなどのAPIを通じて情報項目が渡される。
RELAX Coreプロセサは,島のトップレベルの要素の並びを制約する生け垣モデルも受け取ることができる。
照合が終わると,島が合法であるというメッセージ又は合法でないというメッセージを,RELAX Coreプロセサは出力する。これ以外にも,RELAX Coreプロセサは幾つかのメッセージを出力する。
RELAX Coreプロセサはメッセージ以外の何も出力しない。アプリケーションプログラムは,XMLプロセサが出力する情報セット及びRELAX Coreプロセサが出力するメッセージだけを受け取って処理を行う。
RELAX Coreプロセサが利用するXMLプロセサは,妥当性を検証するプロセサであっても,妥当性を検証しないプロセサであっても構わない。
読み込まれなかった実体情報項目をRELAX Coreプロセサが受け取ったときは,ユーザが適切なオプションを指定しているなら, メッセージを出力しなければならない。
島 │ │ XMLプロセサ │ ↓ 利用 アプリケーション モジュール 情報セット ←────────── プログラム │ │ │ XMLプロセサ │ │ │ トップレベルの要素の列 ↓ │ を制約する生け垣モデル 情報項目 │ (必須ではない) │ │ │ │ │ │ ──────────────────── │ │RELAX Coreプロセサ │ ↓ 合法か非合法を示す メッセージ |
RELAX Coreでは,XML Schema Part 2の組み込み済みデータ型をそのまま用いる。データ型は,属性についての条件としても,生け垣モデルとしても使用できる。
RELAX Coreでいうデータ型は, 文字列の集合とする。文字列がデータ型に属しているかどうかは, 機械的に判定できる。例えば,integerという名前のデータ型は,数字を表す文字列の集合である。ある文字列がintegerを表現しているかどうかは, 機械的に判定できる。
データ型を参照するとき,相という制約条件を加えることができる。例えば,integerを参照するとき,10以上20以下という条件を相として加えることができる。
RELAX Coreプロセサは,文字列からデータへの変換(例えば"1"という文字列から1という整数への変換)は行わない。これはアプリケーションプログラムに任される。
参考 変換プログラムを準備しておき,アプリケーションプログラムはそれを単に呼び出すのが通常である。
タグ名及び属性についての制約条件を,RELAX Coreでは役割及び節によって表現する。役割は名前をもち,節によって記述される。節は名前をもたない。
節は,tag要素又はattPool要素とする。tag要素は, タグ名についての制約条件を含むが,attPool要素は含まない。tag要素又はattPool要素がある属性についての制約条件を含むとき,このtag要素又はattPool要素は, この属性を主張していると言う。
一つの役割を記述する節が複数存在してもよい。役割pを記述する節が一つ以上存在し,ある要素がこれらの節のうち少なくとも一つを満足するとき,この要素は役割pをもつと言う。
参考 ある役割を記述する一つの節は,タグがこの役割がもつための十分条件の一つを表現する。複数の節が一つの役割を記述すれば,十分条件が複数存在する。
ある役割を記述する節が他の役割を参照することができる。再帰的な参照は許されない。
参考 役割及び節は,タグ名及び属性を扱う論理プログラムに相当する。
一つの役割を指定する節は, すべてtagか,すべてattPoolかのどちらか一方とす る。すなわち,tag及びattPoolの両方が, 同一の節を指定してはならない。
同一の役割を指定する複数のtagは,同一のタグ名を指定しなければならない。
同一の役割を指定する複数のtagが子要素にrefによって参照する役割は, すべて同一でなければならない。
同一の役割を指定する複数のattListが子要素にrefによって参照する役割は, すべて同一でなければならない。
ある役割を記述する複数のtag又はattPoolが指定する属性は,名前・データ型・相が一致しなければならない。例外として,データ型none及び相enumerationについては一致しなくてもよい。子要素refによって参照されている節, 及びそこから参照されている節で既に指定されている属性についても,一致する必要はない。
論理構造についての制約を,RELAX Coreではラベル及び生成規則によって表現する。ラベルは名前をもち,生成規則によって記述される。生成規則は名前をもたない。
生成規則は,elementRule要素又はhedgeRule要素とする。elementRule要素は, ラベル,役割,生け垣モデルの三つ組みとし,hedgeRule要素は, ラベル及び生け垣モデルの対とする。
一つのラベルを記述する生成規則が複数存在してもよい。
参考 文字列を扱う正規文法では,生成規則の左辺が非終端記号であり,右辺が終端記号,終端記号と非終端記号を並べたもの,非終端記号のいずれかである。RELAX Coreは,論理構造を扱うように拡張された正規文法とみなすことができる。ラベルが左辺の非終端記号に相当し,役割が終端記号に相当する。内容モデルは,文字列ではなく, 木構造を扱うために右辺の非終端記号を拡張したものに相当する。
要素の内容についての制約条件は, 生け垣モデルによって記述する。生け垣モデルは,要素生け垣モデル,混合生け垣モデル,データ型参照の3種類とする。
要素生け垣モデルは,ラベル列の正規集合を生成する。この集合に含まれるラベル列は,この要素内容にマッチする。先頭のラベルの前,最後のラベルの後,ラベルとラベルとの間に空白文字を幾つか挿入したものもマッチする。
混合生け垣モデルは,要素生け垣モデルに混合であると言う印をつけたものとする。この要素生け垣モデルが生成する正規集合に含まれているラベル列は,この混合生け垣モデルにマッチする。先頭のラベルの前,最後のラベルの後,ラベルとラベルとの間に任意の文字を幾つか挿入したものもマッチする。挿入される文字は, 空白文字とは限らないことに注意。
データ型参照は,データ型の名前を指定する。さらに,相という付加的な条件を指定してもよい。文字の並びがデータ型参照にマッチするのは,参照されたデータ型に属し,相をすべて満たしているときとする。
RELAX Coreで用いる名前は,データ型名,タグ名,属性名,役割名,ラベル名の5種類とする。種類が違えば同じ名前を使用してもよい。例えば, integerというデータ型名が存在しても,タグ名又はラベル名にintegerを使って構わない。
これらの名前が,インスタンスで出現するかどうか,及びRELAXモジュールではどこに出現するのかを, 次の表に示す。
インスタンスで | RELAXモジュールで | |
データ型名 | 出現しない | 属性についての条件として出現する 生け垣モデル(データ型参照)として出現する |
タグ名 | 出現する | 節の一部として出現する |
属性名 | 出現する | 節の一部として出現する |
役割名 | 出現しない | 節の一部として出現する(役割の記述) 節の一部として出現する(役割の参照) 生成規則の一部として出現する |
ラベル名 | 出現しない | 生成規則の一部として出現(ラベルの記述) 生成規則の一部として出現(ラベルの参照) |
モジュール全体を表す要素としてmoduleを導入する。module要素は,モジュール全体についての管理情報を表す。
module要素は, 三つの属性をもつ。
moduleVersion 属性は,このモジュールの版数を表す。この属性は省略できる。
relaxCoreVersion属性は,RELAX Coreの版数を表す。RELAX Core 1.0 に適合することを示すためには,版数"1.0" を使用しなければならない。あるモジュールが,RELAX Core 1.0に適合しないとき,値"1.0"を使用するのはエラーとする。
参考 RELAX Coreの今後の版に"1.0"以外の値を付与することが,この標準情報(TR)の原案委員会の意図であるが,RELAX Coreの将来の版を作成することを確約するわけではなく,作成したとしても版数指定について,特定の方法を使用することを確約するわけでもない。将来の版を作成する可能性があるので,必要な場合に自動的な版の認識を可能とするため,この属性を提供する。
ユーザが適切なオプションを指定したとき,RELAX Coreプロセサは,サポートしていない版数のついたモジュールを受け取ったらメッセージを出力しなければならない。その後,RELAX Coreプロセサは処理を続行してもよく,中止してもよい。
targetNamespace属性は,このモジュールの記述対象である名前空間を示す。省略した場合は,""が指定されたとみなされる。
モジュールを表現する要素はすべて,名前空間名 http://www.xml.gr.jp/xmlns/relaxCoreに属するものとする。したがって, module要素は, この名前空間を宣言しなければならない。
module要素の内容は,次の内容モデルによって規定される。
(annotation?, interface?, (tag | attPool | elementRule | hedgeRule | div | include )*)
次に,module要素の例を示す。子要素はすべて省略する。
<module moduleVersion="1.2" relaxCoreVersion="1.0" xmlns="http://www.xml.gr.jp/xmlns/relaxCore"> ... </module>
interface要素は,モジュールとRELAX文法とのインタフェース情報を表現する。単一の名前空間からなるRELAX文法の場合は,interface要素がインスタンスのルートについての情報を与える。
interface要素は, 属性をもたない。
interface要素の内容は,次の内容モデルによって規定される。
(annotation?, (export | div)*)
次に,interface要素の例を示す。子要素はすべて省略する。
<interface> ... </interface>
export要素は,RELAX文法から参照できる情報を明示する。
export要素は, label属性を必ず指定する。
label NMTOKEN #REQUIRED
label属性の値は,外部に公開するラベルを示す。単一の名前空間からなるRELAX文法の場合は,インスタンスのルートのラベルを示す。
export要素の内容は,次の内容モデルによって規定される。
(annotation?)
次に,export要素の例を示す。
<export label="doc"/>
tag要素は,タグがある役割をもつ十分条件を,タグ名についての条件,属性についての条件,他の役割への参照の組み合わせによって表現する。
tag要素は,role属性及びname属性をもつ。
role NMTOKEN #IMPLIED name NMTOKEN #REQUIRED
タグ名は, name属性で指定する。role属性は, 役割を参照する。
name属性は必須だが,role属性は必須ではない。省略されたときは,name属性と同じ値が指定されたものとみなす。ただし,このtag要素がelementRuleの子要素のときは, 自動的に適当な値を,RELAX Coreプロセサが生成する(8.5を参照)。
tag要素の内容は,次の内容モデルによって規定される。tagの子であるref要素は,role属性をもたなければならない。
(annotation?, ref*, attribute*)
tag要素は,role属性で参照した役割をタグがもつための十分条件を一つ表現する。ある要素eがこの十分条件を満たすのは, 次の三つがいずれも成り立つときとする。
tag要素で言及されていない属性が要素にあっても,条件が満たされることに注意。
tag要素の例を次に示す。ref要素は,役割bar1を参照している。
<tag name="foo" role="bar"> <ref role="bar1"/> </tag>
参考 このtag要素は,次に示すホーン節だと見なすことができる。
bar(x) :- tag(x)="foo", bar1(x).
attPool要素は,タグがある役割をもつ十分条件を,属性についての条件と,他の役割への参照との組み合わせによって表現する。
attPool要素は,role属性をもつ。このattPool要素が, elementRuleの子要素でない場合は, role属性を指定しなければならない。そうでない場合は,role属性を指定してはならない。自動的に適当な値を,RELAX Coreプロセサが生成する(8.5を参照)。
role NMTOKEN #IMPLIED
役割との関連付けは,role属性で役割名を指定することによって行う。
attPool要素の内容は,次の内容モデルによって規定される。attPoolの子であるref要素は,role属性をもたなければならない。
(annotation?, ref*, attribute*)
attPool要素は,role属性で参照した役割をタグがもつための十分条件を一つ表現する。ある要素eがこの十分条件を満たすのは, 次の二つがいずれも成り立つときとする。
次にattPool要素の例を示す。子要素であるrefは,役割bar1を参照している。
<attPool role="bar"> <ref role="bar1"/> </attPool>
参考 このtag要素は,次に示すホーン節だと見なすことができる。
bar(x) :- bar1(x).
role属性をもつref要素は,役割を参照する。
role属性をもつref要素は, 他の属性をもたない。
role NMTOKEN #IMPLIED
ref要素の内容は,次の内容モデルによって規定される。
EMPTY
ref要素の例は,tag要素の例及びattPool要素の例に含まれている。
attribute要素は,属性の名前及び値についての制約を表現する。属性が省略可能かどうかも表現する。
attribute要素は,name属性,required属性及びtype属性をもつ。name属性は, 必須とする。
name NMTOKEN #REQUIRED required (true) #IMPLIED type NMTOKEN #IMPLIED
name属性は,属性の名前を指定する。required属性は,属性が省略可能かどうかを表す。trueが指定されれば, 省略は許されない。
同一の親要素(tag要素又はattPool要素)をもつ複数のattribute要素は,相互にマッチする名前をname属性で指定してはならない。
type属性は,データ型名を参照する。
attribute要素の内容は,次の内容モデルによって規定される。この内容モデルでは,相を表現するすべての要素を"|"で繋げたものが, パラメタ実体facetとして定義されていることを仮定している。
(annotation?, (%facet;)*)
type属性で指定したデータ型名及びannotation要素で指定した相は, データ型参照を構成する。name属性で指定した属性の値は,このデータ型参照にマッチしなければならない。
次に,attribute要素の例を示す。tag要素の子要素として, attribute 要素が使われている。
<tag name="a"> <attribute name="href" type="uri"/> </tag>
備考 XML 1.0では,属性をもたない要素型は,属性リスト宣言を必要としない。しかし,RELAX Coreでは,使用されるタグ名は, 常にtag要素を必要とする。
elementRule要素は,ラベル,役割,生け垣モデルの三つ組みからなる生成規則を表現する。
elementRule要素は,role属性,label属性及びtype属性をもつ。子要素tag又は子要素attPoolをもたない場合は,role属性は必須とし,label属性は省略可能とする。省略されたときは,role属性と同じ値が指定されたものとみなす。子要素tag又は子要素attPoolをもつ場合は,label属性は必須とし, role属性は禁止する。
role NMTOKEN #IMPLIED label NMTOKEN #IMPLIED type NMTOKEN #IMPLIED
role属性は, 役割名を指定する。label属性は, ラベル名を指定する。type属性は, データ型を参照する。elementRule要素が,要素生け垣モデル又は混合生け垣モデルをもつ場合に, type属性を指定してはならない。
elementRule要素の内容は,次の内容モデルによって規定される。この内容モデルでは,相を表現するすべての要素を"|"で繋げたものが, パラメタ実体facetとして定義されていることを仮定している。elementRuleの子であるref要素は, label属性をもたなければならない。
(annotation?, (tag* | attPool*), ((ref | hedgeRef | choice | sequence | element | none | empty | mixed)? | (%facet;)*))
子要素として出現するtag, attPoolの扱いは, 8.5で規定する。
ref, hedgeRef, choice, sequence, element, none, emptyのいずれかが指定されているとき,このelementRuleは要素生け垣モデルをもつと言う。
mixedが指定されているとき,このelementRuleは混合生け垣モデルをもつと言う。
要素生け垣モデルでも混合生け垣モデルでもない場合は, データ型への参照をtype属性によって指定しなければならない。データ型への参照を用いるときは, elementRule要素の内容として相を指定する。データ型及び相については, 7.に示す。
hedgeRule要素は,ラベル及び生け垣モデルの対からなる生成規則を表現する。
hedgeRule要素は,label属性をもつ。label属性は, 必須とする。
label NMTOKEN #IMPLIED
label属性は, ラベル名を指定する。
hedgeRule要素の内容は,次の内容モデルによって規定される。hedgeRuleの子であるref要素は,label属性をもたなければならない。
(annotation?, (ref | hedgeRef | choice | sequence | element | none | empty)?)
label属性をもつref要素は,elementRule要素で記述されたラベルを参照する要素生け垣モデルとする。
label属性をもつref要素は, occurs属性をもつ。
label NMTOKEN #REQUIRED occurs CDATA #IMPLIED
occurs属性の値は, "*", "+", "?"のいずれかとする。
label属性をもつref要素の内容は,次の内容モデルによって規定される。
EMPTY
label属性によって指定されたラベル名を, lとする。このref要素が生成するラベル列は,一つのlだけからなるラベル列とする。ただし,occurs属性が指定されたときは,値が"*"なら0回以上の繰返し,"+"なら1回以上の繰返し,"?"なら0回又は1回の繰返しを適用する。
hedgeRef要素は,hedgeRule要素で記述されたラベルを参照する要素生け垣モデルとする。
hedgeRef要素は, occurs属性をもつ。
label NMTOKEN #REQUIRED occurs CDATA #IMPLIED
occurs属性の値は, "*", "+", "?"のいずれかとする。
hedgeRef要素の内容は,次の内容モデルによって規定される。
EMPTY
label属性によって指定されたラベル名を, lとする。このhedgeRef要素が生成するラベル列は,一つのlだけからなるラベル列とする。ただし,occurs属性が指定されたときは,値が"*"なら0回以上の繰返し,"+"なら1回以上の繰返し,"?"なら0回又は1回の繰返しを適用する。
sequence要素は,幾つかの要素生け垣モデルの連結を表す要素生け垣モデルとする。
sequence要素は, occurs属性をもつ。occurs属性の値及び意味は,label属性をもつref要素のときと同様とする。
occurs CDATA #IMPLIED
sequence要素の内容は,次の内容モデルによって規定される。
(ref | hedgeRef | choice | sequence | element | none | empty)*
sequence要素の子要素を, c1, c2, ..., cmとする。c1がラベル列l11, l12, ..., l1n1を生成し,c2がラベル列l21, l22, ...., l2n2を生成し,c3以降も同様のラベル列を生成し,cmがラベル列lm1, lm2, ...., lmnmを生成するものとする。このとき,sequence要素は, l11, l12, ..., l1n1, l21, l22, ...., l2n2, ..., lm1, lm2, ...., lmnmを生成する。ただし,occurs属性が指定されたときは,値が"*"なら0回以上の繰返し,"+"なら1回以上の繰返し,"?"なら0回又は1回の繰返しを適用する。
choice要素は,幾つかの要素生け垣モデルからの選択を表す要素生け垣モデルとする。
choice要素は, occurs属性をもつ。occurs属性の値及び意味は, label属性をもつref要素のときと同様とする。
occurs CDATA #IMPLIED
choice要素の内容は,次の内容モデルによって規定される。
(ref | hedgeRef | choice | sequence | element | none | empty)*
choice要素の子要素を, c1, c2, ..., cmとする。c1がラベル列l11, l12, ..., l1n1を生成し,c2がラベル列l21, l22, ...., l2n2を生成し,c3以降も同様のラベル列を生成し,cmがラベル列lm1, lm2, ...., lmnmを生成するものとする。このとき,choice要素が生成するのは,ラベル列l11, l12, ..., l1n1, ラベル列l21, l22, ...., l2n2,...,ラベル列lm1, lm2, ...., lmnmのいずれかとする。 ただし,occurs属性が指定されたときは,値が"*"なら0回以上の繰返し,"+"なら1回以上の繰返し,"?"なら0回又は1回の繰返しを適用する。
empty要素は,空のラベル列を生成する要素生け垣モデルとする。
empty要素は, 属性をもたない。
empty要素の内容は,次の内容モデルによって規定される。
EMPTY
none要素は,ラベル列を一つも生成しない要素生け垣モデルとする。
none要素は, 属性をもたない。
none要素の内容は,次の内容モデルによって規定される。
EMPTY
mixed要素は,混合生け垣モデルとする。
mixed要素は, 属性をもたない。
mixed要素の内容は,次の内容モデルによって規定される。
(ref | hedgeRef | choice | sequence | element | none | empty)
mixed要素の子である要素生け垣モデルが,あるラベル列を生成するものとする。このラベル列は,この混合生け垣モデルにマッチする。先頭のラベルの前,最後のラベルの後,ラベルとラベルとの間に空白文字を幾つか挿入したものも,この混合生け垣モデルにマッチする。
ref, tag, elementRule要素に展開される構文糖衣として,element要素を導入する。
element要素は,name属性を必ず指定する。type属性及びlabel属性は,どちらか一方だけを必ず指定する。occurs属性は, 必須ではない。
name NMTOKEN #REQUIRED type NMTOKEN #IMPLIED label NMTOKEN #IMPLIED occurs CDATA #IMPLIED
element要素の内容は,次の内容モデルによって規定される。この内容モデルでは,相を表現するすべての要素を"|"で繋げたものがパラメタ実体facetとして定義されていることを仮定している。相は,type属性が指定されたときに限って指定できる。
(annotation?, (%facet;)*)
element要素は,次の規則に従ってref, tag, elementRule要素に展開される。
ref要素が自動生成され,element要素を置き換える。ref要素のlabel属性の値として,他のラベルと衝突しないラベルを自動的に生成する。もし,element要素にoccurs属性があれば,このref要素がそれを引き継ぐ。
elementRule要素が自動生成され,このモジュールに追加される。elementRule要素のrole属性の値として,他の役割名と衝突しない役割名が自動生成される。label属性の値は,a)で自動生成したラベルとする。
このelementRuleの生け垣モデルは, 次のとおりに定める。
tag要素が自動生成され,このモジュールに追加される。tag要素のrole属性の値は,elementRuleを生成するときに自動生成した役割名とする。name属性の値は,元のelement要素のname属性の値とする。
他のモジュールを参照するための機構として,include要素を導入する。
include要素は,moduleLocation属性を必ずもつ。
moduleLocation CDATA #REQUIRED
moduleLocation属性は,他のモジュールをURI reference[IETF RFC 2396]によって参照する。URI referenceは, fragment identifierを含んではならない。
include要素の内容は,次の内容モデルによって規定される。
(annotation?)
include要素をもつモジュールを参照元モジュールといい,moduleLocation属性が参照するモジュールを参照先モジュールと言う。参照先モジュール及び参照元モジュールのtargetNamespace属性値は, 一致しなければならない。
module要素内に記述される節, 生成規則又はincludeのグループ化, interface要素内に記述されるexport要素のグループ化のための機構として, div要素を導入する。
div要素は, 属性をもたない。
div要素の内容は,次の内容モデルによって規定される。div要素が子要素としてexportをもつのは,interfaceが祖先要素であるときに限る。div要素が, 子要素として節, 生成規則又はincludeをもつのは,interfaceが祖先要素でないときに限る。
(annotation?, (tag | attPool | elementRule | hedgeRule | include | div)* | (export | div )*)
モジュール内に注釈を埋め込むための機構として,annotation要素を導入する。
annotation要素は,属性をもたない。
annotation要素の内容は,次の内容モデルによって規定される。
(appinfo | documentation)*
人が読むための注釈として,documentation要素を導入する。
documentation要素は,source属性をもつ。
source CDATA #IMPLIED
source属性が指定されたときは,その値は, URI reference[IETF RFC 2396]でなければならない。
documentation要素の内容は,次の内容モデルによって規定される。
(#PCDATA)
source属性をもつdocumentation要素は,空要素でなければならない。空要素でないdocumentation要素は,source属性をもってはならない。
スキーマを処理するプログラムのための情報を埋め込む機構として, appinfo要素を導入する。
appinfo要素は,source属性をもつ。
source CDATA #IMPLIED
source属性が指定されたときは,その値は, URI reference[IETF RFC 2396]でなければならない。
appinfo要素の内容は,次の内容モデルによって規定される。
(#PCDATA)
source属性をもつappinfo要素は,空要素でなければならない。空要素でないappinfo要素は,source属性をもってはならない。
この標準情報(TR)におけるデータ型は,XML Schema Part 2の組込み済みデータ型,及びRELAX Core独自のデータ型とする。
備考 ユーザがデータ型を定義することは, 許していない。
XML Schema Part 2のデータ型stringの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型stringのときと同じとする。
XML Schema Part 2のデータ型booleanの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型booleanのときと同じとする。
XML Schema Part 2のデータ型floatの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型floatのときと同じとする。
XML Schema Part 2のデータ型doubleの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型doubleのときと同じとする。
XML Schema Part 2のデータ型decimalの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型decimalのときと同じとする。
XML Schema Part 2のデータ型timeDurationの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型timeDurationのときと同じとする。
XML Schema Part 2のデータ型recurringDurationの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型recurringDurationのときと同じとする。
XML Schema Part 2のデータ型binaryの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型binaryのときと同じとする。
XML Schema Part 2のデータ型uriReferenceの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型uriReferenceのときと同じとする。
XML Schema Part 2のデータ型IDの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型IDのときと同じとする。
ID属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
ある属性がデータ型IDであると主張するtag要素が, 別のtag要素とタグ名を共有するなら,役割も共有しなければならない。
一つのXML文書情報項目に含まれる複数の要素情報項目が, 同一の名前をID型の値として指定してはならない。つまり,IDの値は,要素情報項目を一意に特定しなければならない。
一つのtag要素及びそれが参照するすべての節は,複数の属性をデータ型IDであると主張してはならない。
XML Schema Part 2のデータ型IDREFの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型IDREFのときと同じとする。
IDREF属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
ある属性がデータ型IDREFであると主張するtag要素が, 別のtag要素とタグ名を共有するなら,役割も共有しなければならない。
データ型がIDREFに属する文字列は,ある要素情報項目のID属性の値とマッチしなければならない。IDREFの値は,あるID属性の値とマッチしなければならない。
XML Schema Part 2のデータ型ENTITYの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型ENTITYのときと同じとする。
ENTITY属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
データ型ENTITYに属する文字列は,解析対象外実体情報項目の名前とマッチしなければならない。
XML Schema Part 2のデータ型NOTATIONの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型NOTATIONのときと同じとする。
NOTATION属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
データ型NOTATIONに属する文字列は,記法情報項目の名前とマッチしなければならない。
XML Schema Part 2のデータ型QNameの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型QNameのときと同じとする。
XML Schema Part 2のデータ型languageの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型languageのときと同じとする。
XML Schema Part 2のデータ型IDREFSの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型IDREFSのときと同じとする。
IDREFS属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
ある属性がデータ型IDREFSであると主張するtag要素が, 別のtag要素とタグ名を共有するなら,役割も共有しなければならない。
データ型IDREFSに属する文字列は,データ型がIDである属性によって指定された名前によって構成されなければならない。
XML Schema Part 2のデータ型ENTITIESの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型ENTITIESのときと同じとする。
ENTITIES属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
データ型ENTITIESに属する文字列は,解析対象外実体情報項目の名前によって構成されなければならない。
XML Schema Part 2のデータ型NMTOKENの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型NMTOKENのときと同じとする。
NMTOKEN属性は,attribute要素のtype属性だけから参照でき,elementRule要素のtype属性から参照することはできない。
XML Schema Part 2のデータ型NMTOKENSの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型NMTOKENSのときと同じとする。
NMTOKENS属性は,attribute要素のtype属性だけから参照でき,elementRule要素の type属性から参照することはできない。
XML Schema Part 2のデータ型Nameの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型Nameのときと同じとする。
XML Schema Part 2のデータ型NCNameの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型NCNameのときと同じとする。
XML Schema Part 2のデータ型integerの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型integerのときと同じとする。
XML Schema Part 2のデータ型nonPositiveIntegerの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型nonPositiveIntegerのときと同じとする。
XML Schema Part 2のデータ型negativeIntegerの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型negativeIntegerのときと同じとする。
XML Schema Part 2のデータ型longの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型longのときと同じとする。
XML Schema Part 2のデータ型intの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型intのときと同じとする。
XML Schema Part 2のデータ型shortの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型shortのときと同じとする。
XML Schema Part 2のデータ型byteの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型byteのときと同じとする。
XML Schema Part 2のデータ型nonNegativeIntegerの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型nonNegativeIntegerのときと同じとする。
XML Schema Part 2のデータ型unsignedLongの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型unsignedLongのときと同じとする。
XML Schema Part 2のデータ型unsignedIntの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型unsignedIntのときと同じとする。
XML Schema Part 2のデータ型unsignedShortの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型unsignedShortのときと同じとする。
XML Schema Part 2のデータ型unsignedByteの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型unsignedByteのときと同じとする。
XML Schema Part 2のデータ型positiveIntegerの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型positiveIntegerのときと同じとする。
XML Schema Part 2のデータ型timeInstantの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型timeInstantのときと同じとする。
XML Schema Part 2のデータ型timeの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型timeのときと同じとする。
XML Schema Part 2のデータ型timePeriodの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型timePeriodのときと同じとする。
XML Schema Part 2のデータ型dateの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型dateのときと同じとする。
XML Schema Part 2のデータ型monthの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型monthのときと同じとする。
XML Schema Part 2のデータ型yearの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型yearのときと同じとする。
XML Schema Part 2のデータ型centuryの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型centuryのときと同じとする。
XML Schema Part 2のデータ型recurringDateの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型recurringDateのときと同じとする。
XML Schema Part 2のデータ型recurringDayの字句表現の集合を表現する。適用可能な相は,XML Schema Part 2のデータ型recurringDayのときと同じとする。
データ型noneは,空集合を表現する。どんな文字列もこのデータ型には属さない。適用可能な相はない。
データ型emptyは,空の文字列だけからなる集合を表現する。適用可能な相はない。
この標準情報(TR)における相は,XML Schema Part 2の相とまったく同一とする。
XML Schema Part 2のlengthと同一とする。
XML Schema Part 2のminlengthと同一とする。
XML Schema Part 2のmaxlengthと同一とする。
XML Schema Part 2のpatternと同一とする。
XML Schema Part 2のenumerationと同一とする。
XML Schema Part 2のmaxInclusiveと同一とする。
XML Schema Part 2のmaxExclusiveと同一とする。
XML Schema Part 2のminInclusiveと同一とする。
XML Schema Part 2のminExclusiveと同一とする。
XML Schema Part 2のprecisionと同一とする。
XML Schema Part 2のscaleと同一とする。
XML Schema Part 2のencodingと同一とする。
XML Schema Part 2のdurationと同一とする。
XML Schema Part 2のperiodと同一とする。
RELAXモジュール及び要素生け垣モデルの二つに照らして,あるインスタンス断片が合法であるかどうかの判定基準を示す。
備考 1 ここに示す判定基準は,実装を規定するものではない。
備考 2 内容とは,要素(及びその子孫要素)及び文字データの並びのことを言う。
島のトップレベルの要素の並びを制約する要素生け垣モデルが与えられていない場合は,export要素にあるlabel属性から要素生け垣モデルを構成する。
備考 島は生け垣である。
このモジュールに存在するすべてのexport要素のlabel属性に含まれるラベルすべてを考える。これらを参照するref要素をchoice要素で括ったものを,要素生け垣モデルとして用いる。ref要素及びchoice要素には, occurs属性を付与しない。
include要素によって参照している他のmodule要素をすべて展開する。参照先のmoduleがinclude要素によってさらに他のmoduleを参照しているときは,最初にこのinclude要素を展開してから,展開を行う。
要素生け垣モデルに出現するelement要素を, ref, elementRule及びtagに展開する。
あるラベルが,幾つかのhedgeRuleのlabel属性によって指定されている場合は,このラベルを参照するref要素をchoice要素に展開し,これらのhedgeRuleを削除する。
choice要素の子要素は,このref要素とこれらのhedgeRule要素とから構築する。それぞれのhedgeRuleの生け垣モデルは,choice要素の子要素とする。このref要素からoccurs属性を取り除いたものも,choice要素の子要素とする。他に,choice要素の子要素になるものはない。
choice要素は,もとのref要素のoccurs属性を引き継ぐ。
あるelementRuleに埋め込まれているtag又はattPoolは,このelementRuleの兄弟要素となるように移動する。他と衝突しない役割名を一つ生成し,これらのtag又はattPoolのrole属性として指定し,このelementRuleのrole属性として指定する。
生け垣の中のそれぞれの要素に対して, 一つの役割及び一つのラベルを関連付けることを考える。この関連付けをこの生け垣の解釈と言う。
生け垣が合法であるとは,その合法的な解釈が少なくとも一つ存在することと定義する。ここで,ある生け垣の合法的な解釈とは,次の条件を満たす解釈とする。
各要素における導出が正しいということを定義する。ある要素をeとし,その子要素をe1, e2, ...., enとする。eの内容であって,e1の前に存在する文字の並びをt0とする。eの内容であって,eiの後ろ,e(i+1)の前に存在する文字の並びをtiとする。eの内容であって,enの後ろにある文字の並びをtnとする。したがって,t0, e1, t1, e2, t2, ..., t(n-1), en, tnが, 要素eの内容になる。
要素eに関連付けられたラベルをlとし,要素e1, e2, ..., enに関連付けられたラベルをl1, l2, ..., lnとする。lをlabel属性で指定し,eに関連付けられた役割をrole属性で指定し,その生け垣モデルにt0, l1, t1, l2, t2, ..., t(n-1), ln, tnがマッチするelementRuleが存在すれば,要素eにおける導出は正しい。
tag又はattPool要素で指定されていない属性が出現した場合は,RELAX Coreプロセサは警告を出す。ある属性が指定されていないかどうかは,elementRuleを決めるのに役立ったtag又はattPoolで指定されているかどうかで決まる。
RELAX Coreは,モジュールに関する適合性水準及びRELAX Coreプロセサに関する適合性水準を定める。
モジュールに関する適合性水準は,classic及びfully relaxedの二つとする。
適合性水準classicでは次の制限がある。
<ref label="label-name-1" occurs="*"/> <choice occurs="*"> <ref label="label-name-11"/> <ref label="label-name-12"/> ... <ref label="label-name-1m"/> </choice>
<ref label="label-name-2"/> <choice> <ref label="label-name-21"/> <ref label="label-name-22"/> ... <ref label="label-name-2n"/> </choice>
適合性水準fully relaxedでは, 一切の制限はない。
RELAX Coreプロセサに関する適合性水準は,classic及びfully relaxedの二つとする。
適合性水準classicでは,適合性水準classicに適合するモジュールだけを正しく処理すればよい。適合性水準classicを越えるモジュールは, 処理を中止してもよい。ユーザが適切なオプションを指定した場合は,処理を中止する前にメッセージを出力しなければならない。
適合性水準fully relaxedでは,いっさいの制限はなく,あらゆるモジュールを正しく処理しなければならない。
RELAXモジュールに文法エラーがある場合(XML文書を表す文書情報項目でない,又はこの標準情報(TR)が規定する制約条件を満たしていない)には,正常な照合は行わない。ユーザが適切なオプションを指定したとき,RELAX Coreプロセサは, 文法エラーを報告しなければならない。