Niels

The rendering system is relevant as we need to keep its performance in mind for 
any change to the evaluation system. As this is a hurdle that any of your 
proposals must pass I my advice to you is to look at the thing for a couple of 
hours.

I promise I am not wasting your time; the goal here is to prevent you wasting 
my time as the discussion quickly moves into rendering issues. Look I know that 
you are just looking at post-filtering WFS requests; I did not forget.

If you make this change (returning true is good; I agree that *or* is the way 
to go!) then for the *first* time filters will return true; throwing multiple 
values at the rendering system. So what is the plan Niels?

The work in app-schema has opened up a number of design issues (handling of 
multiple values is one that was left on the table when this project started; 
ben turned up a need for FeatureCollection to have a descriptor for feature 
members; need some feature builders created etc...) and I am worried that they 
are not getting addressed and are going to be left for a rainy day / code 
sprint.

I am not asking you to address all of these today; just the one you are 
exposing the code base to.

-- 
Jody Garnett

On Tuesday, 10 May 2011 at 3:54 PM, Niels wrote: 
>  Jody,
> 
>  I am not sure what you mean with option (b), but I do know what I need for 
> app-schema to work is option (c).
> 
>  People want to compare an x-path with a value, and for various reasons the 
> x-path can return multiple values.
>  We are not interested in selecting a specific value from the collection with 
> a function before comparing, we want to do all possible comparisons. For 
> example when we compare "name = 'foo'" we don't care whether name[1], 
> name[2], name[3] or name [53688] is equal to 'foo'. All we know is the 
> feature needs to be have a name "foo". So it should be OR-ed.
> 
>  The renderer and style system is irrelevant, because I am using this 
> currently for post-filtering on WFS requests, in which this behaviour is 
> already expected. But it would be nice if it worked for WMS too. I don't 
> think we need multiple values returned there, or need to do an extra 
> selection if the filter return true. If the filter returns true, the feature 
> should be styled according to the associated style, like it does now.
> 
>  So why not improve the filtering system to deal with these multiple values? 
> All existing behaviour will still work, it is only an extension of 
> functionality. I am working on a code proposal, will upload it and then see 
> what you think.
> 
>  Regards,
>  Niels
> 
>  On 10/05/11 12:56, Jody Garnett wrote: 
> > However, the current filter system in Geotools assumes a single value for 
> > each property.
> > > > > Actually it does not; You should also be able to use xpath to 
> > > > > reference a specific example if you want to do a < comparison? 
> > > > We may be in need of creating additional functions that work on a list 
> > > > of items? We have a similar set of functions allowing access to the 
> > > > component parts of a Geometry.
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > 
> > >  What I mean is for example filtering on the following equation:
> > >  a/b/c = "foo"
> > > 
> > >  where the property expression "a/b/c" evaluates to multiple values. 
> > Yes I understand; my feedback was that the filter model does allow multiple 
> > values; it is up to you as the author of the filter to select a single 
> > value to feed into the basic filter comparisons.
> > 
> > You can do that with: 
> > - xpath
> > - function (as an example we have geometry functions to access different 
> > points in a linestring) 
> > > This is currently not supported in the filters. The filters will try to 
> > > extract one value from "a/b/c". If evaluation results in a collection 
> > > rather than a single value, the filters will not be able to handle it and 
> > > always return false.
> > > Understood; as indicated in my discussion of options.
> > > the question is wrong Niels; I think you need to update the renderer to 
> > > work with multiple results; ie for a single feature; the query may 
> > > produce multiple geometries; each of which will need to be handed to the 
> > > renderer etc...
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > 
> > >  Actually , this doesn't really have anything to do with the renderer. In 
> > > fact, I am not working on WMS right now, I am working on a performance 
> > > improvement that applies to building features in app-schema, for both wms 
> > > and wfs, but I am actually mainly testing wfs at the moment. The WMS 
> > > point was just an example in which the current work-around doesn't apply, 
> > > because there too filters are applied on already built features. 
> > > 
> > >  The issue here is a more general issue of applying a filter on a complex 
> > > feature, irrespective of where or for what it is used.
> > > I does depend how you think on it; you have three options: 
> > a) what we have now; require user to select out a single value for the test 
> > (yes I know that does not scale)
> > b) Allow the single value to perform a single test; and automatically 
> > return multiple values (and update the calling code (example rendering 
> > technology) to support multiple values being returned.
> > c) Define filter to work with multiple values and combine the answer using 
> > "or" as you indicated
> > 
> > Out of (b) and (c) what is more closely aligned with XPath or GML? Thought: 
> > GML did want us to render all the geometries present when the user 
> > references a feature (not just the "default geometry"). This is an example 
> > where the expected behaviour was that we could handle multiple values being 
> > returned.
> > > I could not find any information on multi-valued properties in the OGC 
> > > filter standard. But in XPath, the standard says that when comparing 
> > > nodes with multiple values, the result should be the OR-ed aggregation of 
> > > all possible combinations. My proposal is that the same principle would 
> > > be applied to geotools filters.
> > > > > 
> > > > > 
> > > > > 
> > > > 
> > > > Interesting; I can see how that would work:
> > > > * for rendering you are saying "yes - some of the content here matches 
> > > > the filter".
> > > > 
> > > > I also would of been content with (and I think I prefer the power of): 
> > > > * a list of (true, true, false,false,false,true,...) being returned; 
> > > > and then using that list to index out the appropriate entries.
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > 
> > >  That is an interesting approach, but the filter interface returns a 
> > > boolean value when evaluated, according to the current API.
> > > Depends how you think of it; I suspect when you look that true is taken 
> > > as evaluating the result and checking that it is not null, nill, false, 
> > > empty list (kind of like perl concept of truthiness ). 
> > 
> > And all our java code (example rendering) expects a single value back. So 
> > if you start with reviewing the rendering system; you can see what it 
> > expects the style and the datastore to provide. And then you can explore 
> > what it will look like when you start feeding multiple values back? I am 
> > correct in thinking that if the filter returned "true" the very next thing 
> > we would need to do is "select out" the items which it returned true for in 
> > order to render them? 
> > 
> > So yeah; I reiterate; please look at the slightly larger picture of the 
> > rendering engine and allow it to steer this very interesting bit of 
> > development work. 
> > 
> > Jody 
> 
> -- 
> Niels Charlier
> 
>  Software Engineer
>  CSIRO Earth Science and Resource Engineering
>  Phone: +61 8 6436 8914 
> 
>  Australian Resources Research Centre
>  26 Dick Perry Avenue, Kensington WA 6151
> 
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to