How is the suffix “External” applied to element names in the National Information Exchange Model (NIEM) conformant namespaces?

The term “External” is used as a suffix to element names in the NIEM conformant namespaces.  An element with a name that ends in “External” is referred to as an external container element.  Such an element is defined when a NIEM standard needs to reference XML Schema types from an external namespace.                                                                

If an external namespace defines elements that are appropriate for use, the elements should be referenced by external adapter types, and external container elements are unnecessary.  External container elements are needed to create container elements for types from external namespaces.

 

An external container element has the following characteristics:

 

  1. Its name ends in "External".
  2. It is not a NIEM-conformant element.
  3. It may only be referred to by external adapter types. It is an error for any other               component to refer to an external container element.
  4. The type of the element is a simple or complex type from an external namespace. The element definition may not reference any other external components.
  5. An external container element may not specify a substitution group.

 

External container elements may not be referenced by standard conformant components.

They may only be referenced by external adapter types.

Here is an example definition of an external container element:

 

<element name="PointExternal" type="gml:PointType">

  <annotation>

    <documentation>

      DESCRIPTION OF EXTERNAL TYPE GOES HERE

    </documentation>

  </annotation>

</element>

 

Note that the definition is very simple: it provides a container for an external type, and is clearly labeled as non-NIEM content by the suffix "External".

The external container element may be used by an adapter type, as the following example shows:

 

<complexType name="PointType">

  <annotation>              

    <documentation>

      SUMMARY OF TYPE GOES HERE

    </documentation>

  </annotation>

 <complexContent>

  <extension base="s:ComplexObjectType">

    <sequence>

      <element ref="this:PointExternal"/>

    </sequence>

  </extension>

 </complexContent>

</complexType>

 

External container elements are not NIEM-conformant data model components. Instead, they create container for external types. They are clearly identified external by their names (suffixed with "External"). External elements (that come from non-NIEM namespaces) are clearly identified as external by their namespaces.