Ben Caradoc-Davies wrote:
> Justin, what happens if you are trying to use an xlink:href 
> ClientProperty on a nillable minOccurs=0 property to encode it by 
> reference?
> 
> For example, you might want to encode a GeoSciML gsml:GeologicUnit with 
> a gsml:occurrence by reference (nillable and minOccurs=0). XPath.java is 
> used to create this empty placeholder node. Later, a ClientProperty is 
> used to set xlink:href to some URI in the UserData for the node, to be 
> unpacked at encode time. I expect your patch would break this.
Well the case the patch addresses is nillable == false, and minoccurs = 
0. If nillable == true then a placeholder attribute seems valid.

Off topic question: are Associations used for xlinking at all? Or just 
Attributes with special client properties.
> 
> We have a unit test (GS XlinkWfsTest) that covers a gsml:MappedFeature 
> with a gsml:specification by reference, but that gsml:specification has 
> minOccurs=1 (and maxOccurs=1), so although it is nillable, it will not 
> be affected by your patch.
> 
> I think we need another unit test.  :-)
Indeed :). It probably makes sense to set up another app-schema test 
configuration or module based on the wfs 1.1 xlink cite tests. What do 
you think?
> 
> Justin Deoliveira wrote:
>> Hi all,
>>
>> I spent some time yesterday trying to port the geoserver wfs 1.1 xlink 
>> tests to an app-schema configuration. Made some progress but ran into 
>> the following issue.
>>
>> One of the types for testing looks like this:
>>
>>   <xsd:complexType name="PrimitiveGeoFeatureType">
>>      <xsd:complexContent>
>>        <xsd:extension base="gml:AbstractFeatureType">
>>          <xsd:sequence>
>>            <xsd:element name="surfaceProperty" minOccurs="0" 
>> type="gml:SurfacePropertyType" />
>>            <xsd:element name="pointProperty" minOccurs="0" 
>> type="gml:PointPropertyType" />
>>            <xsd:element name="curveProperty" minOccurs="0" 
>> type="gml:CurvePropertyType" />
>>
>>    ...
>>
>> Now if I understand xml schema correctly this means the element 
>> "surfaceProperty" is non-nillable, but there is allowed to be zero 
>> occurrences in them.
>>
>> So in the underlying database, there are records of 
>> PrimitiveGeoFeature which have a null value for "surfaceProperty". The 
>> current behavior that I am running into is that an Attribute instance 
>> is getting created for it, with a value set to null.
>>
>> However, when this gets validated an error occurs, because the type is 
>> non-nullable. So I would think in this case the attribute instance 
>> should just be omitted since minOccurs == 0, and its value is 
>> non-existent or null. Thoughts?
>>
>> If I am right does the following make sense when creating attributes 
>> from null values which correspond to  xml elements / particles:
>>
>> * nillable = false, minOccurs > 0 -> create attribute with null value 
>> which will lead to a failure on validation
>>
>> * nillable = true, minOccurs > 0 -> create attribute with null value 
>> which is ok
>>
>> * nillable = false, minOccurs = 0 -> do not create an attribute
>>
>> Thoughts? I also whipped up the following patch, not sure if it is 
>> complete though:
>>
>> Index: 
>> app-schema/src/main/java/org/geotools/data/complex/filter/XPath.java
>> ===================================================================
>> --- 
>> app-schema/src/main/java/org/geotools/data/complex/filter/XPath.java 
>>         (
>> revision 33570)
>> +++ 
>> app-schema/src/main/java/org/geotools/data/complex/filter/XPath.java 
>>         (
>> working copy)
>> @@ -611,6 +611,14 @@
>>                               + " is not a valid location path for 
>> type " + parent
>> Type.getName());
>>                   }
>>                   int index = currStep.getIndex();
>> +
>> +                //check for null, if the value is null but the 
>> descriptor is non
>> -nullable
>> +                // then check for minOccurs = 0, and if so
>> +                if ( value == null && 
>> !currStepDescriptor.isNillable() ) {
>> +                    if ( currStepDescriptor.getMinOccurs() == 0 ) {
>> +                        return null;
>> +                    }
>> +                }
>>                   Attribute attribute = setValue(currStepDescriptor, 
>> id, value, in
>> dex, parent,
>>                           targetNodeType, isXlinkRef);
>>                   return attribute;
>>
>> -Justin
>>
> 
> 


-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to