The Final Attribute
Until now, the schema has placed no restrictions on how other
types or elements could be derived from its elements and types. The
final attribute can be added to a
complex type definition and set to either #all, extension, or restriction. On a simple type definition,
it can be set to #all or to a
list containing any combination of the values list, union, and/or restriction, in any order. When a type is
derived from another type that has the final attribute set, the schema processor
verifies that the desired derivation is legal. For example, a
final attribute could prevent the
physicalAddressType type from
being extended:
<xs:complexType name="physicalAddressType" final="extension">
Since the main schema in address-schema.xsd attempts to redefine
the physicalAddressType in an
xs:redefine block, the schema
processor generates the following errors when it attempts to
validate the instance document:
ComplexType 'physicalAddressType': cos-ct-extends.1.1: Derivation by extension is forbidden by either the base type physicalAddressType_redefined or the schema. Attribute "addr:latitude" must be declared for element type "physicalAddress". Attribute "addr:longitude" must be declared for element type "physicalAddress".
The first error is a result of trying to extend a type that has been marked to prevent extension. The next two errors occur because the new, extended type was not parsed and applied to the content in the document. Now that you’ve seen how this works, removing ...