XmlSchema
  1. XmlSchema
  2. XMLSCHEMA-20

Serializing an XmlSchema that imports another schema that doesn't have targetNamespace results in the import having a namespace attribute with empty value

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: XmlSchema 1.4.4, XmlSchema 1.4.7, XmlSchema 2.0.1
    • Fix Version/s: 2.0.2
    • Labels:
      None

      Description

      If a schema imports another schema that doesn't have a targetNamespace declared, then the <import/> element is getting generated with an empty valued 'namespace' attribute. It is expected that the namespace attribute will not be declared, since it is not present in the original schema and also because the targetNamespace is not declared in the imported schema.

      Per the XMLSchema spec,

      <pre>
      4.2.3 References to schema components across namespaces
      Schema Representation Constraint: Import Constraints and Semantics
      ...

      3 The appropriate case among the following must be true:
      3.1 If there is a namespace [attribute], then its - actual value- must be identical to the - actual value- of the targetNamespace [attribute] of SII.
      3.2 If there is no namespace [attribute], then SII must have no targetNamespace [attribute]

      </pre>

      Repro Steps:

      Consider the following 3 simple schemas:

      Order1.xsd:

      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://example.org/ord"
      xmlns="http://example.org/ord">

      <xs:include schemaLocation="order2.xsd"/>
      <xs:import schemaLocation="dummy.xsd"/>

      <xs:element name="order" type="OrderType"/>
      <xs:complexType name="OrderType">
      <xs:sequence>
      <xs:element name="number" type="OrderNumType"/>
      </xs:sequence>
      </xs:complexType>

      </xs:schema>

      Order2.xsd:


      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns="http://example.org/ord"
      targetNamespace="http://example.org/ord">

      <xs:simpleType name="OrderNumType">
      <xs:restriction base="xs:string"/>
      </xs:simpleType>

      </xs:schema>

      Dummy.xsd:

      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>

      Loading Order1.xsd and serializing it back results in this import statement:

      <xs:import namespace="" schemaLocation="dummy.xsd"/>

      (Note the namespace attribute with "" value).

      Simple JUnit Code:

      @Test
      public void testSerializeSchema() throws Exception

      { String schPath = "order1.xsd"; File schFile = new File(getClass().getResource(schPath).toURI()); assertTrue(schFile.exists()); FileReader fr = new FileReader(schFile); XmlSchemaCollection schColl = new XmlSchemaCollection(); schColl.setBaseUri(schFile.getAbsolutePath()); XmlSchema schema = schColl.read(fr); schema.write(System.out); }

        Activity

          People

          • Assignee:
            Daniel Kulp
            Reporter:
            Murali Gunasekaran
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development