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 ...
Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.