+1 to this proposal from me.

Thanks Martin!

Cheers,
Chris

On Oct 16, 2012, at 5:36 AM, Martin Desruisseaux wrote:

> Hello all
> 
> A key interface has been recently committed: IdentifiedObject in the XML 
> package (note: there is also closely-related IdentifiedObject interface in 
> GeoAPI, but the later is not yet the subject of this email):
> 
> https://builds.apache.org/job/sis-trunk/site/apidocs/org/apache/sis/xml/package-summary.html
> 
> 
> The problem
> -----------
> We will need to identify our object instances, sometime using the primary key 
> in a database, sometime using a URL to a on-line resources, sometime by other 
> ways. Identifiers are used a lot in OGC/ISO specifications, and there are 
> defined in many ways. Actually (this is a funny coincidence!) in the OGC 
> meeting last week, one of the speeches was someone who did an overview of 
> many identifiers available in the OGC/ISO specifications and how to choose 
> one. We have at least the following kinds of identifiers:
> 
> * XML elements can have a "gml:id" attribute, which is valid only
>   inside the XML document that define it.
> * XML elements can have a "gco:uuid" attribute, which is valid outside
>   the document. E.g. the primary key in a database managed by an agency.
> * XML elements can have a "xlink:href" attribute, which can refer to
>   the definition provided in another XML document.
> * Many Java objects derived from OGC/ISO have a getIdentifiers()
>   method, which return MD_Identifier objects. Those identifier are
>   basically (authority, code) pairs, where "authority" (a CI_Citation)
>   is contact information to an agency, and "code" (a String) is any
>   code allocated by that agency.
> * CI_Citation additionally provides ISBN and ISSN codes, which could
>   be seen as special cases of MD_Identifier with fixed "authorities".
> 
> 
> And I'm sure there is other kind of identifiers that I missed. When looking 
> at the OGC/ISO specifications, I'm not aware of any central place where all 
> kinds of identifiers are listed; the above list is an Apache SIS effort. It 
> is easy to get lost.
> 
> The GeoAPI interfaces offer no programmatic way to access the "gml:id", 
> "gco:uuid" and "xlink:href" identifiers, because they are specific to XML 
> documents while GeoAPI is about Java development. Indeed, the above-cited 
> identifiers do not exist in the UML of OGC/ISO abstract specifications. 
> GeoAPI is derived from UML, not from XML. Nevertheless, sometime we need 
> programmatical access to those XML identifiers.
> 
> 
> Proposed approach
> -----------------
> We provide a specialization of CI_Citation : IdentifierSpace. All CI_Citation 
> which are used in the "authority" part of a MD_Identifier will implement this 
> interface. In addition, we provide in the IdentifierSpace interface some 
> constants identifying the XML identifiers (non-XML identifiers are listed in 
> the Citations class, not yet committed).
> 
> We provide an IdentifiedObject inteface, which will be implemented by all 
> "object with identity" classes. There will be hundreds of such classes. All 
> IdentifiedObjects provide two methods, which are basically the same thing 
> from two different perspective:
> 
> Collection<Identifier> getIdentifiers()
> --------------------------------
> This method actually appears in various GeoAPI interfaces, so the method 
> declared in IdentifiedObject has to be compatible. But instead of having this 
> method in only a couple of types, we have it for every "object with identity" 
> type. The Collection<Identifier> shall contains "gml:id", "gco:uuid" and 
> "xlink:href" attributes, if any. Users can add and remove elements in this 
> collection.
> 
> Map<Citation,Identifier> getIdentifierMap()
> -------------------------------------
> Basically the same information than 'getIdentifiers()', but with components 
> of the (authority, code) pairs separated. It is usually easier for fetching 
> or modifying a particular identifier (i.e. only the "gml:id").
> 
> Implementations are free to add more identifiers in the mix. For example 
> DefaultCitation (not yet committed), will include ISBN and ISSN codes in the 
> map of identifiers. Consequently getIdentifierMap() can be used as a central 
> place where to see and edit all the various identifiers associated to an 
> object.
> 
>    Martin
> 

Reply via email to