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