Jintrick.netagenda2003年03月アーカイブ → 2003年03月02日

属性によって型を変えるには? (XML Schema)

例えばfooという要素があり、id属性を持っているときにはcomplexTypeな型を持っており、ref属性を持っているときには空要素であるとすると、XML Schemaではどういう風に書けば良いのでしょうか。

XML Schemaのスキーマを定義するXML Schame文書を調べてみました。XML Schemaのelement要素が正にそれなのです。

……。

こいつは私の理解力の限界点に近い気がします。何度見てもいまいち釈然としませんが、element要素をローカルな要素として二通り宣言している辺りで実現していそうなことは、ボンヤリと分かった気がします。もう少し修養が必要なようです。

面白そうなURIを見つけたので参照してみました。

Someday a schema for XSL Transforms will live here

http://www.w3.org/1999/XSL/Transform.xsd より

容易でないことは確かに想像できますが、期待していただけにかなりがっかりしました。

追記

やっぱり何度見ても分かりません。というか、ローカルに宣言されたelement要素の型を見ても、ref属性とname属性の共存を許可しているようにしか見えませんでした。

実際、<xsd:element name="foo" ref="foo" />なる要素をもったスキーマ文書自身を検証してみたのですが、何も文句を言われませんでした。

持っている属性によって型を変えるなんて芸当は、XML Schemaには無理なのでしょうか。とりあえず私には分かりません。

何故XML Schemaに興味を持ったか

XML Schemaに限った話ではないのですが、XMLでスキーマが定義されているということは素晴らしいことなのです。どういうことかというと、スキーマというのは本質的にそれ以上ないほど精密かつ正確なリファレンスなのですが、人にとって理解し辛いのが珠に傷です。 しかしXSLTでお好みの構造を持ったHTML文書か何かに適当に変換してやることで、その精度を微塵も損なうことなく読みやすいドキュメントにしてやることが出来るわけです。リファレンス本等々は、少なくとも構文を学ぶ上では一切必要なくなります。たった一つのXSLT文書を用意しておくだけで良いのです。XML Schemaの場合、適切な位置に詳細なannotationが用意されていれば、もはや解説本や解説サイトが不要になります。自分の好みの、一貫した体系でXML応用言語を効率的に学ぶことが可能になるのです。

従ってスキーマ言語の冗長性は大いに結構な話で、可能な限り豊富な意味付けをして頂きたいと思っています。将来、RDF/XMLでXML Schemaを再定義してもらっても良いくらいです。

XML Schemaで一石二鳥を狙う

やはり一番良い修養方法は、ゼロから言語を設計してやることだと思います。というわけで勢いだけでCSS1をXML化してみようと思い立ちました。これは結構前からやりたかったのですが、CSSのレベル毎の管理やブラウザ対策用プロパティ等の管理、共通プロパティグループの定義等々が可能になります。CSSは見た目シンプルですが、実際には値に多くの型が存在していますし、運用する際にはバグに付き合った解も紛れ込ませなければなりません。専用のツールでもない限り、管理がとても大変です。

尤も、頻繁にCSSを破棄して新しく作る場合には関係ない話ですが、少しずつ改良を加える場合にはだんだんスパゲッティ化してしまうのです(参照:[croix.css] 笑)

そのスキーマとインスタンスを利用することから:

等々の見返り(副産物)を期待しています。

実はスキーマは物理量的には殆ど完成していて、プロパティ(要素として表現)の型定義は書き終えました。CSS1の仕様書に全部書いてありますから機械的な作業で済んだわけです。後は構文をXMLでどう表現するかというところで躓いています。あるセレクタにプロパティを与える方法の一つとして、外部からプロパティのグループを参照させる形を取れるようにしたいのですが……。


webmaster@jintrick.net
公開: 2003年03月02日
カテゴリ: スキーマ