2010-03 << 2010-04 >> 2010-05

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でアクティビティ図のようなフローチャートのようなものを出力するプログラム書いてみた.コード中のコメントとかを適当に使ってくれます.

test_activity.png

真面目にパースしているわけでは無くて,怪しげな正規表現で必要な情報を取得しています.これは完全ではありませんが,コーディング規約とかに反していなければ問題ない気がします.

仕事中に書いてたような誤解を受けそうですが,休憩中と仕事後に書いてます.…ちゃんと仕事してます.本当です.

2010-03 << 2010-04 >> 2010-05