| 265 | |
| 266 | ==== Schema Overrides ==== |
| 267 | |
| 268 | The !FdoXmlSchemaMapping class already provides a way to match FDO and GML names for each feature schema. This is provided by this class' name (FDO name) and targetNamespace (GML name) settings. This class can already be passed to !ReadXml() and !WriteXml() via the !FdoXmlFlags. We'd just need to start using its mappings in !ReadXml() and !WriteXml(). |
| 269 | |
| 270 | Pros: |
| 271 | |
| 272 | • Flexible. The GML and FDO schema name correspondences can be set on a per-schema basis. |
| 273 | |
| 274 | • More consistent with rest of FDO since GML names specified as GML-specific overrides. |
| 275 | |
| 276 | • Opens up the ability to specify overrides for other FDO schema elements and customize how they are translated to GML. This would allow us to round trip other GML and XML Schema constructs, that don't easily fit into FDO, such as xs:choice elements. |
| 277 | |
| 278 | Cons: |
| 279 | |
| 280 | • More complicated API. Client must create set of override classes, instead of just setting the schema name attributes or FdoXmlFlags. |
| 281 | |
| 282 | • Problematic for Schema Exchange use case. Instead of ensuring consistent url prefixes are used by both !ReadXml() and !WriteXML(), the customer must ensure that consistent GML Schema Overrides are used. Instead of having to manage names, they have to manage object hierarchies or XML fragments. |
| 283 | |
| 284 | • Problematic for Publish as WFS use case. The GML Schema Overrides must be persisted somehow so that consistent GML schema names are used, each time someone retrieves schemas from the WFS. Currently, they must be persisted in some file storage location. |
| 285 | |
| 286 | One way to mitigate this con is the allow them to be stored in the provider datastore if the provider supports FdoIApplySchema. The RDBMS provider implementations of this command can take a set of schema overrides. However, they discard all overrides except those for that particular provider. A possible enhancement would be for the RDBMS providers to be able to persist schema overrides from other providers. This could be done by adding a CLOB column to f_schemainfo, where these overrides would be stored in XML format. There is a problem with doing this in that Schema Overrides cannot be serialized to XML without their corresponding provider being present, which is not guaranteed. Perhaps this enhancement should be limited to just handling GML Schema Overrides. These overrides can be serialized using only core FDO. |
| 287 | |
| 288 | Conclusions: |
| 289 | |
| 290 | • This is the most elegant solution but it lacks the simplicity of the Schema Name Attributes option: |
| 291 | o it requires the use of Schema Overrides, which are not popular with application developers. |
| 292 | o the persistence problems are worse. Instead of needing to persist a name, a whole set of classes or an XML fragment must be persisted. |
| 293 | |