Wow, you're way ahead of us and by the looks of it most of the industry.
Thank you, Chris. I suspect I am a bit ahead - but who knows? The big problem for me is getting people to understand what I'm doing and why...
One of my managerial colleagues recently said: "
You're so close to the Holy Grail, you can smell it!" Which is pretty true for me... That's why I'm so excited!
Also, why should I be ahead... You're working on, potentially, similar lines. The stuff I'm doing is, essentially, from first principles...
I'm curious about your definition of Conceptual Modelling. Can you give me an example of a conceptual model? Can you generate code from a conceptual model (I suppose it depends upon the model)?
I don't model systems directly. I create models of the world and then implement them in systems. The reasoning for this is:
In a battle between the real world and the system, who's going to win? So make sure your system is
consistent (that word again) with the world in which it needs to operate...
For example, in a previous life, I was involved in medical fraud detection. I built a (principally) data model of what a health claim looked like (not the form, but it's conceptual content), added doctors, patients, insurance providers, addresses, diagnoses, treatments etc. I use a mechanism that allows me to output the model content as narrative - the model "speaks" back to you it's business rules (as best I can model them). The narrative rules are directly intelligible to a domain expert who knows nothing about modelling.
Thus these models are directly conceptual. They model the business. One of the problems with CASE tools is that they are limited by the fact that they are targeted at code generation. Therefore they have only enough syntax and semantics to "cut code". To conceptually model, you need more than that. However, with UML2, I can pretty-much accomplish everything I need with UML2 and a few "tweaks".
Does that explain things better?
I'm also curious about the process you used to define your XSDs. My instinct would have me working from artifact back to model. So take a sample of the artifact that I want to generate, create a first cut template for it. Then use the template parameters to start the definition of the intermediate language. Then try to emit the intermediate language from the model.
Yes, I've been through that process, except now I'm targeting multiple artifacts. I've had the fortune of having led a varied professional life, I've coded, designed, architected, tested, business analysed, consulted etc - pretty much done everything. In each area, I've thought about what information (metadata) would I need to ensure I did the right job and produced the needed outcome?
So the approach I took was: What do I need from the model?
Next I created a conceptual model of the world I needed to work in -
the model. I created this model in XMLSpy. The XSD was the form (and the output), but I was modelling! In
my model, A
Model, consists of
Namespaces with
Elements (Sparxians are you listening?
Everything is an element!). The Elements are subtyped into Classifiers (Shapes), Relations (Connectors), Containers (Packages, Diagrams etc). From there into the particular etc...
At present, I'm using the CTF. So the model is most complete in that area. However, to make sure I can expand into the full model later after my bootstrap, I've modelled a lot of the other stuff as well (to a greater or lesser degree).
How difficult was it to generate the intermediate XML from the model through the CTF? Do you do it directly in the templates or do you call an external component?
Surprisingly easy! Once you get your head around the way the CTF works! I can basically emit almost all I need (in the Class diagram area) with the CTF. I did have to make one compromise. In the CTF, you can only get those relations outbound from you (as far as I can see) so I've split the relations into bi-directional links which are joined by the GUID. Each Classifier Element contains a list of outbound links. Within CodeSmith, I will reassemble the links into n-ary relations, as required.
I'll understand if you can't answer some of these questions due to IP concerns.
Chris.
I've had some clarification and I can keep talking, for the present.
Does this help?
Cheerz,
Paolo