Hi Andrea; just to let you know there have been some request on the user 
list about making the method names consistent. If you can consider the 
following requests I would like your feedback.

- FeatureType.getAttribute(): AttributeDescriptor
- Feature.getAttribute(): Attribute

The duplication of method names results in hard to understand code. Here 
is the suggested improvement:
- FeatureType.getAttributeDescriptor(): AttributeDescriptor
- Feature.getAttribute(): Attribute

Now it may be a case of - too late. I will understand if that is the case.

Remaining comments inline.

Andrea Aime wrote:
> Hi,
>
> I'm trying to continue Justin's work on simple features backed
> by arrays of Objects and I'm having issues with validation,
> it seems to me I've found a design flaw with restrictions.
>   
Cool. As I recall restrictions are captures as a Filter.
> Restrictions in the new feature model are created by
> using Filter objects attached to the attribute type definition,
> the filter is applied to the value and
> it has to decide whether it's valid or not.
>
> With the standard Feature implementation the "value" is in
> fact an Attribute, meaning not really just the value, but
> also its name and whatnot. Given a filter such as
> "len(myStrAtt) < 3" to be used as a restriction, the evaluation
> over the "value" goes fine because we have a PropertyAccessor
> that is able to evaluate myStrAtt against a Property, which
> Attribute is a subclass.
>
> Enter the "real" simple feature. There is no Attribute around,
> we only have the AttributeDescriptor on one side, and the
> actual value on the other. Trying to apply the above filter
> on the value fails. Trying to wrap the value into a
> Attribute built just for the sake of validation works,
> but seems "wrong". Given the AttributeType and the value
> the validation should have all it needs, no?
>   
I think the problem is this; filters make use of the assumption that a 
propetyName expression can be used to obtain the value. In the case of a 
"naked" Object we have no valid name representing "this".

So two suggestions:
- use the property name "this"; or use the property name "value" and 
proceed with life.
> The problem seems to be logical to me thought. The validation is
> expressed at the level of AttributeType, a level where the
> attribute name is not even known (the actual attribute name is
> in the descriptor). As such, the filter that sets up a restriction
> should not try to use the attribute name at all, but use
> a generic way to say "the value", whatever is the value passed
> to the filter for evaluation.
>   
We are in agreement.

You will notice we have a similar problem in determining the "default" 
geometry; we ended up using empty string ie ff.property("") as a special 
case.
The expression resulted in:

ff.contains( ff.property(""), ff.literal( polygon) );

The idea was that "" represented an xpath pointing at the feature;

This boils down eventually to a call to:
expression.evaulate( feature, Geometry.class );

In effect we are asking for the feature; evaulated into a Geometry - a 
good definition of a default Geometry as anything.

Still it may be better to review the xpath notation; perhaps something 
like ff.property(".") is more explicit?
> The fact that the validation works with the current simple
> features is purely incidental, because AttributeType and 
> AttributeDescriptor share the same name, but that's not
> true in general. Yet, a filter specified of a restriction
> of the type should be logically using the name of the type,
> and not the name of the descriptor (whilst the Attribute name
> is the one of the descriptor).
>   
Thanks Andrea you have indeed found a flaw; but not one that we totally 
need to fix until Gabriel  has the complex datastore stuff working again.
> Is there any way to setup an expression that returns the "feature" itself, 
> that is, one that always does satisfy:
> expr.evaluate(a) -> a
>   
Right now we use ff.property(""); but I suspect if we look at xpath that 
ff.property(".") will actually be correct.
> If we had that kind of expression, let's call it <theValue>, then
> the attribute validation above could be expessed as:
> "len(<theValue>) < 3"
> and that could work in all cases.
> It seems to me that the opengis model does not have such a thing,
> which would imply the validation on GeoAPI is ill defined?
>
> Opinions?
>   
Right on Andrea; I remember this (along with the method names) as 
something we were going to revisit after we had some hands on 
experience. So do we feel experienced now?

Jody

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to