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

X 4177-4:2008 ISO/IEC 19757-4:2006

(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) 

まえがき

この規格は,工業標準化法第 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


 

   

日本工業規格

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 を基に,技術的内容及び対応国際規格

の構成を変更することなく作成した日本工業規格である。

導入 

JIS X 4177 規格群は,Document Schema Definition Languages (DSDL)の集まりを規定する。DSDL は,

XML1.0(拡張可能なマーク付け言語)文書に適用される一つ又はそれ以上の検証プロセスを規定する。

DSDL においては幾つもの検証技術が標準化され,既に規格の形で提供されているもの及び産業界から提

供されているものを補完する。

JIS X 4177 規格群の主な目的は,検証に関する複数の技術を集めて一つの拡張可能な枠組みとし,技術

を順番又は並列に適用して一つ又は複数の検証結果を得ることである。DSDL は,現時点では設計も仕様

策定も行われていない検証技術も許容するように設計されている。

この規格の目的は二つある。一つは,複数のマーク付け語い(彙)を記述するスキーマ群を相互に連携

させることである。もう一つは,これらのスキーマ群をそれぞれ異なるスキーマ言語で記述可能にするこ

とである。これらの目的のため,この規格は,名前空間に基づく検証委譲言語 NVDL を規定する。

この規格の構成を,次に示す。箇条 は,データモデルを示し,この規格の以降の部分で用いる XML

文書の抽象化を示す。箇条 は,NVDL スクリプトの完全な構文及び単純な構文を示し,完全な構文から

単純な構文への変換を示す。箇条 は,NVDL データモデルに関する基本操作を与える。NVDL における

意味を定義するとき,これらの基本操作を用いる。箇条 は,単純な構文を用いる正しい NVDL スクリプ

トの意味を示す。その意味は,与えられた文書中の要素及び属性が複数の検証器にどのように検証委譲さ

れるかを定め,各検証器がどのスキーマを利用するかを定める。箇条 は,NVDL 検証委譲器に関する適

合性要件を示す。

附属書 及び附属書 は,RELAX NG を利用した完全な構文及び単純な構文をそれぞ

れ定義する。

附属書 は,NVDL 及び RELAX NG を利用した完全な構文を定義する。最後に,附属書 D

は,NVDL の使用例を示す。

NVDL の起源は,標準情報 TR X 0044

[4]

である。

これは,

ISO/IEC JTC1 に Fast Track 手続によって ISO/IEC 

DTR 22250-2

[5]

として SC34 専門委員会から提出された。

適用範囲 

この規格は,名前空間に基づく検証委譲言語(NVDL)について規定する。NVDL スクリプトが制御するの



X 4177-4:2008 ISO/IEC 19757-4:2006

   

は,与えられた 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 に基づき,一致していることを示す。

引用規格 

次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの

引用規格のうちで,西暦年を付記してあるものは,記載の年の版を適用し,その後の改正版(追補を含む。

には適用しない。西暦年の付記がない引用規格は,その最新版(追補を含む。

)を適用する。

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

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

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

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 から入手可能である。

用語及び定義 

この規格で用いる主な用語及び定義は,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) 

参照されるデータの性質を指定するための二つの部分からなる識別子。



X 4177-4:2008 ISO/IEC 19757-4:2006

   

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) 

スロットノードを子孫としてもたない要素。

注記  一つの検証候補中の幾つかの要素が,それぞれ別の名前空間に属してもよい。一つの検証候補

中の幾つかの属性が,それぞれ別の名前空間に属してもよい。

記法 

この規格では次の記法を用いて形式的な定義を与える。

a) < [..] >


5

X 4177-4:2008 ISO/IEC 19757-4:2006

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.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 に



X 4177-4:2008 ISO/IEC 19757-4:2006

   

属するのは,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

   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 は,

例 と同様とする。属性名は名前

空間名及び局所名によって置き換える。

<{http://www.example.com/one}foo [cx1]>

 <{http://www.example.com/one}foo1

[cx1]

     {}bar1="_"

{}bar2="_">

   text1

   <{http://www.example.com/two}foo11

[cx1]></>



X 4177-4:2008 ISO/IEC 19757-4:2006

   

 </>

 <{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.1 

一般事項 

NVDL は,完全な構文及び単純な構文をもつ。正しい NVDL スクリプトには,6.2 に規定される完全な

構文に従うことが要求される。一方,6.3 に規定される単純な構文は,NVDL の意味を規定する内部処理

のためだけに導入されたものであり,外部で用いられることはない。完全な構文の NVDL スクリプトは,

単純な構文の NVDL スクリプトに変形することができる。

6.2 

完全な構文 

完全な構文の NVDL スクリプトは,次に示す簡潔構文の RELAX NG スキーマに対して妥当な XML 文

書でなければならない。

附属書 では,同一のスキーマを 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

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

   

   (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

##

## 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 文書でなければならない。附属書 では,同一のスキーマを
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

   

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

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

   

タンスを構築する。

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

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

   

注記 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.1 

一般事項 

この箇条は,NVDL データモデルについての基本操作を導入する。これらの操作は,箇条 で NVDL の

意味を定義するときに用いる。

7.2 

要素セクション及び属性セクションの生成 

この操作は,XML インスタンスを要素セクション及び属性セクションに分解する。属性セクションは,

同じ名前空間に属する属性の空でない集合とする。要素セクションは,要素であって,それ自身及びすべ

ての子孫要素が一つの名前空間名に属するものとする。

分解は,次の規則によって行われる。

第一に,各要素 e と,e のいずれかの属性の名前空間名である n とに対し,それぞれ属性スロットノー

ドと属性セクションとを作る。属性セクションは,e の属性であって n に属するものすべてを含む。属性

スロットノードは,この属性セクションのためのスロットとする。次に,e の属性集合を,この属性スロ

ットノードを導入し,この属性セクション中の属性を取り去ることによって修正する。

第二に,ルートではない各要素 e に対し,e とその親要素とが異なる名前空間に属するときには,要素

スロットノードと要素セクションとを作る。要素セクションは,e によって表される。要素スロットノー


17

X 4177-4:2008 ISO/IEC 19757-4:2006

ドは,この要素セクションのためのスロットとする。次に,e の親要素の子要素列を,e をこの要素スロッ

トノードで置き換えることによって修正する。

例 1 5.2 の例 のデータモデルから,五つの要素セクションが作成される。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 の例 のデータモデルから作られる。

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

   

 <{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

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

   

次の 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

<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 の例 において,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

   

ができる。これは,esn を x で置き換えることによって行う。もし,二つのテキストノードが隣接すれば

(x が空の列であるときに限って起こり得る。

,これらを連結して単一のテキストノードにする。結果を,

e←[esn, x]で表す。

例 1  7.2 の例 において 4 番目の要素セクションを esn3 の地点で 3 番目の要素に付加すると,次の

ものが得られる。

<{http://www.example.com/two}foo2 [cx1]>

 text2

 <{http://www.example.com/one}foo21

[cx1]></>

 text3

 $esn4

</>

例 2  7.2 の例 において 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 の例 における 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 番目の属性セクションから作られた空要素を,次に示す。

<{http://purl.oclc.org/dsdl/nvdl/ns/instance/1.0}virtualElement


23

X 4177-4:2008 ISO/IEC 19757-4:2006

 {http://www.example.com/two}bar1="_"

 {http://www.example.com/two}bar2="_"></>

意味 

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

   

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 をアクション(I

A

(s))とモード(I

M

(s))との対に対

応付け,与えられたインスタンス中の属性セクション s’をアクション(I

A

(s’))に対応付ける関数であり,次

の条件を満たすものとする。

a)  要素セクション s がルートの要素セクションであるとき,I

M

(s) = mrt 及び elemTrans(I

M

(s), namespace(s),

I

A

(s))が成立する。ここで,mrt は NVDL スクリプトの開始モードとする。

b)  要素セクション s の要素親セクションが s’であれば,applies(I

A

(s’), path(s), I

M

(s))及び elemTrans(I

M

(s),

namespace(s), I

A

(s))が成立する。

c)  属性セクション a の要素親セクションが s’であれば,applies(I

A

(s’), path(a), I

M

(a))及び attTrans(I

M

(a),

namespace(a), I

A

(a))が成立する。

一つ の イ ン ス タ ン スに 複 数の 解釈 が 存在 す るこ と があ る 。 こ れ は , 一 つ の namespace 要 素 又 は

anyNamespace 要素が複数のアクションをもつときに起こる。すべての可能な解釈を構築する。

8.5 

段階 3:  セクションの結合 

この段階では,それぞれの解釈に対して,attach アクション及び unwrap アクションを実行してセクショ

ンを結合する。

二つの補助関数を用意する。

第一に,それぞれの解釈 I に対して,attBubble[I]は,与えられたインスタンス中の属性セクションを属

性集合に対応付ける関数であって,次の条件を満たすものとする。

a)  場合 1: I

A

(s)が attach アクションのとき


25

X 4177-4:2008 ISO/IEC 19757-4:2006

attBubble[I](s) = s

b)  場合 2:  それ以外のとき

attBubble[I](s) = {}

第二に,それぞれの解釈 I に対して,elemBubble[I]は,与えられたインスタンス中の要素セクションを

要素列に対応付ける関数であって,次の条件を満たすものとする。

a)  場合 1: I

A

(s)が validate アクションのとき

elemBubble[I](s) = ()

b)  場合 2: I

A

(s)が attach アクションのとき

elemBubble[I]=(X

m

)

ここで,

X

0

 = Y

n

,

X

1

 = X

0

  ← [esn

1

, elemBubble[I](s

1

)],

X

2

 = X

1

  ←[esn

2

, elemBubble[I](s

2

)], ...

X

m

 = X

m-1

← [esn

m

, elemBubble[I](s

m

)],

s

1

, s

2

, ..., s

m

は s の子要素セクションであり,

esn

1

,esn

2

, ..., esn

m

は s

1

, s

2

, ..., s

m

に対応する要素スロットノードであり,

Y

0

= s,

Y

1

= Y

0

  ← [asn

1

, attBubble[I](a

1

)],

Y

2

 = Y

1

  ← [asn

2

,attBubble[I](a

2

)], ...

Y

n

 = Y

n-1

← [asn

n

, attBubble[I](a

n

)],

a

1

, a

2

,..., a

n

は s の子属性セクションであり,

asn

1

, asn

2

, ..., asn

n

は a

1

, a

2

,..., a

n

のための属性スロットノードとする。

注記 1  要素セクションの数(m)と属性セクションの数(n)とは異なってもよい。

c)  場合 3: I

A

(s)が attachPlaceholder アクションのとき

elemBubble[I] ()= (createPlaceholder(s))

d)  場合 4: I

A

(s)が unwrap アクションのとき

elemBubble[I](s)=elemBubble[I](s

1

)+elemBubble[I](s

2

)+...+elemBubble[I](s

m

)  ここで s

1,

s

2

,...s

m

は,s の子

要素セクションとする。

セクションをどう結合するかを定義するため,各解釈 I に対し,部分的関数 syn[I]を導入する。この関数

は,

I

A

(s)が validate アクションのとき,与えられたインスタンス中の要素セクション s を要素に対応付ける。

この関数は,対応付けられたアクションが validate のときに限って定義されるので部分的関数になる。

a)  場合 1: I

A

(s)が validate アクションのとき

syn[I]=(X

m

)  ここで

X

0

 = Y

n

,

X

1

= X

0

  ←[esn

1

, elemBubble[I](s

1

)],

X

2

= X

1

←[esn

2

, elemBubble[I](s

2

)], ...

X

m

= X

m-1

←[esn

m

, elemBubble[I](s

m

)],

s

1

, s

2

,...s

m

は,s の子要素セクションであり,

esn

1

, esn

2

, ...esn

m

は,s

1

, s

2

, ..., s

m

のための要素スロットノードとする。ここで,

Y

0

 = s,


26 
X 4177-4:2008 ISO/IEC 19757-4:2006

   

Y

1

=Y

0

←[asn

1

, attBubble[I](a

1

)],

Y

2

=Y

1

←[asn

2

, attBubble[I](a

2

)], ...

Y

n

=Y

n-1

←[asn

n

, attBubble[I](a

n

)],

a

1

, a

2

, ...a

n

は s の子属性セクションであり,

asn

1

, asn

2

,asn

n

は a

1

,a

2

,...,a

n

のための属性スロットノードとする。

注記 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 = I

A

(s),かつ,e =syn[I](s)が成り立つこととする。

注記  同一の要素セクションに適用される同一の validate アクションをもつ検証候補は幾つか存在

するが,|e| >= |e’ |はその中から最大のものを選ぶ。

b)  PlanAtt={(v, virtualElement(s)) | s が属性セクション,v が validate アクション,ある解釈 I に対して v =

I

A

(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

注記 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 を導入することが推奨される。

適合性 

適合する 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

   

附属書 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

   </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

   

   <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

   <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

   

    <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

     <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

   

   </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

 <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

   

   </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!#$%&amp;'\*\+\-\.\^_`\{\|\}~]*/[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

     </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

   

   <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

附属書 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

   

   <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

   </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

   

   <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

    <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!#$%&amp;'\*\+\-\.\^_`\{\|\}~]*/[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

   

   <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

附属書 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

   

 </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

     </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

   

    <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

   </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

   

   </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

     <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 &lt;any (US-ASCII) CHAR except

SPACE, CTLs,

or tspecials&gt;, where

tspecials :=  "(" / ")" / "&lt;" / "&gt;" / "@" /

"," / ";" / ":" / "\" / &lt;"&gt;

"/" / "[" / "]" / "?" / "="

</a:documentation>

   <data

type="string">


52 
X 4177-4:2008 ISO/IEC 19757-4:2006

   

     <param

name="pattern">\s*[0-9A-Za-z!#$%&amp;'\*\+\-\.\^_`\{\|\}~]*/[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

   <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

   

      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

     </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

   

附属書 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

   <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

   

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  段階 

二つの要素セクション,すなわち,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  段階 

解釈は一つだけ存在する。

(validate against xhtml.rng, body)

     (validate

against

rdfxml.rng,

inRDF)

      (attach,

inRDF)

      (attach,

inRDF)


59

X 4177-4:2008 ISO/IEC 19757-4:2006

D.2.2.4  段階 

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  段階 

PlanElem は,二つの対をもつ。

a) (xhtml.rng に照らした validate, xhtml  ← [esnRdf, ()])

b) (rdfxml.rng に照らした validate, rdf  ← [asnRdf, @rdf] ← [asnDc, @dc])

PlanAtt は空である。

D.2.2.6  段階 

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

   

  <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

        <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

   

  </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

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

   

   </td>

  </tr>

 </xforms:repeat>

</table>

D.3.2.2  段階 

六つの要素セクションがこの文書から作成される。そのうちの三つ(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  段階 

二つの解釈が存在する。

(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  段階 

第一の解釈に対して,xhtml1  ← [esnXforms1, ()]及び xforms1  ←[esnXhtml2, (xforms2 ← [esnXhtml3,


65

X 4177-4:2008 ISO/IEC 19757-4:2006

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  段階 

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  段階 

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

   

参考文献

[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/から入手可能である。