ものがたり(旧)

atsushieno.hatenablog.com に続く

Rick JelliffeのW3C Schema Experience Workshopに関するコメントがなかなか興味深い。

文法上の曖昧性と意味論的曖昧性というのは、違うものであって、文法上曖昧であっても意味論的に同一である構造というものを作ることが出来るはずだ(未来形)という話。(ってそこだけ切り出すのかよ)

めんどくさい話ではある。というか文法上曖昧性が無い場合であっても、たとえば1)要素内容にBとIDの属性xをもつ要素A、2)要素内容にCとduration型の属性xをもつ要素A*1、について、1)と2)をchoiceで選べっていう曖昧ではない場合であっても、これをStAXやXmlReaderみたいなストリーミングでオブジェクトマッピングしろ、と言われても出来ないので*2、曖昧性を排除するannotationがどれだけ有用であるかというと微妙だ。もちろんツリー構造からのマッピングは理論上可能だけど*3

そもそも非決定的内容モデルって何なんだろう。何処にも権威的な定義は無いように思われる*4。そもそも前提が統一できるのか。開始タグと一連の属性のみで内容モデルが一意に決定できれば、XMLリテラルベースではストリーミングが可能だけど*5XML Infosetが常にリテラルベースで提供されるわけではない。XMLデータベース(特にそのクエリ結果のstreaming reader)は属性と要素を別々に返し、かつ要素は名前空間を保持している、なんて場合も十分に考えられる。

まあ、また何か出てきたら考えてみようかね(傍観者モード)。そういえばDTLLも「構造が非決定的内容モデルじゃないからオブジェクトマッピングがめんどくさいんだけどー」ってJeni Tennisonに投げたら、それっきり何も返ってきてないや。DTLLもsyntax definition languageであってsemantics definition languageではないんだろうな、たぶん。

*1:ちなみにIDとdurationっていう組み合わせは狡猾な例で、IDのvalidityを検証する際には、通常はIDプールに同一のIDが無いかチェックするという機能要件があるし、durationは妥当なIDになりうるもので、かつもとの文字列が正しく復元されるとは限らない。そのツリー内で、canonical expressionをもつIDが既に存在していたかもしれない。

*2:内容がBならxはID型、内容がCならxはduration型に決まっているが、子要素は属性が出現した後で出てくるので、属性xの解釈を決定できない。

*3:どう実装するのかは僕は知らないので、興味のある人はRelaxerソースコードでも眺めればいいと思う。

*4:WXSの非決定内容モデルは、XMLリテラルベースのストリーミング シリアライゼーションが可能であるように設計されているけど、構造モデルが無用にイケてない(xs:allだのsubstitution groupだのtype derivationだの)ので、参照モデルとしては論外だ。

*5:XML名前空間スキーマ構造の前提とするならば、属性を全て取得することなく要素の名前空間を決定することは不可能なので、開始タグは一連の属性とは切り離すことが出来ない