Martin Desruisseaux created SIS-399:
---------------------------------------
Summary: 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: Bug
Components: Metadata
Affects Versions: 1.0
Reporter: Martin Desruisseaux
{{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:
{xml:code}
<…:… xsi:type="gmd:PT_FreeText_PropertyType">
{xml:code}
by
{xml:code}
<…:… xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0"
xsi:type="gmd:PT_FreeText_PropertyType">
{xml:code}
In other words, we need to insert a local {{Namespace}} event which was not
present in the original XML document.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)