SORAの要素は大きく分けて文書構造、シナリオ要素群(SEG)、演出要素群(ディレクティブ)と呼ぶ要素群に分けられる。文書構造はシナリオの演出を集約するコンテナの役割を果たす。SEGはシナリオの制御とメッセージの表示を扱う要素の総称で、演出要素群は演出を指定する要素の総称である。
ディレクティブが独立した区分に分けられているのは、RPGでの演出が多岐にわたり、文書構造−シナリオ要素群の二元論での分類では煩雑さを避けられないためである。
<start> <ref name="scenario"/> </start> <define name="scenario"> <element name="scenario"> <interleave> <zeroOrMore> <ref name="desc"/> </zeroOrMore> <oneOrMore> <ref name="act"/> </oneOrMore> </interleave> </element> </define>
scenario要素はSORA文書のルートを表す。シナリオはこの要素の内容として記述される。
<define name="common.attr"> <optional> <attribute name="id"/> </optional> <optional> <attribute name="number"> <data type="positiveInteger" /> </attribute> </optional> <optional> <attribute name="class"/> </optional> </define> <define name="snr.attr"> <optional> <attribute name="actor" /> </optional> <optional> <attribute name="style" /> </optional> </define>
属性 | 値 |
---|---|
id | トークン |
class | トークン(クラス名) |
style | CSSプロパティ |
number | 自然数 |
actor | トークン(登場人物名) |
scenario以下の要素はid、class、style属性を持つことができ、それぞれ[HTML]と同様の機能を持つ。すなわちid属性は要素に一意的な名前を与え、class属性はスタイルシートのセレクタとして用い、style属性でスタイルを指定する。スタイルは主に[CSS]を用いて指定する。
また、actor属性で要素の主な行為者を指定する。演出要素においては演出の行為者を指定することになり、文書構造の要素に指定するとその局面での主人公を指定することになる。
number属性は値として自然数を取り、親要素内での要素の通し番号を指定する。識別子の役割はid属性が担っているためnumber属性の指定は必須ではないが、一時的に要素を識別する必要があるときに用いる。
なお、style属性とactor属性は子要素への継承が発生する。
<define name="act"> <element name="act"> <ref name="common.attr" /> <interleave> <zeroOrMore> <ref name="desc" /> </zeroOrMore> <oneOrMore> <ref name="scene" /> </oneOrMore> </interleave> </element> </define>
act要素は脚本での「幕」に相当し、scene要素を集約してシナリオ全体をいくつかの大きな展開にまとめる働きをもつ。またactor属性とstyle属性を指定することで、子孫となる演出要素における両属性のデフォルト値を指定する役割も持つ。
act要素の使用例を示す。
<act id="前編" number="1" actor="ビンク"> <desc>主人公が魔法使いを訪ねる旅に出る</desc> <scene number="1"> ... </scene> <scene> ... </scene> </act> <act id="後編" number="2" actor="ディー"> <desc>ヒロインのディーと出会う</desc> ... </act> (文献:『魔法の国ザンス』シリーズ、第1巻)
<define name="scene"> <element name="scene"> <ref name="common.attr" /> <ref name="snr.attr" /> <optional> <ref name="attr.where" /> </optional> <zeroOrMore> <ref name="desc" /> </zeroOrMore> <a:documentation> cutが1個のときはcutを省略可。cutが複数ある時はすべて省略できない。 </a:documentation> <choice> <oneOrMore> <ref name="SEG" /> </oneOrMore> <oneOrMore> <ref name="cut" /> </oneOrMore> </choice> </element> </define>