2010-04-07 (水)
UMLのモデルとかって,勝手にコードと同期してくれるのが常識と思ってたんですが,世の中そうでは無いの?
*XMIでUMLを書く
OMGが策定している,メタデータをXMLで書くときの仕様です.astah(Jude)はUMLをXMIで入出力する機能があるのですが,Professional版でないと使えません.Communityだとjudeファイルしか入出力できなくて,しかも内部データをシリアライズしたっぽい中身で,他のソフトではやたら使いにくい.
手元に,古いバージョンのProfessionalのライセンスがあったので,試しにXMIを出力して,それを編集しながら書式を確認します.
XMI.header 要素
XMI.header要素には,出力したソフトの情報やバージョン等が入っています.モデルの内容には影響しないので,気にする必要なさそうです.
XMI.content 要素
主な情報は,XMI.content要素に含まれています.judeで必要なデータは,UML:ModelとXMI.extensionです.
UML:Model
UMLで表現されるデータはUML:Model要素に入っています.
例:
<UML:Model xmi.id="model001" name="no_title" xmlns:UML="org.omg.xmi.namespace.UML"> <UML:Namespace.ownedElement> <UML:Class xmi.id="c001" name="テスト"> <UML:ModelElement.namespace> <UML:Namespace xmi.idref="model001"/> </UML:ModelElement.namespace> <UML:Classifier.feature> <UML:Attribute xmi.id="attr001" name="属性テスト"> <UML:ModelElement.namespace> <UML:Namespace xmi.idref="c001"/> </UML:ModelElement.namespace> <UML:Feature.owner> <UML:Classifier xmi.idref="c001"/> </UML:Feature.owner> </UML:Attribute> </UML:Classifier.feature> </UML:Class> </UML:Namespace.ownedElement> </UML:Model>
「テスト」というクラスに「属性属性テスト」がある場合はこんな感じです.属性に対して,ownerとnamespace両方を指定しないと行けないあたりが冗長で面倒ですが,仕方ないみたいです.
属性に型情報を付けておかないと,judeで読み込んで編集する際におかしなことになりますが,ここでは無視.
XMI.extension
プロジェクトに含まれる図の情報とか.
色や線のスタイル等の情報もここに入っています.
続く(?)
*svgで出力するプログラム書いてみた
PHPのソースをパースしてsvgでアクティビティ図のようなフローチャートのようなものを出力するプログラム書いてみた.コード中のコメントとかを適当に使ってくれます.
真面目にパースしているわけでは無くて,怪しげな正規表現で必要な情報を取得しています.これは完全ではありませんが,コーディング規約とかに反していなければ問題ない気がします.
仕事中に書いてたような誤解を受けそうですが,休憩中と仕事後に書いてます.…ちゃんと仕事してます.本当です.