Abstract and Substitutable Elements Pattern

Variable Replacement Table

Variable Description Usage NDR Reference
{$AbstractName} The name of the abstract element. This element serves as the head of the substitution group. Required NDR Rule 9-37: Untyped element is abstract 
NDR Rule 11-15: Name of element that ends in "Abstract" is abstract
{$SubstitutableName} The name of the substitutable element. In an XML instance, this element may be substituted for any occurrence of ($AbstractName}. Required Rule 7-5 How to name a component 
NDR Section 10.8 Component naming rules
{$RepresentationTerm} A required representation term for elements with simple content Optional NDR Table 10-2 Representation terms 
Rule 11-16 Element with simple content has representation term
{$Type} The QName of the complex data type Required Rule 9-46 Elements are nillable
{$Nillable} "true", if the property can have a nil value Optional NDR Rule 9-23: Code has definition
{$Definition} The data definition of the property Required NDR Section 11.6.1 How to write component definitions
NDR Section 11.6.1.1 Data definition opening phrases 
Rule 11-31 Standard opening phrase for elements

Abstract and Substitutable Elements Pattern

<xs:element name="{$AbstractName}" abstract="true" >
    <xs:annotation>
      <xs:documentation>A data concept for a(n) {$Definition}</xs:documentation>
    </xs:annotation>
  </xs:element>

  <xs:element name="{$SubstitutableName}{$RepresentationTerm}" type="{$Type}" substitutionGroup="{$AbstractName}" nillable="{$Nillable}">
    <xs:annotation>
      <xs:documentation>A(n) {$Definition}</xs:documentation>
    </xs:annotation>
  </xs:element>

Example

  • [LocationAddressAbstract] - elements LocationAddressAbstract (abstract) and Address (susbstitutable)