Nhan Vo,

when you used PropertyIsLike/@matchCase="false" previously with 
GeoServer 2.3.5, did you use Filter 2.0 or Filter 1.1?

I looked a little deeper and matchCase="false" *should* be supported on 
PropertyIsLike in GeoServer WFS 1.1 because Niels kindly updated 
GeoTools to use the FES 1.1.3 schemas back in 2013 to add matchCase support:
http://osgeo-org.1560.x6.nabble.com/ogc-filter-1-1-doesn-t-support-matchCase-in-PropertyIsLike-td5079577.html
https://github.com/geotools/geotools/commit/4855cba310362f488d5686eda1fff17d7d02c714
http://schemas.opengis.net/filter/1.1.0/filter.xsd

I changed the GET request to use WFS 1.1 and can confirm that 
matchCase="false" works. The request matches "illino*" to "Illinois":
http://localhost:8080/geoserver/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=topp:states&filter=%3Cogc:Filter%20xmlns:ogc=%22http://www.opengis.net/ogc%22%3E%3Cogc:PropertyIsLike%20matchCase=%22false%22%20wildCard=%22*%22%20singleChar=%22%23%22%20escapeChar=%22!%22%3E%3Cogc:PropertyName%3Etopp:STATE_NAME%3C/ogc:PropertyName%3E%3Cogc:Literal%3Eillino*%3C/ogc:Literal%3E%3C/ogc:PropertyIsLike%3E%3C/ogc:Filter%3E

*But* if I look at even the latest schemas and standard for FES 2.0.2, 
there is no matchCase on PropertyIsLike:
http://schemas.opengis.net/filter/2.0/filter.xsd
http://docs.opengeospatial.org/is/09-026r2/09-026r2.html

I think this is a bug in the FES 2.0.2 schemas. I think GeoServer will 
need updated schemas to fix this for WFS 2.0 (and we can see that the 
XML parsing is horribly broken without this fix). We may need a change 
request (or an email to the standard maintainer):
http://www.opengeospatial.org/standards/cr

If I add a single line to the definition of PropertyIsLikeType in the 
copy of the FES 2.0 schemas in GeoTools gt-xsd-fes:
modules/extension/xsd/xsd-fes/src/main/resources/org/geotools/filter/v2_0/filter.xsd
<xsd:attribute name="matchCase" type="xsd:boolean" use="optional" 
default="true"/>

then suddenly matchCase="false" on PropertyIsLike starts working for WFS 
2.0 in GeoServer, just as as for WFS 1.1:
http://localhost:8080/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typenames=topp:states&filter=%3Cfes:Filter%20xmlns:fes=%22http://www.opengis.net/fes/2.0%22%3E%3Cfes:PropertyIsLike%20matchCase=%22false%22%20wildCard=%22*%22%20singleChar=%22%23%22%20escapeChar=%22!%22%3E%3Cfes:ValueReference%3Etopp:STATE_NAME%3C/fes:ValueReference%3E%3Cfes:Literal%3Eillino*%3C/fes:Literal%3E%3C/fes:PropertyIsLike%3E%3C/fes:Filter%3E

GeoServer also supports a CQL_FILTER vendor parameter that has case 
insensitive "ilike" support:
http://docs.geoserver.org/latest/en/user/services/wfs/vendor.html#cql-filters
See the "strToLowerCase(STATE_NAME) like '%m%'" example in the tutorial:
http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html
or the "ilike" predicate:
http://docs.geoserver.org/latest/en/user/filter/ecql_reference.html

As for letters outside ASCII ("Ü", "Ö", "Ä", "ü", "ö", "ä"), if you are 
using them in URLs such as encoded filters, are you percent-encoding 
these as required by RFC 3986?:
https://en.wikipedia.org/wiki/Percent-encoding
https://tools.ietf.org/html/rfc3986

$ python
Python 2.7.11 (default, Jan 11 2016, 21:04:40)
[GCC 5.3.1 20160101] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> import urllib
 >>> for c in ("Ü", "Ö", "Ä", "ü", "ö", "ä"): print c, urllib.quote(c)
...
Ü %C3%9C
Ö %C3%96
Ä %C3%84
ü %C3%BC
ö %C3%B6
ä %C3%A4

Kind regards,
Ben.

On 21/01/16 22:15, Nhan Vo wrote:
> Hi Ben,
>
> Thanks for the helpful reply. The exception message was indeed
> misleading. A couple of points left, I hope you'd look into them:
>
> 1. How come matchCase was supported in version 2.3.5 but not anymore in
> 2.8.1? Personally I find it really useful. Is there a way to make a
> search with PropertyIsLike case-insensitive?
>
> 2. I had this problem already with version 2.3.5 and it seems to persist
> in version 2.8.1: When the search text contains a German letter with
> umlaut in upper-case (Ü, Ö, Ä), I got the exception "Attempted to
> construct illegal filter - I dont understand the tag:
> fes:ValueReference.  HINT: tags are case-sensitive!".  ü, ö, ä are
> however fine. As an added advantage with matchCase='false' I could get
> around this problem, but not anymore in 2.8.1. If possible could you
> shed some light on this?
>
> Any hints or pointers are much appreciated!
>
> Best regards,
> Nhan Vo
>
>
>
> On 1/20/2016 11:44 PM, Ben Caradoc-Davies wrote:
>> Nhan Vo,
>>
>> neither singleChar="%" nor singleChar="#" work for me until I
>> percent-encode them as singleChar="%25" or singleChar="%23"
>> respectively. "%" is used for URL percent-encoding and "#" is the URL
>> fragment separator and neither can be used unencoded in a URL. I am
>> surprised that either worked for you before. Perhaps older Java or
>> GeoServer was more permissive, or your client is encoding one but not
>> the other? I think Java 8 may have added better unicode support in
>> percent decoding; this may be the change.
>>
>> Furthermore, matchCase is not permitted on PropertyIsLike. Including
>> this attribute caused the rather unhelpful error message: "Attempted
>> to construct illegal filter - I dont understand the tag:
>> fes:ValueReference.  HINT: tags are case-sensitive!"
>>
>> Both of these URLs work for me against the current GeoServer master
>> release configuration with Java 8:
>>
>> http://localhost:8080/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typenames=topp:states&filter=%3Cfes:Filter%20xmlns:fes=%22http://www.opengis.net/fes/2.0%22%3E%3Cfes:PropertyIsLike%20wildCard=%22*%22%20singleChar=%22%23%22%20escapeChar=%22!%22%3E%3Cfes:ValueReference%3Etopp:STATE_NAME%3C/fes:ValueReference%3E%3Cfes:Literal%3E*%3C/fes:Literal%3E%3C/fes:PropertyIsLike%3E%3C/fes:Filter%3E
>>
>>
>> http://localhost:8080/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typenames=topp:states&filter=%3Cfes:Filter%20xmlns:fes=%22http://www.opengis.net/fes/2.0%22%3E%3Cfes:PropertyIsLike%20wildCard=%22*%22%20singleChar=%22%25%22%20escapeChar=%22!%22%3E%3Cfes:ValueReference%3Etopp:STATE_NAME%3C/fes:ValueReference%3E%3Cfes:Literal%3E*%3C/fes:Literal%3E%3C/fes:PropertyIsLike%3E%3C/fes:Filter%3E
>>
>>
>> Kind regards,
>> Ben.
>>
>> On 21/01/16 02:04, Nhan Vo wrote:
>>> Hi,
>>>
>>> Thanks for the response. This URL works:
>>> http://192.168.0.102:8081/geoserver/wfs?VERSION=2.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=topp:states&FILTER=%3Cfes:Filter%20xmlns:fes='http://www.opengis.net/fes/2.0'%20xmlns:gml='http://www.opengis.net/gml/3.2'%3E%3Cfes:PropertyIsLike%20matchCase='false'%20wildCard='*'%20singleChar='%'%20escapeChar='!'%3E%3Cfes:ValueReference%3Etopp:STATE_NAME%3C/fes:ValueReference%3E%3Cfes:Literal%3E*%3C/fes:Literal%3E%3C/fes:PropertyIsLike%3E%3C/fes:Filter%3E
>>>
>>>
>>>
>>> This does not work:
>>> http://192.168.0.102:8081/geoserver/wfs?VERSION=2.0.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=topp:states&FILTER=%3Cfes:Filter%20xmlns:fes='http://www.opengis.net/fes/2.0'%20xmlns:gml='http://www.opengis.net/gml/3.2'%3E%3Cfes:PropertyIsLike%20matchCase='false'%20wildCard='*'%20singleChar='#'%20escapeChar='!'%3E%3Cfes:ValueReference%3Etopp:STATE_NAME%3C/fes:ValueReference%3E%3Cfes:Literal%3E*%3C/fes:Literal%3E%3C/fes:PropertyIsLike%3E%3C/fes:Filter%3E
>>>
>>>
>>> The only difference is /*singleChar='%'*/ and /*singleChar='#'*/.
>>>
>>> Best regards,
>>> Nhan Vo
>>>
>>> On 1/20/2016 1:53 PM, Rahkonen Jukka (MML) wrote:
>>>>
>>>> Hi,
>>>>
>>>> Can you reproduce the issue with the demo layer ”states”? If you
>>>> can, please
>>>> send the whole GET url for making testing convenient for the others.
>>>>
>>>> Regards,
>>>>
>>>> -Jukka Rahkonen-
>>>>
>>>> Nhan Vo wrote:
>>>>
>>>> Hi list,
>>>>
>>>> I'm upgrading Geoserver from 2.3.5 to 2.8.1 and my client code
>>>> cannot work
>>>> anymore. Basically it sends a WFS Url request with a filter to
>>>> Geoserver. The
>>>> filter looks as follows:
>>>>
>>>> <fes:Filter xmlns:fes='http://www.opengis.net/fes/2.0'
>>>> xmlns:gml='http://www.opengis.net/gml/3.2'>
>>>>     <fes:PropertyIsLike matchCase='false' wildCard='*' singleChar='#'
>>>> escapeChar='!'>
>>>> <fes:ValueReference>...</fes:ValueReference>
>>>>         <fes:Literal>...</fes:Literal>
>>>>     </fes:PropertyIsLike>
>>>> </fes:Filter>
>>>>
>>>> With version 2.8.1 I receive the exception message:*XML document
>>>> structures
>>>> must start and end within the same entity*
>>>>
>>>> I have been able to get around this by replacing */singleChar='#'/*
>>>> with
>>>> */singleChar='%'/*, but still cannot understand why the '#' causes the
>>>> problem. Also, '.' and '_' do not work either and I receive the same
>>>> exception
>>>> message. Only '%' works.
>>>>
>>>> Btw, Geoserver 2.3.5 was running with Java 6; when I updated to
>>>> 2.8.1 I also
>>>> updated to Java 8.
>>>>
>>>> If someone could shed some light on this I'd appreciate it.
>>>>
>>>> Best regards,
>>>> Nhan Vo
>>>>
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> Site24x7 APM Insight: Get Deep Visibility into Application Performance
>>> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
>>> Monitor end-to-end web transactions and take corrective actions now
>>> Troubleshoot faster and improve end-user experience. Signup Now!
>>> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
>>>
>>>
>>>
>>> _______________________________________________
>>> Geoserver-users mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/geoserver-users
>>>
>>
>
>

-- 
Ben Caradoc-Davies <[email protected]>
Director
Transient Software Limited <http://transient.nz/>
New Zealand

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Geoserver-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to