PSML 1.0 Scene Short Reference
PSML (Peko Scenario Markup Language) は PVNS で実行されるシナリオを記述するためのマークアップ言語です。
PSML は XML アプリケーションであり、PSML 1.0 ではシーンデータを記述するためのタグセットとして PSML 1.0 Scene を定義しています。PSML 1.0 Scene の XML namespaces URI は次の通りです。
http://tsukuba-bunko.org/ns/psml-scene
基本
PSML-Scene の基本構造
PSML 1.0 Scene では、scene をルート要素として、head 要素、body 要素により大きく二つのブロックに分けられます。
以下に、典型的な PSML 1.0 Scene 文書の例を示します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE scene PUBLIC "-//Tsukuba Bunko//DTD PSML 1.0 Scene//EN" "http://softlab.tsukuba-bunko.org/dtd/psml10-scene.dtd"> <scene xmlns="http://tsukuba-bunko.org/ns/psml-scene"> <head> <title>シーン 1</title> <flow-mapping> <scene-ref if="flagA">scene003.xml</scene-ref> <scene-ref>scene002.xml</scene-ref> </flow-mapping> <property name="canvas.text.view-type" value="full" /> </head> <body> <stage> <enter name="alto" looks="alto01.png" /> </stage> <text> <p> これは PSML 1.0 Scene のサンプルです。</p> </text> </body> </scene>
PSML 1.0 Scene 文書の例
head タグに囲まれた部分は、この PSML 1.0 Scene 文書(シーンデータ) が表すシーンの情報を記述したヘッダブロックになります。ヘッダブロックには、シーンのタイトル、このシーンが終わった後で次に遷移するシーン、その他、キャンバスに対してシーン固有の設定を行うためのプロパティ設定が記述されます。
body タグで囲まれた部分は、シーンの本文になります。シーンの本文には、シーンを構成する文章要素、舞台要素、選択肢要素がシーンの流れに沿って順番に記述されます。各シーン要素の内容は、それぞれ PSML 1.0 Scene の text タグ、stage タグ、select タグによって囲まれた部分に記述されます。
この文書では、PSML 1.0 Scene で定義される各タグについて、その解説を示します。
空白文字と空文字列の取り扱い
PSML-Scene 文書を処理するプログラムにおける、空白文字と空文字列の取り扱いについて説明します。
ここで「空白文字」と呼ぶのは次の 2 種類の文字です。
- 半角空白
(U+0020)
- ISO 制御文字
(U+0000~U+001F, U+007F~U+009F)
ISO 制御文字には、タブ記号や改行記号も含まれます。
また、「空文字列」とは、長さが 0 である文字列のことを指します。
これら空白文字・空文字列の取り扱いについては、次のように定義します。
属性値
まず、属性値が空文字列だった場合、属性が省略されたものとして処理します。
空文字列ではない場合、属性値に含まれる全ての ISO 制御文字、および、属性値の先頭と最後の半角スペースを除去します。この結果、空文字列になった場合は「妥当性エラー」(警告)になります。
内容モデルが #PCDATA である要素に含まれる文字列
内容モデルが #PCDATA である要素は次の通りです。
これらの要素に含まれる文字列に対しては、文字列に含まれる全ての ISO 制御文字、および、文字列の先頭と最後の半角スペースを除去します。この結果、空文字列になった場合は「妥当性エラー」(警告)になります。
内容モデルが混合モデルである要素に含まれる文字列
タグリファレンス
構造
文書要素
要素名 | scene |
---|---|
親要素 | なし |
内容モデル | head, body |
説明 | 必須。PSML シーンデータのルート要素。 |
要素名 | head |
---|---|
親要素 | scene |
内容モデル | title, flow-mapping, property* |
説明 | 必須。シーンデータのヘッダ情報ブロックを定義する。 |
要素名 | body |
---|---|
親要素 | scene |
内容モデル | (text | stage | select | flag | scene-flow)+ |
説明 | 必須。シーンデータの本文ブロックを定義する。 |
ヘッダ情報
要素名 | title |
---|---|
親要素 | head |
内容モデル | #PCDATA |
説明 | 必須。このシーンのタイトルを定義する。シーンのタイトルは、PVNS のメインウィンドウのタイトルバーに表示される。 |
要素名 | flow-mapping |
---|---|
親要素 | head |
内容モデル | (scene-ref)+ |
説明 | このシーンの処理が終了後に遷移するシーンを決定するための、フラグの状態と遷移先シーン名のマッピングを記述する。 |
要素名 | scene-ref |
---|---|
親要素 | flow-mapping |
内容モデル | #PCDATA |
説明 | シーン終了後に遷移するシーンへの参照を記述する。 |
属性 |
|
要素名 | property |
---|---|
親要素 | head |
内容モデル | Empty |
説明 | このシーン固有のプロパティを設定する。設定可能なプロパティは、「シーン固有のカスタマイズ」を参照。設定を行うプロパティは次の二つの属性により指定する。 |
属性 |
|
本文
要素名 | text |
---|---|
親要素 | body |
内容モデル | (p | np | wait)+ |
説明 | シーン本文の文章要素の内容(台詞やナレーションなどの文章、ページ操作)を記述する。 |
属性 |
|
要素名 | stage |
---|---|
親要素 | body |
内容モデル | (enter | action | exit | background | show-slide | hide-slide | at-once | play-bgm | play-se | stop-bgm | stop-se | wait)+ |
説明 | シーン本文の舞台要素の内容(人形操作、背景・スライド操作・サウンド効果)を記述する。 |
属性 |
|
要素名 | select |
---|---|
親要素 | body |
内容モデル | item+ |
説明 | プレイヤーに提示する選択肢を記述する。 |
属性 |
|
テキスト要素
テキスト
要素名 | p |
---|---|
親要素 | text |
内容モデル | (#PCDATA | wait)+ |
説明 | 台詞やナレーションなどの文章を記述する。pタグで囲まれたテキストは全て PVNS で表示される対象となるため、インデントは明示的に空白文字列などで指定する必要がある。また、表示できない文字(制御文字など)は使用してはならない。 |
属性 |
ページ操作
舞台要素
人形操作
要素名 | enter |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | 人形を舞台に登場させる。 |
属性 |
|
要素名 | action |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | 舞台上の人形に対し、表情および立ち位置の変更を指示する。 |
属性 |
要素名 | exit |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | 人形を舞台から退場させる。 |
属性 |
|
背景・スライド
要素名 | background |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | 舞台背景の変更を指示する。背景の内容は image 属性または color 属性を使用して指定する。 |
属性 |
|
要素名 | show-slide |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | 舞台を覆い隠すスクリーンを用意し、スライドをスクリーンに描画する。 |
属性 |
|
要素名 | hide-slide |
---|---|
親要素 | stage, at-once |
内容モデル | Empty |
説明 | スライドの投影を終了し、舞台を通常の状態に戻す。 |
属性 |
|
グルーピング
要素名 | at-once |
---|---|
親要素 | stage |
内容モデル | (enter | action | exit | background | show-slide | hide-slide)+ |
説明 | 同時に実行する、人形操作、背景・スライド操作処理をグルーピングする。 |
属性 |
|
サウンド効果
要素名 | play-bgm |
---|---|
親要素 | stage |
内容モデル | Empty |
説明 | BGM を再生する。 |
属性 |
|
要素名 | play-se |
---|---|
親要素 | stage |
内容モデル | Empty |
説明 | SE(Sound Effect) の再生を指示する。 |
属性 |
|
要素名 | stop-bgm | ||||||
---|---|---|---|---|---|---|---|
親要素 | stage | ||||||
内容モデル | Empty | ||||||
説明 | BGM の再生を停止する。 | ||||||
属性 |
|
要素名 | stop-se | ||||||
---|---|---|---|---|---|---|---|
親要素 | stage | ||||||
内容モデル | Empty | ||||||
説明 | SE の再生停止を指示する。 | ||||||
属性 |
|
選択肢要素
要素名 | item |
---|---|
親要素 | select |
内容モデル | #PCDATA |
説明 | 選択肢の項目を記述する。item タグで囲まれたテキストが選択肢の項目として表示される。使用可能なテキストは p 要素に準じる。 |
属性 |
|
その他
要素名 | wait |
---|---|
親要素 | text, stage, p |
内容モデル | Empty |
説明 | PVNS に対し、台詞やナレーション、舞台上でのアクションの途中で、表示を一旦停止することを指示する。PVNS は |
属性 |
|
要素名 | flag |
---|---|
親要素 | body |
内容モデル | Empty |
説明 | シーンの流れを制御するためのフラグを立てる、または、下ろす。 |
属性 |
|
要素名 | scene-flow |
---|---|
親要素 | body |
内容モデル | Empty |
説明 | PVNS にシーンの終了と、次のシーンへの遷移を指示する。 |
属性 |
|
共通属性
属性名 | test |
---|---|
親要素 | - |
データ型 | CDATA |
説明 | 要素を PSML プロセッサが評価(処理)するかどうかを判定するためのフラグ条件式を記述します。フラグ条件式の評価結果が「真」の場合、その要素を評価します。「偽」の場合は要素を評価せずに、次の要素の評価に移ります。なお、要素が「評価しない」になった場合、その子要素も「評価しない」になります。 テスト属性の値(testString)は、単一の式(expression)、または、「 式は、一つ以上のフラグテスト(flagTest)がカンマ(「 フラグテストは、フラグ ID、または、「 フラグが立っていることを表すフラグテストの場合、フラグ条件式評価時のシーンのコンテクストでフラグが立っている場合「真」、立っていない場合「偽」になります。 逆に、フラグが立っていないことを表すフラグテストの場合、シーンのコンテクストフラグが立っている場合「偽」、立っていない場合「真」になります。 式の評価結果は、式中に列挙された全フラグテストの評価結果の積になります。つまり、式中のすべてのフラグテストが「真」の場合「真」、フラグテストの中の一つでも「偽」の場合「偽」になります。 「 |
PSML 1.0 Scene DTD
PSML 1.0 Scene の DTD を示します。PSML 1.0 DTD は次の識別子で識別されます。
PUBLIC | "-//Tsukuba Bunko//DTD PSML 1.0 Scene//EN" |
---|---|
SYSTEM | http://softlab.tsukuba-bunko.org/dtd/psml10-scene.dtd |
<!-- Peko Scenario Markup Language 1.0 Scene DTD All Rights Reserved. Copyright (C) 1999-2005 Tsukuba Bunko. This DTD module is identified by the follwing PUBLIC and SYSTEM identifiers: PUBLIC "-//Tsukuba Bunko//DTD PSML 1.0 Scene//EN" SYSTEM "http://softlab.tsukuba-bunko.org/dtd/psml10-scene.dtd" $Id: psml10-scene.dtd,v 1.4 2005/08/19 07:22:09 ppoi Exp $ --> <!--==================== Common Attributes =================================--> <!ENTITY % attr.test "test CDATA #IMPLIED"> <!--==================== Utility Elements ==================================--> <!ELEMENT wait EMPTY> <!ATTLIST wait %attr.test; dur CDATA #IMPLIED > <!ELEMENT flag EMPTY> <!ATTLIST flag %attr.test; id CDATA #REQUIRED scope (scene|session|system) #REQUIRED action (declare|undeclare) "declare" > <!ELEMENT scene-flow EMPTY> <!ATTLIST scene-flow %attr.test; next-scene CDATA #IMPLIED > <!--==================== Text subsection Contents =============================--> <!ENTITY % elements.text "p | np"> <!ELEMENT text (%elements.text; | wait | flag)+> <!ATTLIST text %attr.test; > <!ELEMENT p (#PCDATA | wait)*> <!ATTLIST p %attr.test; flag CDATA #IMPLIED > <!ELEMENT np EMPTY> <!ATTLIST np %attr.test; > <!--==================== Stage subsection Contents ============================--> <!ENTITY % actor.elements "enter | action | exit"> <!ENTITY % background.elements "background | show-slide | hide-slide"> <!ENTITY % sound.elements "play-bgm | play-se | stop-bgm | stop-se"> <!ELEMENT stage (%actor.elements; | %background.elements; | %sound.elements; | at-once | wait | flag)+> <!ATTLIST stage %attr.test; > <!ELEMENT enter EMPTY> <!ATTLIST enter %attr.test; name CDATA #REQUIRED looks CDATA #REQUIRED position CDATA "center" effect CDATA #IMPLIED > <!ELEMENT action EMPTY> <!ATTLIST action %attr.test; name CDATA #REQUIRED looks CDATA #IMPLIED position CDATA #IMPLIED effect CDATA #IMPLIED > <!ELEMENT exit EMPTY> <!ATTLIST exit %attr.test; name CDATA #REQUIRED effect CDATA #IMPLIED > <!ELEMENT background EMPTY> <!ATTLIST background %attr.test; image CDATA #IMPLIED color CDATA #IMPLIED effect CDATA #IMPLIED > <!ELEMENT show-slide EMPTY> <!ATTLIST show-slide %attr.test; image CDATA #REQUIRED effect CDATA #IMPLIED > <!ELEMENT hide-slide EMPTY> <!ATTLIST hide-slide %attr.test; effect CDATA #IMPLIED > <!ELEMENT at-once (%actor.elements; | %background.elements;)+> <!ATTLIST at-once %attr.test; effect CDATA #IMPLIED > <!ELEMENT play-bgm EMPTY> <!ATTLIST play-bgm %attr.test; id CDATA #REQUIRED clip CDATA #REQUIRED loop (true|false) "true" > <!ELEMENT play-se EMPTY> <!ATTLIST play-se %attr.test; id CDATA #REQUIRED clip CDATA #REQUIRED loop (true|false) "false" > <!ELEMENT stop-bgm EMPTY> <!ATTLIST stop-bgm %attr.test; id CDATA #REQUIRED fadeout (sync|async|none) "async" > <!ELEMENT stop-se EMPTY> <!ATTLIST stop-se %attr.test; id CDATA #REQUIRED fadeout (sync|async|none) "async" > <!--==================== Select section Contents ===========================--> <!ELEMENT select (item)+> <!ATTLIST select %attr.test; name CDATA #REQUIRED scope (scene|session|system) "session" description CDATA #IMPLIED > <!ELEMENT item (#PCDATA)> <!ATTLIST item %attr.test; id CDATA #REQUIRED > <!--==================== Document Structure ================================--> <!ELEMENT scene (head, body)> <!ATTLIST scene xmlns CDATA #IMPLIED xml:lang CDATA #IMPLIED > <!ELEMENT head (title, flow-mapping?, property*)> <!ELEMENT body (text | select | stage | flag | scene-flow)+> <!ELEMENT title (#PCDATA)> <!ELEMENT flow-mapping (scene-ref)+> <!ELEMENT scene-ref (#PCDATA)> <!ATTLIST scene-ref if CDATA #IMPLIED > <!ELEMENT property EMPTY> <!ATTLIST property name CDATA #IMPLIED value CDATA #IMPLIED file CDATA #IMPLIED >