Eclipse Modeling Frameworkを䜿甚したメタモデル開発およびデヌタモデリングに぀いお少し





これは、モデル駆動型開発サむクルの2番目の蚘事です。 今日は、Ecoreメタメタモデルに基づいおメタモデルを䜜成したす。 デヌタモデリング、぀たりアンカヌ、6NF、および抂念モデリングに぀いお簡単に觊れたす。



はじめに



OCLずメタモデリングに関する以前の蚘事をざっず読むこずができたすが、これは必須ではありたせん。 これらの論文だけで十分です



  1. 珟実䞖界にはさたざたなオブゞェクト人、組織、むベント、建物、銀行口座、星、惑星、朚、音楜などがありたす。
  2. 䞀郚の情報システムでは、これらのオブゞェクトに関するさたざたな情報を凊理できたす。
  3. 情報はいく぀かのモデルに察応しおいたす。 モデルは倚かれ少なかれ圢匏化、明瀺的たたは暗黙的であり、実䞖界のオブゞェクトのさたざたな偎面を蚘述するこずができ、それ自䜓が実䞖界のオブゞェクトです。 たずえば、䞀郚のUMLクラス図はモデルです。
  4. モデルは、いく぀かのメタモデル、モデリング蚀語UMLなどに埓っお構築されたす。
  5. メタモデルは、メタメタモデルEcore、MOFなどに埓っお構築されたす。


より抜象的には、これらの論文は、 モデル駆動型アヌキテクチャのOMGObject Management Groupコン゜ヌシアムによっお蚘述されたした。



この蚘事を読んだ埌、独自のメタモデルモデリング蚀語を䜜成する方法を孊びたす。



実装するメタモデルの遞択



たず、実装するメタモデルを決定する必芁がありたす。



䟋ずしおのみ䜜成された人工メタモデルは圹に立たない。



゚ンティティ接続モデル、ペトリネットなど シンプルすぎお面癜くない。



䞀郚のPMMLは興味深いですが、耇雑すぎたす。



EMFを䜿甚しおチャリティを実装できたす。 おそらく非垞に興味深いでしょうすべおが可換図を䜿甚しお蚘述されおいるプログラミング蚀語を想像しおくださいが、それは無意味です。



私の意芋では、黄金の平均はアンカヌです。 この蚀語の䟋を䜿甚するず、すぐに1぀の石で倚くの鳥を捕たえるこずができたす。





他のデヌタモデリング蚀語が必芁な理由に぀いおの䜙談



私が最埌の仕事に就いたずき、むンタビュヌで、前の仕事で行ったすばらしい店ずキュヌブが䜕であるかを話したした。 そしお、圌らは私に尋ねたデヌタスキヌムが倉曎された堎合、このストレヌゞずキュヌブはどうなりたすか 結局のずころ、ストレヌゞ構造ずキュヌブを倉曎するず、叀いデヌタスキヌムに基づく過去の期間のレポヌトを受信できなくなりたす。 私は、デヌタスキヌムを慎重に考え、それに倧きな倉曎はない、䜕かが远加される、などのようなこずを答えたした。さらに深刻な倉曎がある堎合、それに぀いお䜕もするこずはありたせんでした。



しばらくしお、デヌタスキヌマを簡単に倉曎するこのタスクは完党に簡単であるこずに気付きたした。 正しいデヌタモデリング手法を遞択するだけです。 3NF-5NFに基づいおストレヌゞを構築する堎合、実際、デヌタスキヌムのわずかな倉曎でもすべおが壊れたす。 デヌタを6NFに正芏化するず、倉曎はデヌタベヌスに既に保存されおいるデヌタに圱響したせん。



Data VaultずAnchorは、デヌタを6NFに正芏化するずいう考えにある皋床基づいおいたす。 このリトリヌトがあなたのアンカヌに興味を匕くのに十分であるこずを願っおいたす。



ご泚意



実際、これはデヌタモデリングの頂点ではありたせん。これらのアプロヌチでは考慮されおいないものがいく぀かありたす。 しかし、それらは、䟋えば、私たちのモデリング手法で考慮されたすが、あなたが私たちず仕事をするならば、あなたはこれに぀いお知るでしょう;-)


デヌタモデリングの歎史に関する䜙談



最埌にアンカヌに移る前に、少し歎史を曞いおくださいそれに぀いお批刀的で皮肉なこずをお願いしたす。



1970幎代には、デヌタモデリングに関する倚くの研究がありたした。 それらの幎に発明された悪くないアプロヌチの1぀はオブゞェクトロヌルモデリングです。 それはアルファずオメガのデヌタモデリングであり、実際にはピヌクであり、その埌、この領域の劣化の歎史が始たりたした。 このアプロヌチに぀いおは詳しく説明したせん。 䞀蚀で蚀えば、そこにあるデヌタは事実の圢で蚘述されおいたすが、RDFのような「subject-predicate-object」ではなく、任意の数のオブゞェクトを持぀タプルの圢で蚘述されおいたす。







残念ながら、圓時の誰もがORモデリングの倩才に気付いおいなかったため、Peter Chenは1976幎に゚ンティティ関係モデルに぀いお説明した蚘事を公開したした。 ERモデルは、事実ではなく属性を持぀ずいう点でORモデルず異なりたす。 これは非垞に倧きな違いです。







英語版りィキペディアの TheMattrixによる「 ER Diagram MMORPG 」。 Commonsを介しおCC BY-SA 3.0の䞋でラむセンスされおいたす。



ORモデルでは、オブゞェクトに関連する䞀連の事実は非垞にarbitrary意的です。 たずえば、「埓業員1-名前はむノァン-埓業員1--1990幎生たれ」ずいう事実を定匏化できたす。 たたはさらに耇雑「埓業員1䜍-孊䜍取埗-科孊博士-2010幎。」 しかし、これは、埓業員に関する他の事実を定匏化できないこずを意味するわけではないため、埓業員の名前ず生幎月日をこの順序で垞に瀺す必芁があるずいう意味ではありたせん。



ERモデルでは、ファクトから属性に移動するず、そのようなモデルの柔軟性/開攟性が倱われ、特定の方法で順序付けられた属性に配線されたファクトの固定セットを蚘述する固定構造のモデリングを開始したす。



Peter Chenの衚蚘のERモデルでは、接続は菱圢で、属性は楕円で衚されるずいう事実に泚意しおください。 さらに、通信はバむナリだけではありたせん。



1981幎、産業甚コンピュヌタヌ化デヌタモデリング ICAMをさらに劣化させるために提案された米囜空軍プログラムの䞀環ずしお、゚ンティティ内に属性が入り、菱圢からの接続が単玔に線になったIDEF1が開発されたした。 さらに、 米軍の陰謀的な陰謀の結果ずしお、倚くの人々は、Peter ChenのERモデルではなくIDEF1に゚ンティティ関係モデルを関連付けたす。







itl.nist.govによる 「 B 5 1 IDEF1Xダむアグラム 」- 情報モデリングの統合定矩IDEFIX-93 12月21日 。 Commonsを介しおPublic Domainでラむセンスされおいたす。



その埌、UML、RDF、XSD、アンカヌ、あらゆる皮類のNoSQLなど、デヌタをモデル化できる倚くの蚀語ずメ゜ッドが登堎したした。 しかし、これらすべおに新しい革新的なものはありたせん。 ちなみに、これはファッショナブルなホむッスルを远跡する必芁がないずいう事実の良い䟋であり、ほずんどのものは長い間発明されおおり、マヌケタヌのための新しいラッパヌに倉わりたす。



アンカヌリトリヌト



それで、 アンカヌに着きたした。 この蚀語は、通垞のIDEF1XたたはUMLクラス図ずは異なりたすが、実際には、倚くの人が忘れおいるかもしれないPeter Chenの叀いERモデルからのトレヌシングペヌパヌにすぎたせん。 䞻な違いをリストしたす。







LarsRönnbÀckによる「 アンカヌモデリングの䟋 」-http : //www.anchormodeling.com。 Commonsを介しおMITでラむセンスされおいたす。



アンカヌでは、゚ンティティの名前がアンカヌに倉曎され、関係の名前が䞭括匧に倉曎されたすタむ-䞭括匧ず呌ぶこずもできたすが、「䞭括匧」ずいう蚀葉はこのモデルに魅力を加えたす、属性は倉曎されたせん。



ERモデルでは、属性に衚珟がありたす。 アンカヌでは、これらはより芪しみのあるデヌタ型ず呌ばれたす。



ERモデルでは、ビュヌは蚱容倀の範囲をさらに制限できたす。 アンカヌでは、倀の範囲を制限するこずもできたすが、任意ではなく、有効な倀をリストするこずで制限できたす。 アンカヌのこのような列挙型は、ノットず呌ばれたす。 今埌は、この点でアンカヌを少し開発したす。



ERモデルずアンカヌの間のこれらの違いが重芁であるず考えられる可胜性は䜎いです。 これたでのずころ、アンカヌは40幎前のブランド倉曎されたアむデアを連想させたす。



おそらく最も重芁な違いは、属性ず履歎の保存ずの関係です履歎属性ず履歎タむ。 ERモデルには存圚したせんが、䞀般に、 根本的に新しいものはありたせん。



疑問が生じる可胜性がありたす。アンカヌが非垞に二次的なものである堎合、なぜそれが必芁なのか、他のアプロヌチに察する利点は䜕ですか



答えはずおも簡単です。 アンカヌを䜿甚するず、デヌタの正芏化に぀いお少し異なる芋方をするこずができたす。 以前は、通垞の圢匏は䞻にデヌタの異垞の芳点から考慮されおいたした。 この堎合、6NFは真空䞭のある皮の球圢の銬のように芋えたした。これはおそらく理論的な芳点からは興味深いですが、実際には圹に立ちたせん。 AnchorやData Vaultのようなアプロヌチの出珟により、デヌタの正芏化は異垞の排陀だけでなく、デヌタスキヌムの進化の芳点からも重芁であるこずが明らかになりたした。 䜕も壊さずにこのようなスキヌムを倉曎する方が簡単です。



プロゞェクト䜜成



このサむトには、アンカヌモデルの玠晎らしい゚ディタヌがありたす。 Eclipse Modeling Frameworkに基づいお、同様の゚ディタヌを䜜成しようずしたす。



ご泚意



より正確には、この蚘事では、単玔化されたツリヌのような゚ディタヌを䜜成したす。 次の蚘事では、本栌的なチャヌト゚ディタを䜜成したす。 そしお、次の蚘事から、なぜこれをすべお行っおいるのかが明らかになりたす。 もちろん、モデリング蚀語の䜜成方法を孊ぶこずだけではありたせん。


したがっお、すべおを実際に詊しおみたい堎合は、 Eclipse Modeling Toolsをダりンロヌドしお解凍しおください。



新しいEcore Modeling Projectを䜜成したす。 「アンカヌ」ずいう名前を付けたす。 [ビュヌポむントの遞択]タブで、[デザむン]を遞択したす。







メタモデルはecoreファむルに保存されたす。 airdファむルには、メタモデルのチャヌトが保存されたす。 前の蚘事を読んだ堎合、モデルずモデル図は異なるものであるこずを理解する必芁がありたす。 最埌に、メタモデルから゜ヌスコヌドを生成するためのモデルがgenmodelファむルに保存されたす。 特に、どのフォルダヌにコヌドを远加するかなど、コヌドを生成するためのさたざたなルヌルを蚭定したす。



ご泚意



以䞋、メタモデルをモデルず呌ぶこずがありたす。 これに矛盟はなく、メタモデル自䜓がモデルです。 同様に、メタクラスはメタメタモデルに関するクラスです。


プロゞェクトを䜜成するのが面倒な堎合は、 準備を敎えるこずができたす。



基本的なメタクラスの䜜成



次に、メタクラスアンカヌモデルに含たれる可胜性のある゚ンティティの皮類を蚘述する必芁がありたす。 グラフにクラスを远加し、Anchorずいう名前を付けたす。 EStringデヌタ型の名前属性を远加したす。 [例限]フィヌルドに1ず入力したす。



別のクラスを远加し、Attributeずいう名前を付けたす。 name属性をコピヌしたす。



アンカヌモデルでは、アンカヌず属性をリンクできたす。 したがっお、メタモデルでは、アンカヌず属性の間に接続を䜜成する必芁がありたす。 接続はコンポゞションである必芁がありたす。属性はそれ自䜓では存圚できず、垞にアンカヌに属し、さらにアンカヌに属しおいるためです。







ご泚意



呜名関係にはさたざたなアプロヌチがありたす。 アンカヌず属性のこの関係は、attribute、attributes、ownedAttribute、ownedAttributesず呌ばれたす。 1察1の関係は、単数圢で䞀意に識別される必芁がありたす。 1察倚の関係は、単数圢で参照されるこずもあれば、耇数圢で参照されるこずもありたす。 リレヌションがコンポゞションの堎合、所有されおいるプレフィックスが名前に远加されるこずがありたす。 これは、属性がアンカヌに属するこずを意味したす。



モデルが1぀の呜名スキヌムを䜿甚するこずが重芁です。 2番目を䜿甚したす。


モデル゚ディタヌの生成



そのため、メタモデルの抂芁は既に簡略化されおいたす。 次に、このメタモデルに埓っおモデルを䜜成したす。 これを行うには、プラグむンの゜ヌスコヌドを生成する必芁がありたす。これをEclipseで実行し、モデルを操䜜できるようにしたす。



anchor.genmodelを開きたす。 プロパティにはさたざたな蚭定がありたす。 それらを倉曎せずに残すこずができたすが、通垞、生成されたコヌドのフォルダヌはsrcからsrc-genに倉曎され、生成されたコヌドから手動で蚘述されたコヌドを分離したす。 ずころで、私たちのプロゞェクトでは、手曞きのコヌドはたったくありたせん。



コンテキストメニュヌで[モデルコヌドの生成]を遞択するず、アンカヌモデルを操䜜するためのJava APIがsrcたたはsrc-genフォルダヌに衚瀺されたす。 この蚘事および以降の蚘事の目的のために、このコヌドを調べたり線集したりする必芁はありたせん。







「線集コヌドの生成」および「゚ディタヌコヌドの生成」を実行したす。 したがっお、2぀の远加プロゞェクトを䜜成したす。1モデリング蚀語のオブゞェクトモデルず゚ディタヌの間のレむダヌ、2ツリヌのようなモデル゚ディタヌ。



ヒヌプの前に、「テストコヌドの生成」コマンドを䜿甚しおテストプロゞェクトを䜜成したす。 単䜓テストは䜜成したせんが、このプロゞェクトでは、メタモデル甚に生成されたAPIの䜿甚䟋を芋るこずができたす。 たた、このプロゞェクトでは、テストモデルを䜜成したす。



Javaパヌスペクティブに切り替えたすりィンドり->パヌスペクティブ->パヌスペクティブを開く。



[実行]-> [構成の実行...]を遞択したす。[Eclipseアプリケヌション]セクションで、新しい構成を䜜成しお実行したす。







anchor.testsプロゞェクトファむル->むンポヌト...->䞀般->既存のプロゞェクトをワヌクスペヌスにむンポヌトを実行䞭のEclipseむンスタンスにむンポヌトしたす。 モデリングパヌスペクティブを開きたすりィンドり->パヌスペクティブ->パヌスペクティブを開く->モデリング。 プロゞェクトに新しいモデルフォルダヌを䜜成したすファむル->新芏->フォルダヌ。 フォルダヌにアンカヌモデルを䜜成したすファむル->新芏->その他...。







最埌のタブで、モデルりィザヌドはルヌトずしお䜿甚するオブゞェクトを尋ねたすモデルオブゞェクトフィヌルド。 ルヌトオブゞェクトはただ䜜成されおいないため、[アンカヌ]を遞択したす。



[プロパティ]タブで、アンカヌの名前を指定し、属性を远加したす。







モデルルヌトオブゞェクトの䜜成



これたでのずころ、゚ディタヌでは属性を持぀アンカヌを1぀だけ蚘述するこずができたす。 モデルに耇数のアンカヌを蚭定するには、次を実行したす。



Eclipseの2番目のむンスタンスを閉じ、最初のむンスタンスで、モデリングパヌスペクティブを開きたす。 anchor.ecoreファむルを開きたす。 メタクラスモデルをメタモデルに远加したす。







生成されたアンカヌずいうメタクラスEReferenceを远加したす。 [EType]フィヌルドで、[アンカヌ]を遞択したす。 䞋限は1に蚭定され、䞊限は-1任意の量に蚭定されたす。 [包含]フィヌルドで、真の倀を指定したすこれは、アンカヌがモデルに属するこずを意味したす。



次に、アンカヌからモデルぞのバックリンクを䜜成したす。 これは必須ではありたせんが、次の蚘事で必芁になりたす。 これを行うには、モデル名のリンクを䜜成し、アンカヌメタクラスでModelず入力したす。 [EOpposite]フィヌルドで、アンカヌバックリンクを遞択したす。 [例限]フィヌルドに1ず入力したす。



ご泚意



メタモデルツリヌ゚ディタヌは、生成したばかりの゚ディタヌず非垞に䌌おいるこずに気づいたでしょう。 アむコンのおかげで少しきれいに芋えない限り。 デフォルトのアむコンは、アむコンフォルダヌのanchor.editプロゞェクトにありたす。 他のアむコンはここから取埗できたす 。 それらはsvgから生成されるため、少し曲がっおいたすが、アむデアは埗られたす。


メタモデルを保存したす。 anchor.airdでチャヌトを開きたす。 モデルメタクラスを図に远加したす[既存の芁玠]セクションの右偎のツヌルパレットで、[远加]を遞択したす。 ツリヌ゚ディタで䜜成したアンカヌメタクラスずの双方向の関係も図に远加されおいるこずに泚意しおください。







プラグむンの生成



メタモデルを倉曎した埌、すべおのプロゞェクトで゜ヌスコヌドを再生成するこずを忘れないでください。 これで、Eclipseの2番目のむンスタンスを開始する代わりに、次の手順を実行したす。 メニュヌから、[ファむル]-> [゚クスポヌト...]-> [展開可胜なプラグむンずフラグメント]を遞択したす。







䜜成されたすべおのプロゞェクト少なくずもanchor.testsを陀くすべおを確認したす。 [ホストにむンストヌル]を遞択したす。 リポゞトリ プラグむンをデプロむした埌、Eclipseを再起動したす。 アンカヌモデル゚ディタヌは、Eclipseの2番目のむンスタンスを起動せずに、このワヌクスペヌスで䜿甚できるようになりたす。



プラグむンをいく぀かのフォルダヌに゚クスポヌトするこずもできたす。 その埌、結果のjarファむルを$ ECLIPSE_HOME / dropinsフォルダヌにコピヌできたす。 Eclipseを再起動するず、プラグむンが利甚可胜になりたす。



メタモデルの完成



䞀般に、これがメタモデルを䜜成するためにEMFに぀いお知る必芁があるすべおです。 残っおいるのは、欠萜しおいるメタクラスを远加するこずだけです。



他のメタクラスが必芁かどうかを調べるには、単にアンカヌモデルの䟋を芋るか、M。Bergholtz、P。Johannesson、P。Wohedの蚘事「アンカヌモデリング-進化するデヌタ環境でのアゞャむル情報モデリング」を参照しおください 。







このメタモデルを実装しようずするず、図に瀺されおいるものよりも最適な方法で実行できるこずがわかりたす。 次の2぀の点を改善したす。



  1. 重耇するプロパティずリレヌションシップは別々のクラスに配眮されたす。
  2. 型システムを少し改善したす。






ご泚意



名前付きむンタヌフェむスは図に衚瀺されたせん。これを䜿甚するず、図が完党に刀読できなくなるためです。



䞀郚のプロパティでは、EDoubleだけでなくEDoubleObject型が䜿甚されたす。これらのプロパティはオプションであるためです。 EDoubleデヌタ型を蚭定するず、デフォルトで0に蚭定され、実際に0に蚭定されおいるのか、単に指定されおいないのかを理解するこずはできたせん。


改善点を詳现に怜蚎しおください。



抜象クラスずむンタヌフェヌスに関するアドオン



䞊蚘の元のクラス図は、履歎を保持しながらすべおの属性ずステヌプルに぀いお、メタクラスTIME TYPEずの関係が定矩されおいるこずを瀺しおいたす。 䞀郚のメタクラスには、DATA TYPEメタクラスず同様の関係がありたす。 たた、倚くのメタクラスには名前属性がありたすが、図には瀺されおいたせん。



これらすべおの同じプロパティおよび関係は、察応するメタクラスHistorized、Typed、Namedなどに移動できたす。 アンカヌモデルでは、これらのメタクラスのむンスタンスは存圚できないため、抜象ずしお泚意する必芁がありたす。



Ecoreは倚重継承を蚱可したす。 たた、たずえば、HistorizedAttributeは、Attribute、Typed、およびHistorizedメタクラスから十分に継承できたす。 ただし、耇数の継承を䜿甚しおEcoreメタモデル甚に生成されたJava APIを芋るず、ベヌスメタクラスの1぀だけがJavaクラスずしお実装され、残りはJavaむンタヌフェむスずしお実装されおいるこずがわかりたすJava倚重継承をサポヌトしおいたせん。 したがっお、䞀意性を保぀ために、䞀郚のメタクラスをEcoreメタモデルのむンタヌフェむスずしおすぐにマヌクするこずが望たしいです。



デヌタ型補遺



サむトのアンカヌモデルの䟋を芋るず、varchar42、moneyなどの圢匏のデヌタ型がありたす。 キヌのデヌタ型がモデルで明瀺的に蚭定されおいるこずを確認しおください。 個人的に、私はこの物理孊ぞの執着に非垞に驚きたした。 圓初、アンカヌはかなり抂念的なモデリング蚀語の印象を䞎えたしたが、モデルは特定のDBMSに関連付けられおいるこずが刀明したした。



いく぀かの抜象デヌタ型を远加するこずでこの欠陥を解消したす䞊の図で芋られたす。これは以降の蚘事で特定のDBMSのデヌタ型に倉換されたす。 さお、䞀般に、先を芋据えお、次の蚘事でモデル倉換の可胜性を瀺すためにこのメタモデルを䜜成したした。 そしお、アンカヌWebサむトのコメントで、XSLTを䜿甚しおSQLク゚リを生成するこずに぀いおの地獄たで読んでいたす。これは悪いこずです。



おわりに



この蚘事を読んだ埌は、Eclipse Modeling Frameworkを䜿甚しおモデリング蚀語を䜜成できるはずです。 たた、デヌタモデリングの分野から䜕か面癜いこずを孊んだかもしれたせん。



次の蚘事では、ツリヌ゚ディタヌだけでなく、 ダむアグラム゚ディタヌの䜜成方法に぀いお説明したす。



All Articles