今回は論理構造に関する要素。
- <optional>
- <oneOrMore>
- <zeroOrMore>
<optional> 要素
<optional> 要素は「あってもなくてもよい」パターンを定義します。 正規表現では「?」に対応します。 例えば、次のようなスキーマ定義は
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <optional> <element name="child"><empty/></element> </optional> </element>
次のどちらにもマッチします:
<parent/>
<parent><child/></parent>
★<choice>, <empty> との関係★
<optional> 要素は「子要素のスキーマ定義」または「<empty>」というパターンを定義します。 「または」は次回以降やる <choice> によって表すことができます。 つまり、上記のスキーマ定義は以下と同じと見なされます:
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <choice> <element name="child"><empty/></element> <empty/> </choice> </element>
<oneOrMore> 要素
<oneOrMore> 要素は「1回以上繰り返される」パターンを定義します。 正規表現では「+」に対応します。 次のようなスキーマ定義は
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <oneOrMore> <element name="child"><empty/></element> </oneOrMore> </element>
次のようなものにマッチします:
<parent><child/></parent>
<parent><child/><child/></parent>
<zeroOrMore> 要素
<zeroOrMore> 要素は「0回以上繰り返される」パターンを定義します。 正規表現では「*」に対応します。 次のようなスキーマ定義は
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <zeroOrMore> <element name="child"><empty/></element> </zeroOrMore> </element>
次のようなものにマッチします:
<parent/>
<parent><child/><child/></parent>
★<oneOrMore> との関係★
<zeroOrMore> 要素は「<oneOrMore>」または「<empty>」というパターンを定義します。 したがって、<optional> と同じように、<choice> を用いて書き換えることができます:
<element name="parent" xmlns="http://relaxng.org/ns/structure/1.0"> <choice> <oneOrMore> <element name="child"><empty/></element> </oneOrMore> <empty/> </choice> </element>