X 4177-4:2008 ISO/IEC 19757-4:2006
(1)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
目 次
ページ
序文 ··································································································································· 1
0 導入······························································································································· 1
1 適用範囲························································································································· 1
2 引用規格························································································································· 2
3 用語及び定義 ··················································································································· 3
4 記法······························································································································· 4
5 データモデル ··················································································································· 5
5.1 一般事項 ······················································································································ 5
5.2 情報集合からのデータモデルの作成··················································································· 6
6 構文······························································································································· 8
6.1 一般事項 ······················································································································ 8
6.2 完全な構文 ··················································································································· 8
6.3 単純な構文 ·················································································································· 11
6.4 単純化 ························································································································ 13
7 基本操作························································································································ 16
7.1 一般事項 ····················································································································· 16
7.2 要素セクション及び属性セクションの生成 ········································································· 16
7.3 trigger要素による要素セクションの分割 ··········································································· 19
7.4 要素への属性セクションの付加 ······················································································· 21
7.5 要素への要素列の付加 ··································································································· 21
7.6 要素セクションからのplaceholder要素の生成 ···································································· 22
7.7 属性セクションの空要素への変換····················································································· 22
8 意味······························································································································ 23
8.1 一般 ··························································································································· 23
8.2 準備 ··························································································································· 23
8.3 段階1: 要素セクション及び属性セクションの生成 ······························································ 24
8.4 段階2: 解釈の構築 ········································································································ 24
8.5 段階3: セクションの結合 ······························································································· 24
8.6 段階4: 結合されたセクションの取捨選択 ·········································································· 26
8.7 段階5: 検証 ················································································································· 26
9 適合性··························································································································· 27
附属書A(規定)RELAX NGによる完全な構文 ········································································ 28
附属書B(規定)RELAX NGによる単純な構文 ········································································ 39
附属書C(参考)NVDLスクリプト及びRELAX NGスキーマによる完全な構文 ····························· 45
附属書D(参考)例 ············································································································· 56
X 4177-4:2008 ISO/IEC 19757-4:2006
(2)
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
まえがき
この規格は,工業標準化法第12条第1項の規定に基づき,財団法人日本規格協会(JSA)から,工業標準
原案を具して日本工業規格を制定すべきとの申出があり,日本工業標準調査会の審議を経て,経済産業大
臣が制定した日本工業規格である。
この規格は,著作権法で保護対象となっている著作物である。
この規格の一部が,特許権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に
抵触する可能性があることに注意を喚起する。経済産業大臣及び日本工業標準調査会は,このような特許
権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に係る確認について,責任は
もたない。
JIS X 4177の規格群には,次に示す部編成がある。
JIS X 4177-1 第1部:概要(予定)
JIS X 4177-2 第2部:正規文法に基づく妥当性検証−RELAX NG
JIS X 4177-3 第3部:規則に基づく妥当性検証−Schematron
JIS X 4177-4 第4部:名前空間に基づく検証委譲言語−NVDL
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
日本工業規格 JIS
X 4177-4:2008
(ISO/IEC 19757-4:2006)
文書スキーマ定義言語(DSDL)−第4部:名前空間に
基づく検証委譲言語−NVDL
Document Schema Definition Languages (DSDL)-Part 4:
Namespace-based Validation Dispatching Language-NVDL
序文
この規格は,2006年に第1版として発行されたISO/IEC 19757-4を基に,技術的内容及び対応国際規格
の構成を変更することなく作成した日本工業規格である。
0
導入
JIS X 4177規格群は,Document Schema Definition Languages (DSDL)の集まりを規定する。DSDLは,
XML1.0(拡張可能なマーク付け言語)文書に適用される一つ又はそれ以上の検証プロセスを規定する。
DSDLにおいては幾つもの検証技術が標準化され,既に規格の形で提供されているもの及び産業界から提
供されているものを補完する。
JIS X 4177規格群の主な目的は,検証に関する複数の技術を集めて一つの拡張可能な枠組みとし,技術
を順番又は並列に適用して一つ又は複数の検証結果を得ることである。DSDLは,現時点では設計も仕様
策定も行われていない検証技術も許容するように設計されている。
この規格の目的は二つある。一つは,複数のマーク付け語い(彙)を記述するスキーマ群を相互に連携
させることである。もう一つは,これらのスキーマ群をそれぞれ異なるスキーマ言語で記述可能にするこ
とである。これらの目的のため,この規格は,名前空間に基づく検証委譲言語NVDLを規定する。
この規格の構成を,次に示す。箇条5は,データモデルを示し,この規格の以降の部分で用いるXML
文書の抽象化を示す。箇条6は,NVDLスクリプトの完全な構文及び単純な構文を示し,完全な構文から
単純な構文への変換を示す。箇条7は,NVDLデータモデルに関する基本操作を与える。NVDLにおける
意味を定義するとき,これらの基本操作を用いる。箇条8は,単純な構文を用いる正しいNVDLスクリプ
トの意味を示す。その意味は,与えられた文書中の要素及び属性が複数の検証器にどのように検証委譲さ
れるかを定め,各検証器がどのスキーマを利用するかを定める。箇条9は,NVDL検証委譲器に関する適
合性要件を示す。附属書A及び附属書Bは,RELAX NGを利用した完全な構文及び単純な構文をそれぞ
れ定義する。附属書Cは,NVDL及びRELAX NGを利用した完全な構文を定義する。最後に,附属書D
は,NVDLの使用例を示す。
NVDLの起源は,標準情報TR X 0044[4]である。これは,ISO/IEC JTC1にFast Track手続によってISO/IEC
DTR 22250-2[5]としてSC34専門委員会から提出された。
1
適用範囲
この規格は,名前空間に基づく検証委譲言語(NVDL)について規定する。NVDLスクリプトが制御するの
2
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
は,与えられたXML文書中の要素又は属性を,それらの名前空間に従って様々の検証器に委譲すること
とする。NVDLスクリプトは,これらの検証器がどのスキーマを用いるかも指定する。これらのスキーマ
は,JIS X 4177規格群によって規定されるスキーマ言語を含めて,どのようなスキーマ言語で書いてもよ
い。
注記 この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。
ISO/IEC 19757-4:2006,Information technology−Document Schema Definition Languages (DSDL)−
Part 4: Namespace-based Validation Dispatching Language (NVDL) (IDT)
なお,対応の程度を表す記号(IDT)は,ISO/IEC Guide 21に基づき,一致していることを示す。
2
引用規格
次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの
引用規格のうちで,西暦年を付記してあるものは,記載の年の版を適用し,その後の改正版(追補を含む。)
には適用しない。西暦年の付記がない引用規格は,その最新版(追補を含む。)を適用する。
注記 次の文書のそれぞれには,本文中で参照するための一意の識別子が付与されている。一意の識
別子は,太字で示した名称とする。
JIS X 4158:2005 XML名前空間
注記 W3C勧告,Namespaces in XML,1999年1月14日が,この規格に一致している。このW3C
勧告はhttp://www.w3.org/TR/1999/REC-xml-names-19990114から入手可能である。
JIS X 4159:2005 拡張可能なマーク付け言語(XML)1.0
注記 W3C勧告,Extensible Markup Language (XML) 1.0 (Third Edition),2004年2月4日が,この
規格に一致している。このW3C勧告はhttp://www.w3.org/TR/2004/REC-xml-20040204/から入
手可能である。
JIS X 4177-2:2007 文書スキーマ定義言語(DSDL)−第2部:正規文法に基づく妥当性検証−RELAX
NG
注記 対応国際規格:ISO/IEC 19757-2 Information technology−Document Schema Definition
Language (DSDL)−Part 2: Regular-grammar-based validation−RELAX NG及びAmendment
1:2006 (IDT)
JIS X 5810-1 多目的インターネットメール拡張(MIME)−第1部:インターネットメッセージ本体の
フォーマット
注記 IETF RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet
Message Bodies, 1996年11月が,この規格に一致している。このIETF RFCはhttp://www.ietf.org/
rfc/rfc2045.txtから入手可能である。
JIS X 5810-2 多目的インターネットメール拡張(MIME)−第2部:メディア型
注記 IETF RFC 2046, Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types 1996年11
月が,この規格に一致している。このIETF RFCはhttp://www.ietf.org/rfc/rfc2046.txtから入手
可能である。
W3C勧告 XML-Infoset XML Information Set,2001年10月24日
注記 http://www.w3.org/TR/2001/REC-xml-infoset-20011024/から入手可能である。
W3C勧告 XML Schema Part 2 XML Schema Part 2: Datatypes (Second Edition), 2004年10月28日
注記 http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/から入手可能である。
3
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
IETF RFC 3023 XML Media Types 1998年8月
注記 http://www.ietf.org/rfc/rfc3023.txtから入手可能である。
IETF RFC 3986 Uniform Resource Identifiers (URI): Generic Syntax 2005年1月
注記 http://www.ietf.org/rfc/rfc3986.txtから入手可能である。
IETF RFC 3987 Internationalized Resource Identifiers (IRIs) 2005年1月
注記 http://www.ietf.org/rfc/rfc3987.txtから入手可能である。
3
用語及び定義
この規格で用いる主な用語及び定義は,JIS X 4177-2によるほか,次による。
注記 一つの用語がこの規格及びJIS X 4177-2の両方で定義されているときは,この規格の定義を用
いる。
3.1
アクション(action)
NVDLスクリプト中のvalidate要素,reject要素,allow要素,attach要素,unwrap要素,cancelNestedActions
要素,又はattachPlaceholder要素。
3.2
属性セクション(attribute section)
同じ名前空間名をもつ属性からなる空でない集合。
3.3
属性スロットノード(attribute slot node)
属性セクションのためのスロット。
3.4
NVDL検証委譲器(NVDL dispatcher)
NVDLスクリプトが正しいかどうかを決定し,インスタンスから検証候補を作り,これらの検証候補に
対して検証器を呼び出すソフトウェアモジュール。
3.5
要素セクション(element section)
要素であって,それ自身及びすべての子孫要素が単一の名前空間名に属するもの。
3.6
要素スロットノード(element slot node)
要素セクションのためのスロット。
3.7
完全な構文(full syntax)
単純化の前のNVDLスクリプトの構文。
3.8
インスタンス(instance)
検証候補を作成する元となるXML文書。
3.9
メディア型(media type)
参照されるデータの性質を指定するための二つの部分からなる識別子。
4
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
3.10
モード(mode)
名前空間からアクションへの対応付け。
3.11
NVDLデータモデル(NVDL data model)
この規格によって定義されるXML文書の抽象的な表現。
3.12
NVDLスクリプト(NVDL script)
名前空間に基づいて検証をどう委譲するかの指定。
3.13
要素親セクション(parent element section)
別のセクションのためのスロットノードを含んでいる要素セクション。
3.14
パス表現(path expression)
|で区切られた一つ以上の選択のリストであって,各選択は/で区切られたNCNameのリストであり,先
頭に/があってもなくてもよいもの。
3.15
RELAX NGデータモデル(RELAX NG data model)
JIS X 4177-2によって定義されるXML文書の抽象的な表現。
3.16
セクション(section)
属性セクション又は要素セクション。
3.17
単純な構文(simple syntax)
単純化の後のNVDLスクリプトの構文。
3.18
単純化(simplification)
完全な構文のNVDLスクリプトから単純な構文のスクリプトへの変換。
3.19
スロットノード(slot node)
属性スロットノード又は要素スロットノード。
3.20
検証候補(validation candidate)
スロットノードを子孫としてもたない要素。
注記 一つの検証候補中の幾つかの要素が,それぞれ別の名前空間に属してもよい。一つの検証候補
中の幾つかの属性が,それぞれ別の名前空間に属してもよい。
4
記法
この規格では次の記法を用いて形式的な定義を与える。
a) < [..] >
5
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
NVDLデータモデルにおける要素の文脈。
b) < {..} >
NVDLデータモデルの要素の名前空間名。
c) (..,..)
要素の列。
d) {..,..}
属性の集合。
e) x+y
二つの要素列x及びyの連結。
f)
e←[sn, x]
スロットノードsnを要素列又は属性セクションのxで置き換えることによって,eから構成された
要素。
g) |e|
要素eの子孫要素の数。
h) createPlaceholder(s)
要素セクションsから作成されるplaceholder要素であり,7.6で定義される。
i)
virtualElement
属性セクションから作成される空要素であり,7.7で定義される。
j)
path(s)
sの要素親セクションからsまでのパスであり,8.2で定義される。
5
データモデル
5.1
一般事項
NVDLでは,スキーマ及びインスタンスのどちらを表現するXML文書も抽象データモデルによって扱
う。スキーマ及びインスタンスを表現するXML文書は,JIS X 4159に適合する整形式でなければならず,
JIS X 4158の制約に適合しなければならない。
この抽象的なNVDLデータモデルは,RELAX NGデータモデルを拡張する。NVDLにおける名前,文
脈,属性,及び要素は,JIS X 4177-2で定義されるRELAX NGデータモデルにあるものと同等とする。
NVDLデータモデルの要素は,この箇条で記述されるとおりに拡張される。
要素は,次のものからなる。
a) 名前
b) 文脈
c) 属性又は属性スロットノードの集合
d) 0個以上の子の順序付き列。どの子も,要素,空でない文字列,又は要素スロットノードのどちらか
とし,列の中に二つの文字列が続いて現れてはならない。
注記1 文脈は,接頭辞から名前空間名への対応付けを含むので,NVDL検証委譲器によって起動さ
れた検証器は,属性値又は要素の内容に現れる修飾名を扱うことができる。
要素eが別の要素eʼの子孫であるのは,eがeʼの子の列の中に出現するとき,又はeʼの子孫の子の列の
中に出現するときとする。一方,eがeʼの祖先であるのは,eʼがeの子孫であるときとする。
属性スロットノードは,属性の空でない集合のためのスロットとする。属性スロットノードが要素eに
6
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
属するのは,e又はeの子孫のもつ属性又は属性スロットノードの集合に,この属性スロットノードが含
まれるときとする。
要素スロットノードは,要素のためのスロットとする。要素スロットノードが要素eに属するのは,要
素スロットノードがe又はeのある子孫要素のいずれかの子の列に出現するときとする。
注記2 要素eのための要素スロットノードを別の要素eʼがもっていても,eはeʼの子孫ではない。
注記3 属性スロットノードも要素スロットノードも,RELAX NGデータモデルには存在しない。
5.2
情報集合からのデータモデルの作成
この処理は,JIS X 4177-2に定義される処理と同一とする。
例1 次のXML文書を考える。
<?xml version="1.0" encoding="UTF-8"?>
<ns1:foo xmlns:ns1="http://www.example.com/one"
xmlns:ns2="http://www.example.com/two">
<!-- comment-example -->
<?pi-example?>
<ns1:foo1>
text1
<ns2:foo11/>
</ns1:foo1>
<ns2:foo2>
text2
<ns1:foo21/>
text3
<ns1:foo22/>
</ns2:foo2>
<ns1:foo3>
<ns1:foo31/>
</ns1:foo3>
</ns1:foo>
データモデルを表すためにXML風の構文を用いるが,二つの変更をする。第一に,それぞ
れの開始タグにおいて,タグ名は名前空間名,局所名,及び文脈によって置き換える。第二に,
各終了タグは"</>"によって置き換える。
この文書から作られたデータモデルを,次に示す(余白は,読みやすさのためにわずかに変
更してある。)。このデータモデルのすべての要素は文脈cx1を参照しており,これはns1を
"http://www.example.com/one"に,ns2を"http://www.example.com/two"に対応付ける。
<{http://www.example.com/one}foo [cx1]>
<{http://www.example.com/one}foo1 [cx1]>
text1
<{http://www.example.com/two}foo11 [cx1]></>
</>
<{http://www.example.com/two}foo2 [cx1]>
7
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
text2
<{http://www.example.com/one}foo21 [cx1]></>
text3
<{http://www.example.com/one}foo22 [cx1]></>
</>
<{http://www.example.com/one}foo3 [cx1]>
<{http://www.example.com/one}foo31 [cx1]></>
</>
</>
入力文書にあるXML宣言,コメント又は処理命令はデータモデルに現れないこと,及び空
要素タグがないことに注意する。
例2 次のXML文書は,先の例の文書に属性を加えることによって得られる。
<?xml version="1.0" encoding="UTF-8"?>
<ns1:foo xmlns:ns1="http://www.example.com/one"
xmlns:ns2="http://www.example.com/two">
<!-- comment-example -->
<?pi-example?>
<ns1:foo1 bar1="̲" bar2="̲">
text1
<ns2:foo11/>
</ns1:foo1>
<ns2:foo2 ns1:bar1="̲" ns1:bar2="̲" ns2:bar1="̲" ns2:bar2="̲"
bar1="̲" bar2="̲">
text2
<ns1:foo21/>
text3
<ns1:foo22/>
</ns2:foo2>
<ns1:foo3 ns2:bar1="̲" ns2:bar2="̲">
<ns1:foo31/>
</ns1:foo3>
</ns1:foo>
この文書から作ったデータモデルを,次に示す。cx1は,例1と同様とする。属性名は名前
空間名及び局所名によって置き換える。
<{http://www.example.com/one}foo [cx1]>
<{http://www.example.com/one}foo1 [cx1]
{}bar1="̲" {}bar2="̲">
text1
<{http://www.example.com/two}foo11 [cx1]></>
8
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</>
<{http://www.example.com/two}foo2 [cx1]
{http://www.example.com/one}bar1="̲"
{http://www.example.com/one}bar2="̲"
{http://www.example.com/two}bar1="̲"
{http://www.example.com/two}bar2="̲"
{}bar1="̲" {}bar2="̲">
text2
<{http://www.example.com/one}foo21 [cx1]></>
text3
<{http://www.example.com/one}foo22 [cx1]></>
</>
<{http://www.example.com/one}foo3 [cx1]
{http://www.example.com/two}bar1="̲"
{http://www.example.com/two}bar2="̲">
<{http://www.example.com/one}foo31 [cx1]></>
</>
</>
6
構文
6.1
一般事項
NVDLは,完全な構文及び単純な構文をもつ。正しいNVDLスクリプトには,6.2に規定される完全な
構文に従うことが要求される。一方,6.3に規定される単純な構文は,NVDLの意味を規定する内部処理
のためだけに導入されたものであり,外部で用いられることはない。完全な構文のNVDLスクリプトは,
単純な構文のNVDLスクリプトに変形することができる。
6.2
完全な構文
完全な構文のNVDLスクリプトは,次に示す簡潔構文のRELAX NGスキーマに対して妥当なXML文
書でなければならない。附属書Aでは,同一のスキーマをXML構文で示す。
namespace local = ""
default namespace nvdl = "http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
start =
element rules {
(schemaType?,
trigger*,
(rule* | (attribute startMode { xsd:NCName }, mode+)))
& foreign
}
trigger =
element trigger {
(attribute ns { xsd:string },
9
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
attribute nameList { list { xsd:NCName+ } })
& foreign
}
mode =
element mode {
(attribute name { xsd:NCName },
includedMode*,
rule*)
& foreign
}
includedMode =
element mode {
(attribute name {xsd:NCName}?,
includedMode*,
rule*)
& foreign
}
rule =
element namespace {
(attribute ns { xsd:string },
attribute wildCard {xsd:string{maxLength = "1"}}?,
ruleModel)
& foreign
}|
element anyNamespace { ruleModel & foreign}
ruleModel = attribute match { elementsOrAttributes }?, actions
elementsOrAttributes =
list {
("elements", "attributes")
| ("attributes", "elements")
| "elements"
| "attributes"
}
actions =
cancelAction |
(noResultAction*, (noResultAction|resultAction), noResultAction*)
cancelAction =
element cancelNestedActions {foreign}
noResultAction =
element validate {
10
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
(schemaType?,
(message | option)*,
schema,
modeUsage) & foreign
}|
element allow|reject { (message*, modeUsage) & foreign }
schema =
attribute schema { xsd:anyURI } |
element schema {(text | foreignElement), foreignAttribute*}
message =
attribute message {text}
| element message {(text, xmlAttribute*), nonXMLForeignAttribute*}
resultAction =
element attach|attachPlaceholder|unwrap { (message*, modeUsage) & foreign }
option =
element option {
(attribute name { xsd:anyURI },
attribute arg { text }?,
attribute mustSupport { xsd:boolean }?)
& foreign
}
modeUsage =
(attribute useMode { xsd:NCName }
| nestedMode)?,
element context {
(attribute path { path },
(attribute useMode { xsd:NCName }
| nestedMode)?
) & foreign
}*
nestedMode =
element mode {
(includedMode*,
rule*)
& foreign
}
schemaType = attribute schemaType { mediaType }
## 5.1 of RFC 2045 allows <any (US-ASCII) CHAR except SPACE, CTLs,
## or tspecials>, where
11
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
##
## tspecials := "(" / ")" / "<" / ">" / "@" /
## "," / ";" / ":" / "\" / <">
## "/" / "[" / "]" / "?" / "="
##
mediaType =
xsd:string {
pattern = "\s*"
~ "[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*"
~ "/"
~ "[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*"
~ "\s*"}
path =
xsd:string {
pattern = "\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*"
~ "(\|\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*)*"
}
foreignElement =
element (* - nvdl:*) {attribute * {text}*, mixed{anyElement*}}
anyElement =
element * {attribute * {text}*, mixed{anyElement*}}
foreignAttribute = attribute * - (nvdl:* | local:*) {text}
nonXMLForeignAttribute = attribute * - (xml:* | nvdl:* | local:*) {text}
xmlAttribute =
attribute xml:lang {text}
| attribute xml:space {"default" | "preserve"}
| attribute xml:base {xsd:anyURI}
foreign = foreignAttribute*, foreignElement*
6.3
単純な構文
単純な構文は,完全な構文のサブセットとする。単純な構文のNVDLスクリプトは,簡潔構文の次の
RELAX NGスキーマに対して妥当なXML文書でなければならない。附属書Bでは,同一のスキーマを
XML構文で示す。
namespace local = ""
default namespace nvdl = "http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
start =
element rules {
attribute startMode { xsd:NCName }, trigger*, mode+
}
12
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
trigger =
element trigger {
attribute ns { xsd:string },
attribute nameList { list { xsd:NCName+ } }
}
mode =
element mode {
attribute name { xsd:NCName },
rule*
}
rule =
element namespace {
attribute ns { xsd:string },
attribute wildCard {xsd:string{maxLength = "1"}},
ruleModel
}|
element anyNamespace { ruleModel }
ruleModel = attribute match { elementsOrAttributes }, actions
elementsOrAttributes =
"elements" | "attributes"
actions =
(noResultAction*, (noResultAction|resultAction), noResultAction*)
noResultAction =
element validate {
schemaType?,
(message | option)*,
schema,
modeUsage
}
schema =
attribute schema { xsd:anyURI } |
element schema {(text | foreignElement)}
message =
element message {text & attribute xml:lang {text}? }
resultAction =
element attach|attachPlaceholder|unwrap { message*, modeUsage }
option =
element option {
attribute name { xsd:anyURI },
attribute arg { text }?,
13
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
attribute mustSupport { xsd:boolean }
}
modeUsage =
attribute useMode { xsd:NCName },
element context {
attribute path { path },
attribute useMode { xsd:NCName }
}*
schemaType = attribute schemaType { mediaType }
## 5.1 of RFC 2045 allows <any (US-ASCII) CHAR except SPACE, CTLs,
## or tspecials>, where
##
## tspecials := "(" / ")" / "<" / ">" / "@" /
## "," / ";" / ":" / "\" / <">
## "/" / "[" / "]" / "?" / "="
##
mediaType =
xsd:string {
pattern = "\s*"
~ "[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*"
~ "/"
~ "[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*"
~ "\s*"}
path =
xsd:string {
pattern = "\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*"
~ "(\|\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*)*"
}
foreignElement =
element (* - nvdl:*) {attribute * {text}*, mixed{anyElement*}}
anyElement =
element * {attribute * {text}*, mixed{anyElement*}}
6.4
単純化
6.4.1 一般事項
完全な構文は,この後に示す変換規則群をその順番どおりに適用することによって単純な構文に変換す
る。一つの変換規則をスキーマ内のすべての要素に適用した後に,その次の規則を適用するものとする。
個々の変換規則は,正しいスキーマが満たさなければならない制約を指定している場合がある。変換規則
は,データモデルのレベルで適用する。変換を適用する前に,スキーマを解析してデータモデルのインス
14
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
タンスを構築する。
6.4.2
注釈
修飾された名前をもつ属性は,schema要素の子孫要素に属する場合又はmessage要素のxml:lang属性で
ある場合以外は取り除く。名前空間"http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"に属さない要素は,schema
要素の子孫である場合以外は取り除く。
注記 この段階でxml:base属性を取り除くことは安全である。なぜなら,xml:base属性は要素情報項
目の[base URI]を確定するために用いられ,更に [base URI]から要素の文脈の基底URIが作ら
れている。したがって,文書を解析してデータモデルの要素を得た後では,xml:base属性を破
棄することができる。
6.4.3
空白
message及びschema以外のどの要素についても,空白文字だけからなる文字列である子を削除する。
startMode属性,useMode属性,match属性,mustSupport属性, 及びschemaType属性の値,並びにmode
のname属性の値から,先頭の空白及び末尾の空白を削除する。
6.4.4
message属性
validate要素,allow要素,reject要素,attach要素,又はunwrap要素のmessage属性は,message子要素
に変換する。
6.4.5
mustSupport属性
option要素がmustSupport属性をもたなければ,mustSupport="false"を付け加える。
6.4.6
rules要素のschemaType属性
最上位のrules要素がschemaType属性をもつとき,schemaType属性及びschema要素のいずれももたな
いvalidate要素にこの属性を転記する。そして,最上位のrules要素のschemaType属性を削除する。
6.4.7
子mode要素をもたないrules
最上位のrules要素を変形して,mode要素をもたせる。子要素がnamespace要素又はanyNamespace要素
のとき,それらを一つのmode要素で包みこむ。そして,name属性及びstartMode属性を,mode要素及び
rules要素にそれぞれ付け加える。これらの属性は,同じ値をもたなければならず,この値は他のモード名
と異なっていなければならない。
6.4.8
validate要素,allow要素,reject要素,attach要素,unwrap要素,attachPlaceholder要素,又は
context要素の子mode要素
この変換規則の結果,validate要素,allow要素,reject要素,attach要素,unwrap要素,attachPlaceholder
要素,又はcontext要素は,mode要素を子としてもたない。
祖先のmode要素を一つだけもつ,validate要素,allow要素,reject要素,attach要素,unwrap要素,
attachPlaceholder要素,又はcontext要素の子要素としてmode要素が出現する場合,このmode要素をrules
要素の末子要素として移動する。そして,mode要素にname属性を加え,useMode属性をこのvalidate要
素,allow要素,reject要素,attach要素,unwrap要素,又はattachPlaceholder要素に追加する。これらの属
性は同一の値をもたなければならず,この値は他のモード名と異なっていなければならない。この変換規
則は,mode要素がvalidate要素,allow要素,reject要素,attach要素,unwrap要素,attachPlaceholder要素,
又はcontext要素の中に現れなくなるまで繰り返し適用される。
6.4.9
namespace要素又はanyNamespace要素
もし,namespace要素又はanyNamespace要素がmatch属性を指定していなければ,match="elements"を
追加する。
15
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
namespace要素又はanyNamespace要素のmatch属性が"elements"及び"attributes"トークンを含んでいる文
字列を指定している場合,この要素の二つのコピーによってこの要素を置き換える。1番目のコピーの
match属性はmatch="elements"に,2番目のコピーのmatch属性はmatch="attributes"によって置き換える。
もし,namespace要素がwildCard属性を指定していなければ,wildCard="*"を追加する。
6.4.10 modeの展開
この変換規則の結果として,mode要素は子mode要素をもたない。
注記 外部のNVDLスクリプトの断片を構文として取り込むためには,外部の解析対象実体又は
XInclude[9]を用いて行うことが期待されている。ここで定義される変換は,構文としての取込
みをしてからの後処理をする。
末端mode要素を,子mode要素をもたないmode要素と定義する。
末端mode要素の中にあるanyNamespace要素が上書きされるのは,このmodeを直接含んでいるmode
がもう一つのanyNamespace要素をもち,この二つのanyNamespace要素が同一のmatch属性を指定してい
るときとする。
末端mode要素の中にあるnamespace要素が上書きされるのは,このmodeを直接含んでいるmode要素
がもう一つのnamespace要素をもち,この二つのanyNamespace要素が同一のmatch属性を指定し,wildCard
属性によって同じ値を指定しているときとする。
それぞれの末端mode要素mdに,次の変換を順番に適用する。
a) md中の各namespace要素及びanyNamespace要素は,上書きされている場合には削除する。
b) mdは,その子の列によって置き換える。
どのmode要素も子mode要素をもたなくなるまで,この変換規則を繰り返し適用する。
最後に,各namespace要素及びanyNamespace要素は,cancelNestedActions要素を子としてもっているな
ら削除する。
6.4.11 mode内の競合
兄弟関係にある二つのanyNamespace要素のmatch属性は,同一であってはならない。
兄弟関係にある二つのnamespace要素は,互いに競合してはならない。
namespace要素の競合を形式的に定義する。第一のnamespace要素が指定するwildCard属性の値をw1
とし,ns属性の値をns1とする。同様に,第二のnamespace要素が指定するものをw2及びns2とする。
これらのnamespace要素が競合するのは,二つの対(ns1, w1)と(ns2, w2)とが競合するときとする。これらの
対が競合するのは,次の場合であって,また,その場合に限る。
a) 場合1: ns1及びns2の両方が空の文字列である。
b) 場合2: (1)ns1=""及びns2="w2",又は(2) ns2=""及びns1="w1"である。
c) 場合3: ns1及びns2がw1でもw2でもない同一の文字で始まり,組(nsTail1, w1)が別の組(nsTail2, w2)
と競合する。ここで,nsTail1及びnsTail2は,それぞれns1及びns2から最初の文字を取り除くことに
よって得られる。
注記1 場合3は,("a", "*")と("a", "?")とが競合することを意味する。
d) 場合4: w1は""ではなく,ns1はw1で始まり,組(ns1, w1)は別の組(nsTail2, w2)と競合する。ここで,
nsTail2はns2から最初の文字を取り去ることによって得られる。
注記2 場合4は,("*", "*")と("a", "")とが競合することを意味する。
e) 場合5: w2は""ではなく,ns2はw2で始まり,組(ns2,w2)は別の組(nsTail1, w1)と競合する。ここで,
nsTail1はns1から最初の文字を取り去ることによって得られる。
16
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
注記3 6.4.11の制限は,一つの名前空間名によって起動されるのが高々一つのnamespace要素又
はanyNamespace要素であることを保障し,unwrap又はattachが高々一つしか起動されな
いことを保障する。
6.4.12 暗黙のanyNamespace
もし,mode要素がmatch="elements"をもつanyNamespace要素をもたなければ,次の要素を加える。
<anyNamespace match="elements"><reject/></anyNamespace>
もし,mode要素がmatch="attributes"をもつanyNamespace要素をもたなければ,次の要素を加える。
<anyNamespace match="attributes"><attach/></anyNamespace>
6.4.13 allow及びreject
各allow要素はvalidate要素によって置き換える。その内容は,allow要素の内容に次の要素を付け加え
たものとする。
<schema><allow xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/></schema>
ここで,"http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"名前空間のallowは,すべての文書を許容す
るスキーマを表す。
各reject要素はvalidate要素によって置き換える。その内容は,validate要素の内容に次の要素を付け加
えたものとする。
<schema><reject xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/></schema>
ここで,"http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"名前空間のrejectは,どの文書も許容しない
スキーマを表す。
注記 これらのあらかじめ定義されたスキーマは,意味を定義するための簡便さのためだけのもので
ある。
6.4.14 useMode属性
useMode属性をもたないvalidate要素,attach要素,attachPlaceholder要素,unwrap要素,及びcontext
要素には,useMode属性を追加する。値は,祖先のmode要素のname属性から転記する。
7
基本操作
7.1
一般事項
この箇条は,NVDLデータモデルについての基本操作を導入する。これらの操作は,箇条8でNVDLの
意味を定義するときに用いる。
7.2
要素セクション及び属性セクションの生成
この操作は,XMLインスタンスを要素セクション及び属性セクションに分解する。属性セクションは,
同じ名前空間に属する属性の空でない集合とする。要素セクションは,要素であって,それ自身及びすべ
ての子孫要素が一つの名前空間名に属するものとする。
分解は,次の規則によって行われる。
第一に,各要素eと,eのいずれかの属性の名前空間名であるnとに対し,それぞれ属性スロットノー
ドと属性セクションとを作る。属性セクションは,eの属性であってnに属するものすべてを含む。属性
スロットノードは,この属性セクションのためのスロットとする。次に,eの属性集合を,この属性スロ
ットノードを導入し,この属性セクション中の属性を取り去ることによって修正する。
第二に,ルートではない各要素eに対し,eとその親要素とが異なる名前空間に属するときには,要素
スロットノードと要素セクションとを作る。要素セクションは,eによって表される。要素スロットノー
17
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
ドは,この要素セクションのためのスロットとする。次に,eの親要素の子要素列を,eをこの要素スロッ
トノードで置き換えることによって修正する。
例1 5.2の例1のデータモデルから,五つの要素セクションが作成される。1番目の要素セクション
は,文書を表す。これは,二つの要素スロットノードesn1及びesn2をもつ。
<{http://www.example.com/one}foo [cx1]>
<{http://www.example.com/one}foo1 [cx1]>
text1
$esn1
</>
$esn2
<{http://www.example.com/one}foo3 [cx1]>
<{http://www.example.com/one}foo31 [cx1]></>
</>
</>
2番目の要素セクションは,esn1に対応する。これは要素スロットノードをもたない。
<{http://www.example.com/two}foo11 [cx1]></>
3番目の要素セクションは,esn2に対応する。これは二つの要素スロットノードesn3及び
esn4をもつ。
<{http://www.example.com/two}foo2 [cx1]>
text2
$esn3
text3
$esn4
</>
4番目の要素セクションは,esn3に対応する。これは要素スロットノードをもたない。
<{http://www.example.com/one}foo21 [cx1]></>
5番目の要素セクションは,esn4に対応する。これは要素スロットノードをもたない。
<{http://www.example.com/one}foo22 [cx1]></>
1番目の要素セクションは,2番目及び3番目の要素親セクションであり,3番目は4番目及
び5番目の要素親セクションである。
例2 五つの要素セクション及び五つの属性セクションが,5.2の例2のデータモデルから作られる。
1番目の要素セクションは,文書を表す。これは,二つの要素スロットノードesn1及びesn2
をもち,二つの属性スロットノードasn1及びasn2をもつ。
<{http://www.example.com/one}foo [cx1]>
<{http://www.example.com/one}foo1 [cx1]
$asn1>
text1
$esn1
</>
$esn2
18
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<{http://www.example.com/one}foo3 [cx1]
asn2>
<{http://www.example.com/one}foo31 [cx1]></>
</>
</>
1番目の属性セクションは,asn1と対応する。これは,名前空間""に属する二つの属性をも
つ。
{{}bar1="̲", {}bar2="̲"}
2番目の属性セクションは,asn2と対応する。これは,名前空間"http://www.example.com/two"
に属する二つの属性をもつ。
{{http://www.example.com/two}bar1="̲",
{http://www.example.com/two}bar2="̲"}
2番目の要素セクションは,esn1と対応する。これは要素スロットノードも属性スロットノ
ードももたない。
<{http://www.example.com/two}foo11 [cx1]></>
3番目の要素セクションは,esn2と対応する。これは,二つの要素スロットノードesn3及び
esn3をもち,三つの属性スロットノードasn3, asn4, asn5をもつ。
<{http://www.example.com/two}foo2 [cx1] $asn3 $asn4 $asn5>
text2
$esn3
text3
$esn4
</>
3番目の属性セクションは,asn3と対応する。これは,名前空間"http://www.example.com/one"
に属する二つの属性をもつ。
{{http://www.example.com/one}bar1="̲",
{http://www.example.com/one}bar2="̲"}
4番目の属性セクションは,asn4と対応する。これは,名前空間"http://www.example.com/two"
に属する二つの属性をもつ。
{{http://www.example.com/two}bar1="̲",
{http://www.example.com/two}bar2="̲"}
5番目の属性セクションは,asn5と対応する。これは,名前空間""に属する二つの属性をも
つ。
{{}bar1="̲", {}bar2="̲"}
4番目の要素セクションは,esn3と対応する。これは要素スロットノードも属性スロットノ
ードももたない。
<{http://www.example.com/one}foo21 [cx1]></>
5番目の要素セクションは,esn4と対応する。これは要素スロットノードも属性スロットノ
ードももたない。
<{http://www.example.com/one}foo22 [cx1]></>
19
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
1番目の要素セクションは,2番目及び3番目の要素親セクションであり,3番目は4番目及
び5番目の要素親セクションである。
1番目の要素セクションは,1番目及び2番目の属性セクションの要素親セクションであり,
3番目の要素セクションは,3番目,4番目,及び5番目の属性セクションの要素親セクション
である。
7.3
trigger要素による要素セクションの分割
trigger要素に従って,この操作は要素セクションを更に要素セクションに分割する。分割は,次の二つ
の規則によって行われる。
第一に,何らかの要素セクション(esとする。)で出現する要素eであって,あるtrigger 要素tについ
て次の三つの条件を満たすものを一つ選ぶ。三つの条件とは,(1) eがtによって特定されること,(2) eは
esの根ではないこと,及び(3) eの親要素がtによって特定されないこととする。ここで,要素がtによっ
て特定されるのは,(1)この要素の名前空間名とtのns属性の値とが,一つずつ文字を比較したときすべて
一致すること,(2) この要素の局所名は,tのnameList属性によって指定されたトークンの一つであること
の両方を満たすときとする。
第二に,要素セクションesを二つの要素セクションへ分割する。最初の要素セクションはeによって表
現される。この要素セクションのためのスロットとして要素スロットノードが作られる。第二の要素セク
ションはesによって表現される。しかし,eの親要素の子の列を,要素スロットノードによってeを置き
換えて修正する。
この選択規則及び分割規則を,要素を選ぶことができなくなるまで繰り返す。
注記 XMLインスタンスから要素セクションを作るのに十分な情報を名前空間が提供しないとき,こ
の分割操作が有用である。
例1 次のXML文書を考える。この文書は,DocBook 4.2[6]に従っている。Docbookの最初の版はXML
名前空間以前から存在するので,DocBook 4.2は名前空間を用いていない。DocBook 4.2がCALS
DTDから表構造を借りていることに注意する。
<?xml version="1.0" encoding="UTF-8"?>
<book>
<article>
<title>Docbook containing a CALS table</title>
<para>para</para>
<table>
<title/>
<tgroup cols="2">
<tbody>
<row><entry>1</entry><entry>A</entry></row>
<row><entry>2</entry><entry>B</entry></row>
</tbody>
</tgroup>
</table>
</article>
</book>
20
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
次のtrigger要素は,Docbook文書例からテーブルを抜き出すために使用できる。
<trigger ns="" nameList="table"/>
二つの要素セクションが構築される。1番目の要素セクションには,CALSテーブルから借
りた局所名は存在しない。
<{}book [cx1]>
<{}article [cx1]>
<{}title [cx1]>Docbook containing a CALS table</>
<{}para [cx1]>para</>
$esn1
</>
</>
2番目の要素セクションには,CALSテーブルから借りた局所名が存在し,それ以外の局所
名は存在しない。
<{}table [cx1]>
<{}title [cx1]></>
<{}tgroup [cx1] $asn1>
<{}tbody>
<{}row><{}entry>1</><{}entry>A</></>
<{}row><{}entry>2</><{}entry>B</></>
</>
</>
</>
例2 次のXML文書を考える。この文書は,XHTML 2.0[8]に従っている。switch要素及びcase要素
は,XForms 1.0[7]から借りているが,これらはXHTML 2.0の名前空間に属していることに注意
する。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/2002/06/xhtml2">
<head>
<title xml:lang="en">XHTML 2.0 containing XForms</title>
</head>
<body>
<p>para</p>
<switch>
<case>
<p>embedded para</p>
</case>
</switch>
</body>
</html>
次のtrigger要素は,switch要素及びcase要素を抽出するために使用できる。
21
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<trigger ns="http://www.w3.org/2002/06/xhtml2" nameList="html head
title body p"/>
<trigger ns="http://www.w3.org/2002/06/xhtml2" nameList="switch
case"/>
三つの要素セクションが構築される。1番目の要素セクションは,XHTML 2.0を用いる。
<{http://www.w3.org/2002/06/xhtml2}html [cx1]>
<{http://www.w3.org/2002/06/xhtml2}head [cx1]>
<{http://www.w3.org/2002/06/xhtml2}title [cx1] $asn1>XHTML 2.0
containing XForms</>
</>
<{http://www.w3.org/2002/06/xhtml2}body [cx1]>
<{http://www.w3.org/2002/06/xhtml2}p [cx1]>para</>
$esn1
</>
</>
2番目の要素セクションはXFormsを使っているが,名前空間はXHTML 2.0である。
<{http://www.w3.org/2002/06/xhtml2}switch [cx1]>
<{http://www.w3.org/2002/06/xhtml2}case [cx1]>
$esn2
</>
</>
3番目の要素セクションは,XHTML 2.0を用いる。
<{http://www.w3.org/2002/06/xhtml2}p [cx1]>embedded para</>
7.4
要素への属性セクションの付加
属性セクション(xとする。)を属性スロットノード(asnとする。)の地点で要素(eとする。)に付加
することができる。これは,xに含まれる属性でasnを置き換えることによって行う。結果をe←[asn, x]
で表す。
例
7.2の例2において,3番目の要素セクションに3番目の属性セクションをasn2の地点で付加
すると,次のものが得られる。
<{http://www.example.com/two}foo2 [cx1]
{http://www.example.com/one}bar1="̲"
{http://www.example.com/one}bar2="̲" $asn4 $asn5>
text2
$esn3
text3
$esn4
</>
7.5
要素への要素列の付加
要素列(xとする。)を要素スロットノード(esnとする。)の地点で要素(eとする。)に付加すること
22
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
ができる。これは,esnをxで置き換えることによって行う。もし,二つのテキストノードが隣接すれば
(xが空の列であるときに限って起こり得る。),これらを連結して単一のテキストノードにする。結果を,
e←[esn, x]で表す。
例1 7.2の例1において4番目の要素セクションをesn3の地点で3番目の要素に付加すると,次の
ものが得られる。
<{http://www.example.com/two}foo2 [cx1]>
text2
<{http://www.example.com/one}foo21 [cx1]></>
text3
$esn4
</>
例2 7.2の例1において4番目の要素セクション及び5番目の要素セクションを並べたものをesn2
の地点で1番目の要素セクションに追加すると,次のものが得られる。
<{http://www.example.com/one}foo [cx1]>
<{http://www.example.com/one}foo1 [cx1]
$asn1>
text1
$esn1
</>
<{http://www.example.com/one}foo21 [cx1]></>
<{http://www.example.com/one}foo22 [cx1]></>
<{http://www.example.com/one}foo3 [cx1]
$asn2>
<{http://www.example.com/one}foo31 [cx1]></>
</>
</>
7.6
要素セクションからのplaceholder要素の生成
placeholder要素を,要素セクション(sとする。)から作ることができる。このplaceholderは,名前空間
名が"http://purl.oclc.org/dsdl/nvdl/ns/instance/1.0"で,局所名はplaceholderの空要素であり,ns属性及び
localName属性にはそれぞれsのルート要素の名前空間名及び局所名を指定する。結果は,
createPlaceholder(s)によって示す。
例 7.2の例2における3番目の要素セクションから作られたplaceholder要素を,次に示す。
<{http://purl.oclc.org/dsdl/nvdl/ns/instance/1.0}placeholder
ns="http://www.example.com/two" localName="foo2"></>
7.7
属性セクションの空要素への変換
属性セクション(sとする。)を空要素に変換することができる。これは,次のとおりに行う。名前空間
名が"http://purl.oclc.org/dsdl/nvdl/ns/instance/1.0"で,局所名はvirtualElementであり,sに含まれるすべての
属性を含む空要素を作る。結果は,virtualElement(s)によって示す。
例 7.2の例2で示される2番目の属性セクションから作られた空要素を,次に示す。
<{http://purl.oclc.org/dsdl/nvdl/ns/instance/1.0}virtualElement
23
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
{http://www.example.com/two}bar1="̲"
{http://www.example.com/two}bar2="̲"></>
8
意味
8.1
一般
NVDLスクリプトの意味は,検証委譲のための参照モデルを用いて定義する。この参照モデルは,五つ
の段階からなる。
a) 段階1: 要素セクション及び属性セクションの生成
b) 段階2: 解釈の構築
c) 段階3: セクションの結合
d) 段階4: 結合されたセクションの取捨選択
e) 段階5: 検証
注記 検証器の起動が全く同じである限り,NVDL検証委譲器は,この参照モデルに従わなくてもよ
い。特に,NVDL検証委譲器は,主記憶に文書を作成せず,ストリームAPIを用いて実現して
もよい。
8.2
準備
次に示す関数及び述語は,この箇条の残りで用いる。
注記1 パスは局所名を含むが,接頭辞も名前空間名も含まない。
match(nsValue, wc, uri)が成立するのは,nsValueにおける文字wcのすべての出現を適切な文字列によっ
て置き換えることによって文字列uriをnsValueから得られる場合に限る。別の出現は,別の文字列によっ
て置き換えてもよい。wcが""であるとき,match(nsValue, wc, uri)が成立するのは,nsValueがuriと完全に
同一なときであり,また,そのときに限る。
matchElemSec(nsOrAny, uri)が成立するのは,次の場合とする。
a) 場合1: nsOrAnyがns="nsValue", wildCard="wc", 及びmatch="elements"を指定するnamespace要素であ
り,match(nsValue, wc, uri)が成立する。
b) 場合2: nsOrAnyがmatch="elements"を指定するanyNamespace要素であり,nsOrAnyのどの兄弟
namespace要素nsOrAnyʼについてもmatchElemSec(nsOrAnyʼ, uri)が成立しない。
matchAttSec(nsOrAny,uri)が成立するのは,次の場合とする。
a) 場合1: nsOrAnyがns="nsValue", wildCard="wc", 及びmatch="attributes"を指定するnamespace要素であ
り,match(nsValue, wc, uri)が成立する。
b) 場合2: nsOrAnyがmatch="attributes"を指定するanyNamespace要素であり,nsOrAnyのどの兄弟
namespace要素nsOrAnyʼについてもmatchAttSec(nsOrAnyʼ, uri)が成立しない。
path(s)は,与えられた要素セクション又は属性セクションsからパスを構成する関数とする。sʼをsの要
素親セクションとする。このとき,path(s)は,要素セクションsʼのルート要素の局所名で始まり,sのため
の要素スロットノード又は属性スロットノードの親要素の局所名で終わるパスである。
matchPathExp(pathExp, p)が成立するのは,パスpがpathExpとマッチするときとする。パス式pathExp
は,|で区切られた一つ以上の選択のリストであって,各選択は/で区切られたNCNameのリストで先頭に/
があってもなくてもよいものとする。パスpがpathExpとマッチするのは,次の場合とする。
a) 場合1: pathExpのある選択が'/'で始まり,p中のNCNameトークンすべてからなる列は,この選択に
現れるものと一致する。
24
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
b) 場合2: pathExpのある選択が'/'で始まらず,p中のNCNameトークンのある末端列は,この選択に現
れるNCNameトークンすべてからなる列と一致する。
注記2 matchPathExpはXPathに類似するが,名前空間名又は名前空間接頭辞を用いない。
applies(action, p, mode)が成立するのは,次の場合とする。
a) 場合1: modeがactionのuseMode属性によって指定されており,actionのどの子context要素について
もmatchPathExp(pathExp, p)が成立しない。ここで,pathExpはcontextのpath属性の値とする。
b) 場合2: actionのある子context要素(cとする。)に対して,modeはcのuseMode属性によって指定さ
れ,matchPathExp(pathExp, p)が成立し,どの先行する兄弟context要素(cʼとする。)についても
matchPathExp(pathExpʼ, p)は成立しない。ここで,pathExpはcのpath属性の値であり,pathExpʼはcʼ
のpath属性の値とする。
elemTrans(mode, uri, a)が成立するのは,mode中のあるnamespace要素又はanyNamespace要素である
nsOrAnyに対して,aはnsOrAnyの子アクションであり,matchElemSec(nsOrAny, uri)が成立するときとす
る。
attTrans(mode, uri, a)が成立するのは,mode中のあるnamespace要素又はanyNamespace要素である
nsOrAnyに対して,matchAttSec(nsOrAny, uri)が成立し,aはnsOrAnyの子アクションであるときとする。
8.3
段階1: 要素セクション及び属性セクションの生成
この段階は,与えられたインスタンスから,7.2で定義されるとおりに,要素セクション及び属性セクシ
ョンを作成する。次に,与えられたNVDLスクリプトにあるすべてのtrigger要素に対して,要素セクショ
ンの分割を,7.3で定義されるとおりに行う。
8.4
段階2: 解釈の構築
この段階は,NVDLスクリプトに関する解釈を構築する。解釈は,それぞれのセクションにアクション
及びモードを対応付ける。
解釈Iは,与えられたインスタンス中の要素セクションsをアクション(IA(s))とモード(IM(s))との対に対
応付け,与えられたインスタンス中の属性セクションsʼをアクション(IA(sʼ))に対応付ける関数であり,次
の条件を満たすものとする。
a) 要素セクションsがルートの要素セクションであるとき,IM(s) = mrt及びelemTrans(IM(s), namespace(s),
IA(s))が成立する。ここで,mrtはNVDLスクリプトの開始モードとする。
b) 要素セクションsの要素親セクションがsʼであれば,applies(IA(sʼ), path(s), IM(s))及びelemTrans(IM(s),
namespace(s), IA(s))が成立する。
c) 属性セクションaの要素親セクションがsʼであれば,applies(IA(sʼ), path(a), IM(a))及びattTrans(IM(a),
namespace(a), IA(a))が成立する。
一つのインスタンスに複数の解釈が存在することがある。これは,一つのnamespace要素又は
anyNamespace要素が複数のアクションをもつときに起こる。すべての可能な解釈を構築する。
8.5
段階3: セクションの結合
この段階では,それぞれの解釈に対して,attachアクション及びunwrapアクションを実行してセクショ
ンを結合する。
二つの補助関数を用意する。
第一に,それぞれの解釈Iに対して,attBubble[I]は,与えられたインスタンス中の属性セクションを属
性集合に対応付ける関数であって,次の条件を満たすものとする。
a) 場合1: IA(s)がattachアクションのとき
25
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
attBubble[I](s) = s
b) 場合2: それ以外のとき
attBubble[I](s) = {}
第二に,それぞれの解釈Iに対して,elemBubble[I]は,与えられたインスタンス中の要素セクションを
要素列に対応付ける関数であって,次の条件を満たすものとする。
a) 場合1: IA(s)がvalidateアクションのとき
elemBubble[I](s) = ()
b) 場合2: IA(s)がattachアクションのとき
elemBubble[I]=(Xm)
ここで,
X0 = Yn,
X1 = X0 ← [esn1, elemBubble[I](s1)],
X2 = X1 ←[esn2, elemBubble[I](s2)], ...
Xm = Xm-1 ← [esnm, elemBubble[I](sm)],
s1, s2, ..., smはsの子要素セクションであり,
esn1,esn2, ..., esnmはs1, s2, ..., smに対応する要素スロットノードであり,
Y0= s,
Y1 = Y0 ← [asn1, attBubble[I](a1)],
Y2 = Y1 ← [asn2,attBubble[I](a2)], ...
Yn = Yn-1 ← [asnn, attBubble[I](an)],
a1, a2,..., anはsの子属性セクションであり,
asn1, asn2, ..., asnnはa1, a2,..., anのための属性スロットノードとする。
注記1 要素セクションの数(m)と属性セクションの数(n)とは異なってもよい。
c) 場合3: IA(s)がattachPlaceholderアクションのとき
elemBubble[I] ()= (createPlaceholder(s))
d) 場合4: IA(s)がunwrapアクションのとき
elemBubble[I](s)=elemBubble[I](s1)+elemBubble[I](s2)+...+elemBubble[I](sm) ここでs1, s2,...smは,sの子
要素セクションとする。
セクションをどう結合するかを定義するため,各解釈Iに対し,部分的関数syn[I]を導入する。この関数
は,IA(s)がvalidateアクションのとき,与えられたインスタンス中の要素セクションsを要素に対応付ける。
この関数は,対応付けられたアクションがvalidateのときに限って定義されるので部分的関数になる。
a) 場合1: IA(s)がvalidateアクションのとき
syn[I]=(Xm) ここで
X0 = Yn,
X1 = X0 ←[esn1, elemBubble[I](s1)],
X2 = X1←[esn2, elemBubble[I](s2)], ...
Xm = Xm-1←[esnm, elemBubble[I](sm)],
s1, s2,...smは,sの子要素セクションであり,
esn1, esn2, ...esnmは,s1, s2, ..., smのための要素スロットノードとする。ここで,
Y0 = s,
26
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
Y1=Y0←[asn1, attBubble[I](a1)],
Y2=Y1←[asn2, attBubble[I](a2)], ...
Yn=Yn-1←[asnn, attBubble[I](an)],
a1, a2, ...anはsの子属性セクションであり,
asn1, asn2,asnnはa1,a2,...,anのための属性スロットノードとする。
注記2 要素セクションの数(m)と属性セクションの数(n)とは異なっていてもよい。
8.6
段階4: 結合されたセクションの取捨選択
この段階は,対(v, e)からなる二つの集合PlanElem及びPlanAttを構成する。ここで,vはvalidateアクシ
ョン,eは要素とする。
a) PlanElem={(v, e) | (s, v, e)はZに属し, |e| >= |eʼ |がZのどの元(s, v, eʼ)に対しても成り立つ }。ここで,
Zは,次の条件を満たす三つ組(s, v, e)の集合とする。条件とは,sは要素セクションであり,vはvalidate
アクションであり,eは要素であり,v = IA(s),かつ,e =syn[I](s)が成り立つこととする。
注記 同一の要素セクションに適用される同一のvalidateアクションをもつ検証候補は幾つか存在
するが,|e| >= |eʼ |はその中から最大のものを選ぶ。
b) PlanAtt={(v, virtualElement(s)) | sが属性セクション,vがvalidateアクション,ある解釈Iに対してv =
IA(s)}。
8.7
段階5: 検証
8.7.1
一般事項
この段階は,PlanElem又はPlanAttに属する各(v, e)について検証器を起動する。検証器は,vのためのス
キーマを書くのに利用されたスキーマ言語に従って選ぶ。
注記 NVDLデータモデル中の要素は,名前空間宣言,接頭辞,処理命令,コメント,又は文書型宣
言を含まないので,検証器はこれらを受け取ることはできない。
8.7.2
スキーマ及びスキーマ言語の決定
もし,vが子としてschema要素を含めば,その内容をスキーマとして使う。内容が文字列で,vが
schemaType属性を指定していれば,その値はMIMEメディア型(JIS X 5810-2参照)でなければならず,
スキーマ言語を決定するために使わなければならない。内容が外来の要素であるときは,その名前空間を
用いてスキーマ言語を決定する。
注記1 RELAX NG簡潔構文のためのメディア型としてapplication/relax-ng-compact-syntaxがIANAに
登録されている。
vがschema属性によってスキーマを参照しているとき,その値であるIRI(IETF RFC 3987参照)を参
照することによってスキーマを構築し,スキーマ言語はスキーマ及びschemaType属性から決定する。
これは次のとおりに行う。IRI参照は,IRI自身及び断片識別子(省略してもよい。)から構成される。IRI
によって特定される資源を得る。この結果として,MIME実体(JIS X 5810-1参照),すなわち,バイト列
であってMIMEメディア型(JIS X 5810-2参照)が附属したものが得られる。
a) メディア型がXMLメディア型(すなわち,application/xml,text/xml又は*/*+xml)であるとき,MIME
実体は,適用できるRFC(この時点ではIETF RFC 3023)に従ってXML文書として構文解析しなけ
ればならない。特に,このRFCによって指定されるとおりに,charsetパラメータを処理しなければな
らない。href属性が参照する資源のメディア型の登録が,このメディア型のための断片識別子の解釈
を定義していない限り,この属性は断片識別子を含んではならない。スキーマ言語は,XML文書のル
ート要素の名前空間によって決定される。
27
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
注記2 IETF RFC 3023はapplication/xml, text/xml又は*/*+xmlのための断片識別子の解釈を定義し
ていない。
b) メディア型が存在しない場合又はXMLメディア型でない場合も,MIME実体をスキーマとして用い
なければならない。スキーマ言語は,schemaType属性から決定しなければならない。
8.7.3
属性セクションのためのスキーマ書換え
PlanAtt中の(v, e)のそれぞれについて,NVDL検証委譲器は,vの中のスキーマを書き直す。sがRELAX
NGで書かれている場合,sを<element><anyName/>s</element>と書き直す。sがそれ以外のスキーマ言語で
書かれており,そのスキーマ言語がNVDL用スキーマ書換え手段を提供している場合,その手段を用いて
sを書き換える。そうでなければ,sは書き換えない。
注記1 属性セクションは段階4でvirtualElementによって要素に変換されるが,属性集合に関するス
キーマは,この書換えによって要素用のスキーマに変換される。
注記2 NVDL用スキーマ書換え手段を,スキーマ言語は提供することが望ましい。提供されていな
い場合,スキーマ作成者はvirtualElementを明示的に指定する必要がある。
注記3 次のスクリプトには二つのvalidate要素がある。これらは同じスキーマを参照するが、別の
アクションである。名前空間"http://www.example.com"の一つの検証候補について、PlanElem
は1番目のアクションについて一つの三つ組を、2番目のアクションについて一つの三つ組
をもつ。結果として、この検証候補は2回検証される。
<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">
<namespace ns="http://www.example.com" match="elements">
<validate schema="foo.rng"/>
<validate schema="foo.rng"/>
</namespace>
</rules>
8.7.4
オプション
検証器が組(v, e)について起動されるとき,vの子要素として指定されるすべてのoption要素は検証器に
渡されなければならない。検証器がmustSupport属性の値が1又はtrueであるオプションをサポートして
いなければ,誤りを報告しなければならない。
注記 この規格は,標準のオプションを導入しない。スキーマ言語又はその実装は,NVDLと協調動
作するためにoptionを導入することが推奨される。
9
適合性
適合するNVDL検証委譲器は,どのようなXML文書についても,それが正しいNVDLスクリプトかど
うかを決めることができなければならない。適合するNVDL検証委譲器は,どのようなインスタンスから
も検証候補を作成すること,検証候補について検証器を起動すること,検証器が成功したか失敗したかを
報告することができなければならない。
しかし,NVDL検証委譲器が扱えないスキーマ言語をNVDLスクリプトが利用していれば,直前の段落
の要求は適用されない。名前空間"http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"のスキーマを除いて
どのスキーマ言語の実証も,適合するNVDL検証委譲器には,義務付けられていない。
28
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書A
(規定)
RELAX NGによる完全な構文
名前空間名http://www.w3.org/2001/XMLSchema-datatypesはW3C XML SchemaPart 2のデータ型及びファ
セットを参照する。
<grammar ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">
<start>
<element name="rules">
<interleave>
<group>
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<ref name="trigger"/>
</zeroOrMore>
<choice>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
<group>
<attribute name="startMode">
<oneOrMore>
<data type="NCName"/>
</oneOrMore>
</attribute>
<oneOrMore>
<ref name="mode"/>
</oneOrMore>
</group>
</choice>
</group>
<ref name="foreign"/>
</interleave>
29
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</element>
</start>
<define name="trigger">
<element name="trigger">
<interleave>
<group>
<attribute name="ns">
<data type="string"/>
</attribute>
<attribute name="nameList">
<list>
<oneOrMore>
<data type="NCName"/>
</oneOrMore>
</list>
</attribute>
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
<define name="mode">
<element name="mode">
<interleave>
<group>
<attribute name="name">
<data type="NCName"/>
</attribute>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
<define name="includedMode">
30
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<element name="mode">
<interleave>
<group>
<optional>
<attribute name="name">
<data type="NCName"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
<define name="rule">
<choice>
<element name="namespace">
<interleave>
<group>
<attribute name="ns">
<data type="string"/>
</attribute>
<optional>
<attribute name="wildCard">
<data type="string">
<param name="maxLength">1</param>
</data>
</attribute>
</optional>
<ref name="ruleModel"/>
</group>
<ref name="foreign"/>
</interleave>
</element>
<element name="anyNamespace">
31
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<interleave>
<ref name="ruleModel"/>
<ref name="foreign"/>
</interleave>
</element>
</choice>
</define>
<define name="ruleModel">
<optional>
<attribute name="match">
<ref name="elementsOrAttributes"/>
</attribute>
</optional>
<ref name="actions"/>
</define>
<define name="elementsOrAttributes">
<list>
<choice>
<group>
<value>elements</value>
<value>attributes</value>
</group>
<group>
<value>attributes</value>
<value>elements</value>
</group>
<value>elements</value>
<value>attributes</value>
</choice>
</list>
</define>
<define name="actions">
<choice>
<ref name="cancelAction"/>
<group>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
<choice>
<ref name="noResultAction"/>
32
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<ref name="resultAction"/>
</choice>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
</group>
</choice>
</define>
<define name="cancelAction">
<element name="cancelNestedActions">
<ref name="foreign"/>
</element>
</define>
<define name="noResultAction">
<choice>
<element name="validate">
<interleave>
<group>
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<choice>
<ref name="message"/>
<ref name="option"/>
</choice>
</zeroOrMore>
<ref name="schema"/>
<ref name="modeUsage"/>
</group>
<ref name="foreign"/>
</interleave>
</element>
<element>
<choice>
<name>allow</name>
<name>reject</name>
</choice>
<interleave>
<group>
33
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</group>
<ref name="foreign"/>
</interleave>
</element>
</choice>
</define>
<define name="schema">
<choice>
<attribute name="schema">
<data type="anyURI"/>
</attribute>
<element name="schema">
<choice>
<text/>
<ref name="foreignElement"/>
</choice>
<zeroOrMore>
<ref name="foreignAttribute"/>
</zeroOrMore>
</element>
</choice>
</define>
<define name="message">
<choice>
<attribute name="message"/>
<element name="message">
<group>
<text/>
<zeroOrMore>
<ref name="xmlAttribute"/>
</zeroOrMore>
</group>
<zeroOrMore>
<ref name="nonXMLForeignAttribute"/>
</zeroOrMore>
</element>
34
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</choice>
</define>
<define name="resultAction">
<element>
<choice>
<name>attach</name>
<name>attachPlaceholder</name>
<name>unwrap</name>
</choice>
<interleave>
<group>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
<define name="option">
<element name="option">
<interleave>
<group>
<attribute name="name">
<data type="anyURI"/>
</attribute>
<optional>
<attribute name="arg"/>
</optional>
<optional>
<attribute name="mustSupport">
<data type="boolean"/>
</attribute>
</optional>
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
35
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<define name="modeUsage">
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
<zeroOrMore>
<element name="context">
<interleave>
<group>
<attribute name="path">
<ref name="path"/>
</attribute>
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
</group>
<ref name="foreign"/>
</interleave>
</element>
</zeroOrMore>
</define>
<define name="nestedMode">
<element name="mode">
<interleave>
<group>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
36
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</group>
<ref name="foreign"/>
</interleave>
</element>
</define>
<define name="schemaType">
<attribute name="schemaType">
<ref name="mediaType"/>
</attribute>
</define>
<define name="mediaType">
<data type="string">
<param
name="pattern">\s*[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*/[0-9A-Za-z!#$%&
amp;'\*\+\-\.\^̲̀\{\|\}~]*\s*</param>
</data>
</define>
<define name="path">
<data type="string">
<param
name="pattern">\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*(\|\s*(/\s*)?\i\c*(\s*/\s*\
i\c*)*\s*)*</param>
</data>
</define>
<define name="foreignElement">
<element>
<anyName>
<except>
<nsName/>
</except>
</anyName>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
37
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</mixed>
</element>
</define>
<define name="anyElement">
<element>
<anyName/>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="foreignAttribute">
<attribute>
<anyName>
<except>
<nsName/>
<nsName ns=""/>
</except>
</anyName>
</attribute>
</define>
<define name="nonXMLForeignAttribute">
<attribute>
<anyName>
<except>
<nsName ns="http://www.w3.org/XML/1998/namespace"/>
<nsName/>
<nsName ns=""/>
</except>
</anyName>
</attribute>
</define>
<define name="xmlAttribute">
38
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<choice>
<attribute name="xml:lang"/>
<attribute name="xml:space">
<choice>
<value>default</value>
<value>preserve</value>
</choice>
</attribute>
<attribute name="xml:base">
<data type="anyURI"/>
</attribute>
</choice>
</define>
<define name="foreign">
<zeroOrMore>
<ref name="foreignAttribute"/>
</zeroOrMore>
<zeroOrMore>
<ref name="foreignElement"/>
</zeroOrMore>
</define>
</grammar>
39
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書B
(規定)
RELAX NGによる単純な構文
<grammar ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">
<start>
<element name="rules">
<attribute name="startMode">
<data type="NCName"/>
</attribute>
<zeroOrMore>
<ref name="trigger"/>
</zeroOrMore>
<oneOrMore>
<ref name="mode"/>
</oneOrMore>
</element>
</start>
<define name="trigger">
<element name="trigger">
<attribute name="ns">
<data type="string"/>
</attribute>
<attribute name="nameList">
<list>
<oneOrMore>
<data type="NCName"/>
</oneOrMore>
</list>
</attribute>
</element>
</define>
<define name="mode">
<element name="mode">
<attribute name="name">
40
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<data type="NCName"/>
</attribute>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="rule">
<choice>
<element name="namespace">
<attribute name="ns">
<data type="string"/>
</attribute>
<attribute name="wildCard">
<data type="string">
<param name="maxLength">1</param>
</data>
</attribute>
<ref name="ruleModel"/>
</element>
<element name="anyNamespace">
<ref name="ruleModel"/>
</element>
</choice>
</define>
<define name="ruleModel">
<attribute name="match">
<ref name="elementsOrAttributes"/>
</attribute>
<ref name="actions"/>
</define>
<define name="elementsOrAttributes">
<choice>
<value>elements</value>
<value>attributes</value>
</choice>
</define>
<define name="actions">
<zeroOrMore>
<ref name="noResultAction"/>
41
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</zeroOrMore>
<choice>
<ref name="noResultAction"/>
<ref name="resultAction"/>
</choice>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
</define>
<define name="noResultAction">
<element name="validate">
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<choice>
<ref name="message"/>
<ref name="option"/>
</choice>
</zeroOrMore>
<ref name="schema"/>
<ref name="modeUsage"/>
</element>
</define>
<define name="schema">
<choice>
<attribute name="schema">
<data type="anyURI"/>
</attribute>
<element name="schema">
<choice>
<text/>
<ref name="foreignElement"/>
</choice>
</element>
</choice>
</define>
<define name="message">
<element name="message">
<interleave>
42
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<text/>
<optional>
<attribute name="xml:lang"/>
</optional>
</interleave>
</element>
</define>
<define name="resultAction">
<element>
<choice>
<name>attach</name>
<name>attachPlaceholder</name>
<name>unwrap</name>
</choice>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</element>
</define>
<define name="option">
<element name="option">
<attribute name="name">
<data type="anyURI"/>
</attribute>
<optional>
<attribute name="arg"/>
</optional>
<attribute name="mustSupport">
<data type="boolean"/>
</attribute>
</element>
</define>
<define name="modeUsage">
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<zeroOrMore>
<element name="context">
<attribute name="path">
43
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<ref name="path"/>
</attribute>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
</element>
</zeroOrMore>
</define>
<define name="schemaType">
<attribute name="schemaType">
<ref name="mediaType"/>
</attribute>
</define>
<define name="mediaType">
<data type="string">
<param
name="pattern">\s*[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*/[0-9A-Za-z!#$%&
amp;'\*\+\-\.\^̲̀\{\|\}~]*\s*</param>
</data>
</define>
<define name="path">
<data type="string">
<param
name="pattern">\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*(\|\s*(/\s*)?\i\c*(\s*/\s*\
i\c*)*\s*)*</param>
</data>
</define>
<define name="foreignElement">
<element>
<anyName>
<except>
<nsName/>
</except>
</anyName>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
44
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="anyElement">
<element>
<anyName/>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
</grammar>
45
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書C
(参考)
NVDLスクリプト及びRELAX NGスキーマによる完全な構文
C.1 一般事項
6.4.2で示したとおり,単純化のときある属性及び要素は削除される。6.2にあるRELAX NGスキーマは
これらの属性及び要素を明示的に許容しているため,理解することは容易ではない。ここでは,これらの
属性及び要素を許容しないRELAX NGスキーマを提示し,次にこれらを許容するためのNVDLスクリプ
トを提示する。
C.2 RELAX NGスキーマ
<grammar
xmlns:nvdl="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="rules">
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<ref name="trigger"/>
</zeroOrMore>
<choice>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
<group>
<attribute name="startMode">
<data type="NCName"/>
</attribute>
<oneOrMore>
<ref name="mode"/>
</oneOrMore>
</group>
</choice>
</element>
46
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</start>
<define name="trigger">
<element name="trigger">
<attribute name="ns">
<data type="string"/>
</attribute>
<attribute name="nameList">
<list>
<oneOrMore>
<data type="NCName"/>
</oneOrMore>
</list>
</attribute>
</element>
</define>
<define name="mode">
<element name="mode">
<attribute name="name">
<data type="NCName"/>
</attribute>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="includedMode">
<element name="mode">
<optional>
<attribute name="name">
<data type="NCName"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
47
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</zeroOrMore>
</element>
</define>
<define name="rule">
<choice>
<element name="namespace">
<attribute name="ns">
<data type="string"/>
</attribute>
<optional>
<attribute name="wildCard">
<data type="string">
<param name="maxLength">1</param>
</data>
</attribute>
</optional>
<ref name="ruleModel"/>
</element>
<element name="anyNamespace">
<ref name="ruleModel"/>
</element>
</choice>
</define>
<define name="ruleModel">
<optional>
<attribute name="match">
<ref name="elementsOrAttributes"/>
</attribute>
</optional>
<ref name="actions"/>
</define>
<define name="elementsOrAttributes">
<list>
<choice>
<group>
<value>elements</value>
<value>attributes</value>
</group>
<group>
<value>attributes</value>
48
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<value>elements</value>
</group>
<value>elements</value>
<value>attributes</value>
</choice>
</list>
</define>
<define name="actions">
<choice>
<ref name="cancelAction"/>
<group>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
<choice>
<ref name="noResultAction"/>
<ref name="resultAction"/>
</choice>
<zeroOrMore>
<ref name="noResultAction"/>
</zeroOrMore>
</group>
</choice>
</define>
<define name="cancelAction">
<element name="cancelNestedActions">
<empty/>
</element>
</define>
<define name="noResultAction">
<choice>
<element name="validate">
<optional>
<ref name="schemaType"/>
</optional>
<zeroOrMore>
<choice>
<ref name="message"/>
<ref name="option"/>
</choice>
49
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</zeroOrMore>
<ref name="schema"/>
<ref name="modeUsage"/>
</element>
<element>
<choice>
<name>allow</name>
<name>reject</name>
</choice>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</element>
</choice>
</define>
<define name="schema">
<choice>
<attribute name="schema">
<data type="anyURI"/>
</attribute>
<element name="schema">
<choice>
<text/>
<ref name="foreignElement"/>
</choice>
</element>
</choice>
</define>
<define name="message">
<choice>
<attribute name="message"/>
<element name="message">
<interleave>
<text/>
<optional>
<attribute name="xml:lang"/>
</optional>
</interleave>
</element>
50
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</choice>
</define>
<define name="resultAction">
<element>
<choice>
<name>attach</name>
<name>attachPlaceholder</name>
<name>unwrap</name>
</choice>
<zeroOrMore>
<ref name="message"/>
</zeroOrMore>
<ref name="modeUsage"/>
</element>
</define>
<define name="option">
<element name="option">
<attribute name="name">
<data type="anyURI"/>
</attribute>
<optional>
<attribute name="arg"/>
</optional>
<optional>
<attribute name="mustSupport">
<data type="boolean"/>
</attribute>
</optional>
</element>
</define>
<define name="modeUsage">
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
<zeroOrMore>
51
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<element name="context">
<attribute name="path">
<ref name="path"/>
</attribute>
<optional>
<choice>
<attribute name="useMode">
<data type="NCName"/>
</attribute>
<ref name="nestedMode"/>
</choice>
</optional>
</element>
</zeroOrMore>
</define>
<define name="nestedMode">
<element name="mode">
<zeroOrMore>
<ref name="includedMode"/>
</zeroOrMore>
<zeroOrMore>
<ref name="rule"/>
</zeroOrMore>
</element>
</define>
<define name="schemaType">
<attribute name="schemaType">
<ref name="mediaType"/>
</attribute>
</define>
<define name="mediaType">
<a:documentation>5.1 of RFC 2045 allows <any (US-ASCII) CHAR except
SPACE, CTLs,
or tspecials>, where
tspecials := "(" / ")" / "<" / ">" / "@" /
"," / ";" / ":" / "\" / <">
"/" / "[" / "]" / "?" / "="
</a:documentation>
<data type="string">
52
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<param
name="pattern">\s*[0-9A-Za-z!#$%&'\*\+\-\.\^̲̀\{\|\}~]*/[0-9A-Za-z!#$%&
amp;'\*\+\-\.\^̲̀\{\|\}~]*\s*</param>
</data>
</define>
<define name="path">
<data type="string">
<param
name="pattern">\s*(/\s*)?\i\c*(\s*/\s*\i\c*)*\s*(\|\s*(/\s*)?\i\c*(\s*/\s*\
i\c*)*\s*)*</param>
</data>
</define>
<define name="foreignElement">
<element>
<anyName>
<except>
<nsName/>
</except>
</anyName>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="anyElement">
<element>
<anyName/>
<zeroOrMore>
<attribute>
<anyName/>
</attribute>
</zeroOrMore>
<mixed>
53
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<zeroOrMore>
<ref name="anyElement"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="foreignAttribute">
<attribute>
<anyName>
<except>
<nsName/>
<nsName ns=""/>
</except>
</anyName>
</attribute>
</define>
<define name="foreign">
<zeroOrMore>
<ref name="foreignAttribute"/>
</zeroOrMore>
<zeroOrMore>
<ref name="foreignElement"/>
</zeroOrMore>
</define>
</grammar>
C.3 NVDLスクリプト
<rules startMode="root"
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0">
<mode name="root">
<namespace ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0">
<validate schema="nvdl.rng">
<mode>
<namespace
ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" match="attributes">
<reject/>
</namespace>
<!-- If we do not allow attribute sections for null URIs, we
do not need
54
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
the following <namespace> -->
<namespace ns="" match="attributes">
<attach/>
</namespace>
<anyNamespace match="elements attributes">
<!-- This action allows any foreign elements and attributes
silently. -->
<allow>
<mode>
<anyNamespace>
<attach/>
</anyNamespace>
</mode>
</allow>
</anyNamespace>
</mode>
<context path="schema">
<mode>
<namespace
ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
match="attributes">
<reject/>
</namespace>
<namespace ns="" match="attributes">
<attach/>
</namespace>
<anyNamespace match="attributes">
<allow/>
</anyNamespace>
<anyNamespace match="elements">
<!-- This action allows the entire subtree to be validated
against nvdl.rnc. -->
<attach>
<mode>
<anyNamespace>
<attach/>
</anyNamespace>
</mode>
</attach>
55
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</anyNamespace>
<!-- If we do not allow attribute sections for null URIs,
we do not need
the following <namespace> -->
</mode>
</context>
<context path="message">
<mode>
<namespace
ns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0" match="attributes">
<reject/>
</namespace>
<!-- If we do not allow attribute sections for null URIs,
we do not need
the following <namespace> -->
<namespace ns="" match="attributes">
<attach/>
</namespace>
<namespace ns="http://www.w3.org/XML/1998/namespace"
match="attributes">
<!-- This action allows xml:* to be validated against
ndvl.rnc. -->
<attach/>
</namespace>
<anyNamespace match="attributes">
<allow/>
</anyNamespace>
<anyNamespace match="elements">
<reject/>
</anyNamespace>
</mode>
</context>
</validate>
</namespace>
</mode>
</rules>
56
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
附属書D
(参考)
例
D.1 一般事項
この附属書は,NVDLの二つの使用例を示す。1番目のNVDLスクリプトは,XHTMLの中に埋め込ま
れたRDFを扱い,2番目のスクリプトはXHTML 2.0とXFormsとの組合せを扱う。どちらの例についても,
NVDLスクリプトがどう単純化され,XML文書の検証がどう委譲されるかを具体的に示す。
D.2 XHTMLの中に埋め込まれたRDF
D.2.1 単純化
次のNVDLスクリプトは,XHTMLのためのスキーマとRDFのためのスキーマとを組み合わせる。
<rules xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0">
<namespace ns="http://www.w3.org/1999/xhtml">
<validate schema="xhtml.rng">
<mode>
<namespace ns="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<validate schema="rdfxml.rng">
<mode>
<anyNamespace>
<attach/>
</anyNamespace>
</mode>
</validate>
</namespace>
</mode>
</validate>
</namespace>
</rules>
このNVDLスクリプトは,次のとおりに単純化される。
<rules
startMode="root"
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0">
<mode name="root">
<namespace ns="http://www.w3.org/1999/xhtml"
match="elements" wildCard="*">
57
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<validate schema="xhtml.rng" useMode="body"/>
</namespace>
<anyNamespace match="elements">
<validate useMode="root">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes"><attach
useMode="root"/></anyNamespace>
</mode>
<mode name="body">
<namespace ns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
match="elements" wildCard="*">
<validate schema="rdfxml.rng" useMode="inRDF"/>
</namespace>
<anyNamespace match="elements">
<validate useMode="root">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes">
<attach useMode="root"/>
</anyNamespace>
</mode>
<mode name="inRDF">
<anyNamespace match="elements">
<attach useMode="inRDF"/>
</anyNamespace>
<anyNamespace match="attributes"><attach
useMode="inRDF"/></anyNamespace>
</mode>
</rules>
58
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
D.2.2 検証委譲
D.2.2.1 一般事項
次のXML文書を考える。
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Some Page</title>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description
rdf:about="http://www.w3.org/"
dc:title="W3C
Homepage"/>
</rdf:RDF>
</head>
<body>
</body>
</html>
D.2.2.2 段階1
二つの要素セクション,すなわち,xhtml及びrdfが,この文書から作成される。xhtmlは,名前空間
"http://www.w3.org/1999/xhtml"に対応し,rdfは名前空間"http://www.w3.org/1999/02/22-rdf-syntax-ns#"に対応
する。rdfのための要素スロットノードはesnRdfであり,xhtmlの中に現れる。rdfは二つの属性スロット
ノードasnRdf及びasnDcをもつ。asnRdfに対応する属性セクションは,@rdfであり,名前空間
"http://www.w3.org/1999/xhtml" に対応する。asnDcに対応する属性セクションは,@dcであり,名前空間
"http://purl.org/dc/elements/1.1"に対応する。
xhtml [esnRdf]
rdf [asnRdf, asnDc]
@rdf
@dc
D.2.2.3 段階2
解釈は一つだけ存在する。
(validate against xhtml.rng, body)
(validate against rdfxml.rng, inRDF)
(attach, inRDF)
(attach, inRDF)
59
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
D.2.2.4 段階3
xhtml ← [esnRdf, ()] が生成される。その値を,次に示す。
<{http://www.w3.org/1999/xhtml}html [cx1]>
<{http://www.w3.org/1999/xhtml}head [cx1]>
<{http://www.w3.org/1999/xhtml}title [cx1]>Some Page</>
</>
<{http://www.w3.org/1999/xhtml}body [cx1]>
</>
</>
rdf ← [asnRdf, @rdf] ← [asnDc, @dc] が生成される。その値を,次に示す。
<{http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF [cx1]>
<{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description [cx1]
{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about="http://www.w3.org/"
{http://purl.org/dc/elements/1.1/}title="W3C Homepage">
</>
</>
ここで,cx1はrdfを"http://www.w3.org/1999/02/22-rdf-syntax-ns#"に,dcを"http://purl.org/dc/elements/1.1/"
に対応付ける文脈である。
D.2.2.5 段階4
PlanElemは,二つの対をもつ。
a) (xhtml.rngに照らしたvalidate, xhtml ← [esnRdf, ()])
b) (rdfxml.rngに照らしたvalidate, rdf ← [asnRdf, @rdf] ← [asnDc, @dc])
PlanAttは空である。
D.2.2.6 段階5
RELAX NG検証器は,xhtml ← [esnRdf, ()]をxhtml.rngに照らして検証し,rdf ← [asnRdf, @rdf] ←
[asnDc, @dc]をrdfxml.rngに照らして検証する。
D.3 XHTML 2.0及びXForms
D.3.1 単純化
次のNVDLスクリプトは,XHTML 2.0のスキーマ及びXFormsのスキーマを組み合わせる。
<rules
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">
<namespace ns="http://www.w3.org/2002/06/xhtml2">
<a:documentation xml:lang="en">We begin with XHTML2 sections.
</a:documentation>
60
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<validate schema="xhtml2.rng">
<a:documentation xml:lang="en">This action invokes the XHTML2
schema.</a:documentation>
<mode>
<namespace ns="http://www.w3.org/2002/xforms">
<a:documentation xml:lang="en">XForms in
XHTML2</a:documentation>
<validate schema="xforms.rng">
<a:documentation xml:lang="en">The first action invokes the
XForms schema for XForms in XHTML2.</a:documentation>
<mode>
<namespace ns="http://www.w3.org/2002/xforms">
<a:documentation xml:lang="en">
XForms in ... in *XForm* in XHTML2
</a:documentation>
<attach message="Attaching a descendant XForms
section."/>
</namespace>
<namespace ns="http://www.w3.org/2002/06/xhtml2">
<a:documentation xml:lang="en">
XHTML2 in ... in *XForm* in XHTML2
</a:documentation>
<unwrap message="Skipping a descedant XHTML2
section."/>
</namespace>
</mode>
</validate>
<unwrap>
<a:documentation xml:lang="en">
This action skip XForms in XHTML2.
</a:documentation>
<mode>
<namespace ns="http://www.w3.org/2002/xforms">
<a:documentation xml:lang="en">
XForms in ... in XForms in *XHTML2*
</a:documentation>
<unwrap message="Skipping a descendant XForms
section."/>
</namespace>
<namespace ns="http://www.w3.org/2002/06/xhtml2">
61
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
<a:documentation xml:lang="en">
XHTML2 in ... in XForms in *XHTML2*
</a:documentation>
<attach message="Attaching a descendant XHTML2
section."/>
</namespace>
</mode>
</unwrap>
</namespace>
</mode>
</validate>
</namespace>
</rules>
このNVDLスクリプトは,次のとおりに単純化される。
<rules startMode="root"
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0">
<mode name="root">
<namespace ns="http://www.w3.org/2002/06/xhtml2" match="elements"
wildCard="*">
<validate schema="xhtml2.rng" useMode="InXhtml2"/>
</namespace>
<anyNamespace match="elements">
<validate useMode="root">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes">
<attach useMode="root"/>
</anyNamespace>
</mode>
<mode name="InXhtml2">
<namespace ns="http://www.w3.org/2002/xforms" match="elements"
wildCard="*">
<validate schema="xforms.rng" useMode="InXformsInXhtml2"/>
<unwrap useMode="SkippingXFormsInXhtml2"/>
62
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</namespace>
<anyNamespace match="elements">
<validate useMode="InXhtml2">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes">
<attach useMode="InXhtml2"/>
</anyNamespace>
</mode>
<mode name="InXformsInXhtml2">
<namespace ns="http://www.w3.org/2002/xforms" match="elements"
wildCard="*">
<attach useMode="InXformsInXhtml2">
<message>Attaching a descendant XForms section.</message>
</attach>
</namespace>
<namespace ns="http://www.w3.org/2002/06/xhtml2" match="elements"
wildCard="*">
<unwrap useMode="InXformsInXhtml2">
<message>Skipping a descendant XHTML2 section.</message>
</unwrap>
</namespace>
<anyNamespace match="elements">
<validate useMode="InXformsInXhtml2">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes">
<attach/>
</anyNamespace>
</mode>
<mode name="SkippingXFormsInXhtml2">
<namespace ns="http://www.w3.org/2002/xforms" match="elements"
63
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
wildCard="*">
<unwrap useMode="SkippingXFormsInXhtml2">
<message>Skipping a descendant XForms section.</message>
</unwrap>
</namespace>
<namespace ns="http://www.w3.org/2002/06/xhtml2" match="elements"
wildCard="*">
<attach useMode="SkippingXFormsInXhtml2">
<message>Attaching a descendant XHTML2 section.</message>
</attach>
</namespace>
<anyNamespace match="elements">
<validate useMode="SkippingXFormsInXhtml2">
<schema>
<reject
xmlns="http://purl.oclc.org/dsdl/nvdl/ns/predefinedSchema/1.0"/>
</schema>
</validate>
</anyNamespace>
<anyNamespace match="attributes">
<attach/>
</anyNamespace>
</mode>
</rules>
D.3.2 検証委譲
D.3.2.1 一般事項
次のXML文書を考える。
<?xml version="1.0"?>
<table
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns="http://www.w3.org/2002/06/xhtml2">
<xforms:repeat id="lineset" nodeset="/my:lines/my:line">
<tr>
<td>
<xforms:input ref="my:price">
<p>
<xforms:label>Line Item</xforms:label>
</p>
</xforms:input>
64
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
</td>
</tr>
</xforms:repeat>
</table>
D.3.2.2 段階1
六つの要素セクションがこの文書から作成される。そのうちの三つ(xhtml1,xhtml2,及びxhtml3と呼
ぶ。)は,XHTML 2.0の名前空間に属し,残り(xforms1,xforms2,及びxforms3と呼ぶ。)は,XFormsの
名前空間に属する。xhtml2及びxthml3のための要素スロットノードは,それぞれesnXhtml2及びesnXhtml3
であり,それぞれxforms1及びxforms2で出現する。xforms1,xforms2,及びxforms3のための要素スロッ
トノードはそれぞれesnXforms1,esnXforms2,及びesnXforms3であり,それぞれxhtml1,xhtml2,及び
xhtml3で出現する。
xhtml1 [esnXforms1]
xforms1 [esnXhtml2]
xhtml2 [esnXforms2]
xforms2 [esnXhtml3]
xhtml3 [esnXforms3]
xforms3
D.3.2.3 段階2
二つの解釈が存在する。
(validate against xhtml2.rng, InXhtml2)
(validate against xforms.rng, InXformsInXhtml2)
(unwrap, InXformsInXhtml2)
(attach, InXformsInXhtml2)
(unwrap, InXformsInXhtml2)
(attach, InXformsInXhtml2)
及び
(validate against xhtml2.rng, InXhtml2)
(unwrap, SkippingXFormsinXhtml2)
(attach, SkippingXFormsinXhtml2)
(unwrap, SkippingXFormsinXhtml2)
(attach, SkippingXFormsinXhtml2)
(unwrap, SkippingXFormsinXhtml2)
D.3.2.4 段階3
第一の解釈に対して,xhtml1 ← [esnXforms1, ()]及びxforms1 ←[esnXhtml2, (xforms2 ← [esnXhtml3,
65
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
xforms3]]が作成される。
それらは
<{http://www.w3.org/2002/06/xhtml2}table [cx1]>
</>
及び
<{http://www.w3.org/2002/xforms}repeat [cx1]
{}id="lineset" nodeset="/my:lines/my:line">
<{http://www.w3.org/2002/xforms}input [cx1]
{}ref="my:price">
<{http://www.w3.org/2002/xforms}label [cx1]>Line Item</>
</>
</>
である。ここで,cx1はxformsを"http://www.w3.org/2002/xforms"に対応付け,空の接頭辞を
"http://www.w3.org/2002/06/xhtml2"に対応付ける文脈である。
第二の解釈に対して,xhtml1 ← [esnXforms1, xhtml2 ← [esnXforms2, xhtml3]]が作成される。
<{http://www.w3.org/2002/06/xhtml2}table [cx1]>
<{http://www.w3.org/2002/06/xhtml2}tr [cx1]>
<{http://www.w3.org/2002/06/xhtml2}td [cx1]>
<{http://www.w3.org/2002/06/xhtml2}p [cx1]>
</>
</>
</>
</>
ここで,cx1は最初の解釈のときと同一である。
空白は,読みやすさのために調整した。
D.3.2.5 段階4
PlanElemは,二つの対をもつ。
(xforms.rngに照らしたvalidate, xforms1 ← [esnXhtml2, xforms2 ←[esnXhtml3, xforms3]])
(xhtml2.rngに照らしたvalidate, xhtml1 ← [esnXforms1, xhtml2 ←[esnXforms2, xhtml3]])
Xは三つ組(xhtml1, validate against xhtml2.rng, xhtml1 ← [esnXforms1, ()])をもつ。しかし,xhtml1 ←
[esnXforms1, xhtml2 ← [esnXforms2, xhtml3]]のほうが大きいので,これがPlanElemの作成に用いられるこ
とはない。
PlanAttは,空である。
D.3.2.6 段階5
RELAX NG検証器は,xforms1 ← [esnXhtml2, xforms2 ← [esnXhtml3,xforms3]]をxforms.rngに照らして
検証し,xhtml1 ← [esnXforms1, xhtml2← [esnXforms2, xhtml3]]をxhtml2.rngに照らして検証する。
66
X 4177-4:2008 ISO/IEC 19757-4:2006
2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。
参考文献
[1] Modular Namespaces, James Clark, 2003年01月31日,
http://www.thaiopensource.com/relaxng/mns.htmlから入手可能である。
[2] Namespace Routing Language, James Clark, 2003年6月13日,
http://www.thaiopensource.com/relaxng/nrl.htmlから入手可能である。
[3] Namespace Switchboard, Rick Jelliffe, 2003年4月2日,
http://www.topologi.com/resources/NamespaceSwitchboard.htmlから入手可能である。
[4] 標準情報 TR X 0044:2001 XML正規言語記述 RELAX 名前空間
[5] ISO/IEC DTR 22250-2:2002 RELAX Namespace,
[6] The DocBook Document Type, OASIS Committee Specification 4.2, 2002年7月16日,
http://www.oasis-open.org/docbook/specs/cs-docbook-docbook-4.2.htmlから入手可能である。
[7] JIS X 4178:2007 XMLフォーム言語(XForms)1.0
注記 W3C勧告,XForms 1.0, 2003年10月14日が,この規格に一致している。このW3C勧
告は,http://www.w3.org/TR/2003/REC-xforms-20031014/から入手可能である。
[8] XHTML 2.0,W3C草稿,2005年5月27日,http://www.w3.org/TR/2005/WD-xhtml2-20050527か
ら入手可能である。
[9] W3C勧告,XML Inclusions(XInclude) Version 1.0, 2004年12月20日,
http://www.w3.org/TR/2004/REC-xinclude-20041220/から入手可能である。