[ https://issues.apache.org/jira/browse/SIS-399?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Desruisseaux updated SIS-399: ------------------------------------ Description: {{TransformingReader}} converts XML element and attribute names from legacy standards to new standards, but there is one special case where instead of the attribute name, we need to convert attribute value: the {{xsi:type}} attribute. Example: {code:xml} <gmd:…> <gmd:name xsi:type="gmd:PT_FreeText_PropertyType"> <gco:CharacterString>Some text in default language</gco:CharacterString> <gmd:PT_FreeText> <gmd:textGroup> <gmd:LocalisedCharacterString locale="#locale-fra">Same text in French</gmd:LocalisedCharacterString> </gmd:textGroup> </gmd:PT_FreeText> </gmd:name> <gmd:…> {code} Conversion from legacy ISO 19139:2007 to new ISO 19115-3:2016 result in something like (omitting non-pertinent prefixes for this discussion): {code:xml} <…:…> <…:name xsi:type="lan:PT_FreeText_PropertyType"> <gco:CharacterString>Some text in default language</gco:CharacterString> <lan:PT_FreeText> <lan:textGroup> <lan:LocalisedCharacterString locale="#locale-fra">Same text in French</lan:LocalisedCharacterString> </lan:textGroup> </lan:PT_FreeText> </…:name> <…:…> {code} {{gmd}} prefix has been replaced by {{lan}} prefix in various places, but this is not a concern for elements like {{lan:PT_FreeText}} because the {{XMLEvent}} created by {{TransformingReader}} already contain the full namespace URI. The problem is in the {{xsi:type}} value, where we do not specify the namespace ourselves. Attempts to unmarshal this converted XML result in an error message complaining the the {{lan}} prefix has not been bound. The workaround would be to replace the following fragment: {code:xml} <…:… xsi:type="gmd:PT_FreeText_PropertyType"> {code} by {code:xml} <…:… xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0" xsi:type="gmd:PT_FreeText_PropertyType"> {code} In other words, we need to insert a local {{Namespace}} event which was not present in the original XML document. In the meantime, the workaround is to add a {{xmlns:lan}} declaration in the root XML element of the document to parse. This workaround is applied in the {{"ProcessStep (legacy).xml"}} test file, and should be removed when this issue is fixed. was: {{TransformingReader}} converts XML element and attribute names from legacy standards to new standards, but there is one special case where instead of the attribute name, we need to convert attribute value: the {{xsi:type}} attribute. Example: {code:xml} <gmd:…> <gmd:name xsi:type="gmd:PT_FreeText_PropertyType"> <gco:CharacterString>Some text in default language</gco:CharacterString> <gmd:PT_FreeText> <gmd:textGroup> <gmd:LocalisedCharacterString locale="#locale-fra">Same text in French</gmd:LocalisedCharacterString> </gmd:textGroup> </gmd:PT_FreeText> </gmd:name> <gmd:…> {code} Conversion from legacy ISO 19139:2007 to new ISO 19115-3:2016 result in something like (omitting non-pertinent prefixes for this discussion): {code:xml} <…:…> <…:name xsi:type="lan:PT_FreeText_PropertyType"> <gco:CharacterString>Some text in default language</gco:CharacterString> <lan:PT_FreeText> <lan:textGroup> <lan:LocalisedCharacterString locale="#locale-fra">Same text in French</lan:LocalisedCharacterString> </lan:textGroup> </lan:PT_FreeText> </…:name> <…:…> {code} {{gmd}} prefix has been replaced by {{lan}} prefix in various places, but this is not a concern for elements like {{lan:PT_FreeText}} because the {{XMLEvent}} created by {{TransformingReader}} already contain the full namespace URI. The problem is in the {{xsi:type}} value, where we do not specify the namespace ourselves. Attempts to unmarshal this converted XML result in an error message complaining the the {{lan}} prefix has not been bound. The workaround would be to replace the following fragment: {code:xml} <…:… xsi:type="gmd:PT_FreeText_PropertyType"> {code} by {code:xml} <…:… xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0" xsi:type="gmd:PT_FreeText_PropertyType"> {code} In other words, we need to insert a local {{Namespace}} event which was not present in the original XML document. > When renaming "xsi:type" value, may need to declare a new namespace > ------------------------------------------------------------------- > > Key: SIS-399 > URL: https://issues.apache.org/jira/browse/SIS-399 > Project: Spatial Information Systems > Issue Type: Sub-task > Components: Metadata > Affects Versions: 1.0 > Reporter: Martin Desruisseaux > Priority: Major > > {{TransformingReader}} converts XML element and attribute names from legacy > standards to new standards, but there is one special case where instead of > the attribute name, we need to convert attribute value: the {{xsi:type}} > attribute. Example: > {code:xml} > <gmd:…> > <gmd:name xsi:type="gmd:PT_FreeText_PropertyType"> > <gco:CharacterString>Some text in default language</gco:CharacterString> > <gmd:PT_FreeText> > <gmd:textGroup> > <gmd:LocalisedCharacterString locale="#locale-fra">Same text in > French</gmd:LocalisedCharacterString> > </gmd:textGroup> > </gmd:PT_FreeText> > </gmd:name> > <gmd:…> > {code} > Conversion from legacy ISO 19139:2007 to new ISO 19115-3:2016 result in > something like (omitting non-pertinent prefixes for this discussion): > {code:xml} > <…:…> > <…:name xsi:type="lan:PT_FreeText_PropertyType"> > <gco:CharacterString>Some text in default language</gco:CharacterString> > <lan:PT_FreeText> > <lan:textGroup> > <lan:LocalisedCharacterString locale="#locale-fra">Same text in > French</lan:LocalisedCharacterString> > </lan:textGroup> > </lan:PT_FreeText> > </…:name> > <…:…> > {code} > {{gmd}} prefix has been replaced by {{lan}} prefix in various places, but > this is not a concern for elements like {{lan:PT_FreeText}} because the > {{XMLEvent}} created by {{TransformingReader}} already contain the full > namespace URI. The problem is in the {{xsi:type}} value, where we do not > specify the namespace ourselves. Attempts to unmarshal this converted XML > result in an error message complaining the the {{lan}} prefix has not been > bound. The workaround would be to replace the following fragment: > {code:xml} > <…:… xsi:type="gmd:PT_FreeText_PropertyType"> > {code} > by > {code:xml} > <…:… xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0" > xsi:type="gmd:PT_FreeText_PropertyType"> > {code} > In other words, we need to insert a local {{Namespace}} event which was not > present in the original XML document. In the meantime, the workaround is to > add a {{xmlns:lan}} declaration in the root XML element of the document to > parse. This workaround is applied in the {{"ProcessStep (legacy).xml"}} test > file, and should be removed when this issue is fixed. -- This message was sent by Atlassian JIRA (v7.6.3#76005)