extLst/ext

The <extLst> construct is used for straight-up extension of existing schemas of a non-visual nature. The term straight up refers to the notion that sometimes extension means refining the semantics of existing constructs. In doing so, an extension sometimes overrides the meaning of previous schemas. <extLst> and <ext> were not designed for this scenario. Instead of overriding existing meaning, these two constructs purely augment existing schemas. The nature of the augmentation must be such that it does not overlap any semantics embedded in existing schema constructs.

Consider a schema that represents an address, which contain a house number, a street name, a city, a state, and a postal code. An example of a straight-up extension is the addition of a field that describes whether this address is a business or residential location. This is a straight-up extension because the notion of whether an address is business or residential does not conflict with any information that is embedded in the existing schema. Now let's consider the case in which the Postal Service replaces a purely numeric postal code with one that can contain alphanumeric characters. Such a change would not be a straight-up extension because the new representation conflicts with the old representation of the same data, namely the postal code.

Some extensions are visual in nature. An example would be extending a schema to represent text that has been highlighted. By definition, highlighting text is a visual extension. Contrast that to the case of adding a business or residential classification. The latter does not necessarily involve any visual change to the way data is presented.

The <extLst> and <ext> constructs are for extensions of a non-visual nature. The main reason their use is limited to this scenario lies in the fact that they do not offer the capability to create alternative representations of the same data.