On Nov 21, 2007 8:02 AM, Michael Baessler <mba@michael-baessler.de> wrote:
>
> Aaron Kaplan wrote:
> > In Section 1.5.5.4 of "UIMA Tutorial and Developers' Guides" I read:
> >
> > The Default Result Specification is always used for all components
> > of a Collection Processing Engine.
> >
> > Why is this? Is it just because nobody's gotten around to putting in
> > a call to setResultSpecification, or is there some fundamental reason
> > that it couldn't be done?
> >
> > What I would like is that when my annotator is instantiated inside a
> > CPE, it can skip generating certain annotations if no other component
> > in the CPE is going to consume them.
> >
> > -Aaron
> I think this is a documentation issue, but I'm not quite sure. I will
> start a discussion about this on the uima-dev list.
> I think when you use an aggregate AE with a capabilityLanguageFlow as
> flow constraint, a computed Result Specification is used.
>
> If you don't use an aggregate AE as CasProcessor I think it is true,
> that the Default Result Specification is used.
>
Yes, the last thing that Michael said is right.
The documentation may be a little confusing. What it means is that
the default Result Spec is used for all _top level_ components in the
CPE. For an aggregate AE, the rules in section 1.5.5.3 of the
documentation apply _within_ that aggregate.
So it is true that if you have an AE that outputs types x and y, and
you put that AE as a top-level component in a CPE, but no downstream
component of the CPE inputs type x, then the result spec. for your AE
will still include both types x and y. The same would be true if you
wrapped your AE in an aggregate that declared both x and y as outputs.
The bottom line is: downstream components of the CPE have no effect
on the result spec.
I don't think there's any fundamental reason for this, it's just that
no one ever got around to implementing it.
-Adam
|