ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

XML→XMLスキーマ→EMF→EclipseでXMLエディタの話(その1)

2009-09-09 18:24:46 | Weblog

 ここ
EclipseとEMFを使用した簡易XMLエディタの作成
http://codezine.jp/article/detail/100

をみて、「おお、じゃ、struts-config.xmlを読み込んで、struts-configエディタを作ろう!」
とおもった。

で、途中までのご報告




■XML→XMLスキーマ
 まず手始めに、struts-config.xmlをXMLスキーマにしようとおもった。

 これは、意外とすんなりうまくいって、
Trang
http://www.thaiopensource.com/relaxng/trang.html

のDownload、trang-20081028.zipから、ZIPファイルを落とし、解凍、なかにあるjarを取り出し、

java -jar trang.jar struts-config.xml struts-config.xsd

を実行したら、すなおに、struts-config.xsdというXMLスキーマが出来た。




■XMLスキーマ→EMF

 そこに書いてあるとおりに、
(以下斜体は上記サイトより引用)

[File]メニューから[New]を選択し、[Other]をクリックします。

 すると、ウィザードが起動しますので、ツリーの中から[Eclipse Modeling Framework][EMF Project]を選択します。

とやっても、EcoreかRoseを選択して、XMLスキーマを読み込めるようにはならなかった。

で、(以下、自己責任でやってください。戻らなくなっておかしくなるかも??)
Eclipse Modeling Framework Project (EMF)の、
Downloads
http://www.eclipse.org/modeling/emf/downloads/

から、EMF and XSD の、All-In-One SDK (Runtime, Source, Doc) をダウンロードして
emf-xsd-SDK-2.5.0.zipとして保存、解凍。
解凍して出来た、pluginsとfeaturesをeclipseの同じフォルダに上書きして再起動。

 同じように

[File]メニューから[New]を選択し、[Other]をクリックします。

 すると、ウィザードが起動しますので、ツリーの中から[Eclipse Modeling Framework][EMF Project]を選択します。

をやって、プロジェクト名を入れてnextをクリックすると、今度はXMLスキーマがでてきて、選べる。なので、XMLスキーマを選んで、あと、テキトーに入れると、プロジェクトが出来るところまではきた。




あ、時間だ。
きょうは、ここまで。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UML等各種ダイアグラムのエラーチェック体系化(その27:UML、構造化設計の意義)

2009-09-09 14:42:45 | Weblog

 きのうの「UML等各種ダイアグラムのエラーチェック体系化」で、UML、構造化設計のダイアグラム間の関係は、こんな風だと書いた。


 アクティビティ図は、DFDにくらべ、制御構造を持っている
 アクティビティ図は、ユースケース図にくらべ、データ情報を持っている。
 アクティビティ図のデータ部分の詳細化がER図になる。
 アクティビティ図+ER図からプログラムを作ろうとしても、
   画面や帳票のデータ情報が欠かれていないのでつくれない。
 クラス図から、クラスを作ることは出来るが、
   アクティビティ図などからクラスをどう作るかの明示的方法はない。


 ということは、アクティビティ図が一番情報が多いんだから、アクティビティ図だけを作れば、他の図、いらないんじゃないか?
 さらに、アクティビティ図だけじゃ、プログラムが作れないなら、プログラムを作れる図を作成し、そこからプログラムを落とせばいいわけで、そーすると、UMLっていらないんじゃないか。

 もっとはっきり言うと、アクティビティ図に入出力の種類(画面、帳票など)をつけたのが、業務流れ図で、これについて説明しているのが発注者ビューガイドライン「振る舞い編」である。

 とすると、もう、UMLなんていらなくて、発注者ビューガイドラインにそって業務流れ図をつくり、そこからプログラムを起こしていけばいいんじゃないか?
・・・ってことになる。




 で、そうなのか・・・

 たしかに、そーいう考えもある・・・。

 しかし、UMLについて、かつて、ランボー氏は
Interview:「UMLはツールに過ぎない。先ずは使い始めて」とラショナルのランボー氏
http://www.itmedia.co.jp/enterprise/0305/27/epn20.html

といっている。

 もし、UMLが絶対で、これからソースを自動生成しないといけないのであれば、たしかにアクティビティ図でも情報が足りないんだからだめなんだけど、道具立てと考えた場合、有意義な中間生産物をだせるなら、それも意義がある。

 たとえば、UMLじゃないけど、ER図の場合、もしこれに物理的なデータベースとかファイルというものを入れてしまうと、論理操作がしにくくなる。
 しかしER図は、実際には、どんなメディアからの入力でも、共通のデータとして扱うので、操作しやすくなる。
 だから、ER図において、物理的なメディア情報が入っていなくても、それでもって無意味とはいえない。


 という意味では、UMLは、システムを作る道具立てとして考え、ここからプログラムを自動生成するのにこだわらないほうがよさそうに思える。




 じゃ、プログラムを自動生成するには、どうしたらいいか?ということになる。

 これには、業務フローからフレームワークを決定し、プログラムに落とし込むことになる。

 で、業務フローを使うシステム開発手法としては、EAがある。

 ということで、次回からEAと、そこで使う図について、見ていきたいと思います。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Strutsの要素技術の基本的構造(その7 複数ボタン submitのname換え)

2009-09-09 10:47:49 | Weblog

Strutsの要素技術の基本的構造の話。

 今、複数ボタンについて書いていて、UTF-8でやるなら、 submitボタンのvalueの値を直接聞いてしまえば、どのボタンがクリックされたかわかるということを、前回書いた。
 ただ、それだと、以下の問題があると。。

(1)UTF-8以外だったら、これはできない
(2)リテラルを入れているので、I18nできない。
(3)ボタンの処理を1つ1つ独立(1つ1Action)にしたいとき問題

 で、この対策として、

・submitのname(property)を変えてしまい、値が入ってくるかどうかで見る
・javascriptを使って、Action等を切り替える
・LookupDispatchActionを使う

 があるんだけど、今日は、「submitのname(property)を変えてしまい」について。




■概要

 入力時のJSPで、いままではsubmitのvalueを変えているけど、ボタンごとにsubmitのname(strutsタグで指定する場合はproperty)を変えれば、クリックされたところには、値が入ってくる(クリックされないボタンは、値が入らない)のでわかる。

 ただ、この方法は、
  (1)UTF-8以外だったら、これはできない
の対策、せいぜい、
  (2)リテラルを入れているので、I18nできない。
に関して、ソースには日本語を入れていないというレベル(でも画面には、入ってる)で対応しているだけで、
  (3)ボタンの処理を1つ1つ独立(1つ1Action)にしたいとき問題
の対応にはならない。

 あまり意味がないことだが、外国の人にソースを作ってもらう場合などに有効かもしれない。漢字を入力しなくていいとか・・・

 ま、そんなにメリットないと思うんだけど
 (実は、よく本で出ている、LookupDispatchActionも、
  似たようなメリットで、あんまりご利益ないと思う)




■ソース

まずは、入力画面のJSPについて

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ page contentType="text/html; charset=utf-8" %>
<html:html>
  <HEAD>
    <TITLE>足し算</TITLE>
  </HEAD>
  <BODY>
<html:form action="/tashizan" focus="parm1">
<html:text property="parm1" size="6"/>と
<html:text property="parm2" size="6"/>を<BR>
<html:submit property="tasu"  value="足す"/>
<html:submit property="hiku" value="引く"/>
</html:form>
</BODY>
</html:html>

(上記 < > は、本当は半角)
submitのところ、足すは、propertyがtasuに、引くは、propertyがhikuになっている。
こうすると、Actionのソース(tashizanAction.java)は
package tashizan;

import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.apache.struts.action.*;

public class tashizanAction extends Action {
	 public ActionForward execute(
		     ActionMapping mapping,
		     ActionForm form,
		     HttpServletRequest request,
		     HttpServletResponse response) {

	        tashizanActionForm myForm = (tashizanActionForm)form;
        	HttpSession session = request.getSession();
        	String nextStep="success";	//	次画面

        	try
	        {
	        	int	i1	=	Integer.parseInt(myForm.getParm1());
	        	int	i2	=	Integer.parseInt(myForm.getParm2());
	        	String hiku = myForm.getHiku();
        		if ( ( hiku != null ) && ( hiku.equals("") == false))
        		{
        			session.setAttribute("kekka", String.valueOf(i1-i2));
        		}
        		else
        		{
        			session.setAttribute("kekka", String.valueOf(i1+i2));
        		}
	        	nextStep	=	"success";
	        }
	        catch(Exception e)
	        {
	        	session.setAttribute("kekka", "数値を入れてください");
	        	nextStep	=	"error";
	        }
        	return (mapping.findForward(nextStep));
	 }
}


というように、引き算なら、hikuに「引く」という文字が入っているから、
   hiku.equals("") == false
となる。それを利用している。

もちろん、ActionForm(tashizanActionForm.java)も
package tashizan;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.*;

public class tashizanActionForm extends ActionForm {
    private String parm1;
    private String parm2;
    private String tasu;
    private String hiku;

    public String getParm1() {
        return parm1;
    }

    public void setParm1(String parm1) {
        this.parm1 = parm1;
    }

    public void setParm2(String parm2) {
        this.parm2 = parm2;
    }

    public String getParm2() {
        return parm2;
    }

    public void setTasu(String tasu) {
        this.tasu = tasu;
    }

    public String getTasu() {
        return tasu;
    }

    public void setHiku(String hiku) {
        this.hiku = hiku;
    }

    public String getHiku() {
        return hiku;
    }
 
}

のように、tasuとhikuを追加する。




けど、ドーデもいい方法であるには、ちがいない(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする