Please refer to theerrata for this document, which may include some normative corrections.
This document is also available in these non-normative formats:XML,XHTML with visible change markup,Independent copy of the schema for schemadocuments, and Independent copy of the DTD for schema documents.See alsotranslations.
Copyright © 2004 W3C® (MIT,ERCIM,Keio), All Rights Reserved. W3Cliability,trademark anddocument use rules apply.
XML Schema: Structures specifies the XML Schema definition language, which offers facilities for describing the structure and constraining the contents of XML 1.0 documents, including those which exploit the XMLNamespace facility. The schema language, which is itself represented in XML 1.0 and uses namespaces, substantially reconstructs and considerably extends the capabilities found in XML 1.0 document type definitions (DTDs). This specification depends onXML Schema Part 2: Datatypes.
This section describes the status of this document at thetime of its publication. Other documents may supersede this document.A list of current W3C publications and the latestrevision of this technical report can be found in theW3C technical reports index athttp://www.w3.org/TR/.
This is aW3CRecommendation, which forms part of the Second Edition of XMLSchema. This document has been reviewed by W3C Members andother interested parties and has been endorsed by the Director as aW3C Recommendation. It is a stable document and may be used asreference material or cited as a normative reference from another document. W3C's role in making the Recommendation is to draw attentionto the specification and to promote its widespread deployment. Thisenhances the functionality and interoperability of the Web.
This document has been produced by theW3C XML Schema Working Groupas part of the W3CXMLActivity. The goals of the XML Schema language are discussed intheXML SchemaRequirements document. The authors of this document are themembers of the XML Schema Working Group. Different parts of thisspecification have different editors.
This document was produced under the24January 2002 Current Patent Practice (CPP) as amended by theW3C Patent PolicyTransition Procedure. The Working Group maintains apubliclist of patent disclosures relevant to this document;that page also includes instructions for disclosing a patent. An individual whohas actual knowledge of a patent which the individual believescontains Essential Claim(s) with respect to this specification shoulddisclose the information in accordance withsection 6 of the W3C Patent Policy.
The English version of this specification is the only normativeversion. Information about translations of this document is availableathttp://www.w3.org/2001/05/xmlschema-translations.
This second edition isnot a new version,it merely incorporates the changes dictated by the corrections toerrors found in thefirstedition as agreed by the XML Schema Working Group, as aconvenience to readers. A separate list of all such corrections isavailable athttp://www.w3.org/2001/05/xmlschema-errata.
The errata list for this second edition is available athttp://www.w3.org/2004/03/xmlschema-errata.
Please report errors in this document towww-xml-schema-comments@w3.org (archive).
1Introduction
1.1Purpose
1.2Dependencies on Other Specifications
1.3Documentation Conventions and Terminology
2Conceptual Framework
2.1Overview of XML Schema
2.2XML Schema Abstract Data Model
2.3Constraints and Validation Rules
2.4Conformance
2.5Names and Symbol Spaces
2.6Schema-Related Markup inDocuments Being Validated
2.7Representation of Schemas on the World Wide Web
3Schema Component Details
3.1Introduction
3.2Attribute Declarations
3.3Element Declarations
3.4Complex Type Definitions
3.5AttributeUses
3.6Attribute Group Definitions
3.7Model Group Definitions
3.8Model Groups
3.9Particles
3.10Wildcards
3.11Identity-constraint Definitions
3.12Notation Declarations
3.13Annotations
3.14Simple Type Definitions
3.15Schemas as a Whole
4Schemas and Namespaces: Access and Composition
4.1Layer 1: Summary of the Schema-validity Assessment Core
4.2Layer 2: Schema Documents, Namespaces and Composition
4.3Layer 3: Schema Document Access and Web-interoperability
5Schemas and Schema-validity Assessment
5.1Errors in Schema Construction and Structure
5.2Assessing Schema-Validity
5.3Missing Sub-components
5.4Responsibilities of Schema-aware Processors
ASchema for Schemas (normative)
BReferences (normative)
COutcome Tabulations (normative)
C.1Validation Rules
C.2Contributions to the post-schema-validation infoset
C.3Schema Representation Constraints
C.4Schema Component Constraints
DRequired Information Set Items and Properties (normative)
ESchema Components Diagram (non-normative)
FGlossary (non-normative)
GDTD for Schemas (non-normative)
HAnalysis of the Unique Particle Attribution Constraint (non-normative)
IReferences (non-normative)
JAcknowledgements (non-normative)
This document sets out the structural part (XML Schema: Structures) of the XML Schema definition language.
Chapter 2 presents aConceptual Framework (§2) for XML Schemas, including an introduction to the nature of XML Schemas and an introductionto the XML Schema abstract data model, along with other terminology used throughout this document.
Chapter 3,Schema Component Details (§3), specifies the precisesemantics of each component of the abstract model, the representation of each component in XML, with reference to a DTD and XML Schemafor an XML Schema document type, along with a detailed mapping between the elements andattribute vocabulary of this representation and the components and propertiesof the abstract model.
Chapter 4 presentsSchemas and Namespaces: Access and Composition (§4), including theconnection between documents and schemas, the import, inclusion and redefinition of declarations and definitions and the foundations of schema-validity assessment.
Chapter 5 discussesSchemas and Schema-validity Assessment (§5), including theoverall approach to schema-validity assessment of documents, and responsibilities of schema-aware processors.
The normative appendices include aSchema for Schemas (normative) (§A) for the XML representation of schemas andReferences (normative) (§B).
The non-normative appendices include theDTD for Schemas (non-normative) (§G) and aGlossary (non-normative) (§F).
This document is primarily intended as a language definition reference.As such, although it contains a few examples, it isnot primarily designedto serve as a motivating introduction to the design and its features, or as atutorial for new users.Rather it presents a careful and fully explicit definition of that design, suitablefor guiding implementations. For those in search of a step-by-stepintroduction to the design, the non-normative[XML Schema: Primer] is a much betterstarting point than this document.
The purpose ofXML Schema: Structures is to define the nature of XML schemasand their component parts,provide an inventory of XML markup constructs with which to represent schemas, and define theapplication of schemas to XML documents.
The purpose of anXML Schema: Structures schema is to define and describe a class of XML documents by using schema components to constrain and document the meaning, usage and relationships of their constituent parts: datatypes, elements and their content and attributes and their values. Schemas may also provide for the specification of additional document information, such as normalization and defaulting of attributeand element values. Schemas havefacilities for self-documentation. Thus,XML Schema: Structures can be used to define, describe and catalogue XML vocabularies for classes of XML documents.
Any application that consumes well-formed XML can use theXML Schema: Structures formalism to express syntactic, structural and value constraints applicable to its document instances. TheXML Schema: Structures formalism allows a useful level of constraint checking to be described and implemented for a wide spectrum of XML applications. However, the language defined by this specification does not attempt to provideall the facilities that might be needed byany application. Some applications may require constraint capabilities not expressible in this language, and so may need to perform their own additional validations.
The definition ofXML Schema: Structures depends on the following specifications:[XML-Infoset],[XML-Namespaces],[XPath], and[XML Schemas: Datatypes].
SeeRequired Information Set Items and Properties (normative) (§D) for a tabulation of the information itemsand properties specified in[XML-Infoset] which thisspecification requires as a precondition to schema-aware processing.
The section introduces the highlighting and typography as used in this document to present technical material.
Special terms are defined at their point ofintroduction in the text. For example[Definition:] aterm is something used with a special meaning. The definition islabeled as such and the term it defines is displayed in boldface. The end of the definition is not specially markedin the displayed or printed text. Uses of defined terms are links totheir definitions, set off with middle dots, for instance·term·.
Non-normative examples are set off in boxes and accompanied by a briefexplanation:
<schema targetNamespace="http://www.example.com/XMLSchema/1.0/mySchema">
The definition of each kind of schema component consists of a list of its properties and their contents, followed by descriptions of the semantics of the properties:
References to properties of schema components are links tothe relevant definition as exemplified above, set off with curly braces, for instance{example property}.
The correspondence between an element information item which is partof the XML representation of a schema and one or more schema components is presented in a tableauwhich illustrates the element information item(s) involved.This is followed by a tabulation of the correspondence between properties of the componentand properties of the information item. Where context may determine which ofseveral different components may arise, several tabulations, one per context,are given. The property correspondences are normative,as are the illustrations of the XML representation element information items.
In the XML representation, bold-faceattribute names (e.g.count below) indicate a requiredattribute information item, and the rest areoptional. Where an attribute information item has an enumerated typedefinition, the values are shown separated by vertical bars, as forsize
below; if there is a default value, it is shownfollowing a colon. Where an attribute information item has a built-in simpletype definition defined in[XML Schemas: Datatypes], a hyperlink to itsdefinition therein is given.
The allowed content of the information item isshown as a grammar fragment, using the Kleene operators?
,*
and+
. Each element name therein is a hyperlink toits own illustration.
example
Element Information Item<example
count =integer
size = (large |medium |small) : medium>
Content:(all |any*)
</example>
Example Schema Component | ||||
---|---|---|---|---|
|
References to elements in the text are links tothe relevant illustration as exemplified above, set off with angle brackets, for instance<example>.
References to properties of information items as defined in[XML-Infoset] are notated as links to the relevant section thereof, set off with square brackets, for example[children].
Properties which this specification defines for information items areintroduced as follows:
References to properties of information items defined in this specificationare notated as links to their introduction as exemplified above, set off with square brackets, for example[new property].
The following highlighting is used for non-normative commentary in this document:
Following[XML 1.0 (Second Edition)], within normative prose in this specification, the wordsmay andmust are defined as follows:
Note however that this specification provides a definition of error and of conformant processors'responsibilities with respect to errors (seeSchemas and Schema-validity Assessment (§5)) which is considerablymore complex than that of[XML 1.0 (Second Edition)].
This chapter gives an overview ofXML Schema: Structures at the level of its abstract data model.Schema Component Details (§3) provides details on this model, includinga normative representation in XML for the components of the model.Readers interested primarily in learning to write schema documents may wish tofirst read[XML Schema: Primer] for a tutorial introduction, and only then consult the sub-sections ofSchema Component Details (§3) namedXML Representation of ... forthe details.
An XML Schemaconsists of components such as type definitionsand element declarations. These can be used to assess the validity ofwell-formed element and attribute information items (as definedin[XML-Infoset]), and furthermoremay specify augmentations to those items and their descendants. This augmentation makes explicit information which may havebeen implicit in the original document, such as normalized and/or default values forattributes and elements andthe types of element and attribute information items.[Definition:] We refer to the augmented infoset which results from conformant processing as defined in this specification as thepost-schema-validation infoset, or PSVI.
Schema-validity assessment has two aspects:
Throughout this specification,[Definition:] thewordvalid and its derivatives are used to refer toclause1 above, the determination of localschema-validity.
Throughout this specification,[Definition:] the wordassessment is used to referto the overall process oflocal validation, schema-validity assessment and infoset augmentation.
This specification builds on[XML 1.0 (Second Edition)] and[XML-Namespaces]. The concepts and definitions usedherein regarding XML are framed at the abstract level ofinformationitems as defined in[XML-Infoset]. Bydefinition, this use of the infoset providesa priori guarantees ofwell-formedness(as defined in[XML 1.0 (Second Edition)]) andnamespaceconformance (as defined in[XML-Namespaces]) forall candidates for·assessment· and for all·schema documents·.
Just as[XML 1.0 (Second Edition)] and[XML-Namespaces] can be described in terms ofinformation items, XML Schemas can be described in terms of anabstract data model. In defining XML Schemas in terms of an abstractdata model, this specification rigorously specifies the information whichmust be available to a conforming XML Schema processor. The abstractmodel for schemas is conceptual only, and does not mandate anyparticular implementation or representation of this information. Tofacilitate interoperation and sharing of schema information, anormative XML interchange format for schemas is provided.
[Definition:] Schema component is the generic term for the building blocks that comprise the abstract data model of the schema.[Definition:] AnXML Schema is aset of·schema components·. There are 13 kinds ofcomponent in all, falling into three groups. The primary components, which may(type definitions) or must (element and attribute declarations) have namesare as follows:
The secondary components, which must have names, are as follows:
Finally, the "helper" components provide small parts ofother components; they are not independent of their context:
During·validation·,[Definition:] declaration components are associated by(qualified) name to information items being·validated·.
On the other hand,[Definition:] definition components defineinternal schema components that can be used in other schema components.
[Definition:] Declarations anddefinitions may have and be identified bynames, which are NCNames as defined by[XML-Namespaces].
[Definition:] Several kindsof component have atarget namespace, which is either·absent· or a namespace name, also asdefined by[XML-Namespaces]. The·targetnamespace· serves to identify the namespace within which theassociation between the component and its name exists. In the case ofdeclarations, this in turn determines the namespace name of, for example, the elementinformation items it may·validate·.
·Validation·, defined in detail inSchema Component Details (§3), is arelation between information items and schema components. For example, anattribute information item may·validate· with respect to an attributedeclaration, a list of element information items may·validate· withrespect to a content model, and so on. The following sections brieflyintroduce the kinds of components in theschema abstract data model, other major features of the abstractmodel, and how they contribute to·validation·.
The abstract model provides two kinds of type definition component: simpleand complex.
[Definition:] This specification usesthe phrasetype definition in cases where no distinctionneed be made between simple and complex types.
Type definitions form a hierarchy with a single root. The subsections below first describe characteristics of thathierarchy, then provide an introduction to simple and complex type definitions themselves.
[Definition:] Except for a distinguished·ur-type definition·, every·type definition· is, by construction, either a·restriction· or an·extension· of some other type definition. The graph of these relationships forms a tree known as theType Definition Hierarchy.
[Definition:] A typedefinition whosedeclarations or facets are in a one-to-one relation with those of anotherspecified typedefinition, with each in turn restricting the possibilities of the one itcorresponds to, is said to be arestriction.The specific restrictions might include narrowed ranges or reducedalternatives.Members of a type, A, whose definition is a·restriction· of the definition of another type, B, are always members of type B as well.
[Definition:] A complex type definitionwhich allows element or attribute content in addition to that allowed byanother specified typedefinition is said to be anextension.
[Definition:] A distinguished complextype definition, theur-typedefinition, whosename isanyType in the XML Schema namespace, is present in each·XML Schema·, serving as the root of the typedefinition hierarchy for that schema.
[Definition:] A type definition used as thebasis for an·extension· or·restriction· is known asthebase type definition of that definition.
A simple type definition is a set of constraints on strings and information about the values they encode, applicable to the·normalized value· of an attributeinformation item or of an element information item with no element children.Informally, it applies to the values of attributes and the text-only content of elements.
Each simple type definition, whether built-in (that is, defined in[XML Schemas: Datatypes]) oruser-defined, is a·restriction· of some particularsimple·base typedefinition·. For the built-in primitive type definitions, this is[Definition:] thesimpleur-type definition, a special restriction of the·ur-typedefinition·, whose name isanySimpleType in the XML Schema namespace. The·simple ur-type definition· is considered to have an unconstrained lexical space, and a value space consisting of the union of the value spaces of all the built-in primitive datatypes and the set of all lists of all members of the value spaces of all the built-in primitive datatypes.
The mapping from lexical space to value space isunspecified for items whose type definition is the·simple ur-type definition·. Accordingly this specification does not constrain processors' behaviour inareas where this mapping is implicated, for example checking such items againstenumerations, constructing default attributes or elements whose declared typedefinition is the·simple ur-type definition·, checkingidentity constraints involving such items.
Simple types mayalso be defined whose members are lists of itemsthemselves constrained by some other simple type definition, or whosemembership is the union of the memberships of some other simple typedefinitions. Such list and union simple type definitions are also restrictions of the·simple ur-typedefinition·.
For detailed information on simple type definitions, seeSimple Type Definitions (§3.14) and[XML Schemas: Datatypes]. The latter also defines an extensive inventory ofpre-defined simple types.
A complex type definition is a set of attribute declarations and a content type, applicable to the[attributes] and[children] of an element information item respectively. The content type mayrequire the[children] to contain neither element nor character informationitems (that is, to be empty), to be a string which belongs to a particular simpletype or to contain a sequence of element information items which conforms to a particular model group, with or without character information items as well.
Each complex type definition other than the·ur-type definition· is either
or
Acomplex type which extends another does so by having additional content modelparticles at the end of the other definition's content model,or by having additional attribute declarations, or both.
For detailed information on complex type definitions, seeComplex Type Definitions (§3.4).
There are three kinds of declaration component: element, attribute, andnotation. Each is described in a section below. Also included is a discussionof element substitution groups, which is a feature provided in conjunction withelement declarations.
An element declaration is an association of a name with a type definition, either simple orcomplex, an (optional) default value and a (possibly empty) set of identity-constraintdefinitions. The association is either global or scoped to a containing complex type definition. Atop-level element declaration with name 'A' is broadly comparable to a pair ofDTD declarations as follows, where the associated type definitionfills in the ellipses:
<!ELEMENT A . . .><!ATTLIST A . . .>
Element declarations contribute to·validation· as part of model group·validation·, when their defaults and type components are checked against an elementinformation item with a matching name and namespace, and by triggeringidentity-constraint definition·validation·.
For detailed information on element declarations, seeElement Declarations (§3.3).
In XML 1.0, the name and content of an element must correspond exactly to the element type referenced in the corresponding content model.
[Definition:] Throughthe new mechanism ofelement substitution groups, XML Schemas provides a more powerful model supporting substitution of one named element for another.Any top-level element declaration can serve as the defining member, orhead, for an element substitution group. Other top-level element declarations,regardless of target namespace, can be designated as members of thesubstitution group headed by this element. In a suitably enabled contentmodel, a reference to the head·validates· not just the head itself, but elementscorresponding to any other member of the substitution group as well.
All such members must have type definitions which are either the same as thehead's type definition orrestrictions or extensions of it.Therefore, although the names of elements can vary widely as newnamespaces and members of the substitution group are defined, thecontent of member elements is strictly limited according to the typedefinition of the substitution group head.
Note that element substitution groups are not represented as separate components. They arespecified in the property values for element declarations (seeElement Declarations (§3.3)).
An attribute declaration is an association between a name and a simple type definition, togetherwith occurrence information and (optionally) a default value. Theassociation is either global, or local to its containing complex type definition. Attribute declarations contribute to·validation· as part of complex type definition·validation·, when theiroccurrence, defaults and type components are checked against an attributeinformation item with a matching name and namespace.
For detailed information on attribute declarations, seeAttribute Declarations (§3.2).
A notation declaration is an association between a name and an identifier for anotation. For an attribute information item to be·valid· with respect to aNOTATION
simple type definition, its value must have been declaredwith a notation declaration.
For detailed information on notation declarations, seeNotation Declarations (§3.12).
The model group, particle, and wildcard components contribute tothe portion of a complex type definition that controls an elementinformation item's content.
A model group is a constraint in the form of a grammar fragment that applies tolists of element information items. It consists of a list of particles, i.e.element declarations, wildcards and model groups. There are three varieties ofmodel group:
For detailed information on model groups, seeModel Groups (§3.8).
A particle is a term in the grammar for element content, consisting of either an elementdeclaration, a wildcard or a model group, together withoccurrence constraints. Particles contribute to·validation· as part of complex type definition·validation·, when they allow anywherefrom zero to many element information items or sequences thereof, depending ontheir contents and occurrenceconstraints.
[Definition:] A particle canbe used in a complex type definition to constrain the·validation·of the[children] of an element information item; such a particle is calledacontent model.
For detailed information on particles, seeParticles (§3.9).
An attribute use plays a role similar to that of a particle, but forattribute declarations: an attribute declaration within a complex type definitionis embedded within an attribute use, which specifies whether the declarationrequires or merely allows its attribute, and whether it has a default or fixed value.
A wildcard is a special kind of particle which matches element and attribute information items dependent on their namespace name, independentlyof their local names.
For detailed information on wildcards, seeWildcards (§3.10).
An identity-constraint definition is an association between a name and one ofseveral varieties ofidentity-constraint related to uniqueness and reference. All thevarieties use[XPath] expressions to pick out sets ofinformation items relative to particular target elementinformation items which are unique, or a key, or a·valid· reference, withina specified scope. An element information item is only·valid· withrespect to an element declarationwith identity-constraint definitions if those definitions are all satisfied for all the descendantsof that element information item which they pick out.
For detailed information on identity-constraint definitions, seeIdentity-constraint Definitions (§3.11).
There are two kinds of convenience definitions provided to enablethe re-use of pieces of complex type definitions: model group definitionsand attribute group definitions.
A model group definition is an association between a name and a model group,enabling re-use of the same model group in several complex typedefinitions.
For detailed information on model group definitions, seeModel Group Definitions (§3.7).
An attribute group definition is an association between a name and a set of attribute declarations,enabling re-use of the same set in several complex typedefinitions.
For detailed information on attribute group definitions, seeAttribute Group Definitions (§3.6).
An annotation is information for human and/or mechanicalconsumers. The interpretation of such information isnot defined in this specification.
For detailed information on annotations, seeAnnotations (§3.13).
The[XML 1.0 (Second Edition)] specification describes two kinds of constraints on XML documents:well-formedness andvalidity constraints. Informally, the well-formedness constraints are those imposed by the definition of XML itself (such as the rules for the use of the < and > characters and the rules for proper nesting of elements), while validity constraints are the further constraints on document structure provided by a particular DTD.
The preceding section focused on·validation·, that isthe constraints on information items which schema components supply. In facthowever this specification provides four different kinds of normative statements about schema components, their representations in XML and their contribution to the·validation· of information items:
The last of these, schema information set contributions, are not as new as they might at first seem. XML 1.0 validation augments the XML 1.0 information set in similar ways,for example by providing values for attributes not present in instances, and by implicitly exploiting type information for normalization or access.(As an example of the latter case, consider the effect ofNMTOKENS
on attribute white space, and the semantics ofID
andIDREF
.) By including schemainformation set contributions, this specification makes explicit some featuresthat XML 1.0 left implicit.
This specification describes three levels of conformance for schema aware processors. The first isrequired of all processors. Support for the other two will depend on the application environmentsfor which the processor is intended.
[Definition:] Minimally conforming processors must completely andcorrectly implement the·Schema ComponentConstraints·,·Validation Rules·,and·Schema InformationSet Contributions· contained in this specification.
[Definition:] ·Minimally conforming· processors which acceptschemas represented in the form of XML documents as described inLayer 2: Schema Documents, Namespaces and Composition (§4.2) areadditionally said to provideconformance to the XML Representation of Schemas.Such processors must, when processing schema documents, completely andcorrectly implement all·Schema RepresentationConstraints· in this specification, and must adhere exactly to thespecifications inSchema Component Details (§3) for mapping the contents ofsuch documents to·schemacomponents· for use in·validation· and·assessment·.
[Definition:] Fully conformingprocessors are network-enabled processors which are not only both·minimally conforming· and·in conformance to the XML Representation of Schemas·, but which additionally must be capable of accessingschema documents from the World Wide Web according toRepresentation of Schemas on the World Wide Web (§2.7) andHow schema definitions are located on the Web (§4.3.2)..
SeeSchemas and Namespaces: Access and Composition (§4) for a more detailed explanation of themechanisms supporting these levels of conformance.
As discussed inXML Schema Abstract Data Model (§2.2), most schema components (may) have·names·.If all such names were assigned from the same "pool", then it would be impossible to have, for example, a simple type definition and an elementdeclaration both with the name"title" in a given·target namespace·.
Therefore[Definition:] this specification introduces the termsymbol space to denote acollection of names, each of which is unique with respect to the others. A symbol space is similar to the non-normative concept ofnamespace partition introduced in[XML-Namespaces].There is a single distinct symbol space within a given·targetnamespace· for each kind of definition and declaration componentidentified inXML Schema Abstract Data Model (§2.2), except that within a target namespace, simpletype definitions and complex type definitions share a symbol space.Within a given symbol space, names are unique, but the same name may appear in more than one symbol space without conflict. For example, the same name can appear in both a type definition and an element declaration, without conflict or necessary relation between the two.
Locally scoped attribute and elementdeclarations are special with regard to symbol spaces.Every complex type definition defines its own local attribute and element declaration symbol spaces, where these symbol spaces are distinct from each other and from any of the othersymbol spaces. So, for example, two complex type definitions havingthe same target namespace can containa local attribute declaration for the unqualified name "priority", or contain a local element declarationfor the name "address", without conflict or necessary relation betweenthe two.
The XML representation of schema components uses a vocabularyidentified by the namespace namehttp://www.w3.org/2001/XMLSchema
. For brevity, the text and examples in this specification use the prefixxs:
to stand for this namespace; in practice,any prefix can be used.
XML Schema: Structures also defines several attributes for direct use in any XML documents. These attributes are in a different namespace,which has the namespace namehttp://www.w3.org/2001/XMLSchema-instance
.For brevity, the text and examples in this specification use the prefixxsi:
to stand for this latter namespace; in practice,any prefix can be used. All schema processors have appropriate attributedeclarations for these attributes built in, seeAttribute Declaration for the 'type' attribute (§3.2.7),Attribute Declaration for the 'nil' attribute (§3.2.7),Attribute Declaration for the 'schemaLocation' attribute (§3.2.7) andAttribute Declaration for the 'noNamespaceSchemaLocation' attribute (§3.2.7).
TheSimple Type Definition (§2.2.1.2) orComplex Type Definition (§2.2.1.3) used in·validation· of an element is usuallydetermined by reference to the appropriate schema components.An element information item in an instance may, however,explicitly assert its type using the attributexsi:type
.The value of this attribute is a·QName·; seeQName Interpretation (§3.15.3) forthe means by which the·QName· isassociated with a type definition.
XML Schema: Structures introduces a mechanism for signaling that an element shouldbe accepted as·valid· when it has nocontent despite a content type which does not require or even necessarily allow empty content. Anelement may be·valid· without content if it has the attributexsi:nil
withthe valuetrue
. An element so labeled must be empty, but cancarry attributes if permitted by the corresponding complex type.
Thexsi:schemaLocation
andxsi:noNamespaceSchemaLocation
attributes can be used in a document to providehints as to the physical location of schema documents which may be used for·assessment·.SeeHow schema definitions are located on the Web (§4.3.2) for details on the use of these attributes.
On the World Wide Web, schemas are conventionally represented as XMLdocuments (preferably of MIME typeapplication/xml
ortext/xml
, but see clause1.1 ofInclusion Constraints and Semantics (§4.2.1)), conforming to the specifications inLayer 2: Schema Documents, Namespaces and Composition (§4.2). For more information onthe representation and use of schema documents on the World Wide Web seeStandards for representation of schemas and retrieval of schema documents on the Web (§4.3.1) andHow schema definitions are located on the Web (§4.3.2).
The following sections provide full details on the composition of all schema components, togetherwith their XML representations and their contributions to·assessment·. Each section is devoted to a single component, with separate subsections for
The sub-sections immediately below introduce conventions and terminology used throughout the component sections.
Components are defined in terms of theirproperties, and each property in turn is defined by giving its range,that is the values it may have. This can be understood asdefining a schema as a labeled directed graph, where the root is a schema,every other vertex is a schemacomponent or a literal (string, boolean, number) and every labeled edge is aproperty. The graph isnot acyclic: multiple copies ofcomponents with the same name in the same·symbol space· may not exist, so in some cases re-entrant chainsof properties must exist. Equality of components for the purposes of thisspecification is always defined as equality of names (including targetnamespaces) within symbol spaces.
[Definition:] Throughout this specification, thetermabsent is used as a distinguished property value denoting absence.
Any property notidentified as optional is required to be present; optional properties which arenot present are taken to have·absent· as their value. Anyproperty identified as a having a set, subset or list value may have an empty value unless this is explicitlyruled out: this isnot the same as·absent·. Any property value identified as a superset or subset of some set may be equal to that set, unless a proper superset or subset is explicitly called for.By 'string' in Part 1 of this specification is meant asequence of ISO 10646 characters identified aslegal XML charactersin[XML 1.0 (Second Edition)].
The principal purpose ofXML Schema: Structures is to define a set of schema components that constrain the contents of instances and augment the information sets thereof. Although no external representationof schemas is required for this purpose, such representations willobviously be widely used. To provide for this in an appropriate andinteroperable way, this specification provides a normative XML representation for schemas whichmakes provision for every kind of schemacomponent.[Definition:] A document inthis form (i.e. a<schema> element information item) is aschema document. For the schema document as a whole, andits constituents, the sections below define correspondences between elementinformation items (with declarations inSchema for Schemas (normative) (§A) andDTD for Schemas (non-normative) (§G)) andschema components. All the element information items in the XML representationof a schema must be in the XML Schema namespace, that is their[namespace name] must behttp://www.w3.org/2001/XMLSchema
. Although a common way of creating the XML Infosets which are or contain·schema documents· will be using an XML parser, this is not required: any mechanism which constructs conformant infosets as defined in[XML-Infoset] is a possible starting point.
Two aspects of the XML representations of components presented in thefollowing sections are constant across them all:
For each kind of schema component there is a corresponding normative XML representation.The sections below describe the correspondences between the properties of each kind ofschema component on the one hand and the properties of information items inthat XML representation on the other, togetherwith constraints on that representation above and beyond those implicit in theSchema for Schemas (normative) (§A).
The language used is as if the correspondences were mappings from XML representation toschema component, but the mapping in the other direction, and therefore thecorrespondence in the abstract, can always beconstructed therefrom.
In discussing the mapping from XML representations to schemacomponents below, the value of a component property is often determined by thevalue of an attribute information item, one of the[attributes] of an elementinformation item. Since schema documents are constrained by theSchema for Schemas (normative) (§A), there is always a simple typedefinition associated with any such attribute information item.[Definition:] Thephraseactual value is used to refer to the member of the value space of thesimple type definition associated with an attribute information item which corresponds toits·normalized value·. This will often be a string, but may also be aninteger, a boolean, a URI reference, etc. This term is also occasionally used with respect to element or attribute information items in a document being·validated·.
Many properties are identified below as havingother schema components or sets of components as values. For the purposes of exposition, the definitions inthis section assume that (unless the property is explicitly identified asoptional) all such values are in fact present. When schemacomponents are constructed from XML representations involving reference by nameto other components, this assumption may be violated if one or more referencescannot be resolved. This specification addresses the matter of missingcomponents in a uniform manner, described inMissing Sub-components (§5.3): no mention ofhandling missing components will be found in the individual componentdescriptions below.
Forward reference to named definitions and declarationsisallowed, both within and between·schema documents·. By the time the component corresponding to an XML representation whichcontains a forward reference is actually needed for·validation· an appropriately-named component may have become available to discharge the reference: seeSchemas and Namespaces: Access and Composition (§4) for details.
Throughout this specification,[Definition:] theinitial value of someattribute information item is the value of the[normalizedvalue] property of that item. Similarly, theinitial value of an element information item is the string composed of, in order, the[character code] of each character information item in the[children] of thatelement information item.
The above definition means that comments and processing instructions,even in the midst of text, are ignored for all·validation· purposes.
[Definition:] Thenormalized value of an element orattribute information item is an·initial value· whose white space, if any, has beennormalized according to the value of thewhiteSpace facet of thesimple type definition used in its·validation·:
#x9
(tab),#xA
(line feed) and#xD
(carriage return) are replaced with#x20
(space).#x20
s are collapsed to a single#x20
, and initial and/or final#x20
s are deleted.If the simple type definition used in an item's·validation· is the·simple ur-type definition·, the·normalized value· must be determined as in thepreserve case above.
There are three alternative validation rules which may supply thenecessary background for the above:Attribute Locally Valid (§3.2.4) (clause3),Element Locally Valid (Type) (§3.3.4) (clause3.1.3) orElement Locally Valid (Complex Type) (§3.4.4) (clause2.2).
These three levels of normalization correspond to the processing mandatedin XML 1.0 for element content, CDATA attribute content and tokenizedattributed content, respectively. SeeAttribute Value Normalization in[XML 1.0 (Second Edition)] for the precedent forreplace andcollapse for attributes. Extending this processing to element content is necessary to ensure a consistent·validation· semantics for simple types, regardless of whether they are applied to attributes or elements. Performing it twice in the case of attributes whose[normalizedvalue] has already been subject to replacement or collapse on the basis ofinformation in a DTD is necessary to ensure consistent treatment of attributesregardless of the extent to which DTD-based information has been made use ofduring infoset construction.
Attribute declarations provide for:
<xs:attribute name="age" type="xs:positiveInteger" use="required"/>
The attribute declaration schema component has the followingproperties:
The{name} property must match the local part of the names of attributes being·validated·.
The value of the attribute must conform to the supplied{type definition}.
A non-·absent· value of the{target namespace} property provides for·validation· ofnamespace-qualified attribute information items (which must be explicitlyprefixed in the character-level form of XML documents).·Absent· values of{target namespace}·validate· unqualified (unprefixed) items.
A{scope} ofglobal identifies attribute declarationsavailable for use in complex type definitions throughout the schema. Locally scoped declarations are available for use only within thecomplex type definition identified by the{scope} property. This property is·absent· in the case of declarations within attribute group definitions: their scope will be determined when they are used in the construction of complex type definitions.
{value constraint} reproduces the functions of XML 1.0 default and#FIXED
attribute values.default specifies that the attribute is to appear unconditionally inthe·post-schema-validation infoset·, with the supplied value usedwhenever the attribute is not actually present;fixed indicates that the attribute value if present must equal the suppliedconstraint value, and if absent receives the supplied value as fordefault. Note that it isvalues that are supplied and/orchecked, not strings.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
[XML-Infoset] distinguishes attributes with names such asxmlns
orxmlns:xsl
fromordinary attributes, identifying them as[namespace attributes]. Accordingly, it is unnecessary and in fact not possible forschemas to contain attribute declarations corresponding to suchnamespace declarations, seexmlns Not Allowed (§3.2.6). No means is provided inthis specification to supply adefault value for a namespace declaration.
The XML representation for an attribute declaration schema component is an<attribute> element information item. It specifies a simple typedefinition for an attribute either by reference or explicitly, and may provide default information. The correspondences between theproperties of the information item andproperties of the component are as follows:
attribute
Element Information Item<attribute
default =string
fixed =string
form = (qualified |unqualified)
id =ID
name =NCName
ref =QName
type =QName
use = (optional |prohibited |required) : optional
{any attributes with non-schema namespace . . .}>
Content:(annotation?,simpleType?)
</attribute>
Attribute Declaration Schema Component | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
[attribute] is absent, it corresponds to anattribute use with properties as follows (unlessuse='prohibited'
, in which case the itemcorresponds to nothing at all):Attribute Use Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Attribute Declaration Schema Component | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
[attribute] is present), it corresponds to anattribute use with properties as follows (unlessuse='prohibited'
, in which case the itemcorresponds to nothing at all):Attribute Use Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Attribute declarations can appear at the top level of a schema document, or within complextype definitions, either as complete (local) declarations, or by reference to top-leveldeclarations, or within attribute group definitions. For complete declarations, top-level or local, thetype
attribute is used when the declaration can use abuilt-in or pre-declared simple type definition. Otherwise ananonymous<simpleType> is provided inline.
The default when no simple type definition is referenced orprovided is the·simple ur-type definition·, which imposes no constraints at all.
Attribute information items·validated· by a top-level declaration must be qualified with the{target namespace} of that declaration (if this is·absent·, the item must be unqualified). Control over whether attribute information items·validated· by a local declaration must be similarly qualified or notis provided by theform
[attribute], whose default is providedby theattributeFormDefault
[attribute] on the enclosing<schema>, via its determination of{target namespace}.
The names for top-level attribute declarations are in their own·symbol space·. The names of locally-scopedattribute declarations reside in symbol spaces local to the type definition which containsthem.
default
andfixed
must not both be present.ref
orname
must be present, but not both.type
and<simpleType>must not both be present.All attribute declarations (seeAttribute Declarations (§3.2)) must satisfy the following constraints.
http://www.w3.org/2001/XMLSchema-instance
(unless it is one of the four built-in declarations given in the next section).xsi:type
orxsi:nil
, which would beseriously misleading, as they would have no effect.There are four attribute declarations present in everyschema by definition:
Attribute Declaration for the 'type' attribute | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Attribute Declaration for the 'nil' attribute | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Attribute Declaration for the 'schemaLocation' attribute | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Attribute Declaration for the 'noNamespaceSchemaLocation' attribute | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Element declarations provide for:
<xs:element name="PurchaseOrder" type="PurchaseOrderType"/><xs:element name="gift"> <xs:complexType> <xs:sequence> <xs:element name="birthday" type="xs:date"/> <xs:element ref="PurchaseOrder"/> </xs:sequence> </xs:complexType></xs:element>
The element declaration schema component has the followingproperties:
The{name} property must match the local part of the namesof element information items being·validated·.
A{scope} ofglobal identifies element declarations available for use in contentmodels throughout the schema. Locally scoped declarations are available for use only within thecomplex type identified by the{scope} property. This property is·absent· in the case of declarations within named model groups: their scope is determined when they are used in the construction of complex type definitions.
A non-·absent· value of the{target namespace} property provides for·validation· ofnamespace-qualified element information items.·Absent· values of{target namespace}·validate· unqualified items.
An element information item is·valid·if it satisfies the{type definition}. For such anitem, schema information set contributions appropriate to the{type definition} are added to thecorresponding element information item in the·post-schema-validation infoset·.
If{nillable} istrue, then an element mayalso be·valid· if itcarries the namespace qualified attribute with[local name]nil
from namespacehttp://www.w3.org/2001/XMLSchema-instance
and valuetrue
(seexsi:nil (§2.6.2)) even if it hasno text or element content despite a{content type} which wouldotherwise require content. Formal details of element·validation· are described inElement Locally Valid (Element) (§3.3.4).
{value constraint} establishes a default or fixed value for an element. Ifdefault is specified, and if the elementbeing·validated· is empty, then thecanonical form of the suppliedconstraint value becomes the[schema normalized value] of the·validated· element in the·post-schema-validation infoset·. Iffixed is specified, then the element's contentmust either be empty, in which casefixed behaves asdefault,or its value must match the supplied constraint value.
{identity-constraint definitions} express constraints establishing uniquenesses and reference relationships among the values of related elements andattributes. SeeIdentity-constraint Definitions (§3.11).
Element declarations are potential members of the substitution group, if any, identifiedby{substitution group affiliation}. Potential membership is transitive but not symmetric; an elementdeclaration is a potential member of any group of which its{substitution group affiliation} is a potential member. Actual membership may be blocked by the effects of{substitution group exclusions} or{disallowed substitutions}, see below.
An empty{substitution group exclusions} allows a declaration to be nominated asthe{substitution group affiliation} of other element declarations having the same{type definition} ortypes derived therefrom. The explicitvalues of{substitution group exclusions} rule out element declarations having types whichareextensions orrestrictions respectively of{type definition}. Ifboth values are specified, then the declaration may not be nominated as the{substitution group affiliation} of any other declaration.
The supplied values for{disallowed substitutions} determinewhether an element declaration appearing in a·content model· will be prevented from additionally·validating· elements (a) with anxsi:type (§2.6.1) that identifies anextension orrestriction of the type of the declared element, and/or (b) from·validating· elements which are in thesubstitution group headed by the declared element.If{disallowed substitutions} is empty, then all derived types and substitution group members are allowed.
Element declarations for which{abstract} istrue can appear incontent models only when substitution is allowed;such declarations may not themselves ever be used to·validate· element content.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for an element declaration schema component is an<element> element information item. It specifies a typedefinition for an element either by reference or explicitly, and may provideoccurrence and default information. The correspondences between theproperties of the information item andproperties of the component(s) it corresponds to are as follows:
element
Element Information Item<element
abstract =boolean : false
block = (#all | List of (extension |restriction |substitution))
default =string
final = (#all | List of (extension |restriction))
fixed =string
form = (qualified |unqualified)
id =ID
maxOccurs = (nonNegativeInteger |unbounded) : 1
minOccurs =nonNegativeInteger : 1
name =NCName
nillable =boolean : false
ref =QName
substitutionGroup =QName
type =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, ((simpleType |complexType)?, (unique |key |keyref)*))
</element>
Element Declaration Schema Component | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
ref
[attribute] is absent, the corresponding schema componentsare as follows (unlessminOccurs=maxOccurs=0
, in which case the itemcorresponds to no component at all):Particle Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Element Declaration Schema Component | ||||||
---|---|---|---|---|---|---|
|
ref
[attribute] is present), the corresponding schema component is asfollows (unlessminOccurs=maxOccurs=0
, in which case the itemcorresponds to no component at all):Particle Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
<element> corresponds to an element declaration, and allowsthe type definition of that declaration to be specified either by reference orby explicit inclusion.
<element>s within<schema> produceglobal element declarations;<element>s within<group> or<complexType> produce either particles which containglobal element declarations (if there's aref
attribute) or local declarations (otherwise). For complete declarations, top-level or local, thetype
attribute is used when the declaration can use abuilt-in or pre-declared type definition. Otherwise ananonymous<simpleType> or<complexType> is provided inline.
Element information items·validated· by a top-level declaration must be qualified with the{target namespace} of that declaration (if this is·absent·, the item must be unqualified). Control over whether element information items·validated· by a local declaration must be similarly qualified or notis provided by theform
[attribute], whose default is providedby theelementFormDefault
[attribute] on the enclosing<schema>, via its determination of{target namespace}.
As noted above the names for top-level element declarations are in a separate·symbol space· from the symbol spaces forthe names of type definitions, so there can (but neednot be) a simple or complex type definition with the same name as atop-level element. As with attribute names, the names of locally-scopedelement declarations with no{target namespace} reside in symbol spaces local to the type definition which containsthem.
Note that the above allows for two levels of defaulting for unspecifiedtype definitions. An<element> with no referenced or included type definition willcorrespond to an element declaration which has the same type definition as thehead of its substitution group if it identifies one, otherwise the·ur-type definition·. This has the important consequence that the minimum valid element declaration, that is, one with only aname
attribute and no contents, is also (nearly) the most general, validating any combination of text and element content and allowing any attributes, and providing for recursive validation where possible.
See below atXML Representation of Identity-constraint Definition Schema Components (§3.11.2) for<key>,<unique> and<keyref>.
<xs:element name="unconstrained"/><xs:element name="emptyElt"> <xs:complexType> <xs:attribute ...>. . .</xs:attribute> </xs:complexType></xs:element><xs:element name="contextOne"> <xs:complexType> <xs:sequence> <xs:element name="myLocalElement" type="myFirstType"/> <xs:element ref="globalElement"/> </xs:sequence> </xs:complexType></xs:element><xs:element name="contextTwo"> <xs:complexType> <xs:sequence> <xs:element name="myLocalElement" type="mySecondType"/> <xs:element ref="globalElement"/> </xs:sequence> </xs:complexType></xs:element>
myLocalElement
withincontextOne
will be constrained bymyFirstType
,while those withincontextTwo
will be constrained bymySecondType
.<xs:complexType name="facet"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="value" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="facet" type="xs:facet" abstract="true"/> <xs:element name="encoding" substitutionGroup="xs:facet"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:facet"> <xs:sequence> <xs:element ref="annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="value" type="xs:encodings"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="period" substitutionGroup="xs:facet"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:facet"> <xs:sequence> <xs:element ref="annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="value" type="xs:duration"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="datatype"> <xs:sequence> <xs:element ref="facet" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="optional"/> . . . </xs:complexType>
facet
type is definedand thefacet
element is declared to use it. Thefacet
element is abstract -- it'sonly defined to stand as the head for a substitution group. Two furtherelements are declared, each a member of thefacet
substitution group. Finally a type is defined which refers tofacet
, therebyallowingeitherperiod
orencoding
(orany other member of the group).default
andfixed
must not both be present.ref
orname
must be present, but not both.ref
is present, then all of<complexType>,<simpleType>,<key>,<keyref>,<unique>,nillable
,default
,fixed
,form
,block
andtype
must be absent,i.e. onlyminOccurs
,maxOccurs
,id
areallowed in addition toref
, along with<annotation>.http://www.w3.org/2001/XMLSchema-instance
and whose[local name] isnil
.true
,thenall of the following must be true:http://www.w3.org/2001/XMLSchema-instance
and whose[local name] istype
, thenall of the following must be true:http://www.w3.org/2001/XMLSchema-instance
and whose[local name] is one oftype
,nil
,schemaLocation
ornoNamespaceSchemaLocation
.ID/IDREF
functionality is imperfect in that if the·validationroot· is not the document element of an XML document, the results willnot necessarily be the same as those a validating parser would give were thedocument to have a DTD with equivalent declarations.http://www.w3.org/2001/XMLSchema-instance
and whose[local name] istype
.xsi:type
[attribute] is involved, however, clause1.2 takes precedence,as is made clear inElement Locally Valid (Element) (§3.3.4).All element declarations (seeElement Declarations (§3.3)) must satisfy the following constraint.
The following constraints define relations appealed to elsewhere in this specification.
Complex Type Definitions provide for:
<xs:complexType name="PurchaseOrderType"> <xs:sequence> <xs:element name="shipTo" type="USAddress"/> <xs:element name="billTo" type="USAddress"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="items" type="Items"/> </xs:sequence> <xs:attribute name="orderDate" type="xs:date"/> </xs:complexType>
A complex type definition schema component has the followingproperties:
Complex types definitions are identified by their{name} and{target namespace}. Exceptfor anonymous complex type definitions (those with no{name}), sincetype definitions (i.e. both simple and complex type definitions taken together) must be uniquely identified within an·XMLSchema·, no complex type definition can have the same name as anothersimple or complex type definition. Complex type{name}s and{target namespace}sare provided for reference frominstances (seexsi:type (§2.6.1)), and for use in the XMLrepresentation of schema components(specifically in<element>). SeeReferences to schema components across namespaces (§4.2.3) for the use of componentidentifiers when importing one schema into another.
As described inType Definition Hierarchy (§2.2.1.1), each complex type is derived from a{base type definition} which is itself either aSimple Type Definition (§2.2.1.2) or aComplex Type Definition (§2.2.1.3).{derivation method} specifies the means of derivation as eitherextension orrestriction (seeType Definition Hierarchy (§2.2.1.1)).
A complex type with an empty specification for{final} can be used as a{base type definition} for other types derived by either ofextension or restriction; the explicit valuesextension, andrestriction prevent furtherderivations by extension and restriction respectively. If all values are specified, then[Definition:] the complex type is said to befinal, because nofurther derivations are possible. Finality isnotinherited, that is, a type definition derived by restriction from a typedefinition which is final for extension is not itself, in the absence of anyexplicitfinal
attribute of its own, final for anything.
Complex types for which{abstract} istrue mustnot be used as the{type definition} for the·validation· of element information items. It follows that they must not be referenced from anxsi:type (§2.6.1) attribute in an instance document. Abstract complex types can beused as{base type definition}s, or even as the{type definition}s of element declarations, provided in every case a concrete derived type definition is used for·validation·, either viaxsi:type (§2.6.1) or the operation of a substitution group.
{attribute uses} are a set of attribute uses. SeeElement Locally Valid (Complex Type) (§3.4.4)andAttribute Locally Valid (§3.2.4) for details of attribute·validation·.
{attribute wildcard}s provide a more flexible specification for·validation· ofattributes not explicitly included in{attribute uses}.Informally, the specific valuesof{attribute wildcard} are interpreted as follows:
SeeElement Locally Valid (Complex Type) (§3.4.4) andWildcard allows Namespace Name (§3.10.4) for formaldetails of attribute wildcard·validation·.
{content type} determines the·validation· of[children] of element information items. Informally:
{prohibited substitutions} determinewhether an element declaration appearing in a·content model· is prevented from additionally·validating· element items with anxsi:type (§2.6.1) attribute thatidentifies a complex type definition derived byextension orrestriction from this definition, or element items ina substitution group whose type definition is similarly derived:If{prohibited substitutions} is empty,then all such substitutions are allowed, otherwise, the derivation method(s) itnames are disallowed.
SeeAnnotations (§3.13) for information on the role of the{annotations} property.
The XML representation for a complex type definition schema component is a<complexType> element information item.
The XML representation for complex type definitions witha simple type definition{content type} is significantly differentfrom that of those with other{content type}s, and thisis reflected in the presentation below, which displays first the elementsinvolved in the first case, then those for the second. The property mapping is shown once for each case.
complexType
Element Information Item<complexType
abstract =boolean : false
block = (#all | List of (extension |restriction))
final = (#all | List of (extension |restriction))
id =ID
mixed =boolean : false
name =NCName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (simpleContent |complexContent | ((group |all |choice |sequence)?, ((attribute |attributeGroup)*,anyAttribute?))))
</complexType>
Complex Type Definition Schema Component | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<simpleContent
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (restriction |extension))
</simpleContent>
<restriction
base =QName
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (simpleType?, (minExclusive |minInclusive |maxExclusive |maxInclusive |totalDigits |fractionDigits |length |minLength |maxLength |enumeration |whiteSpace |pattern)*)?, ((attribute |attributeGroup)*,anyAttribute?))
</restriction>
<extension
base =QName
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, ((attribute |attributeGroup)*,anyAttribute?))
</extension>
<attributeGroup
id =ID
ref =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</attributeGroup>
<anyAttribute
id =ID
namespace = ((##any |##other) | List of (anyURI | (##targetNamespace |##local)) ) : ##any
processContents = (lax |skip |strict) : strict
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</anyAttribute>
Complex Type Definition with simple content Schema Component | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<complexContent
id =ID
mixed =boolean
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (restriction |extension))
</complexContent>
<restriction
base =QName
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (group |all |choice |sequence)?, ((attribute |attributeGroup)*,anyAttribute?))
</restriction>
<extension
base =QName
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, ((group |all |choice |sequence)?, ((attribute |attributeGroup)*,anyAttribute?)))
</extension>
Complex Type Definition with complex content Schema Component | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
use
attribute of an<attribute> is in establishingthe correspondence between a complex type defined by restriction and its XMLrepresentation. It serves to preventinheritance of an identically named attribute use from the{base type definition}. Such an<attribute> does not correspond to any component, and hence there is no interaction with either explicit or inherited wildcards in the operation ofComplex Type Definition Validation Rules (§3.4.4) orConstraints on Complex Type Definition Schema Components (§3.4.6).Careful consideration of the above concrete syntax reveals thata type definition need consist of no more than a name, i.e. that<complexType name="anyThing"/>
is allowed.
<xs:complexType name="length1"> <xs:simpleContent> <xs:extension base="xs:nonNegativeInteger"> <xs:attribute name="unit" type="xs:NMTOKEN"/> </xs:extension> </xs:simpleContent></xs:complexType><xs:element name="width" type="length1"/> <width unit="cm">25</width><xs:complexType name="length2"> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:sequence> <xs:element name="size" type="xs:nonNegativeInteger"/> <xs:element name="unit" type="xs:NMTOKEN"/> </xs:sequence> </xs:restriction> </xs:complexContent></xs:complexType><xs:element name="depth" type="length2"/> <depth> <size>25</size><unit>cm</unit> </depth><xs:complexType name="length3"> <xs:sequence> <xs:element name="size" type="xs:nonNegativeInteger"/> <xs:element name="unit" type="xs:NMTOKEN"/> </xs:sequence></xs:complexType>
length3
is the abbreviated alternative tolength2
: they correspond to identical type definition components.<xs:complexType name="personName"> <xs:sequence> <xs:element name="title" minOccurs="0"/> <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="surname"/> </xs:sequence></xs:complexType><xs:complexType name="extendedName"> <xs:complexContent> <xs:extension base="personName"> <xs:sequence> <xs:element name="generation" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent></xs:complexType><xs:element name="addressee" type="extendedName"/> <addressee> <forename>Albert</forename> <forename>Arnold</forename> <surname>Gore</surname> <generation>Jr</generation> </addressee>
<xs:complexType name="simpleName"> <xs:complexContent> <xs:restriction base="personName"> <xs:sequence> <xs:element name="forename" minOccurs="1" maxOccurs="1"/> <xs:element name="surname"/> </xs:sequence> </xs:restriction> </xs:complexContent></xs:complexType><xs:element name="who" type="simpleName"/> <who> <forename>Bill</forename> <surname>Clinton</surname> </who>
<xs:complexType name="paraType" mixed="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="emph"/> <xs:element ref="strong"/> </xs:choice> <xs:attribute name="version" type="xs:number"/></xs:complexType>
mixed
attribute appearing oncomplexType
itself.base
[attribute] must be a complex type definition;base
[attribute] must beone of the following:<xs:complexType . . .mixed='true'
when the<simpleContent> alternative is chosen has no effect on the corresponding component, and should be avoided. This may be ruled out in a subsequent version of this specification.http://www.w3.org/2001/XMLSchema-instance
and whose[local name] is one oftype
,nil
,schemaLocation
ornoNamespaceSchemaLocation
, the appropriatecase among the followingmust be true:All complex type definitions (seeComplex Type Definitions (§3.4)) must satisfy the following constraints.
The following constraint defines a relation appealed to elsewhere in this specification.
xsi:type
orsubstitution groups), that the type used is actually derived from the expectedtype, and that that derivation does not involve a form of derivation which wasruled out by the expected type.Note:
The wording of clause2.1 above appeals to a notion of component identity whichis only incompletely defined by this version of this specification.In some cases, the wording of this specification does make clear therules for component identity. These cases include:There is a complex type definition nearly equivalent to the·ur-type definition· present in everyschema by definition. It has the following properties:
Complex Type Definition of the Ur-Type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Themixed
content specification together with thelax wildcard and attribute specification produce the defining property for the·ur-type definition·, namely thatevery typedefinition is (eventually) a restrictionof the·ur-type definition·: its permissions and requirements are(nearly) the least restrictive possible.
rational
) and utility (e.g.array
) type definitions. In particular, there is atext
type definition which is recommended for useas the type definition in element declarations intended for general textcontent, as it makes sensible provision for various aspects ofinternationalization. For more details, see the schema document for the typelibrary at its namespace name:http://www.w3.org/2001/03/XMLSchema/TypeLibrary.xsd.An attribute use is a utility component which controls the occurrence anddefaulting behavior of attribute declarations. It plays the same role forattribute declarations in complex types that particles play for element declarations.
<xs:complexType> . . . <xs:attribute ref="xml:lang" use="required"/> <xs:attribute ref="xml:space" default="preserve"/> <xs:attribute name="version" type="xs:number" fixed="1.0"/></xs:complexType>
The attribute use schema component has the following properties:
{required} determines whether this use of an attributedeclaration requires an appropriate attribute information item to be present, ormerely allows it.
{attribute declaration} provides the attribute declaration itself,which will in turn determine the simple type definition used.
{value constraint} allows for local specification of adefault or fixed value. This must be consistent with that of the{attribute declaration}, in that if the{attribute declaration} specifies a fixed value, the only allowed{value constraint} is the same fixed value.
Attribute uses correspond to all uses of<attribute> whichallow ause
attribute. These in turn correspond totwo components in each case, an attribute use and its{attribute declaration} (although note the latter is not new when the attribute use is a reference to a top-level attribute declaration). The appropriate mapping is described inXML Representation of Attribute Declaration Schema Components (§3.2.2).
All attribute uses (seeAttributeUses (§3.5)) must satisfy the following constraints.
A schema can name a group of attribute declarations so that they may be incorporated as agroup into complex type definitions.
Attribute group definitions do not participate in·validation· as such, but the{attribute uses} and{attribute wildcard} of one ormore complex type definitions may be constructed in whole or part by referenceto an attribute group. Thus, attribute group definitions provide areplacement for some uses of XML'sparameter entity facility.Attribute group definitions are provided primarily for reference from the XMLrepresentation of schema components(see<complexType> and<attributeGroup>).
<xs:attributeGroup name="myAttrGroup"> <xs:attribute . . ./> . . .</xs:attributeGroup><xs:complexType name="myelement"> . . . <xs:attributeGroup ref="myAttrGroup"/></xs:complexType>
The attribute group definition schema component has thefollowing properties:
Attribute groups are identified by their{name} and{target namespace}; attribute group identities must be unique within an·XML Schema·. SeeReferences to schema components across namespaces (§4.2.3) for the use of componentidentifiers when importing one schema into another.
{attribute uses} is a set attribute uses, allowingfor local specification of occurrence and default or fixed values.
{attribute wildcard} provides for an attribute wildcard to be included in anattribute group.See above underComplex Type Definitions (§3.4) for theinterpretation ofattribute wildcards during·validation·.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for an attribute group definition schema component is an<attributeGroup> element information item. It provides fornaming a group of attribute declarations and an attribute wildcard for use by reference in the XML representation ofcomplex type definitions and other attribute group definitions. The correspondences between theproperties of the information item andproperties of the component it corresponds to are as follows:
attributeGroup
Element Information Item<attributeGroup
id =ID
name =NCName
ref =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, ((attribute |attributeGroup)*,anyAttribute?))
</attributeGroup>
Attribute Group Definition Schema Component | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
The example above illustrates a pattern whichrecurs in the XML representation of schemas: The same element, in this caseattributeGroup
, serves both todefine and to incorporate by reference. In the first case thename
attribute is required, in the second theref
attribute is required, and the element must be empty. These two are mutually exclusive, and also conditionedby context: the defining form, with aname
, must occur at the toplevel of a schema, whereas the referring form, with aref
, mustoccur within a complex type definition or an attribute group definition.
ref
[attribute] which resolves to the component corresponding to this<attributeGroup>. Indirect circularity is also ruled out. That is, whenQName resolution (Schema Document) (§3.15.3) is applied to a·QName· arising from any<attributeGroup>s with aref
[attribute] among the[children], it must not be the case that a·QName· isencountered at any depth which resolves to thecomponent corresponding to this<attributeGroup>.All attribute group definitions (seeAttribute Group Definitions (§3.6)) must satisfy the following constraint.
A model group definition associates a name and optional annotations with aModel Group (§2.2.3.1).By reference to the name, the entire model group can be incorporated by reference into a{term}.
Model group definitions are providedprimarily for reference from theXML Representation of Complex Type Definitions (§3.4.2) (see<complexType>and<group>). Thus, model group definitions provide areplacement for some uses of XML'sparameter entity facility.
<xs:group name="myModelGroup"> <xs:sequence> <xs:element ref="someThing"/> . . . </xs:sequence></xs:group><xs:complexType name="trivial"> <xs:group ref="myModelGroup"/> <xs:attribute .../></xs:complexType><xs:complexType name="moreSo"> <xs:choice> <xs:element ref="anotherThing"/> <xs:group ref="myModelGroup"/> </xs:choice> <xs:attribute .../></xs:complexType>
The model group definition schema component has the followingproperties:
Model group definitions are identified by their{name} and{target namespace}; model group identities must be unique within an·XML Schema·. SeeReferences to schema components across namespaces (§4.2.3) for the use of componentidentifiers when importing one schema into another.
Model group definitionsper se do not participate in·validation·, but the{term} ofa particle may correspond in whole or in partto a model group from a model group definition.
{model group} is theModel Group (§2.2.3.1) for which the model group definition provides a name.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for a model group definition schema component is a<group> element information item. It provides fornaming a model group for use by reference in the XML representation ofcomplex type definitions and model groups. The correspondences between theproperties of the information item andproperties of the component it corresponds to are as follows:
group
Element Information Item<group
id =ID
maxOccurs = (nonNegativeInteger |unbounded) : 1
minOccurs =nonNegativeInteger : 1
name =NCName
ref =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (all |choice |sequence)?)
</group>
name
[attribute] (in which case theitem will have<schema> or<redefine> as parent), then the item corresponds toa model group definition component with properties as follows:Model Group Definition Schema Component | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
ref
[attribute],in which case it corresponds to a particle component with properties as follows (unlessminOccurs=maxOccurs=0
, in which case the itemcorresponds to no component at all):Particle Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
The name of this section is slightly misleading, in that the second, un-named,case above (with aref
and noname
) is not really a named modelgroup at all, but a reference to one. Also note that in the first (named)case above no reference is made tominOccurs
ormaxOccurs
: this is because the schema for schemas does not allowthem on the child of<group> when it is named. This in turn isbecause the{min occurs} and{max occurs} ofthe particles whichrefer to the definition are what count.
Given the constraints on its appearance in content models, an<all> should only occur as the only item in the[children] of a named model group definition or a content model: seeConstraints on Model Group Schema Components (§3.8.6).
All model group definitions (seeModel Group Definitions (§3.7)) must satisfy the following constraint.
When the[children] of element information items are not constrainedto beempty or by reference to a simple type definition(Simple Type Definitions (§3.14)), the sequence of elementinformation item[children] content may be specified inmore detail with a model group. Because the{term} property of a particle can be amodel group, and model groups contain particles, model groups can indirectly contain other model groups; the grammar for content modelsis therefore recursive.
<xs:all> <xs:element ref="cats"/> <xs:element ref="dogs"/></xs:all><xs:sequence> <xs:choice> <xs:element ref="left"/> <xs:element ref="right"/> </xs:choice> <xs:element ref="landmark"/></xs:sequence>
The model group schema component has the followingproperties:
specifies a sequential (sequence),disjunctive (choice) or conjunctive (all) interpretation ofthe{particles}. This in turn determines whether the elementinformation item[children]·validated· by the model group must:
=0
or1
,{max occurs}=1
.When two or more particles contained directly or indirectly in the{particles} of a model group have identically namedelement declarations as their{term}, the type definitions of those declarations must be thesame. By 'indirectly' is meant particles within the{particles}of a group which is itself the{term} of a directly containedparticle, and so on recursively.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for a model group schema component iseither an<all>, a<choice> or a<sequence>element information item. The correspondences between theproperties of those information items andproperties of the component they correspond to are as follows:
all
Element Information Item<all
id =ID
maxOccurs =1 : 1
minOccurs = (0 |1) : 1
{any attributes with non-schema namespace . . .}>
Content:(annotation?,element*)
</all>
<choice
id =ID
maxOccurs = (nonNegativeInteger |unbounded) : 1
minOccurs =nonNegativeInteger : 1
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (element |group |choice |sequence |any)*)
</choice>
<sequence
id =ID
maxOccurs = (nonNegativeInteger |unbounded) : 1
minOccurs =nonNegativeInteger : 1
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (element |group |choice |sequence |any)*)
</sequence>
minOccurs=maxOccurs=0
, in which case the itemcorresponds to no component at all):Particle Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Model Group Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
n
sub-sequences wheren
is the length of{particles} such that each of the sub-sequences in order is·valid·with respect to the corresponding particle in the{particles} as defined inElement Sequence Locally Valid (Particle) (§3.9.4).n
sub-sequences wheren
is the length of{particles} such that there is a one-to-one mapping between the sub-sequences and the{particles} where each sub-sequence is·valid· with respect to the corresponding particle as defined inElement Sequence Locally Valid (Particle) (§3.9.4).0
), and each is·valid· with respect to its corresponding declaration. The elements can occur in arbitrary order.All model groups (seeModel Groups (§3.8)) must satisfy the following constraints.
=1
which is part of a pair which constitutes the{content type} of acomplex type definition.The following constraints define relations appealed to elsewhere in this specification.
0
if there are no{particles}).0
if there are no{particles}).0
if there are no{particles}).0
if there are no{particles}).As described inModel Groups (§3.8), particles contribute to the definitionof content models.
<xs:element ref="egg" minOccurs="12" maxOccurs="12"/><xs:group ref="omelette" minOccurs="0"/><xs:any maxOccurs="unbounded"/>
The particle schema component has the following properties:
In general, multiple elementinformation item[children], possibly with intervening character[children] if the content typeismixed, can be·validated· withrespect to a single particle. When the{term} is an elementdeclaration or wildcard,{min occurs} determines the minimum number of such element[children] that can occur. The number of such children must be greater than or equal to{min occurs}. If{min occurs} is0, then occurrence of such children is optional.
Again, when the{term} is an elementdeclaration or wildcard, the number of such element[children] must be less than or equal to any numeric specification of{max occurs}; if{max occurs} isunbounded, then there is noupper bound on the number of such children.
When the{term} is a model group, the permittedoccurrence range is determined by a combination of{min occurs} and{max occurs} and the occurrence ranges of the{term}'s{particles}.
Particles correspond to all three elements (<element> not immediately within<schema>,<group> not immediately within<schema> and<any>) which allowminOccurs
andmaxOccurs
attributes. These in turn correspond totwo components in each case, a particle and its{term}. The appropriate mapping is described inXML Representation of Element Declaration Schema Components (§3.3.2),XML Representation of Model Group Schema Components (§3.8.2) andXML Representation of Wildcard Schema Components (§3.10.2) respectively.
n
sub-sequences such thatn
is greater than or equal to{min occurs}.All particles (seeParticles (§3.9)) must satisfy the following constraints.
The following constraints define relations appealed to elsewhere in this specification.
=1
and its{term} is asequence group whose{particles}' first member is a particle all of whose properties, recursively, are identical to those ofB, with the exception of{annotation} properties.The approach to defining a type by restricting another type definitionset out here is designed to ensure that types defined in this way areguaranteed to be a subset of the type they restrict. This is accomplished byrequiring a clear mapping between the components of the base type definition and therestricting type definition. Permissible mappings are set out below via a setof recursive definitions, bottoming out in the obvious cases, e.g. where an(restricted) element declaration corresponds to another (base) elementdeclaration with the same name and type but the same or wider range of occurrence.
1
for each of the declarations in its·substitution group·.Base Particle | |||||||
---|---|---|---|---|---|---|---|
elt | any | all | choice | sequence | |||
Derived Particle | elt | NameAnd- TypeOK | NSCompat | Recurse- AsIfGroup | Recurse- AsIfGroup | RecurseAs- IfGroup | |
any | Forbidden | NSSubset | Forbidden | Forbidden | Forbidden | ||
all | Forbidden | NSRecurse- CheckCardinality | Recurse | Forbidden | Forbidden | ||
choice | Forbidden | NSRecurse- CheckCardinality | Forbidden | RecurseLax | Forbidden | ||
seq- uence | Forbidden | NSRecurse- CheckCardinality | Recurse- Unordered | MapAndSum | Recurse |
1
and with{particles} consisting of a single particlethe same as the element declaration must be a·valid restriction· of the group as defined byParticle Derivation OK (All:All,Sequence:Sequence -- Recurse) (§3.9.6),Particle Derivation OK (Choice:Choice -- RecurseLax) (§3.9.6) orParticle Derivation OK (All:All,Sequence:Sequence -- Recurse) (§3.9.6), depending on whether the group isall,choice orsequence.Note:
The exception to the third clause above for derivations fromthe·ur-type definition· is necessary asits wildcards have a{process contents} oflax, sowithout this exception, no use of wildcards with{process contents} ofskip would be possible.0
.0
.In order to exploit the full potential for extensibility offered by XMLplus namespaces, more provision is needed than DTDs allow for targeted flexibility in contentmodels and attribute declarations. A wildcard provides for·validation· ofattribute and element information items dependent on their namespacename, but independently of their local name.
<xs:any processContents="skip"/><xs:any namespace="##other" processContents="lax"/><xs:any namespace="http://www.w3.org/1999/XSL/Transform"/><xs:any namespace="##targetNamespace"/><xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/>
The wildcard schema component has the following properties:
{namespace constraint} provides for·validation· of attribute and element items that:
{process contents} controls the impact on·assessment·of the information items allowed by wildcards, as follows:
xsi:type
, and the itemmust be·valid· as appropriate.SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for a wildcard schema component is an<any> or<anyAttribute> element information item. The correspondences between theproperties of an<any> information item andproperties of the components it corresponds to are as follows (see<complexType> and<attributeGroup> for the correspondences for<anyAttribute>):
any
Element Information Item<any
id =ID
maxOccurs = (nonNegativeInteger |unbounded) : 1
minOccurs =nonNegativeInteger : 1
namespace = ((##any |##other) | List of (anyURI | (##targetNamespace |##local)) ) : ##any
processContents = (lax |skip |strict) : strict
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</any>
minOccurs=maxOccurs=0
, in which case the itemcorresponds to no component at all):Particle Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Wildcard Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
Wildcards are subject to the same ambiguity constraints(Unique Particle Attribution (§3.8.6)) as othercontent model particles: If an instance element could match either an explicitparticle and a wildcard, or one of two wildcards, within the content model of atype, that model is in error.
All wildcards (seeWildcards (§3.10)) must satisfy the following constraint.
The following constraints define a relation appealed to elsewhere in this specification.
Identity-constraint definition components provide for uniqueness andreference constraints with respect to the contents of multiple elements and attributes.
<xs:key name="fullName"> <xs:selector xpath=".//person"/> <xs:field xpath="forename"/> <xs:field xpath="surname"/></xs:key><xs:keyref name="personRef" refer="fullName"> <xs:selector xpath=".//personPointer"/> <xs:field xpath="@first"/> <xs:field xpath="@last"/></xs:keyref><xs:unique name="nearlyID"> <xs:selector xpath=".//*"/> <xs:field xpath="@id"/></xs:unique>
The identity-constraint definition schema component has the followingproperties:
Identity-constraint definitions are identified by their{name} and{target namespace}; Identity-constraint definition identities must be unique within an·XML Schema·. SeeReferences to schema components across namespaces (§4.2.3) for the use of componentidentifiers when importing one schema into another.
Informally,{identity-constraint category} identifies the Identity-constraint definition as playing one ofthree roles:
These constraints are specified along side the specification of types for theattributes and elements involved, i.e. something declared as of type integermay also serve as a key. Each constraint declaration has a name, which exists in asingle symbol space for constraints. The equality and inequality conditionsappealed to in checking these constraints apply to thevalue ofthe fields selected, so that for example3.0
and3
would be conflicting keys if they were both number, but non-conflicting ifthey were both strings, or one was a string and one a number. Values ofdiffering type can only be equal if one type is derived from the other, and thevalue is in the value space of both.
Overall the augmentations to XML'sID/IDREF
mechanism are:
{selector} specifies a restricted XPath ([XPath]) expression relative toinstances of the element being declared. This must identify a node set ofsubordinate elements (i.e. contained within the declared element) to which the constraint applies.
{fields} specifies XPath expressions relative to eachelement selected by a{selector}. This must identifya single node (element or attribute) whose content or value, which must beof a simple type, is used in the constraint. It is possible to specify anordered list of{fields}s, to cater to multi-field keys,keyrefs, and uniqueness constraints.
In order to reduce the burden on implementers, in particularimplementers of streaming processors, only restricted subsets of XPathexpressions are allowed in{selector} and{fields}. The details are given inConstraints on Identity-constraint Definition Schema Components (§3.11.6).
xsl:key
.SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for an identity-constraint definition schema component iseither a<key>, a<keyref> or a<unique>element information item. The correspondences between theproperties of those information items andproperties of the component they correspond to are as follows:
unique
Element Information Item<unique
id =ID
name =NCName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (selector,field+))
</unique>
<key
id =ID
name =NCName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (selector,field+))
</key>
<keyref
id =ID
name =NCName
refer =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (selector,field+))
</keyref>
<selector
id =ID
xpath =a subset of XPath expression, see below
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</selector>
<field
id =ID
xpath =a subset of XPath expression, see below
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</field>
Identity-constraint Definition Schema Component | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<xs:element name="vehicle"> <xs:complexType> . . . <xs:attribute name="plateNumber" type="xs:integer"/> <xs:attribute name="state" type="twoLetterCode"/> </xs:complexType></xs:element><xs:element name="state"> <xs:complexType> <xs:sequence> <xs:element name="code" type="twoLetterCode"/> <xs:element ref="vehicle" maxOccurs="unbounded"/> <xs:element ref="person" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:key name="reg"> <!-- vehicles are keyed by their plate within states --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@plateNumber"/> </xs:key></xs:element><xs:element name="root"> <xs:complexType> <xs:sequence> . . . <xs:element ref="state" maxOccurs="unbounded"/> . . . </xs:sequence> </xs:complexType> <xs:key name="state"> <!-- states are keyed by their code --> <xs:selector xpath=".//state"/> <xs:field xpath="code"/> </xs:key> <xs:keyref name="vehicleState" refer="state"> <!-- every vehicle refers to its state --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@state"/> </xs:keyref> <xs:key name="regKey"> <!-- vehicles are keyed by a pair of state and plate --> <xs:selector xpath=".//vehicle"/> <xs:field xpath="@state"/> <xs:field xpath="@plateNumber"/> </xs:key> <xs:keyref name="carRef" refer="regKey"> <!-- people's cars are a reference --> <xs:selector xpath=".//car"/> <xs:field xpath="@regState"/> <xs:field xpath="@regPlate"/> </xs:keyref></xs:element><xs:element name="person"> <xs:complexType> <xs:sequence> . . . <xs:element name="car"> <xs:complexType> <xs:attribute name="regState" type="twoLetterCode"/> <xs:attribute name="regPlate" type="xs:integer"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:element>
state
element is defined, whichcontains acode
child and somevehicle
andperson
children. Avehicle
in turn has aplateNumber
attribute,which is an integer, and astate
attribute. State'scode
s are a key for them within the document. Vehicle'splateNumber
s are a key for them within states, andstate
andplateNumber
is asserted to be akey forvehicle
within the document as a whole. Furthermore, aperson
element hasan emptycar
child, withregState
andregPlate
attributes, which are then asserted together to refer tovehicle
s via thecarRef
constraint. The requirementthat avehicle
'sstate
match its containingstate
'scode
is not expressed here.All identity-constraint definitions (seeIdentity-constraint Definitions (§3.11)) must satisfy the following constraint.
|
|
child
and/orattribute
axes whose abbreviated form isas given above.Notation declarations reconstruct XML 1.0 NOTATION declarations.
<xs:notation name="jpeg" public="image/jpeg" system="viewer.exe">
The notation declaration schema component has the followingproperties:
Notation declarations do not participate in·validation· as such.They are referenced in the course of·validating· strings as members oftheNOTATION simple type.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
The XML representation for a notation declaration schema component isa<notation>element information item. The correspondences between theproperties of that information item andproperties of the component it corresponds to are as follows:
notation
Element Information Item<notation
id =ID
name =NCName
public =token
system =anyURI
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</notation>
Notation Declaration Schema Component | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
<xs:notation name="jpeg" public="image/jpeg" system="viewer.exe" /><xs:element name="picture"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:hexBinary"> <xs:attribute name="pictype"> <xs:simpleType> <xs:restriction base="xs:NOTATION"> <xs:enumeration value="jpeg"/> <xs:enumeration value="png"/> . . . </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType></xs:element><picture pictype="jpeg">...</picture>
All notation declarations (seeNotation Declarations (§3.12)) must satisfy the following constraint.
Annotations provide for human- and machine-targeted annotations ofschema components.
<xs:simpleType fn:note="special"> <xs:annotation> <xs:documentation>A type for experts only</xs:documentation> <xs:appinfo> <fn:specialHandling>checkForPrimes</fn:specialHandling> </xs:appinfo> </xs:annotation>
The annotation schema component has the followingproperties:
{user information} is intended for human consumption,{application information} for automatic processing. In bothcases, provision is made for an optional URI reference to supplement the localinformation, as the value of thesource
attribute of therespective element information items.·Validation· doesnot involve dereferencing these URIs, when present. In the case of{user information}, indication should be given as to the identity of the (human) language used in the contents, using thexml:lang
attribute.
{attributes} ensures that when schema authors takeadvantage of the provision for adding attributes from namespaces other than theXML Schema namespace to schema documents, they are available within the componentscorresponding to the element items where such attributes appear.
Annotations do not participate in·validation· as such. Providedan annotation itself satisfies all relevant·SchemaComponent Constraints· itcannot affect the·validation· of element information items.
Annotation of schemas and schema components, with material for human orcomputer consumption, is provided for by allowing application information andhuman information at the beginning of most major schema elements, and anywhereat the top level of schemas. The XML representation for an annotation schema component isan<annotation>element information item. The correspondences between theproperties of that information item andproperties of the component it corresponds to are as follows:
annotation
Element Information Item<annotation
id =ID
{any attributes with non-schema namespace . . .}>
Content:(appinfo |documentation)*
</annotation>
<appinfo
source =anyURI
{any attributes with non-schema namespace . . .}>
Content:({any})*
</appinfo>
<documentation
source =anyURI
xml:lang =language
{any attributes with non-schema namespace . . .}>
Content:({any})*
</documentation>
Annotation Schema Component | ||||||||
---|---|---|---|---|---|---|---|---|
|
The annotation component corresponding to the<annotation>element in the example above will have one element item in each of its{user information} and{application information} and one attribute item in its{attributes}.
None as such: the addition of annotations to the·post-schema-validation infoset· iscovered by the·post-schema-validation infoset· contributions of the enclosing components.
All annotations (seeAnnotations (§3.13)) must satisfy the following constraint.
Simple type definitions provide for constraining character information item[children] of element and attributeinformation items.
<xs:simpleType name="fahrenheitWaterTemp"> <xs:restriction base="xs:number"> <xs:fractionDigits value="2"/> <xs:minExclusive value="0.00"/> <xs:maxExclusive value="100.00"/> </xs:restriction></xs:simpleType>
The simple type definition schema component has the following properties:
Simple types are identified by their{name} and{target namespace}. Exceptfor anonymous simple types (those with no{name}), sincetype definitions (i.e. both simple and complex type definitions taken together) must be uniquely identified within an·XMLSchema·, no simple type definition can have the same name as anothersimple or complex type definition. Simple type{name}s and{target namespace}sare provided for reference frominstances (seexsi:type (§2.6.1)), and for use in the XMLrepresentation of schema components(specifically in<element> and<attribute>). SeeReferences to schema components across namespaces (§4.2.3) for the use of componentidentifiers when importing one schema into another.
A simple type definition with an empty specification for{final} can be used as the{base type definition} for other types derived by either ofextension or restriction, or as the{item type definition} inthe definition of a list, or in the{member type definitions} ofa union; the explicit valuesextension,restriction,list andunion prevent furtherderivations by extension (to yield a complex type) and restriction (to yield asimple type) and use in constructing lists and unions respectively.
{variety} determines whether the simple type corresponds toanatomic,list orunion type as defined by[XML Schemas: Datatypes].
As described inType Definition Hierarchy (§2.2.1.1), every simple type definition isa·restriction· of some other simpletype (the{base type definition}), which is the·simple ur-type definition· if and only if the typedefinition in question is one of the built-in primitive datatypes, or a list orunion type definition which is not itself derived by restriction from alist or union respectively. Eachatomic type is ultimately a restriction of exactly one suchbuilt-in primitive datatype, which is its{primitive type definition}.
{facets} for each simple type definition are selected from those defined in[XML Schemas: Datatypes]. Foratomic definitions, these are restricted to those appropriate forthe corresponding{primitive type definition}. Therefore, the valuespace and lexical space (i.e. what is·validated· by any atomic simple type) is determined by thepair ({primitive type definition},{facets}).
As specified in[XML Schemas: Datatypes],list simple type definitions·validate· space separated tokens, each ofwhich conforms to a specified simple type definition, the{item type definition}. The item type specifiedmust not itself be alist type, and must be one of the types identified in[XML Schemas: Datatypes] as asuitable item type for a list simple type. In this case the{facets}apply to the list itself, and are restricted to those appropriate for lists.
Aunion simple type definition·validates· strings which satisfy atleast one of its{member type definitions}. As in the case oflist, the{facets}apply to the union itself, and are restricted to those appropriate for unions.
The·simple ur-type definition·mustnot be named as the·base type definition· of any user-defined atomic simple type definitions: as it has no constraining facets, this would be incoherent.
SeeAnnotations (§3.13) for information on the role of the{annotation} property.
simpleType
Element Information Item<simpleType
final = (#all | List of (list |union |restriction))
id =ID
name =NCName
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (restriction |list |union))
</simpleType>
<restriction
base =QName
id =ID
{any attributes with non-schema namespace . . .}>
Content:(annotation?, (simpleType?, (minExclusive |minInclusive |maxExclusive |maxInclusive |totalDigits |fractionDigits |length |minLength |maxLength |enumeration |whiteSpace |pattern)*))
</restriction>
<list
id =ID
itemType =QName
{any attributes with non-schema namespace . . .}>
Content:(annotation?,simpleType?)
</list>
<union
id =ID
memberTypes = List ofQName
{any attributes with non-schema namespace . . .}>
Content:(annotation?,simpleType*)
</union>
Simple Type Definition Schema Component | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Atomic Simple Type Definition Schema Component | ||||||
---|---|---|---|---|---|---|
|
List Simple Type Definition Schema Component | ||||||
---|---|---|---|---|---|---|
|
Union Simple Type Definition Schema Component | ||||||
---|---|---|---|---|---|---|
|
base
[attribute] or a<simpleType>among its[children], but not both.itemType
[attribute] or a<simpleType>among its[children], but not both.memberTypes
[attribute] at any depth which resolve to the component corresponding to the<simpleType>.All simple type definitions other than the·simple ur-typedefinition· and the built-in primitive datatype definitions (seeSimple Type Definitions (§3.14)) must satisfy both the following constraints.
The following constraint defines relations appealed to elsewhere in this specification.
There is a simple type definition nearly equivalent to the·simple ur-type definition· present in everyschema by definition. It has the following properties:
Simple Type Definition of the Ur-Type | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
The·simple ur-type definition· is the root of the simple type definition hierarchy, and as such mediates between the other simple type definitions, which all eventually trace back to it via their{base type definition} properties, and the·ur-type definition·, which isits{base type definition}. This is why the·simple ur-type definition· is exempted from the first clause ofSimple Type Definition Properties Correct (§3.14.6), which wouldotherwise bar it because of its derivation from a complex type definition and absence of{variety}.
Simple type definitions for all the built-in primitive datatypes, namelystring,boolean,float,double,number,dateTime,duration,time,date,gMonth,gMonthDay,gDay,gYear,gYearMonth,hexBinary,base64Binary,anyURI (see thePrimitiveDatatypes section of[XML Schemas: Datatypes]) are present by definition in every schema. Allare in the XML Schema{target namespace} (namespacenamehttp://www.w3.org/2001/XMLSchema
), have anatomic{variety} with an empty{facets} and the·simple ur-type definition· astheir·base type definition· and themselves as{primitive type definition}.
Similarly, simple type definitions for all the built-in deriveddatatypes (see theDerivedDatatypes section of[XML Schemas: Datatypes]) are present by definition in every schema, withproperties as specified in[XML Schemas: Datatypes] and as represented in XML inSchema for Schemas (normative) (§A).
A schema consists of a set of schema components.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/example"> . . .</xs:schema>
At the abstract level, the schema itself is just a container for its components.
A schema is represented in XML by one or more·schema documents·, that is, one or more<schema> element information items. A·schema document· contains representations for a collection of schema components, e.g. type definitions and element declarations, which have a common{target namespace}. A·schema document· which has one or more<import> element information items corresponds to a schema with components with more than one{target namespace}, seeImport Constraints and Semantics (§4.2.3).
schema
Element Information Item<schema
attributeFormDefault = (qualified |unqualified) : unqualified
blockDefault = (#all | List of (extension |restriction |substitution)) : ''
elementFormDefault = (qualified |unqualified) : unqualified
finalDefault = (#all | List of (extension |restriction |list |union)) : ''
id =ID
targetNamespace =anyURI
version =token
xml:lang =language
{any attributes with non-schema namespace . . .}>
Content:((include |import |redefine |annotation)*, (((simpleType |complexType |group |attributeGroup) |element |attribute |notation),annotation*)*)
</schema>
Note that none of the attribute information items displayed abovecorrespond directly to properties of schemas. TheblockDefault
,finalDefault
,attributeFormDefault
,elementFormDefault
andtargetNamespace
attributes are appealed to in the sub-sections above, as they provideglobal information applicable to many representation/component correspondences. Theother attributes (id
andversion
) are for userconvenience, and this specification defines no semantics for them.
The definition of the schema abstract data model inXML Schema Abstract Data Model (§2.2) makes clear that most components have a{target namespace}. Most components corresponding to representations within a given<schema> element information item will have a{target namespace} which corresponds to thetargetNamespace
attribute.
Since the empty string is not a legal namespace name, supplyingan empty string fortargetNamespace
is incoherent, and isnot the sameas not specifying it at all. The appropriate form of schema documentcorresponding to a·schema· whose components have no{target namespace} is one which has notargetNamespace
attribute specified at all.
Although the example schema at the beginning of this section might be a complete XML document,<schema>need not be the document element, but can appear within other documents.Indeed there is no requirement that a schema correspond to a (text) documentat all: it could correspond to an element information item constructed 'byhand', for instance via a DOM-conformant API.
Aside from<include> and<import>, which do not correspond directly to any schema component at all, each of the element informationitems which may appear in the content of<schema> corresponds toa schema component, and all except<annotation> are named. Thesections belowpresent each such item in turn, setting out thecomponents to which it may correspond.
Reference to schema components from a schema document is managed in a uniform way,whether the component corresponds to an element information item from the same schema document or is imported(References to schema components across namespaces (§4.2.3)) from an external schema (which may,but need not, correspond to an actual schema document). The formof all such references is a·QName·.
[Definition:] AQName is a namewith an optional namespace qualification, as defined in[XML-Namespaces]. When used in connection with the XMLrepresentation of schema components or references to them, this refers to thesimple typeQName as defined in[XML Schemas: Datatypes].
[Definition:] AnNCName is a namewith no colon, as defined in[XML-Namespaces]. When used in connection with the XMLrepresentation of schema components in this specification, this refers to thesimple typeNCName as defined in[XML Schemas: Datatypes].
In each of the XMLrepresentation expositions in the following sections, an attribute is shown ashaving typeQName
if and only if it isinterpreted as referencing a schema component.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.example.com" targetNamespace="http://www.example.com"> . . . <xs:element name="elem1" type="Address"/> <xs:element name="elem2" type="xhtml:blockquote"/> <xs:attribute name="attr1" type="xsl:quantity"/> . . .</xs:schema>
The names of schema components such as type definitions and elementdeclarations are not of typeID: they are notunique within a schema, just within a symbol space. This means that simplefragment identifiers will not always work to reference schema components from outsidethe context of schema documents.
There is currently no provision in the definition of the interpretationof fragment identifiers for thetext/xml
MIME type, which is theMIME type for schemas, for referencingschema components as such. However,[XPointer] provides a mechanism which maps well onto thenotion of symbol spaces as it is reflected in the XML representation of schema components. A fragment identifier of the form#xpointer(xs:schema/xs:element[@name="person"])
will uniquely identifythe representation of a top-level element declaration with nameperson
, and similar fragmentidentifiers can obviously be constructed for the other global symbol spaces.
Short-form fragment identifiers may also be used in some cases, that iswhen a DTD or XML Schema is available for the schema in question, and theprovision of anid
attribute for the representations of all primary and secondary schemacomponents, whichis of typeID, has been exploited.
It is a matter for applications to specify whether they interpretdocument-level references of either of the above varieties as being to the relevant element information item (i.e. withoutspecial recognition of the relation of schema documents to schema components) or as being to thecorresponding schema component.
[Definition:] Whenever the wordresolve in any form is used in thischapter in connection with a·QName· in aschema document, thefollowing definitionQName resolution (Schema Document) (§3.15.3) should be understood:
targetNamespace
[attribute].namespace
[attribute].targetNamespace
[attribute] ofthe<schema> element information item of the schema document containing the·QName·.namespace
[attribute] of some<import> element information item contained in the<schema> element information item of that schema document.As the discussion above atSchema Component Details (§3) makes clear, at the level of schema components and·validation·, reference to components by name is normally not involved. In afew cases, however, qualified names appearing in information items being·validated· must be resolved to schema components by such lookup. The followingconstraint is appealed to in these cases.
targetNamespace
matches the sibling[schema namespace] property above (or whosetargetNamespace
was·absent·but that contributed components to that namespace by being<include>dby a schema document with thattargetNamespace
as perAssembling a schema for a single target namespace from multiple schema definition documents (§4.2.1)):All schemas (seeSchemas as a Whole (§3.15)) must satisfy the following constraint.
This chapter defines the mechanisms by which this specification establishes the necessaryprecondition for·assessment·, namely access toone or more schemas. This chapter also sets out in detail the relationshipbetween schemas and namespaces, as well as mechanisms formodularization of schemas, including provision for incorporating definitionsand declarations from one schema in another, possibly with modifications.
Conformance (§2.4) describes three levels of conformance for schemaprocessors, andSchemas and Schema-validity Assessment (§5) provides a formal definition of·assessment·. This section sets outin detail the 3-layer architecture implied by the three conformance levels.The layersare:
Layer 1 specifies the manner in which a schema composed of schema componentscan be applied to in the·assessment· of an instance element information item. Layer 2 specifies the use of<schema>elements in XML documents as the standard XML representation forschema information in a broad range of computer systems and executionenvironments. To support interoperation over the World Wide Web in particular,layer 3 provides a set of conventions for schema reference on theWeb. Additional details on each of the three layers is provided in the sections below.
The fundamental purpose of the·assessment· core is to define·assessment· for a singleelement information item and its descendants with respect to acomplex typedefinition. All processors are required to implement this core predicate in amanner which conforms exactly to this specification.
·assessment· is defined with reference to an·XML Schema· (notenot a·schema document·) which consists of (at a minimum) the set of schemacomponents (definitions and declarations) required for that·assessment·. This is not a circular definition, but rather apost facto observation: no element information item canbe fully assessed unless all the components required by any aspect ofits (potentially recursive)·assessment· are present in the schema.
As specified above, each schema component is associated directly orindirectly with a target namespace, or explicitly with no namespace. In the case of multi-namespace documents,components for more than one target namespace will co-exist in a schema.
Processors have the option to assemble (and perhaps to optimize orpre-compile) the entire schema prior to the start of an·assessment· episode, or togather the schema lazily as individual components are required. In allcases it is required that:
The obligation of a schema-aware processor as far as the·assessment·core is concerned is to implement one or more of the options for·assessment· given below inAssessing Schema-Validity (§5.2). Neither thechoice of element information item for that·assessment·, nor which of themeans of initiating·assessment· are used, is within the scope of this specification.
Although·assessment· is defined recursively, it is also intended to beimplementable in streamingprocessors. Such processors may choose to incrementally assemble the schema duringprocessing in response, for example, to encountering new namespaces. The implication of theinvariants expressed above is that such incremental assembly mustresult in an·assessment· outcome that is thesame as wouldbe given if·assessment· was undertaken againwith the final, fully assembled schema.
The sub-sections ofSchema Component Details (§3) define anXML representation for type definitions and element declarations and so on,specifying their target namespace and collecting them into schema documents.The two following sections relate to assembling a complete schema for·assessment· from multiple sources. They shouldnot be understood as a form of text substitution, but rather as providing mechanisms for distributed definition of schema components, with appropriate schema-specific semantics.
Schema components for a single target namespace can be assembled fromseveral·schema documents·, that is several<schema> elementinformation items:
include
Element Information Item<include
id =ID
schemaLocation =anyURI
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</include>
A<schema> information item may contain any number of<include> elements. TheirschemaLocation
attributes, consisting of a URI reference, identify other·schema documents·, that is<schema> information items.
The·XML Schema· corresponding to<schema> contains not only the components corresponding to its definition and declaration[children], but alsoall the components of all the·XML Schemas· corresponding to any<include>d schema documents.Such included schema documents must either (a) have the sametargetNamespace
as the<include>ing schema document, or (b) notargetNamespace
at all, in which case the<include>d schema document is converted to the<include>ing schema document'stargetNamespace
.
schemaLocation
[attribute]successfully resolvesone of the following must be true:application/xml
ortext/xml
with an XML declarationfor preference, but this is not required), which in turn corresponds to a<schema>element information item in a well-formed information set, which in turncorresponds to a valid schema.targetNamespace
[attribute], and its·actual value· is identical to the·actual value· of thetargetNamespace
[attribute] ofSII’ (which must have such an[attribute]).targetNamespace
[attribute] ofSII’ is used. Inparticular, it replaces·absent· in the following places:code
wasqualified) nested within definitions;schemaLocation
[attribute] to fail to resolve it all, in which case nocorresponding inclusion is performed. Itis an error for it to resolve but the rest of clause 1 above tofail to be satisfied. Failure to resolve may well cause less than complete·assessment· outcomes, of course.As discussed inMissing Sub-components (§5.3),·QName·s in XML representations may fail to·resolve·, rendering components incompleteand unusable because of missing subcomponents. During schema construction,implementations must retain·QName· values for such references, in case an appropriately-named component becomes available to discharge the reference by the time it is actually needed.·Absent· target·namespace name·s of such as-yet unresolved reference·QName·s in<include>d components must also be converted if clause3.2 is satisfied.In order to provide some support for evolution and versioning, it ispossible to incorporate components corresponding to a schema documentwith modifications. The modifications have a pervasive impact,that is, only the redefined components are used, even when referenced fromother incorporated components, whether redefined themselves or not.
redefine
Element Information Item<redefine
id =ID
schemaLocation =anyURI
{any attributes with non-schema namespace . . .}>
Content:(annotation | (simpleType |complexType |group |attributeGroup))*
</redefine>
A<schema> information item may contain any number of<redefine> elements. TheirschemaLocation
attributes, consisting of a URI reference, identify other·schema documents·, that is<schema> information items.
The·XML Schema· corresponding to<schema> contains not only the components corresponding to its definition and declaration[children], but alsoall the components of all the·XML Schemas· corresponding to any<redefine>d schema documents.Such schema documents must either (a) have the sametargetNamespace
as the<redefine>ing schema document, or (b) notargetNamespace
at all, in which case the<redefine>d schema document is converted to the<redefine>ing schema document'stargetNamespace
.
The definitions within the<redefine> element itself arerestricted to be redefinitions of components from the<redefine>dschema document,in terms of themselves. That is,
Not all the components of the<redefine>dschema document need be redefined.
This mechanism is intended to provide a declarative and modular approach toschema modification, with functionality no different except in scope from whatwould be achieved by wholesale text copying and redefinition by editing. Inparticular redefining a type is not guaranteed to be side-effect free: it mayhave unexpected impacts on other type definitions which are basedon the redefined one, even to the extent that some such definitions becomeill-formed.
v1.xsd: <xs:complexType name="personName"> <xs:sequence> <xs:element name="title" minOccurs="0"/> <xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="addressee" type="personName"/>v2.xsd: <xs:redefine schemaLocation="v1.xsd"> <xs:complexType name="personName"> <xs:complexContent> <xs:extension base="personName"> <xs:sequence> <xs:element name="generation" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:redefine> <xs:element name="author" type="personName"/>
v2.xsd
has everything specifiedbyv1.xsd
, with thepersonName
type redefined, aswell as everything it specifies itself. According tothis schema, elements constrainedby thepersonName
type may end with ageneration
element. This includes not only theauthor
element, but also theaddressee
element.schemaLocation
[attribute] mustsuccessfully resolve.schemaLocation
[attribute]successfully resolvesone of the following must be true:targetNamespace
[attribute], and its·actual value· is identical to the·actual value· of thetargetNamespace
[attribute] ofSII’ (which must have such an[attribute]).targetNamespace
[attribute] ofSII’ isused (see clause3.2 inInclusion Constraints and Semantics (§4.2.1) for details).restriction
orextension
among its grand-[children] the·actual value· of whosebase
[attribute] must be the same as the·actual value· of its ownname
attribute plus target namespace;ref
[attribute] is the same as the·actual value· of its ownname
attribute plus target namespace,thenall of the following must be true:minOccurs
andmaxOccurs
[attribute] must be1
(or·absent·).name
attribute plus targetnamespace must successfully·resolve· to amodel group definition inI.ref
[attribute] is the same as the·actual value· of its ownname
attribute plus target namespace,thenit must have exactly one such group.name
attribute plus targetnamespace must successfully·resolve· to anattribute group definition inI.name
inthe<redefine>d schema document, as defined inSchema Component Details (§3), except that its{name} is·absent·;ref
[attribute] whose·actual value· is the same as the item'sname
plus target namespace is resolved, a component which corresponds to the top-level definition item of that name and the appropriate kind inI is used.As described inXML Schema Abstract Data Model (§2.2), every top-level schema component is associated witha target namespace (or, explicitly, with none). This section sets outthe exact mechanism and syntax in the XML form ofschema definition by which a reference to a foreign component is made, that is, a component with a different target namespace from that of the referring component.
Two things are required: not only a meansof addressing such foreign components but also a signal to schema-aware processors that aschema document contains such references:
import
Element Information Item<import
id =ID
namespace =anyURI
schemaLocation =anyURI
{any attributes with non-schema namespace . . .}>
Content:(annotation?)
</import>
The<import> element information item identifies namespacesused in external references, i.e. those whose·QName· identifies them as coming from adifferent namespace (or none) than the enclosing schema document'stargetNamespace
. The·actual value· of itsnamespace
[attribute] indicates that the containing schema document may containqualified references to schema components in that namespace (via one or moreprefixes declared with namespace declarations in the normal way). If thatattribute is absent, then the import allows unqualified reference to componentswith no target namespace.Note that components to be imported need not be in the form of a·schema document·; the processoris free to access or construct components using means of its ownchoosing.
The·actual value· of theschemaLocation
, if present, gives ahint as to where a serialization of a·schema document· with declarations and definitions for thatnamespace (or none) may be found. When noschemaLocation
[attribute] is present, the schema author is leaving theidentification of that schema to the instance, application or user, via the mechanisms describedbelow inLayer 3: Schema Document Access and Web-interoperability (§4.3). When aschemaLocation
is present, itmust contain a single URI reference which the schema authorwarrants will resolve to a serialization of a·schema document· containing the component(s) in the<import>ed namespace referred to elsewhere in the containingschema document.
namespace
andschemaLocation
[attribute] are optional, a bare<import/>
information itemis allowed. This simply allows unqualified reference to foreigncomponents with no target namespace without giving any hints as to where to find them.<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/1999/xhtml" targetNamespace="uri:mywork" xmlns:my="uri:mywork"> <import namespace="http://www.w3.org/1999/xhtml"/> <annotation> <documentation> <html:p>[Some documentation for my schema]</html:p> </documentation> </annotation> . . . <complexType name="myType"> <sequence> <element ref="html:p" minOccurs="0"/> </sequence> . . . </complexType> <element name="myElt" type="my:myType"/></schema>
namespace
[attribute] is present,thenits·actual value· must not match the·actual value· of theenclosing<schema>'stargetNamespace
[attribute].namespace
[attribute] is not present,thenthe enclosing<schema> must have atargetNamespace
[attribute]schemaLocation
andnamespace
[attributes],provides a referent, as defined bySchema Document Location Strategy (§4.3.2),one of the following must be true:namespace
[attribute],thenits·actual value· must be identical to the·actual value· of thetargetNamespace
[attribute] ofSII.schemaLocation
[attribute] is only a hint, it is open to applications to ignore all but thefirst<import> for a given namespace, regardless of the·actual value· ofschemaLocation
, but such a strategy risks missing usefulinformation when newschemaLocation
s are offered.Layers 1 and 2 provide a framework for·assessment· and XML definition of schemas in a broad variety of environments. Over time, a rangeof standards and conventions may well evolve to support interoperability of XMLSchema implementations on the World Wide Web. Layer 3 defines the minimum levelof function required of all conformant processors operating on the Web:it is intended that, over time, future standards (e.g. XML Packages) for interoperability on theWeb and in other environments can be introduced without the need to republishthis specification.
For interoperability, serialized·schema documents·, like all other Web resources, may be identified byURI and retrieved using the standard mechanisms of the Web (e.g. http, https,etc.) Such documents on the Web must be part of XML documents (see clause1.1), and are represented in thestandard XML schema definition form described by layer 2 (that is as<schema>element information items).
Accept
header ofapplication/xml,text/xml; q=0.9, */*
is perhaps a reasonable starting point.As described inLayer 1: Summary of the Schema-validity Assessment Core (§4.1), processors are responsible for providing theschema components (definitions and declarations) needed for·assessment·. Thissection introduces a set of normative conventions to facilitate interoperabilityfor instance and schema documents retrieved and processed from the Web.
Processors on the Web are free to undertake·assessment· against arbitraryschemas in any of the ways set out inAssessing Schema-Validity (§5.2). However, itis useful to have a common convention for determining the schema to use. Accordingly, general-purpose schema-aware processors (i.e. those notspecialized to one or a fixed set of pre-determined schemas)undertaking·assessment· of a document on the webmust behave as follows:
targetNamespace
isidentical to thenamespace name, if any, of the element information item on which·assessment· is undertaken.The composition of the completeschema for use in·assessment· is discussed inLayer 2: Schema Documents, Namespaces and Composition (§4.2) above.The means used to locate appropriate schema document(s) are processor andapplication dependent, subject to the following requirements:
schemaLocation
andnoNamespaceSchemaLocation
[attributes] (in the XML Schema instance namespace,that is,http://www.w3.org/2001/XMLSchema-instance
) (hereafterxsi:schemaLocation
andxsi:noNamespaceSchemaLocation
) are provided. The first recordsthe author's warrant with pairs of URI references (one for the namespace name, andone for a hint as to the location of a schema document defining names for thatnamespace name). The second similarly provides a URI reference as a hint as tothe location of a schema document with notargetNamespace
[attribute].Unless directed otherwise, for example by the invoking applicationor by command line option, processorsshould attempt to dereference each schema document location URI in the·actual value· of suchxsi:schemaLocation
andxsi:noNamespaceSchemaLocation
[attributes], see details below.xsi:schemaLocation
andxsi:noNamespaceSchemaLocation
[attributes] can occur on anyelement. However, it is an error if such an attribute occursafter the first appearance of an element or attribute informationitem within anelement information item initially·validated· whose[namespace name] it addresses. According to the rules ofLayer 1: Summary of the Schema-validity Assessment Core (§4.1), the corresponding schema may be lazily assembled, but is otherwise stable throughout·assessment·. Although schema location attributes can occur on any element, and can be processed incrementally as discovered, their effect is essentially global to the·assessment·. Definitions and declarations remain in effect beyond the scope of the element on which the binding is declared.<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/1999/XSL/Transform http://www.w3.org/1999/XSL/Transform.xsd http://www.w3.org/1999/xhtml http://www.w3.org/1999/xhtml.xsd">
schemaLocation
can, but need not be identical to those actually qualifying the element within whose start tagit is found or its other attributes. For example, as above, all schema location information can be declared on the document elementof a document, if desired, regardless of where the namespaces are actually used.xsi:schemaLocation
orxsi:noNamespaceSchemaLocation
,schema-aware processors may implement any combination of the following strategies, in any order:Improved or alternative conventions for Web interoperability canbe standardized in the future without reopening this specification. Forexample, the W3C is currently considering initiatives to standardize thepackaging of resources relating to particular documents and/or namespaces: thiswould be an addition to the mechanisms described here for layer 3. Thisarchitecture also facilitates innovation at layer 2: for example, it would bepossible in the future to define an additional standard for the representation ofschema components which allowed e.g. type definitions to be specified piece bypiece, rather than all at once.
The architecture of schema-aware processing allows for a rich characterization of XML documents: schema validity is not a binary predicate.
This specification distinguishes between errors in schema construction and structure, on theone hand, and schema validation outcomes, on the other.
Before·assessment· can be attempted, a schema is required. Special-purpose applications are free to determine a schema for use in·assessment· by whatevermeans are appropriate, but general purpose processors should implement thestrategy set out inSchema Document Location Strategy (§4.3.2), starting with thenamespaces declared in the document whose·assessment· is being undertaken, and the·actual value·s of thexsi:schemaLocation
andxsi:noNamespaceSchemaLocation
[attributes] thereof, if any, along with any other information aboutschema identity or schema document location provided by users inapplication-specific ways, if any.
It is anerror if aschema and all the components which are the value of any of its properties,recursively, fail to satisfy all the relevant Constraints on Schemas set out inthe last section of each of the subsections ofSchema Component Details (§3).
If a schema is derived from one or more schema documents (that is, one ormore<schema> element information items) based on thecorrespondence rules set out inSchema Component Details (§3) andSchemas and Namespaces: Access and Composition (§4), two additionalconditions hold:
The three cases described above are the only types of error which thisspecification defines. With respect to the processes of the checking of schema structureand the construction of schemas corresponding to schema documents, thisspecification imposes no restrictions on processors after an error is detected.However·assessment· with respect to schema-like entities which donotsatisfy all the above conditions is incoherent. Accordingly, conformantprocessors must not attempt to undertake·assessment· using such non-schemas.
With a schema which satisfies the conditions expressed inErrors in Schema Construction and Structure (§5.1) above, the schema-validity of an element information item can be assessed. Three primary approaches to this are possible:
xsi:type
) or not.The outcome of this effort, in any case, will be manifest in the[validation attempted]and[validity] properties onthe element information item and its[attributes] and[children],recursively, as defined byAssessment Outcome (Element) (§3.3.5) andAssessment Outcome (Attribute) (§3.2.5). It is up to applications to decide what constitutes a successful outcome.
Note that every element and attribute information itemparticipating in the·assessment· will also have a[validation context] propertywhich refers back to the element information item at which·assessment· began.[Definition:] This item, that is the element information item at which·assessment· began, is called thevalidation root.
At the beginning ofSchema Component Details (§3), attention is drawn to thefact that most kinds of schema components have properties which are described thereinas having other components, or sets of other components, as values, but thatwhen components are constructed on the basis of their correspondence withelement information items in schema documents, such properties usuallycorrespond toQNames, and the·resolution· of suchQNames may fail, resulting in one or more values of or containing·absent· where a component is mandated.
If at any time during·assessment·, anelement or attribute information item is being·validated· with respect to a component of any kind any of whoseproperties has or contains such an·absent· value,the·validation· is modified, as following:
Because of the value specification for[validation attempted] inAssessment Outcome (Element) (§3.3.5), if this situation ever arises, thedocument as a whole cannot show a[validation attempted]offull.
Schema-aware processors are responsible for processing XML documents,schemas and schema documents, as appropriate given the level of conformance(as defined inConformance (§2.4)) they support,consistently with the conditions set out above.
The XML representation of the schema for schema documents is presented hereas a normativepart of the specification, and as an illustrative example of how the XML Schemalanguage candefine itself using its own constructs. The names of XMLSchema language types, elements, attributes and groups defined hereare evocative of their purpose, but are occasionally verbose.
There is some annotation in comments, but a fuller annotation will requirethe use of embedded documentation facilities or a hyperlinked externalannotation for which tools are not yet readily available.
Since a schema document is an XML document, it has optional XML and doctypedeclarations that are provided here for completeness. The rootschema
element defines a new schema. Since this is a schema forXML Schema: Structures, thetargetNamespace
references the XML Schema namespace itself.
<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" [<!-- provide ID type information even for parsers which only read the internal subset --><!ATTLIST xs:schema id ID #IMPLIED><!ATTLIST xs:complexType id ID #IMPLIED><!ATTLIST xs:complexContent id ID #IMPLIED><!ATTLIST xs:simpleContent id ID #IMPLIED><!ATTLIST xs:extension id ID #IMPLIED><!ATTLIST xs:element id ID #IMPLIED><!ATTLIST xs:group id ID #IMPLIED> <!ATTLIST xs:all id ID #IMPLIED><!ATTLIST xs:choice id ID #IMPLIED><!ATTLIST xs:sequence id ID #IMPLIED><!ATTLIST xs:any id ID #IMPLIED><!ATTLIST xs:anyAttribute id ID #IMPLIED><!ATTLIST xs:attribute id ID #IMPLIED><!ATTLIST xs:attributeGroup id ID #IMPLIED><!ATTLIST xs:unique id ID #IMPLIED><!ATTLIST xs:key id ID #IMPLIED><!ATTLIST xs:keyref id ID #IMPLIED><!ATTLIST xs:selector id ID #IMPLIED><!ATTLIST xs:field id ID #IMPLIED><!ATTLIST xs:include id ID #IMPLIED><!ATTLIST xs:import id ID #IMPLIED><!ATTLIST xs:redefine id ID #IMPLIED><!ATTLIST xs:notation id ID #IMPLIED>]><?xml version='1.0'?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" blockDefault="#all" elementFormDefault="qualified" xml:lang="EN" targetNamespace="http://www.w3.org/2001/XMLSchema" version="Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp "> <xs:annotation> <xs:documentation source="../structures/structures-with-errata.html.html"> The schema corresponding to this document is normative, with respect to the syntactic constraints it expresses in the XML Schema language. The documentation (within <documentation> elements) below, is not normative, but rather highlights important aspects of the W3C Recommendation of which this is a part</xs:documentation> </xs:annotation> <xs:annotation> <xs:documentation> The simpleType element and all of its members are defined in datatypes.xsd</xs:documentation> </xs:annotation> <xs:include schemaLocation="datatypes.xsd"/> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> <xs:annotation> <xs:documentation> Get access to the xml: attribute groups for xml:lang as declared on 'schema' and 'documentation' below </xs:documentation> </xs:annotation> </xs:import> <xs:complexType name="openAttrs"> <xs:annotation> <xs:documentation> This type is extended by almost all schema types to allow attributes from other namespaces to be added to user schemas. </xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="annotated"> <xs:annotation> <xs:documentation> This type is extended by all types which allow annotation other than <schema> itself </xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:group name="schemaTop"> <xs:annotation> <xs:documentation> This group is for the elements which occur freely at the top level of schemas. All of their types are based on the "annotated" type by extension.</xs:documentation> </xs:annotation> <xs:choice> <xs:group ref="xs:redefinable"/> <xs:element ref="xs:element"/> <xs:element ref="xs:attribute"/> <xs:element ref="xs:notation"/> </xs:choice> </xs:group> <xs:group name="redefinable"> <xs:annotation> <xs:documentation> This group is for the elements which can self-redefine (see <redefine> below).</xs:documentation> </xs:annotation> <xs:choice> <xs:element ref="xs:simpleType"/> <xs:element ref="xs:complexType"/> <xs:element ref="xs:group"/> <xs:element ref="xs:attributeGroup"/> </xs:choice> </xs:group> <xs:simpleType name="formChoice"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> </xs:annotation> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="qualified"/> <xs:enumeration value="unqualified"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="reducedDerivationControl"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> </xs:annotation> <xs:restriction base="xs:derivationControl"> <xs:enumeration value="extension"/> <xs:enumeration value="restriction"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="derivationSet"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> <xs:documentation> #all or (possibly empty) subset of {extension, restriction}</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="#all"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list itemType="xs:reducedDerivationControl"/> </xs:simpleType> </xs:union> </xs:simpleType> <xs:simpleType name="typeDerivationControl"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> </xs:annotation> <xs:restriction base="xs:derivationControl"> <xs:enumeration value="extension"/> <xs:enumeration value="restriction"/> <xs:enumeration value="list"/> <xs:enumeration value="union"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="fullDerivationSet"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> <xs:documentation> #all or (possibly empty) subset of {extension, restriction, list, union}</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="#all"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list itemType="xs:typeDerivationControl"/> </xs:simpleType> </xs:union> </xs:simpleType> <xs:element name="schema" id="schema"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-schema"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:sequence> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:include"/> <xs:element ref="xs:import"/> <xs:element ref="xs:redefine"/> <xs:element ref="xs:annotation"/> </xs:choice> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:group ref="xs:schemaTop"/> <xs:element ref="xs:annotation" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:sequence> <xs:attribute name="targetNamespace" type="xs:anyURI"/> <xs:attribute name="version" type="xs:token"/> <xs:attribute name="finalDefault" type="xs:fullDerivationSet" default="" use="optional"/> <xs:attribute name="blockDefault" type="xs:blockSet" default="" use="optional"/> <xs:attribute name="attributeFormDefault" type="xs:formChoice" default="unqualified" use="optional"/> <xs:attribute name="elementFormDefault" type="xs:formChoice" default="unqualified" use="optional"/> <xs:attribute name="id" type="xs:ID"/> <xs:attribute ref="xml:lang"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:key name="element"> <xs:selector xpath="xs:element"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="attribute"> <xs:selector xpath="xs:attribute"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="type"> <xs:selector xpath="xs:complexType|xs:simpleType"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="group"> <xs:selector xpath="xs:group"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="attributeGroup"> <xs:selector xpath="xs:attributeGroup"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="notation"> <xs:selector xpath="xs:notation"/> <xs:field xpath="@name"/> </xs:key> <xs:key name="identityConstraint"> <xs:selector xpath=".//xs:key|.//xs:unique|.//xs:keyref"/> <xs:field xpath="@name"/> </xs:key> </xs:element> <xs:simpleType name="allNNI"> <xs:annotation> <xs:documentation> for maxOccurs</xs:documentation> </xs:annotation> <xs:union memberTypes="xs:nonNegativeInteger"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="unbounded"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> <xs:attributeGroup name="occurs"> <xs:annotation> <xs:documentation> for all particles</xs:documentation> </xs:annotation> <xs:attribute name="minOccurs" type="xs:nonNegativeInteger" default="1" use="optional"/> <xs:attribute name="maxOccurs" type="xs:allNNI" default="1" use="optional"/> </xs:attributeGroup> <xs:attributeGroup name="defRef"> <xs:annotation> <xs:documentation> for element, group and attributeGroup, which both define and reference</xs:documentation> </xs:annotation> <xs:attribute name="name" type="xs:NCName"/> <xs:attribute name="ref" type="xs:QName"/> </xs:attributeGroup> <xs:group name="typeDefParticle"> <xs:annotation> <xs:documentation> 'complexType' uses this</xs:documentation> </xs:annotation> <xs:choice> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> </xs:choice> </xs:group> <xs:group name="nestedParticle"> <xs:choice> <xs:element name="element" type="xs:localElement"/> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> <xs:element ref="xs:any"/> </xs:choice> </xs:group> <xs:group name="particle"> <xs:choice> <xs:element name="element" type="xs:localElement"/> <xs:element name="group" type="xs:groupRef"/> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> <xs:element ref="xs:any"/> </xs:choice> </xs:group> <xs:complexType name="attribute"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:element name="simpleType" type="xs:localSimpleType" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="xs:defRef"/> <xs:attribute name="type" type="xs:QName"/> <xs:attribute name="use" default="optional" use="optional"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="prohibited"/> <xs:enumeration value="optional"/> <xs:enumeration value="required"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="default" type="xs:string"/> <xs:attribute name="fixed" type="xs:string"/> <xs:attribute name="form" type="xs:formChoice"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelAttribute"> <xs:complexContent> <xs:restriction base="xs:attribute"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:element name="simpleType" type="xs:localSimpleType" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="form" use="prohibited"/> <xs:attribute name="use" use="prohibited"/> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:group name="attrDecls"> <xs:sequence> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="attribute" type="xs:attribute"/> <xs:element name="attributeGroup" type="xs:attributeGroupRef"/> </xs:choice> <xs:element ref="xs:anyAttribute" minOccurs="0"/> </xs:sequence> </xs:group> <xs:element name="anyAttribute" type="xs:wildcard" id="anyAttribute"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-anyAttribute"/> </xs:annotation> </xs:element> <xs:group name="complexTypeModel"> <xs:choice> <xs:element ref="xs:simpleContent"/> <xs:element ref="xs:complexContent"/> <xs:sequence> <xs:annotation> <xs:documentation> This branch is short for <complexContent> <restriction base="xs:anyType"> ... </restriction> </complexContent></xs:documentation> </xs:annotation> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:choice> </xs:group> <xs:complexType name="complexType" abstract="true"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:complexTypeModel"/> <xs:attribute name="name" type="xs:NCName"> <xs:annotation> <xs:documentation> Will be restricted to required or forbidden</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="mixed" type="xs:boolean" default="false" use="optional"> <xs:annotation> <xs:documentation> Not allowed if simpleContent child is chosen. May be overriden by setting on complexContent child.</xs:documentation> </xs:annotation> </xs:attribute> <xs:attribute name="abstract" type="xs:boolean" default="false" use="optional"/> <xs:attribute name="final" type="xs:derivationSet"/> <xs:attribute name="block" type="xs:derivationSet"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelComplexType"> <xs:complexContent> <xs:restriction base="xs:complexType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:complexTypeModel"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="localComplexType"> <xs:complexContent> <xs:restriction base="xs:complexType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:complexTypeModel"/> </xs:sequence> <xs:attribute name="name" use="prohibited"/> <xs:attribute name="abstract" use="prohibited"/> <xs:attribute name="final" use="prohibited"/> <xs:attribute name="block" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="restrictionType"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:choice minOccurs="0"> <xs:group ref="xs:typeDefParticle"/> <xs:group ref="xs:simpleRestrictionModel"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="complexRestrictionType"> <xs:complexContent> <xs:restriction base="xs:restrictionType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:annotation> <xs:documentation>This choice is added simply to make this a valid restriction per the REC</xs:documentation> </xs:annotation> <xs:group ref="xs:typeDefParticle"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="extensionType"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="complexContent" id="complexContent"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-complexContent"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:choice> <xs:element name="restriction" type="xs:complexRestrictionType"/> <xs:element name="extension" type="xs:extensionType"/> </xs:choice> <xs:attribute name="mixed" type="xs:boolean"> <xs:annotation> <xs:documentation> Overrides any setting on complexType parent.</xs:documentation> </xs:annotation> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="simpleRestrictionType"> <xs:complexContent> <xs:restriction base="xs:restrictionType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:annotation> <xs:documentation>This choice is added simply to make this a valid restriction per the REC</xs:documentation> </xs:annotation> <xs:group ref="xs:simpleRestrictionModel"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="simpleExtensionType"> <xs:complexContent> <xs:restriction base="xs:extensionType"> <xs:sequence> <xs:annotation> <xs:documentation> No typeDefParticle group reference</xs:documentation> </xs:annotation> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="simpleContent" id="simpleContent"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-simpleContent"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:choice> <xs:element name="restriction" type="xs:simpleRestrictionType"/> <xs:element name="extension" type="xs:simpleExtensionType"/> </xs:choice> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="complexType" type="xs:topLevelComplexType" id="complexType"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-complexType"/> </xs:annotation> </xs:element> <xs:simpleType name="blockSet"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> <xs:documentation> #all or (possibly empty) subset of {substitution, extension, restriction}</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="#all"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list> <xs:simpleType> <xs:restriction base="xs:derivationControl"> <xs:enumeration value="extension"/> <xs:enumeration value="restriction"/> <xs:enumeration value="substitution"/> </xs:restriction> </xs:simpleType> </xs:list> </xs:simpleType> </xs:union> </xs:simpleType> <xs:complexType name="element" abstract="true"> <xs:annotation> <xs:documentation> The element element can be used either at the top level to define an element-type binding globally, or within a content model to either reference a globally-defined element or type or declare an element-type binding locally. The ref form is not allowed at the top level.</xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attributeGroup ref="xs:defRef"/> <xs:attribute name="type" type="xs:QName"/> <xs:attribute name="substitutionGroup" type="xs:QName"/> <xs:attributeGroup ref="xs:occurs"/> <xs:attribute name="default" type="xs:string"/> <xs:attribute name="fixed" type="xs:string"/> <xs:attribute name="nillable" type="xs:boolean" default="false" use="optional"/> <xs:attribute name="abstract" type="xs:boolean" default="false" use="optional"/> <xs:attribute name="final" type="xs:derivationSet"/> <xs:attribute name="block" type="xs:blockSet"/> <xs:attribute name="form" type="xs:formChoice"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="topLevelElement"> <xs:complexContent> <xs:restriction base="xs:element"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="form" use="prohibited"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="localElement"> <xs:complexContent> <xs:restriction base="xs:element"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="substitutionGroup" use="prohibited"/> <xs:attribute name="final" use="prohibited"/> <xs:attribute name="abstract" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="element" type="xs:topLevelElement" id="element"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-element"/> </xs:annotation> </xs:element> <xs:complexType name="group" abstract="true"> <xs:annotation> <xs:documentation> group type for explicit groups, named top-level groups and group references</xs:documentation> </xs:annotation> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:particle" minOccurs="0" maxOccurs="unbounded"/> <xs:attributeGroup ref="xs:defRef"/> <xs:attributeGroup ref="xs:occurs"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="realGroup"> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0" maxOccurs="1"> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> </xs:choice> </xs:sequence> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="namedGroup"> <xs:complexContent> <xs:restriction base="xs:realGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element name="all"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:all"> <xs:group ref="xs:allModel"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="choice" type="xs:simpleExplicitGroup"/> <xs:element name="sequence" type="xs:simpleExplicitGroup"/> </xs:choice> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:attribute name="ref" use="prohibited"/> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="groupRef"> <xs:complexContent> <xs:restriction base="xs:realGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" type="xs:QName" use="required"/> <xs:attribute name="name" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="explicitGroup"> <xs:annotation> <xs:documentation> group type for the three kinds of group</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:nestedParticle" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="prohibited"/> <xs:attribute name="ref" type="xs:QName" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="simpleExplicitGroup"> <xs:complexContent> <xs:restriction base="xs:explicitGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:nestedParticle" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="minOccurs" use="prohibited"/> <xs:attribute name="maxOccurs" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:group name="allModel"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>This choice with min/max is here to avoid a pblm with the Elt:All/Choice/Seq Particle derivation constraint</xs:documentation> </xs:annotation> <xs:element name="element" type="xs:narrowMaxMin"/> </xs:choice> </xs:sequence> </xs:group> <xs:complexType name="narrowMaxMin"> <xs:annotation> <xs:documentation>restricted max/min</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:localElement"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:element name="simpleType" type="xs:localSimpleType"/> <xs:element name="complexType" type="xs:localComplexType"/> </xs:choice> <xs:group ref="xs:identityConstraint" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="minOccurs" default="1" use="optional"> <xs:simpleType> <xs:restriction base="xs:nonNegativeInteger"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maxOccurs" default="1" use="optional"> <xs:simpleType> <xs:restriction base="xs:allNNI"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="all"> <xs:annotation> <xs:documentation> Only elements allowed inside</xs:documentation> </xs:annotation> <xs:complexContent> <xs:restriction base="xs:explicitGroup"> <xs:group ref="xs:allModel"/> <xs:attribute name="minOccurs" default="1" use="optional"> <xs:simpleType> <xs:restriction base="xs:nonNegativeInteger"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maxOccurs" default="1" use="optional"> <xs:simpleType> <xs:restriction base="xs:allNNI"> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="all" type="xs:all" id="all"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-all"/> </xs:annotation> </xs:element> <xs:element name="choice" type="xs:explicitGroup" id="choice"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-choice"/> </xs:annotation> </xs:element> <xs:element name="sequence" type="xs:explicitGroup" id="sequence"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-sequence"/> </xs:annotation> </xs:element> <xs:element name="group" type="xs:namedGroup" id="group"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-group"/> </xs:annotation> </xs:element> <xs:complexType name="wildcard"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="namespace" type="xs:namespaceList" default="##any" use="optional"/> <xs:attribute name="processContents" default="strict" use="optional"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="skip"/> <xs:enumeration value="lax"/> <xs:enumeration value="strict"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="any" id="any"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-any"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:wildcard"> <xs:attributeGroup ref="xs:occurs"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:annotation> <xs:documentation> simple type for the value of the 'namespace' attr of 'any' and 'anyAttribute'</xs:documentation> </xs:annotation> <xs:annotation> <xs:documentation> Value is ##any - - any non-conflicting WFXML/attribute at all ##other - - any non-conflicting WFXML/attribute from namespace other than targetNS ##local - - any unqualified non-conflicting WFXML/attribute one or - - any non-conflicting WFXML/attribute from more URI the listed namespaces references (space separated) ##targetNamespace or ##local may appear in the above list, to refer to the targetNamespace of the enclosing schema or an absent targetNamespace respectively</xs:documentation> </xs:annotation> <xs:simpleType name="namespaceList"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> </xs:annotation> <xs:union> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="##any"/> <xs:enumeration value="##other"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:list> <xs:simpleType> <xs:union memberTypes="xs:anyURI"> <xs:simpleType> <xs:restriction base="xs:token"> <xs:enumeration value="##targetNamespace"/> <xs:enumeration value="##local"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> </xs:list> </xs:simpleType> </xs:union> </xs:simpleType> <xs:element name="attribute" type="xs:topLevelAttribute" id="attribute"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attribute"/> </xs:annotation> </xs:element> <xs:complexType name="attributeGroup" abstract="true"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:attrDecls"/> <xs:attributeGroup ref="xs:defRef"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="namedAttributeGroup"> <xs:complexContent> <xs:restriction base="xs:attributeGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:attribute name="ref" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="attributeGroupRef"> <xs:complexContent> <xs:restriction base="xs:attributeGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" type="xs:QName" use="required"/> <xs:attribute name="name" use="prohibited"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:element name="attributeGroup" type="xs:namedAttributeGroup" id="attributeGroup"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-attributeGroup"/> </xs:annotation> </xs:element> <xs:element name="include" id="include"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-include"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="schemaLocation" type="xs:anyURI" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="redefine" id="redefine"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-redefine"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:annotation"/> <xs:group ref="xs:redefinable"/> </xs:choice> <xs:attribute name="schemaLocation" type="xs:anyURI" use="required"/> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="import" id="import"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-import"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="namespace" type="xs:anyURI"/> <xs:attribute name="schemaLocation" type="xs:anyURI"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="selector" id="selector"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-selector"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="xpath" use="required"> <xs:simpleType> <xs:annotation> <xs:documentation>A subset of XPath expressions for usein selectors</xs:documentation> <xs:documentation>A utility type, not for publicuse</xs:documentation> </xs:annotation> <xs:restriction base="xs:token"> <xs:annotation> <xs:documentation>The following pattern is intended to allow XPath expressions per the following EBNF: Selector ::= Path ( '|' Path )* Path ::= ('.//')? Step ( '/' Step )* Step ::= '.' | NameTest NameTest ::= QName | '*' | NCName ':' '*' child:: is also allowed </xs:documentation> </xs:annotation> <xs:pattern value="(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*(\|(\.//)?(((child::)?((\i\c*:)?(\i\c*|\*)))|\.)(/(((child::)?((\i\c*:)?(\i\c*|\*)))|\.))*)*"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="field" id="field"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-field"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="xpath" use="required"> <xs:simpleType> <xs:annotation> <xs:documentation>A subset of XPath expressions for usein fields</xs:documentation> <xs:documentation>A utility type, not for publicuse</xs:documentation> </xs:annotation> <xs:restriction base="xs:token"> <xs:annotation> <xs:documentation>The following pattern is intended to allow XPath expressions per the same EBNF as for selector, with the following change: Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest ) </xs:documentation> </xs:annotation> <xs:pattern value="(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*))))(\|(\.//)?((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)/)*((((child::)?((\i\c*:)?(\i\c*|\*)))|\.)|((attribute::|@)((\i\c*:)?(\i\c*|\*)))))*"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="keybase"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:element ref="xs:selector"/> <xs:element ref="xs:field" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:group name="identityConstraint"> <xs:annotation> <xs:documentation>The three kinds of identity constraints, all with type of or derived from 'keybase'. </xs:documentation> </xs:annotation> <xs:choice> <xs:element ref="xs:unique"/> <xs:element ref="xs:key"/> <xs:element ref="xs:keyref"/> </xs:choice> </xs:group> <xs:element name="unique" type="xs:keybase" id="unique"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-unique"/> </xs:annotation> </xs:element> <xs:element name="key" type="xs:keybase" id="key"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-key"/> </xs:annotation> </xs:element> <xs:element name="keyref" id="keyref"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-keyref"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:keybase"> <xs:attribute name="refer" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name="notation" id="notation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-notation"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:attribute name="name" type="xs:NCName" use="required"/> <xs:attribute name="public" type="xs:public"/> <xs:attribute name="system" type="xs:anyURI"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:simpleType name="public"> <xs:annotation> <xs:documentation> A utility type, not for public use</xs:documentation> <xs:documentation> A public identifier, per ISO 8879</xs:documentation> </xs:annotation> <xs:restriction base="xs:token"/> </xs:simpleType> <xs:element name="appinfo" id="appinfo"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-appinfo"/> </xs:annotation> <xs:complexType mixed="true"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:any processContents="lax"/> </xs:sequence> <xs:attribute name="source" type="xs:anyURI"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="documentation" id="documentation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-documentation"/> </xs:annotation> <xs:complexType mixed="true"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:any processContents="lax"/> </xs:sequence> <xs:attribute name="source" type="xs:anyURI"/> <xs:attribute ref="xml:lang"/> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType> </xs:element> <xs:element name="annotation" id="annotation"> <xs:annotation> <xs:documentation source="http://www.w3.org/TR/xmlschema-1/#element-annotation"/> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:appinfo"/> <xs:element ref="xs:documentation"/> </xs:choice> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:annotation> <xs:documentation> notations for use within XML Schema schemas</xs:documentation> </xs:annotation> <xs:notation name="XMLSchemaStructures" public="structures" system="http://www.w3.org/2000/08/XMLSchema.xsd"/> <xs:notation name="XML" public="REC-xml-19980210" system="http://www.w3.org/TR/1998/REC-xml-19980210"/> <xs:complexType name="anyType" mixed="true"> <xs:annotation> <xs:documentation> Not the real urType, but as close an approximation as we can get in the XML representation</xs:documentation> </xs:annotation> <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> </xs:sequence> <xs:anyAttribute processContents="lax"/> </xs:complexType></xs:schema>
To facilitate consistent reporting of schema errors and·validation·failures, this section tabulates and provides unique names for all theconstraints listed in this document. Wherever such constraints have numberedparts, reports should use the name given below plus the part number, separatedby a period ('.'). Thus for examplecos-ct-extends.1.2
should beused to report a violation of the clause1.2 ofDerivation Valid (Extension) (§3.4.6).
This specification requires as a precondition for·assessment· an information set as defined in[XML-Infoset] which supports at least the following information items and properties:
In addition, infosets should support the[unparsedEntities] property of the Document Information Item. Failure to do so will mean all items of typeENTITY orENTITIES will fail to·validate·.
This specification does not require any destructive alterations to the inputinformation set: all the information set contributions specified herein are additive.
This appendix is intended to satisfy the requirements forConformance to the[XML-Infoset] specification.
The listing below is for the benefit of readers of a printed version of thisdocument: it collects together all the definitions which appear in thedocument above.
The DTD for schema documents is given below. Note there isnoimplication here thatschema
must be the root element of adocument.
Although this DTD is non-normative, any XML document which is not valid per this DTD, given redefinitions in its internal subset of the 'p' and 's' parameter entities below appropriate to its namespace declaration of the XML Schema namespace, is almost certainly not a valid schema document, with the exception of documents with multiple namespace prefixes for the XML Schema namespace itself. Accordinglyauthoring XML Schema documents using this DTD and DTD-based authoring tools, andspecifying it as the DOCTYPE of documents intended to be XML Schemadocuments and validating them with a validating XML parser, aresensible development strategies which users are encouraged to adoptuntil XML Schema-based authoring tools and validators are more widely available.
<!-- DTD for XML Schemas: Part 1: Structures Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN" Official Location: http://www.w3.org/2001/XMLSchema.dtd --><!-- Id: structures.dtd,v 1.1 2003/08/28 13:30:52 ht Exp --><!-- With the exception of cases with multiple namespace prefixes for the XML Schema namespace, any XML document which is not valid per this DTD given redefinitions in its internal subset of the 'p' and 's' parameter entities below appropriate to its namespace declaration of the XML Schema namespace is almost certainly not a valid schema. --><!-- The simpleType element and its constituent parts are defined in XML Schema: Part 2: Datatypes --><!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' ><!ENTITY % p 'xs:'> <!-- can be overriden in the internal subset of a schema document to establish a different namespace prefix --><!ENTITY % s ':xs'> <!-- if %p is defined (e.g. as foo:) then you must also define %s as the suffix for the appropriate namespace declaration (e.g. :foo) --><!ENTITY % nds 'xmlns%s;'><!-- Define all the element names, with optional prefix --><!ENTITY % schema "%p;schema"><!ENTITY % complexType "%p;complexType"><!ENTITY % complexContent "%p;complexContent"><!ENTITY % simpleContent "%p;simpleContent"><!ENTITY % extension "%p;extension"><!ENTITY % element "%p;element"><!ENTITY % unique "%p;unique"><!ENTITY % key "%p;key"><!ENTITY % keyref "%p;keyref"><!ENTITY % selector "%p;selector"><!ENTITY % field "%p;field"><!ENTITY % group "%p;group"><!ENTITY % all "%p;all"><!ENTITY % choice "%p;choice"><!ENTITY % sequence "%p;sequence"><!ENTITY % any "%p;any"><!ENTITY % anyAttribute "%p;anyAttribute"><!ENTITY % attribute "%p;attribute"><!ENTITY % attributeGroup "%p;attributeGroup"><!ENTITY % include "%p;include"><!ENTITY % import "%p;import"><!ENTITY % redefine "%p;redefine"><!ENTITY % notation "%p;notation"><!-- annotation elements --><!ENTITY % annotation "%p;annotation"><!ENTITY % appinfo "%p;appinfo"><!ENTITY % documentation "%p;documentation"><!-- Customisation entities for the ATTLIST of each element type. Define one of these if your schema takes advantage of the anyAttribute='##other' in the schema for schemas --><!ENTITY % schemaAttrs ''><!ENTITY % complexTypeAttrs ''><!ENTITY % complexContentAttrs ''><!ENTITY % simpleContentAttrs ''><!ENTITY % extensionAttrs ''><!ENTITY % elementAttrs ''><!ENTITY % groupAttrs ''><!ENTITY % allAttrs ''><!ENTITY % choiceAttrs ''><!ENTITY % sequenceAttrs ''><!ENTITY % anyAttrs ''><!ENTITY % anyAttributeAttrs ''><!ENTITY % attributeAttrs ''><!ENTITY % attributeGroupAttrs ''><!ENTITY % uniqueAttrs ''><!ENTITY % keyAttrs ''><!ENTITY % keyrefAttrs ''><!ENTITY % selectorAttrs ''><!ENTITY % fieldAttrs ''><!ENTITY % includeAttrs ''><!ENTITY % importAttrs ''><!ENTITY % redefineAttrs ''><!ENTITY % notationAttrs ''><!ENTITY % annotationAttrs ''><!ENTITY % appinfoAttrs ''><!ENTITY % documentationAttrs ''><!ENTITY % complexDerivationSet "CDATA"> <!-- #all or space-separated list drawn from derivationChoice --><!ENTITY % blockSet "CDATA"> <!-- #all or space-separated list drawn from derivationChoice + 'substitution' --><!ENTITY % mgs '%all; | %choice; | %sequence;'><!ENTITY % cs '%choice; | %sequence;'><!ENTITY % formValues '(qualified|unqualified)'><!ENTITY % attrDecls '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'><!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'><!-- This is used in part2 --><!ENTITY % restriction1 '((%mgs; | %group;)?)'>%xs-datatypes;<!-- the duplication below is to produce an unambiguous content model which allows annotation everywhere --><!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*, ((%simpleType; | %complexType; | %element; | %attribute; | %attributeGroup; | %group; | %notation; ), (%annotation;)*)* )><!ATTLIST %schema; targetNamespace %URIref; #IMPLIED version CDATA #IMPLIED %nds; %URIref; #FIXED 'http://www.w3.org/2001/XMLSchema' xmlns CDATA #IMPLIED finalDefault %complexDerivationSet; '' blockDefault %blockSet; '' id ID #IMPLIED elementFormDefault %formValues; 'unqualified' attributeFormDefault %formValues; 'unqualified' xml:lang CDATA #IMPLIED %schemaAttrs;><!-- Note the xmlns declaration is NOT in the Schema for Schemas, because at the Infoset level where schemas operate, xmlns(:prefix) is NOT an attribute! --><!-- The declaration of xmlns is a convenience for schema authors --> <!-- The id attribute here and below is for use in external references from non-schemas using simple fragment identifiers. It is NOT used for schema-to-schema reference, internal or external. --><!-- a type is a named content type specification which allows attribute declarations--><!-- --><!ELEMENT %complexType; ((%annotation;)?, (%simpleContent;|%complexContent;| %particleAndAttrs;))><!ATTLIST %complexType; name %NCName; #IMPLIED id ID #IMPLIED abstract %boolean; #IMPLIED final %complexDerivationSet; #IMPLIED block %complexDerivationSet; #IMPLIED mixed (true|false) 'false' %complexTypeAttrs;><!-- particleAndAttrs is shorthand for a root type --><!-- mixed is disallowed if simpleContent, overriden if complexContent has one too. --><!-- If anyAttribute appears in one or more referenced attributeGroups and/or explicitly, the intersection of the permissions is used --><!ELEMENT %complexContent; ((%annotation;)?, (%restriction;|%extension;))><!ATTLIST %complexContent; mixed (true|false) #IMPLIED id ID #IMPLIED %complexContentAttrs;><!-- restriction should use the branch defined above, not the simple one from part2; extension should use the full model --><!ELEMENT %simpleContent; ((%annotation;)?, (%restriction;|%extension;))><!ATTLIST %simpleContent; id ID #IMPLIED %simpleContentAttrs;><!-- restriction should use the simple branch from part2, not the one defined above; extension should have no particle --><!ELEMENT %extension; ((%annotation;)?, (%particleAndAttrs;))><!ATTLIST %extension; base %QName; #REQUIRED id ID #IMPLIED %extensionAttrs;><!-- an element is declared by either: a name and a type (either nested or referenced via the type attribute) or a ref to an existing element declaration --><!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?, (%unique; | %key; | %keyref;)*)><!-- simpleType or complexType only if no type|ref attribute --><!-- ref not allowed at top level --><!ATTLIST %element; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED type %QName; #IMPLIED minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED nillable %boolean; #IMPLIED substitutionGroup %QName; #IMPLIED abstract %boolean; #IMPLIED final %complexDerivationSet; #IMPLIED block %blockSet; #IMPLIED default CDATA #IMPLIED fixed CDATA #IMPLIED form %formValues; #IMPLIED %elementAttrs;><!-- type and ref are mutually exclusive. name and ref are mutually exclusive, one is required --><!-- In the absence of type AND ref, type defaults to type of substitutionGroup, if any, else the ur-type, i.e. unconstrained --><!-- default and fixed are mutually exclusive --><!ELEMENT %group; ((%annotation;)?,(%mgs;)?)><!ATTLIST %group; name %NCName; #IMPLIED ref %QName; #IMPLIED minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %groupAttrs;><!ELEMENT %all; ((%annotation;)?, (%element;)*)><!ATTLIST %all; minOccurs (1) #IMPLIED maxOccurs (1) #IMPLIED id ID #IMPLIED %allAttrs;><!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)><!ATTLIST %choice; minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %choiceAttrs;><!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)><!ATTLIST %sequence; minOccurs %nonNegativeInteger; #IMPLIED maxOccurs CDATA #IMPLIED id ID #IMPLIED %sequenceAttrs;><!-- an anonymous grouping in a model, or a top-level named group definition, or a reference to same --><!-- Note that if order is 'all', group is not allowed inside. If order is 'all' THIS group must be alone (or referenced alone) at the top level of a content model --><!-- If order is 'all', minOccurs==maxOccurs==1 on element/any inside --><!-- Should allow minOccurs=0 inside order='all' . . . --><!ELEMENT %any; (%annotation;)?><!ATTLIST %any; namespace CDATA '##any' processContents (skip|lax|strict) 'strict' minOccurs %nonNegativeInteger; '1' maxOccurs CDATA '1' id ID #IMPLIED %anyAttrs;><!-- namespace is interpreted as follows: ##any - - any non-conflicting WFXML at all ##other - - any non-conflicting WFXML from namespace other than targetNamespace ##local - - any unqualified non-conflicting WFXML/attribute one or - - any non-conflicting WFXML from more URI the listed namespaces references ##targetNamespace ##local may appear in the above list, with the obvious meaning --><!ELEMENT %anyAttribute; (%annotation;)?><!ATTLIST %anyAttribute; namespace CDATA '##any' processContents (skip|lax|strict) 'strict' id ID #IMPLIED %anyAttributeAttrs;><!-- namespace is interpreted as for 'any' above --><!-- simpleType only if no type|ref attribute --><!-- ref not allowed at top level, name iff at top level --><!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)><!ATTLIST %attribute; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED type %QName; #IMPLIED use (prohibited|optional|required) #IMPLIED default CDATA #IMPLIED fixed CDATA #IMPLIED form %formValues; #IMPLIED %attributeAttrs;><!-- type and ref are mutually exclusive. name and ref are mutually exclusive, one is required --><!-- default for use is optional when nested, none otherwise --><!-- default and fixed are mutually exclusive --><!-- type attr and simpleType content are mutually exclusive --><!-- an attributeGroup is a named collection of attribute decls, or a reference thereto --><!ELEMENT %attributeGroup; ((%annotation;)?, (%attribute; | %attributeGroup;)*, (%anyAttribute;)?) ><!ATTLIST %attributeGroup; name %NCName; #IMPLIED id ID #IMPLIED ref %QName; #IMPLIED %attributeGroupAttrs;><!-- ref iff no content, no name. ref iff not top level --><!-- better reference mechanisms --><!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)><!ATTLIST %unique; name %NCName; #REQUIRED id ID #IMPLIED %uniqueAttrs;><!ELEMENT %key; ((%annotation;)?, %selector;, (%field;)+)><!ATTLIST %key; name %NCName; #REQUIRED id ID #IMPLIED %keyAttrs;><!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)><!ATTLIST %keyref; name %NCName; #REQUIRED refer %QName; #REQUIRED id ID #IMPLIED %keyrefAttrs;><!ELEMENT %selector; ((%annotation;)?)><!ATTLIST %selector; xpath %XPathExpr; #REQUIRED id ID #IMPLIED %selectorAttrs;><!ELEMENT %field; ((%annotation;)?)><!ATTLIST %field; xpath %XPathExpr; #REQUIRED id ID #IMPLIED %fieldAttrs;><!-- Schema combination mechanisms --><!ELEMENT %include; (%annotation;)?><!ATTLIST %include; schemaLocation %URIref; #REQUIRED id ID #IMPLIED %includeAttrs;><!ELEMENT %import; (%annotation;)?><!ATTLIST %import; namespace %URIref; #IMPLIED schemaLocation %URIref; #IMPLIED id ID #IMPLIED %importAttrs;><!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; | %attributeGroup; | %group;)*><!ATTLIST %redefine; schemaLocation %URIref; #REQUIRED id ID #IMPLIED %redefineAttrs;><!ELEMENT %notation; (%annotation;)?><!ATTLIST %notation; name %NCName; #REQUIRED id ID #IMPLIED public CDATA #REQUIRED system %URIref; #IMPLIED %notationAttrs;><!-- Annotation is either application information or documentation --><!-- By having these here they are available for datatypes as well as all the structures elements --><!ELEMENT %annotation; (%appinfo; | %documentation;)*><!ATTLIST %annotation; %annotationAttrs;><!-- User must define annotation elements in internal subset for this to work --><!ELEMENT %appinfo; ANY> <!-- too restrictive --><!ATTLIST %appinfo; source %URIref; #IMPLIED id ID #IMPLIED %appinfoAttrs;><!ELEMENT %documentation; ANY> <!-- too restrictive --><!ATTLIST %documentation; source %URIref; #IMPLIED id ID #IMPLIED xml:lang CDATA #IMPLIED %documentationAttrs;><!NOTATION XMLSchemaStructures PUBLIC 'structures' 'http://www.w3.org/2001/XMLSchema.xsd' ><!NOTATION XML PUBLIC 'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' >
A specification of the import ofUnique Particle Attribution (§3.8.6) which doesnot appeal to a processing model is difficult. What follows is intended asguidance, without claiming to be complete.
[Definition:] Two non-groupparticlesoverlap if
or
or
or
A content model will violate the unique attribution constraint if itcontains two particles which·overlap· and which either
or
Two particles may·validate· adjacent information items if they areseparated by at most epsilon transitions in the most obvious transcription of acontent model into a finite-state automaton.
A precise formulation of this constraint can also be offered in terms ofoperations on finite-state automaton: transcribe the content model into anautomaton in the usual way using epsilon transitions for optionality andunbounded maxOccurs, unfolding other numeric occurrence ranges and treating the heads of substitution groups as ifthey were choices over all elements in the group,but using notelement QNames as transition labels, but rather pairs of element QNames andpositions in the model. Determinize this automaton, treating wildcard transitions as opaque. Now replace allQName+position transition labels with the element QNames alone. If the result has any stateswith two or more identical-QName-labeled transitions from it, or aQName-labeled transition and a wildcard transition which subsumes it, or twowildcard transitions whose intentional intersection is non-empty, the model does notsatisfy the Unique Attribution constraint.
The following contributed material to the first edition of this specification:
David Fallside, IBM
Scott Lawrence, Agranat Systems
Andrew Layman, Microsoft
Eve L. Maler, Sun Microsystems
Asir S. Vedamuthu, webMethods, Inc
The editors acknowledge the members of the XML Schema Working Group, the members of other W3C Working Groups, and industry experts in otherforums who have contributed directly or indirectly to the process or content ofcreating this document. The Working Group is particularly grateful to LotusDevelopment Corp. and IBM for providing teleconferencing facilities.
At the time the first edition of thisspecification was published, the members of the XML Schema Working Group were:
The XML Schema Working Group has benefited in its work from theparticipation and contributions of a number of people not currentlymembers of the Working Group, includingin particular those named below. Affiliations given are those current atthe time of their work with the WG.
The lists given above pertain to the first edition.At the time work on this second edition was completed,the membership of the Working Group was:
We note with sadness the accidental death of Mario Jeckleshortly after the completion of work on this document. In addition to those named above, severalpeople served on the Working Group during the developmentof this second edition: