Augmentation Point Pattern

An augmentation point is a special substitution group head element contained within object types. It acts as a hook, allowing domains and IEPDs to define substitutable augmentations in their own local namespaces but use them along with the original, augmentable type.

For example, the Justice domain has additional properties related to nc:ConveyanceType. It defines local augmentation j:ConveyanceAugmentation and adds it to the substitution group for nc:ConveyanceAugmentationPoint, the augmentation point element of nc:ConveyanceType. Wherever nc:ConveyanceType is used in NIEM, the Justice augmentation can also be used via element substitution.

Variable Replacement Table

Variable Description Usage NDR Reference
{$Name} Name of the augmentable type / augmentation point element Required Rule 7-5 How to name a component
NDR Section 10.8 Component naming rules
{$Definition} Augmentable type definition Required NDR Rule 9-25: Complex type has definition
NDR Rule 9-36: Element has definition
NDR Section 11.6.1: Human-readable documentation
{$Parent} QName of the parent type "structures:ObjectType" or other NIEM type Rule 10-2 Complex object types are derived from structures:ObjectType
{$ElementName} The QName of the element referenced Required
Repeat element ref line for each sub-property
 
{$Min} The minimum number of allowed element occurrences within the type    
{$Max} The maximum number of allowed element occurrences within the type    

Augmentation Type and Augmentation Point Element

<xs:complexType name="{$Name}Type">
    <xs:annotation>
      <xs:documentation>A data type for a(n) {$Definition}</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="{$Parent}">
        <xs:sequence>
          <xs:element ref="{$ElementName}" minOccurs="{$Min}" maxOccurs="{$Max}"/>
          <xs:element ref="{$Name}AugmentationPoint" minOccurs="{$Min}" maxOccurs="{$Max}"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:element name="{$Name}AugmentationPoint" abstract="true">
    <xs:annotation>
      <xs:documentation>An augmentation point for {$Name}Type</xs:documentation>
    </xs:annotation>
  </xs:element>

Example