Schema document dependencies

Schema factoring

The XMML schema is represented in the standard distribution using the W3C XML Schema Language (WXS) and composed of number of schema documents. Relationships and dependencies between the documents are expressed through <include> statements - for components in the same namespace - and <import> statements - for components in the other namespaces.

How the XMML components are factored between the different documents in the standard XMML schema distribution is to some extent arbitrary. In general we have attempted to gather components that are conceptually related into the same schema document, while keeping the length of individual schema documents manageable. The detail of the schema factoring is, however, controlled by component dependencies. In particular, in the style of schema development used in XMML, type definitions or element declarations frequently refer to other components (types and elements) that have been defined or declared globally. The latter must either be in the same document, or in a document included or imported, possibly transitively. In practice, some arrangements are not possible, for example where circular dependencies result in components necessarily being defined in the same document, which may end up larger or less-well factored than ideal.

Note that the XMML Schema is the set of components, not the schema documents. Thus it is entirely valid to refactor the documents to suit local purposes. For example, if you only use one concrete feature type in your application, you might create a single schema document that contains only the components (elements and types) required to assemble the declaration of the element representing that feature type. Depending on the feature type this may be a very large or quite small schema document. An XSLT-based schema subsetting tool is provided in the GML specification.

Dependency diagrams

The diagram below shows the dependency chain for the schema documents that comprise the standard XMML distribution. We use UML package notation.