Uploaded image for project: 'Spatial Information Systems'
  1. Spatial Information Systems
  2. SIS-345 Upgrade JAXB binding to ISO 19115-3
  3. SIS-399

When renaming "xsi:type" value, may need to declare a new namespace

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.0
    • Metadata

    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:

      <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:…>
      

      Conversion from legacy ISO 19139:2007 to new ISO 19115-3:2016 result in something like (omitting non-pertinent prefixes for this discussion):

      <…:…>
        <…: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>
      <…:…>
      

      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:

        <…:… xsi:type="gmd:PT_FreeText_PropertyType">
      

      by

        <…:… xmlns:lan="http://standards.iso.org/iso/19115/-3/lan/1.0" xsi:type="gmd:PT_FreeText_PropertyType">
      

      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 "2007/PositionalAccuracy.xml" test file, and should be removed when this issue is fixed.

      Attachments

        Activity

          People

            desruisseaux Martin Desruisseaux
            desruisseaux Martin Desruisseaux
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: