2005-06-09

W3C XML Schema constraint types

A W3C XML Schema imposes three kinds of constraints:

  1. Schema-instance constraints: if an attribute is declared to have a certain (simple) type in the schema, then all values of that attribute in the instance must conform to the type.

  2. Instance-instance constraints: if an attribute is declared to be unique, then no two values of that attribute in the instance may be equal (according to the definition of "equality" for the attribute's type).

  3. Schema-schema constraints: if a complex type is said to be derived by restriction from another complex type, then it must redeclare the components of that type either unchanged or reduced in what may be called "strength".

RELAX NG does not have constraints of types 2 or 3. Therefore, it cannot specify complex type derivation by restriction. In addition, restricting simple types by facet is not a first-class operation, so once a built-in simple type has been restricted by facets, it can't be restricted further. This is a place where WXS is genuinely more orthogonal than RNG. (The way in which complex type derivation by restriction is done in WXS is bogus, because it generates fragile subclasses, a kind of bassackwards version of the well-known "fragile superclass" problem in OO.)

No comments: