2014-03-21

UMLの矢印たちをXMLエンコードするときに順番の決まりがあるわけではないらしい

まあ、表題で尽きるわけですが、フォーマルに書こうとすると「俺無知だった」視点の試行錯誤が抜けて意味がわからなくなる文化ギャップ系の話。

UMLモデリング(本当は論理モデリングっていうのかな)で作られた標準ありますでしょ。ISO19115(地理情報メタデータ)なんかが念頭にあるわけですが、大抵UMLが本則(authoritativeとかいう)でデータ辞書とか(あれば)XSDが参考だって位置づけにされるんですよね。

で、実際問題としてはXSDで記述されるXMLが使われて、子要素の順番が問われるエンコーディング(UMLの構造をどうやって具体構造に対応付けるか)が行われるわけですから、順番を知らなきゃ話になりません。しかしUMLを見ても箱からいっぱい線がでていて、どの順番でXMLの子要素にするのかは自明ではありません。

で、IWXXMで同じことをやるので聞いてみたわけです。せんせー、上から右回りとかジグザクとか規則あるんですか。

答は、「そんなものはない」でした。

UMLモデリングツールであの図を作っているときは、線にタグという見えないデータが貼り付けることができて、それを使って線に1,2,3,…て順番をつけておくと、GMLエキスポートツールがその順番に xs:element を書いてくれるんだそうです。

UMLは図形言語なはずなんですが、実際問題としては図形表示に見えてこないことが大事なんですね。まあ、19115の場合はXML表現はあくまで表現の一例なので、あくまで順番は決まっていないから、UMLが本則になっているのだ、というべきかもしれません。実際問題としては19115−1の今次改正でデータ辞書の順番を変えないように気をつけたとかいうくらいで、強烈に意識されてはいるんですが。で、IWXXMでは特定のXML表現を必ず使うことになるので、UMLではなくXSDが本則になるのは、そういうわけだそうです。

そういえば、UMLをXSDに翻訳することをシリアリゼーションと呼んでいました。普通は、アプリケーション内の個別のインスタンスをメモリ内構造からファイルなりHTTP応答のオクテット列に変換することをシリアリゼーションというんだと思いますが、メモリ内構造→UML、ファイル→XSDという塩梅でそれぞれメタなものに置き換えた操作もシリアリゼーションではあるのでしょう。でもって、直列化イコール順番の導入ですから、順番が問われたのも当然のなりゆきではあります。

それにしてもなあ、順番を手入力するとなると、モデルというものの本質が線条的なもんだと言っちゃってもいいような気がするんですよね。じっさいUMLはモデルの表現にすぎないって意見も出てたし。結局、BNFみたいな線条的な言語で書いちゃったほうがよっぽどわかりやすいし、ツール(今はAltovaじゃなくてEnterprise Architectが使われている)のサスてナビリティが高い気がするんですが、それはFortranのBNFとかyaccとか読みすぎなんですかね。まあ、事務処理だってMSWordやめてTeXでやるかといってるようなものかもしれません。

0 件のコメント:

コメントを投稿