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

 

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に示す。 

 

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

 

 

 


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* }) 
 


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 
 


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" 


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" 


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 }* } 


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)* "]" 


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> 


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.2,7.3,7.4,7.8,7.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