As I see it, we're not going to reach consensus on this issue. I guess this is at least in part due to the fact that we disagree on the basic premises underlying this redesign. I am -1 to the current proposal, and I'll give my reasons below. However, I think we've mostly discussed most of what I have to say, and if everybody else thinks the current proposal is a good idea, I will not stand in its way. Anyway, here goes.

The current view redesign proposal IM not so HO doesn't help in making views any clearer. We are perpetuating the current view implementation, albeit with a handful of additional interfaces that are 90% identical to the CAS interface. That shows that there's something seriously wrong with this design. If this is all we want to do, there's a much simpler way: no separate view API, just a setCurrentSofa(Sofa) on the CAS. With a default Sofa, that gives us 100% backward compatibility. I'm not seriously proposing this, mind you, but it's preferable to the current proposal (but see below).

The switch from single-artifact CASes to multi-Sofa CASes and views was a fundamental change in the basic UIMA architecture. We are not doing our users a favor by hiding this change from them. By sacrificing a clean design to backward compatibility, we may keep some existing users happy, but we're not going to gain any new ones. If even UIMA developers find it that hard to get their heads wrapped around the concepts and APIs, how much harder is it going to be for new users?

I question the need for backward compatibility for Sofa-unaware annotators. Those days are over. This basic tenet robs us of the ability to clean up the CAS APIs. For example, when I look at the CAS APIs from a world where views are real, I naturally expect CAS.getIndexRepository() to return all indexes in the CAS to me, not just the ones for the default view.

The CommonCas interface adds to the confusion, because it isn't (a common CAS API). It follows the methodology that everything that can be abstracted, is abstracted. However, that's not how people think. We like to think in API groups and what things logically belong together, not what can and can not be grouped because of method return types. So all it does is add to the confusion because you always have to look in two places for APIs.

So here's what I would do:

- No view API in UIMA 2.x. Possibly change the view/sofa related APIs in a manner indicated above (CAS getView(String viewName) -> void setView(String viewName) etc). I would find that much more intuitive, but I'm not hopeful that other people on this list will.

- Start discussing UIMA 3 now. Take a clean slate approach, consider how we want to handle indexing in the future. Have a couple of beta releases to get feedback from users.

- Support both UIMA 2 and 3 in parallel, for as long as necessary. Consider interoperability, possibly in the same JVM.

I really think that the CAS/view redesign proposal as it currently stands will make things even worse, and that it should be reconsidered.

--Thilo

Reply via email to