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

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

(1) 

目  次

ページ

序文

1

附属書 C(規定)RELAX NG 簡潔構文

2

C.1

  導入

2

C.2

  構文

2

C.3

  字句構造

5

C.4

  宣言

5

C.5

  注釈

7

C.6

  適合性

9

C.7

  RELAX NG 簡潔構文のためのメディア型の登録テンプレート

10


X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

(2) 

まえがき

この追補は,2006 年に発行された ISO/IEC 19757-2:2003,Information technology−Document Schema

Definition Language (DSDL)

−Part 2: Regular-grammar-based validation−RELAX NG の Amendment 1 を翻訳し,

技術的内容及び追補の様式を変更することなく作成した日本工業規格の追補である。

この追補は,著作権法で保護対象となっている著作物である。


   

日本工業規格

JIS

 X

4177-2

:2007

(ISO/IEC 19757-2

:2003

/Amd.1

:2006

)

文書スキーマ定義言語(DSDL)−

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

RELAX NG

追補1)

Document Schema Definition Language (DSDL)

Part 2: Regular-grammar-based validation

−RELAX NG

(Amendment 1)

序文  この追補は,ISO/IEC 19757-2:2003,Information technology−Document Schema Definition Language

(DSDL)

−Part 2: Regular-grammar-based validation−RELAX NG に対して 2006 年に発行された Amendment 1

を翻訳し,技術的内容及び対応国際規格の構成を変更することなく作成した日本工業規格である。

なお,この規格で点線の下線を施してある参考事項は,対応国際規格にはない事項である。

注記  この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。

ISO/IEC 19757-2:2003

,Information technology−Document Schema Definition Language (DSDL)−

Part 2: Regular-grammar-based validation

−RELAX NG の Amendment 1:2006(IDT)

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

示す。

JIS X 4177-2:2005

を次のとおりに改正する。

2.

引用規格  の先頭に,次の規格を追加する。

ISO/IEC 10646

  Information technology−Universal Multiple-Octet Coded Character Set (UCS)

6.

完全な構文  の末尾に次の文を追加する。

別の簡潔構文を

附属書 に示す。

附属書 C(参考)文献を附属書 1(参考)文献とし,附属書 の前に,次に示す附属書 を追加する。


2

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

附属書 C 

規定)

RELAX NG

簡潔構文

C.1

導入

この附属書は,RELAX NG 用の簡潔な非 XML 構文を示す。

この簡潔構文の目的を次に示す。

a)

可読性を最大にする。

b) RELAX

NG

のすべての機能に対応する。重要な情報を失うことなく,スキーマを XML 構文から簡潔

構文及びその逆に,変換できなければならない。

c)

独立した変換に対応する。RELAX NG スキーマは,複数ファイルにわたってよい。各ファイルは,簡

潔構文で独立に表現できなければならない。各ファイルの表現は,他のファイルに依存してはならな

い。

C.2

構文

構文の概要を EBNF で次に示す。角括弧は,任意選択を示すために用いる。開始記号は,topLevel とす

る。

topLevel ::= 
decl* (pattern | grammarContent*) 
 
decl ::= 
("namespace" identifierOrKeyword "=" namespaceURILiteral) 
| ("default" "namespace" [identifierOrKeyword] "=" namespaceURILiteral) 
| ("datatypes" identifierOrKeyword "=" literal) 
 
pattern ::= 
("element" nameClass "{" pattern "}") 
| ("attribute" nameClass "{" pattern "}") 
| (pattern ("," pattern)+) 
| (pattern ("&" pattern)+) 
| (pattern ("|" pattern)+) 
| (pattern "?") 
| (pattern "*") 
| (pattern "+") 
| ("list" "{" pattern "}") 
| ("mixed" "{" pattern "}") 
| identifier 
| ("parent" identifier) 
| "empty" 
| "text" 
| ([datatypeName] datatypeValue) 
| (datatypeName ["{" param* "}"] [exceptPattern]) 
| "notAllowed" 
| ("external" anyURILiteral [inherit]) 
| ("grammar" { grammarContent* }) 


3

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

| ("(" pattern ")") 
 
param ::= 
identifierOrKeyword "=" literal 
 
exceptPattern ::= 
"-" pattern 
 
grammarContent ::= 
start 
| define 
| ("div" "{" grammarContent* "}") 
| ("include" anyURILiteral [inherit] ["{" includeContent* "}"]) 
 
includeContent ::= 
define 
| start 
| ("div" "{" includeContent* "}") 
 
start ::= 
"start" assignMethod pattern 
 
define ::= 
identifier assignMethod pattern 
 
assignMethod ::= 
"=" 
| "|=" 
| "&=" 
 
nameClass ::= 
name 
| (nsName [exceptNameClass]) 
| (anyName [exceptNameClass]) 
| (nameClass | nameClass) 
| ("(" nameClass ")") 
 
name ::= 
identifierOrKeyword 
| CName 
 
exceptNameClass ::= 
"-" nameClass 
 
datatypeName ::= 
CName 
| "string" 
| "token" 
 
datatypeValue ::= 
literal 


4

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

anyURILiteral ::= 
literal 
 
namespaceURILiteral ::= 
literal 
| "inherit" 
 
inherit ::= 
"inherit" "=" identifierOrKeyword 
 
identifierOrKeyword ::= 
identifier 
| keyword 
 
identifier ::= 
NCName 
| quotedIdentifier 
 
quotedIdentifier ::= 
"

\

" NCName

 
CName ::= 
NCName ":" NCName 
 
nsName ::= 
NCName ":*" 
 
anyName ::= 
"*" 
 
literal ::= 
literalSegment ("~" literalSegment)+ 
 
literalSegment ::= 
('"' (Char - ('"' | newline )* '"') 
| ("'" (Char - ("'" | newline)* "'") 
| ('"""' (['"']['"'] (Char - '"'))* '"""') 
| ("'''" (["'"]["'"] (Char - "'"))* "'''") 
 
keyword ::= 
"attribute" 
| "default" 
| "datatypes" 
| "div" 
| "element" 
| "empty" 
| "external" 
| "grammar" 
| "include" 
| "inherit" 
| "list" 
| "mixed"


5

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

| "namespace" 
| "notAllowed" 
| "parent" 
| "start" 
| "string" 
| "text" 
| "token"

NCName

は,W3C XML-Names に定義されている。Char は,JIS X 4159:2005 に定義されている。簡潔構

文のための形式的定義は,OASIS Committee Specification[3]に規定されている。

キーワードを識別子として使用するには,キーワードを

\

で引用しなければならない。要素名,属性名

又はデータ型パラメタとして使用されるキーワードを引用する必要はない。

リテラルの値は,それを構成する literalSegments の値を連結したものとする。literalSegment が終わるの

は,それを開始する区切り子と同じ区切り子が現れたときに限る。literalSegment を開始するのに使用され

る区切り子は,一重引用符又は二重引用符の 1 個の出現又は 3 個の出現のどちらかでよい。改行は,3 個

の引用符の出現によって区切られる literalSegments の中だけで許される。literalSegment の値は,区切り子

の間にある文字で構成される。その値が一重引用符及び二重引用符の両方を含むリテラルを得る一つの方

法は,このリテラルを多数の literalSegments に分割し,一重引用符と二重引用符とを別の literalSegments

に含めることとする。もう一つの方法は,3 個の一重引用符又は 3 個の二重引用符によって区切られる

literalSegment

を使用することとする。

注釈は,C.5 に示されるとおりに指定できる。

演算子の優先順位の記法はない。グループ化を明確にするために,括弧を用いずに,パターンが,“|”,

“&”

,“,”及び“-”

の演算子を組み合わせることは誤りとする。例えば,foo | bar , baz は許されない。その代

りに,(foo | bar), baz

又は foo | (bar , baz)

のいずれかを使用しなければならない。同様の制限は,名前クラ

スに適用され,“|”及び“-”

の演算子の使用にも適用される。これらの制限は,前述の EBNF には表現され

ていない。

include

及び external で指定される anyURILiteral の値は,簡潔構文の文法への URI 参照とする。

C.3

字句構造

空白はトークンの間に現れてよい。トークンは,C.2 における EBNF の二重引用符の間に現れる文字列

とする。ただし,literalSegment, nsName, CName, identifier 及び quotedIdentifer は,単一のトークンとする。

コメントもトークンの間に現れてよい。コメントは,一つの

#

で始まり,行末まで続く。##

で始まるコ

メントは,別に扱われる(C.5 参照)

16

進符号 N をもつ UCS 文字は,エスケープシーケンス

\

x{N}

によって表現できる。そのようなエスケ

ープシーケンスを使用することは,対応する文字を直接入力することと完全に等価とする。例えば,次の

二つの表現は,等価である。

element

\

x{66}

\

x{6f}

\

x{6f} { empty }

element foo { empty } 

C.4

宣言

datatypes

宣言は,データ型を識別する QName で使用される接頭辞を宣言する。

その例を次に示す。

datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"


6

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

element height { xsd:double }

実際には,この例では datatypes 宣言は要求されない。接頭辞 xsd は,この URI を参照するものとあらか

じめ宣言されている。

namespace

宣言は,要素名又は属性名を指定する QName で使用される接頭辞を宣言する。

その例を次に示す。

namespace rng = "http://relaxng.org/ns/structure/1.0" 
element rng:text { empty }

XML

と同様に,接頭辞 xml は,あらかじめ宣言されている。

default namespace

宣言は,要素名(属性名ではない。

)を指定する接頭辞なしの名前に関する名前空間を

宣言する。

その例を次に示す。

default namespace = "http://example.com" 
element foo { attribute bar { string } }

この例は,次の例に等価である。

namespace ex = "http://example.com" 
element ex:foo { attribute bar { string } }

default namespace

宣言は,接頭辞をもってもよい。

その例を次に示す。

default namespace ex = "http://example.com"

この例は,次の例に等価である。

default namespace = "http://example.com" 
namespace ex = "http://example.com"

URI

は空でもよい。空の URI を指定すると,名前空間 URI をもたないことを表す接頭辞になる。これ

は,名前空間 URI をもたないどんな名前にもマッチする名前クラスを指定するのに必要になる。

その例を次に示す。

namespace local = "" 
element foo { attribute * - local:* { string }* }

この例は,次の例に等価である。

<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo" ns="http://example.com"> 
  <zeroOrMore> 
    <attribute> 
            <anyName> 
                <except> 
                    <nsName ns=""/> 
                </except> 
            </anyName> 
            <data type="string"/> 
    </attribute> 
  <zeroOrMore> 
</element>

RELAX NG

は,参照されるファイルが ns 属性を指定しない場合,参照するファイルから ns 属性を継承

できるという機能をもつ。この機構に対応するため,namespace 宣言において,名前空間 URI の代わりに

キーワード inherit を指定できる。

その例を次に示す。

default namespace this = inherit 
element foo { element * - this:* { string }* }


7

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

この例は,次の例に等価である。

<element xmlns="http://relaxng.org/ns/structure/1.0" name="foo"> 
  <zeroOrMore> 
        <element> 
            <anyName> 
                <except> 
                    <nsName/> 
                </except> 
            </anyName> 
            <data type="string"/> 
        </element> 
  <zeroOrMore> 
</element>

さらに,include パターン及び external パターンは,参照されるファイルが継承する名前空間を指定する

ために,inherit 接頭辞を指定できる。

その例を次に示す。

namespace x = "http://www.example.com" 
external "foo.rng" inherit = x

この例は,次の例に等価である。

<externalRef href="foo.rng" 
  ns="http://www.example.com" 
  xmlns="http://relaxng.org/ns/structure/1.0"/>

include

又は external が inherit パラメタをもたない場合,参照されるファイルは,無接頭辞時名前空間を

継承する。

無接頭辞時名前空間の宣言がない場合,次の宣言が仮定される。

default namespace = inherit

C.5

注釈

C.5.1

注釈の支援

RELAX NG

の XML 構文では,RELAX NG スキーマに注釈を付けるために外来の要素及び属性を使用す

ることができる。

簡潔構文のスキーマも,注釈をもつことができる。そのスキーマが XML 構文に翻訳されると,注釈は

外来の要素及び属性になる。これらの注釈を指定する方法は,外来の要素及び属性が翻訳されたスキーマ

のどこに現れるかに依存する。外来の要素が documentation 要素であるときは,特別な簡略構文もある。

C.5.2

最初の注釈

角括弧で囲まれた注釈は,pattern,param,nameClass,grammarContent 又は includeContent の直前に挿入

できる。

その構文を次に示す。

annotation ::= 
"[" annotationAttribute* annotationElement* "]" 
 
annotationAttribute ::= 
name "=" literal 
 
annotationElement ::= 
name "[" annotationAttribute* (annotationElement | literal)* "]"


8

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

各 annotationAttributes は,対応する RELAX NG 要素の属性になる。各 annotationElements は,対応する

RELAX NG

要素の最初の子供になる。ただし,RELAX NG 要素が子供をもつことができない場合は,こ

の要素の次の要素になる。

C.5.3

文書化の簡略構文

##

で始まるコメントは,http://relaxng.org/ns/compatibility/annotations/1.0 名前空間の documentation 要素を

指定するために用いる。

## Represents a language 
element lang { 
## English 
"en" | 
## Japanese 
"jp" 
}

この例は,次のとおりとなる。

<element name="lang" 
  xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" 
  xmlns="http://relaxng.org/ns/structure/1.0"> 
  <a:documentation>Represents a language</a:documentation> 
  <choice> 
    <value>en</value> 
    <a:documentation>English</a:documentation> 
    <value>jp</value> 
    <a:documentation>Japanese</a:documentation> 
  </choice> 
</element>

##

コメントは,pattern,nameClass,grammarContent 又は includeContent の直前だけで使用できる。複数

##

コ メ ン ト を 指 定 し ても よい 。 空行 が途 中 に 現 れ な い 複 数 の 隣 接 し た

##

コメ ン トは , 単 一 の

documentation

要素に併合される。どんな##コメントも,角括弧に囲まれたどんな注釈にも先行しなければ

ならない。

C.5.4

後に出現する注釈

pattern

又は nameClass に続けて,次の構文の任意の個数の followAnnotations を置いてよい。 
followAnnotation ::= 
">>" annotationElement

各 annotationElement は,pattern 又は nameClass を表す RELAX NG 要素の次の兄弟要素になる。

C.5.5

文法注釈

annotationElement

要素は,grammarContent 又は includeContent が許可されるどの場所でも使用してよい。

その例を次に示す。

namespace x = "http://www.example.com" 
start = foo 
x:entity [ name="picture" systemId="picture.jpeg" notation="jpeg" ] 
foo = element foo { empty }

この例は,次のとおりとなる。

<grammar xmlns:x="http://www.example.com" 
  xmlns="http://relaxng.org/ns/structure/1.0"> 
  <start> 
        <ref name="foo"/> 
    </start>


9

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

    <x:entity name="picture" systemId="picture.jpeg" notation="jpeg"/> 
  <define name="foo"> 
        <element name="foo"> 
            <empty/> 
        </element> 
  </define> 
</grammar>

要素の名前がキーワードである場合,それは

\

で引用しなければならない。

C.6

適合性

C.6.1

適合性の型

簡潔構文の適合実装には,三つの型がある。

C.6.2

検証器

この規格に適合する検証器は,テキストオブジェクトがこの附属書で規定される正しい RELAX NG 簡

潔構文スキーマであるかどうか決定することができなければならない。適合する検証器は,どんな XML

文書についても,どんな正しい RELAX NG 簡潔構文スキーマについても,このスキーマを XML 構文に変

換したものに照らして,その文書が(本体 9.

で定義されるとおりに)妥当であるかどうかを決定すること

もできなければならない。適合する検証器は,スキーマを XML 構文に変換したものを出力できる必要は

ない。

前段落の要件は,本体 11.

の第 2 段落の規定の対象になる。

C.6.3

構造を保存する変換器

構造を保存する変換器は,どんな正しい RELAX NG 簡潔構文スキーマをも,この附属書が規定する変

換に厳密に等価なデータモデルをもつ XML 文書に変換できなければならない。

(本体 5.

で規定する)デー

タモデルの二つのインスタンスは,本体の 7.27.37.47.87.9 及び 7.10 で規定する単純化を行った結

果が一致する場合に,厳密に等価であるとみなされる。ただし,要素の文脈において基底 URI は異なって

もよい。

注記 RELAX NG 簡潔構文は,RELAX NG スキーマの XML 構文による表現ではなく,RELAX NG

スキーマの意味を表現している。重要ではないと判断された XML 構文の詳細は,簡潔構文で

は表現できない。例えば,要素又は属性のパターンのための名前のクラスが一つだけの名前で

構成されるときには,XML 構文では,name 属性又は name 要素のどちらかでも表現できる。

しかし,簡潔構文では,そのような名前のクラスを表現する方法は一つだけしかない。前段落

に示される単純化は,簡潔構文では表現できないこれらの構文の詳細に対応する。

XML

文書の二つの include パターン又は externalRef パターンを比較して厳密な等価性を判定する場合に

は,href 属性の値を比較することはせず,参照される XML 文書を比較して厳密な等価性を判定する。

C.6.4

構造を保存しない変換器

構造を保存しない変換器は,どんな正しい RELAX NG 簡潔構文スキーマをも,この附属書が規定する

変換に弱い意味で等価なデータモデルをもつ XML 文書に変換できなければならない。

(本体 5.

で規定す

る)データモデルの二つのインスタンスは,本体 7.

で規定するすべての単純化を適用した後で,定義を並

べ替えて名前を付け替えるだけで等価になるように変換できる場合,弱い意味で等価であるとみなされる。

単純化が適用された後では,二つのインスタンスを比較する場合,要素に関する文脈は無視される。

注記  簡潔構文のための検証器は,構造を保存しない簡潔構文用変換器と XML 構文のための検証器


10

X 4177-2

:2007 (ISO/IEC 19757-2:2003/Amd.1:2006)

   

との組合せとして,実装できる。

C.7

RELAX NG

簡潔構文のためのメディア型の登録テンプレート

このメディア型は,次のとおり IANA(Internet Assigned Number Authority)に登録されている。

MIME media type name: application

MIME subtype name: relax-ng-compact-syntax

Required parameters: none

Optional parameters: none

Encoding considerations: UTF-8 or UTF-16 shall be used for this media type.

Security considerations: When the RELAX NG validator retrieves a schema 
in the RELAX NG compact syntax, it may further retrieve external schemas 
that are referenced from the schema directly or indirectly. Although 
the RELAX NG validator is required not to retrieve an infinite number of 
schemas, a large number of external schemas may be retrieved, thus 
wasting the network, disk, and CPU power.

Interoperability considerations: RELAX NG has been widely used as an XML 
schema language. A notable example is the Open Document specification of 
OASIS.

Published specification:

ISO/IEC 19757-2, Document Schema Definition Language (DSDL) 
Part 2

−Regular-grammar-based validation−RELAX NG,

Amendment 1: Compact Syntax

OASIS Committee Specification, RELAX NG Compact Syntax 
21 November 2002

Applications which use this media type: validators, schema authoring 
tools, and so forth

Additional information:

Magic number(s): none 
File extension(s): rnc 
Macintosh File Type Code(s): "TEXT"

Person & email address to contact for further information:

MURATA Makoto (FAMILY Given), International University of Japan, 
eb2m-mrt@asahi-net.or.jp

Intended usage: COMMON

Author/Change controller: ISO/IEC JTC1/SC34

附属書 1(参考)文献  に,次の文献を追加する。

[3]

Oasis Committee Specification, RELAX NG Compact Syntax, Committee Specification, 21 November 2002,

http://www.oasis-open.org/committees/relax-ng/compact-20021121.html