フォーラム: フリートーク (スレッド #28637)

アーカイブスキーマ改訂案 (091001版ベース) (2011-02-15 09:28 by hironytic #55780)

わたしの方で勝手にアーカイブスキーマの改訂案を作成中です。
http://moltonf.hironytic.com/update-proposal-for-archive-scheme

当初、きちんと案を固めてからolyutorskiiさんに相談しようと思っていましたが、早いうちから見てもらった方が良さそうだと考え直しました。
まだ具体的なスキーマに関する記述が全くできていませんけど。

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-15 09:41 by hironytic #55781)

今のところ、F国までのcounting(Announce系)をそのままG国のcounting(Extra系)に適用してもいいのかなと思ってます。
G国だとeventFamilyがextraに変わって、victimが省略されると。スキーマ定義は少しややこしいかもですが。
で、新たにexecution要素をAnnounce系で追加するのはどうかなと。
ただ、そうすると誰が処刑されたかをXQueryなどで検索するときに、countingとexecutionの両方を見ないといけなくなるのが悩ましいところです。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-16 00:32 by olyutorskii #55793)

まずは追加イベントに対応するタグ案だけでもチャッチャと。

<shortmember>まだ村人達は揃っていないようだ。</shortmember>
<checkout avatarId="clara" >司書 クララ は宿を去った。</checkout>
<vanish avatarId="clara" >司書 クララ は失踪した。</vanish>

こんなところでどうでしょうか。

G国にcheckoutとvanishが混在する村がないことが確かであるならば、いっそのことどちらかに一本化するのもありかも。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-16 00:33 by olyutorskii #55794)

G国処刑イベント(Announce)に対応するタグ案です。

<execution victim="joachim">
<li>羊飼い カタリナ、1票。</li>
<li>行商人 アルビン、1票。</li>
<li>青年 ヨアヒム、2票。</li>
<li/>
<li>青年ヨアヒムは村人たちの手により処刑された。</li>
<nominated avatarId="katharina" count="1"/>
<nominated avatarId="albin" count="1"/>
<nominated avatarId="joachim" count="2"/>
</execution>

処刑を「ノミネート」してよいものかどうか、悩むところです。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-16 00:35 by olyutorskii #55795)

countingタグはどうしましょー。

案A: countingタグのvictim属性を省略可にする。
案B: countingタグとは別個にG国用counting2タグを新設する。
案C: victimタグを新設し、counting、execution両タグからvictim属性を無くす。

このへんで頭がぐーるぐるしたまま、はや一年。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-16 00:39 by olyutorskii #55796)

えーと、新スキーマでもF国以前の村を記述したいということでよいでしょうか。
一番先に確認すべきでした…。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-18 08:10 by hironytic #55841)

[メッセージ#55796 へのフォロー]

> えーと、新スキーマでもF国以前の村を記述したいということでよいでしょうか。

あー、あまりきちんと考えていませんでしたが、こんな感じで思ってました。
・新スキーマはG国以降しか記述できない、とはしたくない。
・旧スキーマでF国以前を記述したアーカイブを新スキーマとして見てもvalidに見えればいいな

要するに、少なくとも今回の改定案では、新スキーマを旧スキーマの上位互換にできるんじゃないかと思ってます。
ただ、それをすることで新スキーマに準拠したアーカイブデータそのものの記述(スキーマ定義の記述じゃなくて)が煩雑になるなら、上位互換を捨ててもいいと思ってます。
#55796 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-19 14:22 by olyutorskii #55867)

>新スキーマを旧スキーマの上位互換にできるんじゃないかと思ってます。

スキーマ定義が初めてだったので、この辺がよく解らないのですよ。
現在のvillageタグには、バリデータがスキーマを引っ張ってくる手助けとしてxsi:schemaLocation属性が付いているのですが、villageタグを吐くアプリはこれを省略する機能を用意するのが望ましいのでしょうか。とか。スキーマのvillageタグ定義ではこのxsi:schemaLocation属性をどう設定すべきなのでしょうか。とか。ちんぷんかんぷん。

公開スキーマ定義に慣れている方の意見をお伺いできればと思います。
#55841 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-19 15:00 by hironytic #55870)

[メッセージ#55867 へのフォロー]

> スキーマ定義が初めてだったので、この辺がよく解らないのですよ。
> 現在のvillageタグには、バリデータがスキーマを引っ張ってくる手助けとしてxsi:schemaLocation属性が付いているのですが、villageタグを吐くアプリはこれを省略する機能を用意するのが望ましいのでしょうか。とか。スキーマのvillageタグ定義ではこのxsi:schemaLocation属性をどう設定すべきなのでしょうか。とか。ちんぷんかんぷん。

ぼくがXSDで書かれたスキーマ定義をきちんと読んでみようとした初めての対象がこのアーカイブスキーマなので、ぼくの方がわかってないです。
言葉のニュアンスだけでてきとーに「上位互換」とか使ってしまいましたが、そのあたりほんとによくわかってないです。
というか、xsi:schemaLocation属性ってなんでしょう(^^;;;
#55867 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-21 22:24 by olyutorskii #55924)

ルートタグに「xsi:schemaLocation」という属性を付けておくと、バリデータが自動的にバリデーションチェック用のスキーマをロードしてくれるのですよ。091001版村データをG国対応版スキーマでバリデーションチェックさせようとしても、たぶん勝手に091001版スキーマが使われてしまう気がします。

※「xsi」は単なる名前空間で、代わりに「xsd」を使う方も多いと思います。
#55870 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-22 16:12 by hironytic #55930)

あー、わかりました。
villageタグを吐くアプリはこれを省略うんぬんという話が見えた気がします。

いや、それについては、G国対応版のXMLを吐き出すアプリはG国対応版のスキーマをxsi:schemaLocationに指定するのでいいんじゃないでしょうか。

ぼくが意図していたのは、単純にXMLを利用するアプリ側で、091001版で記述されているからこう、G国対応版で記述されているからこう、というようにロジックを分けなくてすむなら、そちらの方がいいかなということでした。
昔吐き出されたデータを具体的にバリデータで検証したときの話ではなくて、091001版のスキーマ構造で書ける範囲のXMLをG国対応版のスキーマ構造として解釈したとしてもOKですよん、となればいいな(べたー)くらいのニュアンスでした。
#55924 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-18 08:38 by hironytic #55842)

counting要素のvictim属性って091001版ですでに省略可能になってますね。誰も処刑されなかったとき用に。(←目的が違うけど)
で、counting要素のeventFamily属性が091001版では"announce"固定とされているので、これをデフォルト"announce"に変更すれば共通にはできるかなと思いました。
つまり案Aで考えていました。
ただ、要素名を見ただけではイベントファミリーがわからなくなるというデメリットはあります。→これを解決するのが案Bですよね?
あと、既に書いたように処刑された人を検索するのにcountingとexecutionの両方を見ないといけない。→これを解決するのが案Cですよね?

F国以前
<counting victim="moritz" >
<li>司書 クララ は 老人 モーリッツ に投票した。</li>
<li>神父 ジムゾン は 老人 モーリッツ に投票した。</li>
<li>老人 モーリッツ は 負傷兵 シモン に投票した。</li>
<li>少年 ペーター は 老人 モーリッツ に投票した。</li>
<vote byWhom="clara" target="moritz" />
<vote byWhom="simson" target="moritz" />
<vote byWhom="moritz" target="simon" />
<vote byWhom="peter" target="moritz" />
</counting>

G国
<counting eventFamily="extra">
<li>司書 クララ は 老人 モーリッツ に投票した。</li>
<li>神父 ジムゾン は 老人 モーリッツ に投票した。</li>
<li>老人 モーリッツ は 負傷兵 シモン に投票した。</li>
<li>少年 ペーター は 老人 モーリッツ に投票した。</li>
<vote byWhom="clara" target="moritz" />
<vote byWhom="simson" target="moritz" />
<vote byWhom="moritz" target="simon" />
<vote byWhom="peter" target="moritz" />
</counting>
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-18 08:44 by hironytic #55843)

checkoutとvanishって同じなんでしょうか?G国のシステムがきちんとわかってないです。
プロで丸一日発言しなかったら(あとゲルト神にkickされたら)vanish
プレイヤーの判断で村を抜けたら checkout
なのかと勝手に思ってました。G国ではcheckoutができるようになったのかと。

#そもそも参戦せずに提案しているぼくって・・・
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-19 14:24 by olyutorskii #55868)

大丈夫、問題ないです。私も参戦していません。(笑)
「宿を去った」が出るようになったのは、2010年11月末頃のG195村あたりからでしょうか。G194村を最後に失踪者を見たことがないのです。

もー、がんがん新タグ作っちゃう方針でどうでしょう。具体的にはshortmember,checkout,vanish,counting2,executionの5タグということで。(victimタグは無し)

処刑者を求めるXQueryは国毎に違うものを用意するということでどうでしょうか。
一本化できるような気もするのですが、XQuery詳細すっかり忘れたー。
#55843 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-19 14:19 by olyutorskii #55866)

サブドキュメントへの分割の件ですが、現状のスキーマに足りないものは何になるでしょうか。「5dのperiodしか入っていないvillage」とかは現状でも可能だったと思いますが、うーん自信がない。avatarList内容を個別の会話に展開するとかいう話になるのでしょうか。

JindolfのキャッシュデータにXMLを使いたい話もあり、そんな面でもサブドキュメント化に期待しています。
#55780 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-19 15:45 by hironytic #55871)

えーと、ぼくが考えていたものの例を改訂案に足しておきました。要素名とか属性名はてきとーですけど。
http://moltonf.hironytic.com/update-proposal-for-archive-scheme
単純にperiod以下を別のXMLデータに分けたらどうかな、というだけのものです。
ただ、これはXMLバリデータとかでバリデーションできなくなっちゃうとは思います。
ゆえにスキーマ定義をどう書けばいいのかもわかりません。

で、指摘されて気づきましたが、「5dのperiodしか入っていないvillage」は確かに作れるし、「avatarListだけのvillage」も現状作れますね。
やりたいとすれば、「avatarListなしのvillage」です。

そもそもは全部入りのデータで別に構わないと思ってたんですが、Java+Swingで作り始めていたMoltonfを、Androidに持っていけないかなーと思ったときに、全部の日を一気に読み込むのは携帯端末では苦しいかなと思ったんですよね。
village:1つに対してavatarList:1つ。
village:1つに対してperiod:n個
という関係のはずなので、periodだけを別ファイルに分けちゃえ、というだけの発想です。
#55866 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-02-22 16:17 by hironytic #55932)

補足しておくと、単純にperiod以下を別のXMLデータに分けたらどうかな、というだけの考え方はOpenOffice.orgが採用しているODFがそういう感じになっていたと思います。1つのXMLファイルでもいいし、スタイル定義などだけを別XMLファイルに分けることもできる。(そのとき、1つのXMLファイルのスタイル定義要素以下がスタイル定義の別XMLファイルに分かれたような感じになる...だったような)
時間がとれたらODFのそのあたりの仕様を見てみます。ODFはRelaxNGで定義されていたと思います。
#55871 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-03-02 13:35 by hironytic #56072)

えーと、ODFはちょっと違いました。

1つのXMLの場合、こんな感じ。
<office:document>
<office:meta>...</office:meta>
<office:settings>...</office:settings>
<office:scripts>...</office:scripts>
<office:font-face-decls>...<office:font-face-decls>
<office:styles>...</office:styles>
<office:automatic-styles>...</office:automatic-styles>
<office:master-styles>...</office:master-styles>
<office:body>
<office:text>
<text:p text:style-name="P1">スキーマなんているわけないじゃん。みんな大げさだなあ。</text:p>
</office:text>
</office:body>
</office:document>

複数のXMLを使って表現する場合は、こんな感じ。
-- content.xml --
<office:document-content>
<office:scripts>...</office:scripts>
<office:font-face-decls>...<office:font-face-decls>
<office:automatic-styles>...</office:automatic-styles>
<office:body>
<office:text>
<text:p text:style-name="P1">スキーマなんているわけないじゃん。みんな大げさだなあ。</text:p>
</office:text>
</office:body>
</office:document-content>

-- styles.xml --
<office:document-styles>
<office:font-face-decls>...<office:font-face-decls>
<office:styles>...</office:styles>
<office:automatic-styles>...</office:automatic-styles>
<office:master-styles>...</office:master-styles>
</office:document-styles>

-- meta.xml --
<office:document-meta>
<office:meta>...</office:meta>
</office:document-meta>

-- settings.xml --
<office:document-settings>
<office:settings>...</office:settings>
</office:document-settings>


ODFに倣えばいいってわけではないですが、もういっそ複数の XML で構成するときは
avatarList だけの XML ファイルを作っちゃうというのもアリかなとか。
village 要素は存在しないままで。こんな風に。

-- avatars.xml --
<villageAvatars>
<avatarList>...</avatarList>
</villageAvatars>

-- period-0.xml --
<villagePeriod>
<period type="prologue" day="0" ... >
<startEntry><li>昼間は人間のふりをして、...</li></startEntry>
:
</period>
</villagePeriod>

-- period-1.xml --
<villagePeriod>
<period type="progress" day="1" ...>
:
</period>
</villagePeriod>
#55932 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-03-03 01:07 by olyutorskii #56084)

「<talk>タグのavatarId属性は<avatarList>内で既に記述するもので無ければならない」とかいう類の制約は、<village>タグの定義中に記述されているので、ルートタグが<avatarList>や<period>であるようなXML文書は普通に存在が可能で、バリデーションチェックも通過するだろうと認識しているのですが、確認はしていません。

ここさえOKならhironyticさんの要件は満たせそうでしょうか。
#55932 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-03-06 14:46 by hironytic #56132)

そうですね。その方法でも十分な気がします。
もともとvillageの下にはavatarListは必要ですが、periodは特に必要ではないので個々のperiodを1つずつ別のサブドキュメントに持っていくことができそうですね。
#56084 への返信

RE: アーカイブスキーマ改訂案 (091001版ベース) (2011-04-20 01:36 by olyutorskii #56954)

というわけで、とりあえずG国新メッセージだけでも対処しておきました。

新スキーマ(110420版)
http://jindolf.sourceforge.jp/xml/xsd/bbsArchive-110420.xsd

新アーカイバ(1.501.2版)
http://sourceforge.jp/projects/jindolf/releases/51718
#55780 への返信