humm may the answer be that AttributeType needs a getAssociations():Collection<AssociationDescriptor> so we can model the xml attributes of an xs:complexType with xs:simpleContent as associations?
This also made me question the hineritance relationship between ComplexType and AttributeType for a while, in xml they're siblings, but I don't think we should escape from it now... Gabriel On Saturday 18 October 2008 01:15:57 pm Gabriel Roldán wrote: > Jody we had this discussion a couple times now and you keep telling we can > model an xs:complexType with xs:simpleContent as a ComplexAttribute but I > keep not seeing it that easy. > > Basically, in xml any type with simple content that allows xml attributes > is a xs:complexType with xs:simpleContent. > > say you have the xml structure: > <root> > <element att="attval">elementValue</element> > </root> > > That means when you adress the element node through XPATH, > say, //root/element, the result will be the element's value: the > literal "elementValue". > If we model such an structure as a (simple) geoapi AttributeType, the same > expression would evaluate to a (simple) geoapi Attribute where the value is > the literal "elementValue". > By the other hand, if we model it as a geoapi ComplexAttribute in order to > hold both the simple value AND the xml attributes as geoapi > AttributeType/Attribute, the xpath will evaluate to a > Collection<Attribute>, with an Attribute for the simple content value and > an Attribute for the "att" attribute. Problem here is we don't have a > descriptor for the simple content to hold on the nested attribute, nor a > convention on how to call such an AttributeDescriptor. > All in all, as the geoapi and xml models diverge in this regard, there will > be some sort of adaptation do make at our side. > That said, I agree using the attribute's userData map to hold on the > attributes is bad and hacky. But I can't think of a clean solution to > make //root/element evaluate to Attribute[value=elementValue, > AttributeDescriptor[name=element]] instead of a collection holding both the > Attribute for element and for att. > Making //root/element/@att evaluate to the xml attribute modeled as a > property is straight forward, what we lack is a sort of convention > like //root/element/@simpleContent. > In other words, if we model a xs:complexType with xs:simpleContent as a > ComplexAttribute holding an AttributeDescriptor for the simple content and > an AttributeDescriptor for each declared xml attribute: > - how do we call the AttributeDescriptor that holds the simple content (I > guess it should be called the same?) > - how do we make regular xpath expressions to evaluate to this convention > attribute instead of to the collection of attributes, or rather how do we > deal with it not to have to introduce conditionals everywhere to check if > an element contains a child element that's the xml related simple value? > > Say at encoding time we do have the xsd schema to check if its a complex > type with simple content, so it can aid on encoding it as an xml element > with simple content and attributes. Same thing at parsing time, but we > still lack a descriptor for the simple content... > > humm... hope I explained my concern clear, may be you have a simple answer > or can point out where am I wrong. > > cheers, > > Gabriel > > On Friday 17 October 2008 09:44:42 am Jody Garnett wrote: > > Ben Caradoc-Davies wrote: > > > Jody and Justin, > > > > > > I am having trouble understanding the use of GeoAPI 2.2 > > > ComplexAttribute, particularly for complex types with simple content. > > > As I noted earlier, GML3 on trunk binds every ComplexAttribute, > > > including CodeType, to Collection. I now suspect that my problems are > > > in GeoAPI 2.2 (or my understanding of it), not just in the GeoTools > > > GML3 implementation. > > > > The thing is - it is a collection of Property. With that you have a > > pretty wide range of expression: > > - Since Property can be an Attribute or Association > > - You can repeate Property entries (if maxOccurs is greater than 1) > > - Property acts similar to a Key Value pair in a Java Map; it is just > > that the keys used are a bit more formal > > > > > Here is a concrete example. gml:name is a gml:CodeType, which is an > > > xs:complexType with xs:simpleContent that extends xs:string and adds a > > > codeSpace attribute. For example: > > > > > > <gml:name codeSpace="urn:x-something:whatever">SCOPED_IDENTIFIER</name> > > > > That sounds fine, something to consider that since this is a formal > > vocabulary you may already have a formal CodeList defined for the > > "x-something:whatever"; that is you may already have a binding for the > > type that is non String. > > > > > In the old GeoTools 2.4.x community-schemas feature model (fm), based > > > on geoapi-nogenerics 2.1.0, ComplexAttributeImpl had a value (any > > > Object) which would have in this case been the string > > > "SCOPED_IDENTIFIER", and the codeSpace was smuggled in a user-data map > > > and unpacked at encoding time by some horrible binding override. > > > > > > In GeoAPI 2.2, ComplexAttribute has a value that is a > > > Collection<Property>. The codeSpace could be a Property in this > > > collection, but where should the content string "SCOPED_IDENTIFIER" > > > go? Or am I barking up the wrong tree? > > > > You should have an Attribute in your Collection; that contains the value > > "SCOPED_IDENTIFIER"; the attribute descriptor should have the name > > "gml:name", and the AttributeType (for that descriptor) should have > > information about the binding (is it String; or is it a CodeList?). > > There is a Map in one of these data structures that you can use you can > > use to stuff the "urn:x-something:whatever" into for safe keeping if you > > want to remember it for later. > > > > Please consider the Attribute to be a Key / Value pair - the Key is the > > Attribute Descriptor (ie gml:name); they key also is of a specific type > > (indicating the value is forced to be a String). The value is going to > > be SCOPED_IDENTIFIER. > > > > > Does GeoAPI 2.2 support xs:complexType with xs:simpleContent? > > > > Your above example did not really need anything beyond attribute; do you > > have any other entries in your complex type? > > > > > How would you model my gml:name example in GeoAPI 2.2? > > > > > > In a nutshell, the problem appears to be that XML allows a node to > > > have content and attributes/children, while GeoAPI 2.2 allows only > > > attributes/children (properties). > > > > I hear what you are saying; even if the above example I am mostly > > focused on the value. Have a look at which one of the data structures > > has a Map for you to put the codeSpace= entry into? I think you are the > > first person I have talked to wanting to address this issue. > > > > > As an aside, do you have any examples showing how XML documents should > > > be converted into GeoAPI 2.2? There are some minimal snippets in the > > > javadoc, but these cover few cases. > > > > In the wiki; Gabriel has some examples (but they may be dated). > > Jody > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move Developer's > > challenge Build the coolest Linux based applications with Moblin SDK & > > win great prizes Grand prize is a trip for two to an Open Source event > > anywhere in the world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Geotools-devel mailing list > > Geotools-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/geotools-devel ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Geotools-devel mailing list Geotools-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel