<?xml version="1.0" encoding="utf-8"?><!-- Id: structures.xml,v 1.6.2.107 2006/03/26 14:44:57 cmsmcq Exp  --><?xml-stylesheet type='text/xsl' href='xmlschema_nodiffs.xsl'?>
<!DOCTYPE spec
  SYSTEM "local.dgdf.dtd">
<spec dgdf="dg-wd.xml" dgdf_desc="" xml:lang="en" w3c-doctype="wd" status="final" otherSpec="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html" schemaDump="./XMLSchema.xsd.dmp" schemaProper="./XMLSchema.xsd" datatypeDoc="../WD-xmlschema11-2-20060217/datatypes.xml" schemaExample="./example.xsd.dmp" docStatus="final" me="structures">
 <header>
  <title>XML Schema 1.1 Part 1: Structures</title>
  <w3c-designation>wd-20060330</w3c-designation>
  <w3c-doctype>W3C Working Draft</w3c-doctype>
  <pubdate>
   <day>30</day>
   <month>March</month>
   <year>2006</year><!--  Id: structures.xml,v 1.6.2.107 2006/03/26 14:44:57 cmsmcq Exp  -->
  </pubdate>
  <publoc> 
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/">http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/</loc> 
  </publoc>
  <altlocs><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/structures.xml">XML</loc>
<!--*
   <loc href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/structures.diff-1.0.html">XHTML with changes since version 1.0 marked</loc>
   <loc href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/structures.diff-wd.html">XHTML with changes since previous Working Draft marked</loc>
*-->
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/structures.diff-1.0.html">XHTML with changes since version 1.0 marked</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/structures.diff-wd.html">XHTML with changes since previous Working Draft marked</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2001/XMLSchema.xsd">Independent copy of the schema for schema
    documents</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2001/XMLSchema.dtd">Independent copy of the DTD for schema documents</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="compDefs.xml">Independent tabulation of components and microcomponents</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2003/03/Translations/byTechnology?technology=xmlschema">List of translations</loc>
  </altlocs>
  <latestloc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xmlschema11-1/">http://www.w3.org/TR/xmlschema11-1/</loc>
  </latestloc>
  <prevlocs>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2005/WD-xmlschema11-1-20050224/">http://www.w3.org/TR/2005/WD-xmlschema11-1-20050224/</loc>
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2004/WD-xmlschema11-1-20040716/">http://www.w3.org/TR/2004/WD-xmlschema11-1-20040716/</loc>
  </prevlocs>
  <authlist>
   <author>
    <name>Henry S. Thompson</name>
    <affiliation>University of Edinburgh</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:ht@inf.ed.ac.uk">ht@inf.ed.ac.uk</email>
   </author>
   <author>
    <name>C. M. Sperberg-McQueen</name>
    <affiliation>World Wide Web Consortium</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:cmsmcq@w3.org">cmsmcq@w3.org</email>
   </author>
   <author role="1.0">
    <name>Noah Mendelsohn</name>
    <affiliation>IBM</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:noah_mendelsohn@us.ibm.com">noah_mendelsohn@us.ibm.com</email>
   </author>
   <author role="1.0">
    <name>David Beech</name>
    <affiliation>Oracle Corporation (retired)</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:davidbeech@earthlink.net">davidbeech@earthlink.net</email>
   </author>
   <author role="1.0">
    <name>Murray Maloney</name>
    <affiliation>Muzmo Communications</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:murray@muzmo.com">murray@muzmo.com</email>
   </author>
  </authlist>

<status>
<p><emph>This section describes the status of this document at the
time of its publication. Other documents may supersede this document.
A list of current W3C publications and the latest revision of this
technical report can be found in the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/">W3C technical reports index</loc> at
http://www.w3.org/TR/.</emph></p>
<p>This is a 
<!--*
* material suppressed here by diff group wg-internal *
*-->
Public Working Draft of XML Schema 1.1.  It 
<!--*
* material suppressed here by diff group wg-internal *
*-->
is here made
available for review by W3C members<phrase dg="wg-internal"> 
and the public</phrase>.  It is intended to
give an indication of the W3C XML Schema Working Group's intentions
for this new version of the XML Schema language and our progress in
achieving them.  It attempts to be complete in indicating
<emph>what</emph> will change from version 1.0, but does
<emph>not</emph> specify in all cases <emph>how</emph> things will
change.
<!--*
* material suppressed here by diff group wg-internal *
*-->
</p>
<!--*
* material suppressed here by diff group telltale *
*-->
<!--* draft of March 2006 *-->
<p dg="wd-200603">This draft was published 
on 30 March 2006.
The major changes since the previous draft are:
<ulist>
<item>
<p>Support for XML 1.1 has been added.  It is now implementation
defined whether datatypes dependent on definitions in 
XML (<bibref ref="ref-xml"/>, <bibref ref="ref-xml-1.0"/>)
and Namespaces in XML 
(<bibref ref="ref-xml-namespaces"/>, <bibref ref="ref-xml-namespaces-1.0"/>)
use the definitions
as found in version 1.1 or version 1.0 of those specifications.
</p>
</item>

<item>
<p>Correction of an error in version 1.0 of this specification 
relating to the construction of union types from other union types.
Unions may now appear as members of other unions, and all
restrictions of unions are correctly enforced.</p>
</item>

<item>
<p>A <propref comp="ctd" prop="context"/> property has been defined
for the definitions of complex and of simple types.</p>
</item>

<item>
<p>Since not all datatypes have a defined canonical representation
for all of their values, appeals to the canonical forms
of values have been eliminated.</p>
</item>

<item>
<p>Changes to ensure that the descriptions of the <compref name="Simple Type Definition" ref="std"/> component and of <termref def="simple-ur-type-itself">anySimpleType</termref> agree in all
details with those of <bibref ref="ref-xsp2"/>.</p>
</item>
<item>
<p>Addition of a note warning that the <local>replace</local> and
<local>collapse</local> values for whitespace handling are not a
reliable means of neutralizing the effects of word-wrapping and
pretty-printing of natural-language data and should not be used
for that purpose.</p>
</item>
<item>
<p>Some minor corrections and clarifications.  
Usage of some technical terminology has been clarified, normalized,
and aligned where appropriate with the usage in <bibref ref="ref-xsp2"/>.  Conditionals using <quote>if</quote>
have been rephrased to use <quote>if and only if</quote>
where appropriate.</p>
</item>
</ulist>
</p>

<p>For those primarily interested in the changes since version 1.0,
the <specref ref="changes"/> appendix, which summarizes
both changes already made and also those in prospect, with links to
the relevant sections of this draft, is the recommended starting
point.  Accompanying versions of this document display in color
all changes to normative text since version 1.0 and since the
previous Working Draft.</p>
<p>Please send comments on this Working Draft to 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:www-xml-schema-comments@w3.org">www-xml-schema-comments@w3.org</loc> 
(<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/www-xml-schema-comments/">archive</loc>).</p>


<p diff="nsq-add" dg="b2333-feedback">Although feedback based on any
aspect of this specification is welcome, there are certain aspects of
the design presented herein for which the Working Group is
particularly interested in feedback. These are designated
<quote>priority feedback</quote> aspects of the design, and
identified as such in editorial notes at appropriate points in this
draft.</p>

<p>Publication as a Working Draft does not imply endorsement by the
W3C Membership. This is a draft document and may be updated, replaced
or obsoleted by other documents at any time. It is inappropriate to
cite this document as other than work in progress.</p>

<p>
This document has been produced by the 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Schema">W3C XML Schema Working Group</loc>
as part of the W3C <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Activity">XML
Activity</loc>. The goals of the XML Schema language version 1.1 are
discussed in the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2003/WD-xmlschema-11-req-20030121/">Requirements 
for XML Schema 1.1</loc> document. The authors of this document are
the members of the XML Schema Working Group.  Different parts of this
specification have different editors.
</p>
<p>This document was produced by a group operating under the <loc
href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February
2004 W3C Patent Policy</loc>. W3C maintains a <loc
href="http://www.w3.org/2004/01/pp-impl/19482/status">public list of
any patent disclosures</loc> made in connection with the deliverables
of the group; that page also includes instructions for disclosing a
patent. An individual who has actual knowledge of a patent which the
individual believes contains <loc
href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential 
Claim(s)</loc> must disclose the information in accordance with <loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 
6 of the W3C Patent Policy</loc>. </p>
<!--* <p>Patent disclosures relevant to this specification may
be found on the Working Group's <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="disclosure" href="http://www.w3.org/2004/01/pp-impl/19482/status">Patent
disclosure page</loc> in conformance with the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/">W3C Patent
Policy</loc> of 5 February 2004.  An individual who has actual
knowledge of a patent which the individual believes contains Essential
Claim(s) with respect to this specification should disclose the
information in accordance with <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 
6 of the W3C Patent Policy</loc>.</p>
*-->      
<!--* <p>In accordance with 
<loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Exclusion">section 
4 of the W3C Patent Policy</loc>, Working Group participants have 150
days from the title page date of this document to exclude essential
claims from the W3C RF licensing requirements with respect to this
document series. Exclusions are with respect to the exclusion
reference document, defined by the <loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/">W3C Patent
Policy</loc> to be the latest version of a document in this series
that is published no later than 90 days after the title page date of
this document.</p> *-->

<p>The English version of this specification is the only normative
version. Information about translations of this document is available
at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2003/03/Translations/byTechnology?technology=xmlschema">http://www.w3.org/2003/03/Translations/byTechnology?technology=xmlschema</loc>.</p>

</status>

  <abstract id="abstract">
   <p><emph>XML Schema: Structures</emph> specifies the XML Schema definition language,
    which offers facilities for describing the structure and constraining the contents
    of XML<!--*
* material suppressed here by diff group fpwd *
*--> documents, including those which exploit the XML
    Namespace facility. The schema language, which is itself represented in XML<!--*
* material suppressed here by diff group fpwd *
*--> and uses namespaces, substantially reconstructs and considerably extends the capabilities found in XML<!--*
* material suppressed here by diff group fpwd *
*--> document type
    definitions (DTDs).  This specification depends on <emph>XML Schema<phrase dg="fpwd">
      1.1</phrase> Part 2:
     Datatypes</emph>.          
<!--* <issue id="RQ-152i" role="1.1">
     <p><loc href="&reqs;#xml1.1" target="reqs">RQ-152 (xml1.1)</loc></p>
     <p>How should this specification be aligned with XML 1.1?  The changes in
      character set and name characters, and the question of what determines which
      ones to use, must be addressed.</p>
    </issue> *-->
   </p>
  </abstract>
  <pubstmt>
   <p>Edinburgh, et al.: World-Wide Web Consortium, XML
    Working Group, 2004.</p>
  </pubstmt>
  <sourcedesc>
   <p>Created in electronic form using XML, starting from <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Group/2003/09/xmlschema-1/structures.xml">[internal draft
     of] XML Schema Part 1: Structures, Second Edition</loc>.</p>
  </sourcedesc>
  <langusage>
   <language id="EN">English</language>
   <language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
   <language>Extensible Markup Language (XML)</language> </langusage>
<revisiondesc>
<slist>
<sitem>For changes, see CVS change log at the end of the document.
For marked diff groups, see the following items.</sitem>
<sitem id="fpwd">Changes made (and with very few exceptions 
marked as such) in the first public working draft of July 2004.
Mostly approved 2005-02-18.  (What wasn't approved is now 
tagged ep01.)</sitem>
<sitem id="m01">Minor typos and corrections made by MSM; these
will be batched together and handled in an editorial change 
proposal.  Approved as part of EP-06, 2005-02-18.</sitem>
<sitem id="imp">Changes to the section on import (mostly — 
some go beyond import to the rest of the section), based on
NM's proposal in Brisbane.  Approved as EP-07, 2005-02-18.</sitem>
<sitem id="rq17">Non-status-quo draft changes to implement
Brisbane partial consensus wrt RQ-17.
Discussed 2005-02-18, into WD as non-status-quo text.
</sitem>
<sitem id="rq17a">Additional changes to fix links broken by rq17.
Not discussed 2005-02-18, but into WD anyway as non-status-quo text
(because otherwise links are broken).
</sitem>
<sitem id="rq17aux">Auxiliary diff group for RQ-17.  Has no independent
value; its sole purpose is to make the output valid when diff group
rq17 and rq17a are not adopted.  Display as 'pre' iff rq17 is pre,
otherwise display as 'post'.
Added 2005-02-19.  Needs no discussion or approval; it's just
an artifact of our diff system.
</sitem>
<sitem id="rq144">Draft rough wording (not status quo) for RQ-144.
Discussed 2005-02-18, into WD as non-status-quo text.
</sitem>
<sitem id="rq144a">Fixes to broken links caused by diff group rq144.
Not discussed 2005-02-18, not sure what to do.
</sitem>
<sitem id="rq144b">Further development of RQ-144, after WD of
February 2005.
</sitem>
<sitem id="rq144aux">Auxiliary diff group for RQ-144. Has no
independent value; its sole purpose is to make the output document valid
with or without rq144.  Display as 'pre' iff rq144 is pre;
otherwise display as 'post'.
Added 2005-02-19.  Does not need WG discussion or approval; it's
just a mechanism for controlling the diff and the markup.
</sitem>
<sitem id="modals">An editorial proposal prepared by MSM.
Eliminate nested modals, to avoid entailing modal logic.
Check all occurrences of 'must', 'may', and 'should', eliminate
where not aligned with RFC 2119.  (Not entirely successful; I
eliminated almost all non-2119 occcurrences of 'may', but not of
'should'.)
Partly approved 2005-02-18 as EP-08, partly postponed.  Postponed bits
('may') retagged as diff group 'may'.
</sitem>
<sitem id="may">Originally part of "modals".  Split off 2005-02-18
after HT and MSM were unable to agree on specific cases; to be taken
up again later.
</sitem>
<sitem id="ep06a">Proposed amendments to EP-06 (2005-02).
Approved 2005-02-18.</sitem>
<sitem id="ep08a">Proposed amendments to EP-08 (2005-02).
Approved 2005-02-18.</sitem>
<sitem id="ep01">Diff group for changes related to micro-components 
(were originally tagged fpwd).  Split off from fpwd 2005-02-18.</sitem>
 <sitem id="ep01-part1">Misnamed for split-off addition of Scope to CTD --
overtaken by context-2338.</sitem>
<sitem id="dgaat">Diff group for changes related to anyAtomicType
(were originally tagged fpwd).  Approved 2005-02-18.</sitem>
<sitem id="wd2hax">Other last-minute fixes for WD 2 (2005-02).</sitem>
<sitem id="wd2.silent">Changes which we record for the sake of
the audit trail but which are not to be shown colored in WD 2 (2005-02).</sitem>
<sitem id="nsq">Dummy diff group for sample non-status-quo text.</sitem>
<sitem id="abandoned">Change markup which we decided against, but
which for whatever reason (sentimentality, or a suspicion that
we might change our minds back, or just a hope we will) we do
not wish to delete. Yet.</sitem>
<sitem id="iff">Selective change of "if" to "if and only if"
(and other attempts to make sentences with "if" clearer).</sitem>
<sitem id="iff.144">Changes of "if"/"then" related to RQ-144 (and thus
possibly more controversial than those of "iff").</sitem>
<sitem id="opt.144">Changes of "is" to "may" related to RQ-144 (and thus
distinct in impact from those of "iff.144").</sitem>
<sitem id="iff.144.r">Reverted changes formerly marked iff.144.
Agreed 15 April 2005 (http://www.w3.org/2005/04/15-xmlschema-minutes.html#item10),
22 April (http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2005Apr/0056.html).
</sitem>
 <sitem id="rec12-main">Changes to reconcile overlap/conflict between parts 1 and 2</sitem>
 <sitem id="rec12-map">Changes to reconcile overlap/conflict between parts 1
and 2 in the XML&lt;-&gt;component mapping rules</sitem>
<sitem id="std-1915">Changes in tableaux for simple type definition to align with
part 2, as agreed in Edinburgh.
(These could be folded into rec12-map, probably, but
I'm making them separate just out of caution. -MSM)</sitem>
<sitem id="std-1915-scope">Deletion of scope property in tableau for anySimpleType.
This change was made as part of / at the same time as std-1915, but since
scope was added after 1.0, it needs to be treated separately to get the colors
in the diffs to come out right.</sitem>
 <sitem id="rq129">Remove dependency on canonical forms</sitem>
 <sitem id="rq129bis">Second pass on RQ-129, to implement WG instructions
 of 2006-02-17 (no real need for this to be separate from rq129
 except that I'm uncertain about these changes and want to be able
 to roll them back easily)</sitem>
 <sitem id="rq129ter">Additional pass to implement WG instructions
 of 2006-02-17 within nsq RQ-17 text.
 This does need to be separate from rq129.</sitem>
 <sitem id="derive-1913">Implement RQ-120, use 'derived' consistently 
vis a vis 'constructed'</sitem>
 <sitem id="scope-1973">Implement fix for R-96, bug in scope when decl is
inside group defn</sitem>
<sitem id="b1892">Fix for R-180, bug 1892.  (The entry for 1892 says 
it's 1.0 only, but the text is the same in 1.0 and 1.1, so I'm putting
this fix in here.)</sitem>
<sitem id="b1915bis">Late amendments to the omnibus proposal which
included both 1913 and 1915.  Approved by WG 16 December 2005.</sitem>
<sitem id="b2532-rq127-r196">Health warning about white space normalization,
approved at Toronto ftf meeting (according to bug 2532 - I seem to have
read past it when processing the Toronto minutes).</sitem>
<sitem id="b2333">Bug 2333 (= R-198, union of unions).  Changes to
eliminate flattening of unions to make them contain only atomic and list
types.  This requires changing the description of [member type
definition] and friends; three designs are sketched, labeled b2333a,
b2333b, and b2333c.</sitem>
<sitem id="b2333a">Bug 2333 (= R-198, union of unions).  One way to
handle member type definition properties in the PSVI.
Make [member type definition] refer to the ground (bottom-level) 
atomic or list type to which a value was ultimately assigned.
Cost:  constraints imposed by other types in the derivation chain
are not visible.  Cost:  if the same ground type appears more than
once in the membership tree, we cannot know which appearance we are
dealing with.  (This is already true in 1.0.  But in 1.0, when
restrictions on sub-unions are lost, what difference can it
make which appearance we have?)</sitem>
<sitem id="b2333b">Bug 2333 (= R-198, union of unions).  Second way to
handle member type definition properties in the PSVI. Make [member
type definition] contain a sequence of type definitions (beginning
with the immediate member of the declared type and ending with the
non-union, i.e. atomic or list type) to which the value was ultimately
assigned.  Cost:  change to component structure will disturb some WG
members.  Cost:  the properties [member type definition name],
[member type definition namespace],  and [member type definition
anonymous] become kind of clumsy.  (Our own damn fault for not
defining structures for expanded names.)</sitem>
<sitem id="b2333c">Bug 2333 (= R-198, union of unions).  Third way to
handle member type definition properties in the PSVI.
Bite the bullet: make [member type definition] refer to the primitive 
type to which a value was ultimately assigned.
Cost:  constraints imposed by other types in the derivation chain
are not visible.  Cost:  change in component semantics will disturb
some WG members.  Cost:  if the same primitive type appears several
times in the membership tree, it won't be clear which intermediate
unions were involved.</sitem>
<sitem id="b2333-feedback">Priority feedback request for fix
2333.  Drafted by MSM 2006-01-27, not status quo until the
other editors review and agree.</sitem>

<sitem id="b1838">Changes for Bugzilla 1838 = RQ-152 = support for XML
1.1.</sitem>

<sitem id="eg-1852">End-game resolution of dangling inconsistencies between
parts 1 and 2</sitem>
<sitem id="eg-1852-silent">Text movement in eg-1852.  Added by MSM; I have
not done anything like a systematic search, but happened to notice that
the definition of key-baseTypeDefinition had moved and was marked as a
deletion in old location but not as an insertion in new one.  The
eg-1852-silent diff group is to hold the insertion.  Mark it either pre
or post, not colour, so that the micro-changes can be seen.</sitem>
 <sitem id="rec12-main-eg-1852-override">Added in rec12-main, but deleted in eg-1852</sitem>
 <sitem id="context-2338">Add {context} property to CTDs</sitem>
 <sitem id="ep01-revert">Revert an ep01 change per WG request</sitem>
 <sitem id="rq17p">Separate out content-model aspect of
restriction-is-subsumption for separate consideration</sitem>
 <sitem id="ww">Introduce simple weakened wildcards.</sitem>
 <sitem id="rq146">Runtime EDC</sitem>

<sitem id="wg-internal">Phrases in status section which apply only to
to WG-internal draft copies.</sitem>
<sitem id="telltale">Material (in status section and possibly elsewhere) 
which applies only to change proposals.</sitem>
<sitem id="lp">Literate programming change:  make the master source of 
the schema for schemas live in this document, not elsewhere.</sitem>
<sitem id="ast-pim">Addition of ptd, itd, and mtd to display
for simple type definitions.  This happened after the WD of 200502 and should
be marked as an add vis-a-vis that WD and vis-a-vis 1.0.</sitem>
<sitem id="wd-200603">SOTD prose for the draft of March 2006.</sitem>
<sitem id="wd3hax">Last-minute editorial changes prior to publication 
of March 2006.</sitem>
<!-- Dummy components to discharge IDREFs which will turn into xspecrefs. 
        Any actual use of these _should_ be
        accompanied by a name attribute allowing an xtermref to
        Part 2 to be generated. -->
<sitem id="f-w">Whitespace facet</sitem>
<sitem id="ff">Fundamental facet</sitem>
<sitem id="f">Constraining facet</sitem>
</slist>
</revisiondesc>
  </header>
  <body>
    <div1 id="intro">
      <head>Introduction</head>
      <p>This document sets out the structural part (<emph>XML Schema: Structures</emph>) of the XML Schema definition language.</p>
      <p>Chapter 2 presents a <specref ref="concepts"/> for XML Schemas, including
        an introduction to the nature of XML Schemas and an introduction
to the XML Schema abstract data model, along with
        other terminology used throughout this document. </p>
      <p>Chapter 3, <specref ref="components"/>, specifies the precise
semantics of each component of the abstract model, the representation of each 
component in XML, with reference to a DTD and XML Schema
for an XML Schema document type, along with a detailed mapping between the elements and
attribute vocabulary of this representation and the components and properties
of the abstract model.</p>
      <p>Chapter 4 presents <specref ref="composition"/>, including the
connection between documents and schemas, the import, inclusion and redefinition of declarations and definitions and
        the foundations of schema-validity assessment.</p>
      <p>Chapter 5 discusses <specref ref="conformance"/>, including the
overall approach to schema-validity assessment of documents, and responsibilities of schema-aware
        processors. </p>
      <p>The normative appendices include a <specref ref="normative-schemaSchema"/> for the XML representation of schemas and
        <specref ref="normative-references"/>.</p>
     <p>The non-normative appendices include the <specref ref="nonnormative-schemaDTD"/> and a <specref ref="normative-glossary"/>.</p>
     <p>This document is primarily intended as a language definition reference.
As such, although it contains a few examples, it is <emph>not</emph> primarily designed
to serve as a motivating introduction to the design and its features, or as a
tutorial for new users.
Rather it presents a careful and fully explicit definition of that design, suitable
for guiding implementations.  For those in search of a step-by-step
introduction to the design, the non-normative <bibref ref="bib-expo"/> is a much better
starting point than this document.</p>

    <div2 id="intro1.1" dg="fpwd">
   <head>Introduction to Version 1.1</head>
     <p>The Working Group has two main goals for this version of W3C XML Schema:</p>
     <ulist>
<item><p>Significant improvements in simplicity of design and clarity of
   exposition <emph>without</emph> loss of backward <emph>or</emph> forward compatibility;

 </p></item>
<item><p>Provision of support for versioning of XML languages defined using
   the XML Schema specification, including the XML transfer syntax for
   schemas itself.</p></item>
</ulist>
<p>These goals are <!--*
* material suppressed here by diff group ep06a *
*--> 
in tension with one another<!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">.  The</phrase> 
Working Group's strategic guidelines for changes
between versions 1.0 and 1.1<phrase dg="ep06a"> can be summarized
as follows</phrase>:</p>
<olist>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">Support</phrase> for versioning (acknowledging
that this <emph>may</emph> be slightly disruptive to the XML transfer
syntax at the margins)</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">B</phrase>ug fixes (unless in specific cases we
decide that the fix is too disruptive for a point release)</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">E</phrase>ditorial changes</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">D</phrase>esign cleanup <!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">will possibly</phrase>
change behavior in edge cases</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">N</phrase>on-disruptive changes
to type hierarchy (to better support current and forthcoming
international standards and W3C recommendations)</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">D</phrase>esign cleanup <!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">will possibly</phrase>
change component structure (changes to functionality restricted to
edge cases)</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">No</phrase> significant changes in
functionality</p></item>
<item><p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">No</phrase> changes to XML transfer syntax except
those required by version control hooks and bug fixes</p></item>
</olist>
<p>The <!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">aim with regard
to</phrase> compatibility is that</p>

<ulist>
<item><p>All schema documents conformant to version 1.0 of this
    specification should also conform to version 1.1, and should have
    the same validation behaviour across 1.0 and 1.1 implementations
    (except possibly in edge cases and in the details of the resulting
    PSVI);</p></item>
<item><p>The vast majority of schema documents conformant to version 1.1 of
    this specification should also conform to version 1.0, leaving
    aside any incompatibilities arising from support for versioning,
    and when they are conformant to version 1.0 (or are made
    conformant by the removal of versioning information), should have
    the same validation behaviour across 1.0 and 1.1 implementations
    (again except possibly in edge cases and in the details of the
    resulting PSVI);
 </p></item>
</ulist>
    </div2>
      <div2 id="intro-purpose">
      <head>Purpose</head>
      <p>The purpose of <emph>XML Schema: Structures</emph> is to define the nature of XML schemas
and their component parts,
provide an inventory of XML markup
        constructs with which to represent schemas, and define the
application of schemas to XML documents. </p>
      <p>The purpose of an <emph>XML Schema: Structures</emph> 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 <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> also provide for the specification of additional
        document information, such as normalization and defaulting of attribute
and element values. Schemas have
facilities for self-documentation. Thus, <emph>XML Schema: Structures</emph> can be used to define, describe and catalogue XML
        vocabularies for classes of XML documents. </p>

     <p>Any application that consumes well-formed XML can use the <emph>XML Schema: Structures</emph>
        formalism to express syntactic, structural and value constraints applicable to
        its document instances. The <emph>XML Schema: Structures</emph> 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 provide
        <emph>all</emph> the facilities that might be needed by <emph>any</emph>
        application. Some applications <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> require constraint capabilities not
        expressible in this language, and so <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> need to perform their own additional
        validations.</p>
    </div2>

<div2 id="intro-relatedWork">
<head>Dependencies on Other Specifications</head>
<p>The definition of <emph>XML Schema: Structures</emph> depends on the following specifications:
<bibref ref="ref-xmlinfo"/>,
<bibref ref="ref-xml-namespaces"/>,
<bibref ref="bib-xpath"/>, and
<bibref ref="ref-xsp2"/>.</p>
<p>See <specref ref="infoset"/> for a tabulation of the information items
and properties specified in <bibref ref="ref-xmlinfo"/> which this
specification requires as a precondition to schema-aware processing.</p>
<p dg="b1838"><bibref ref="ref-xsp2"/> defines some
datatypes which depend on definitions in <bibref ref="ref-xml"/> and 
<bibref ref="ref-xml-namespaces"/>; those definitions, and therefore
the datatypes based on them, vary between version 1.0 (<bibref ref="ref-xml-1.0"/>, <bibref ref="ref-xml-namespaces-1.0"/>) and
version 1.1 (<bibref ref="ref-xml"/>, <bibref ref="ref-xml-namespaces"/>) of those specifications.  In any given
schema-validity-<termref def="key-va">assessment</termref> episode,
the choice of the 1.0 or the 1.1 definition of those datatypes is
implementation-defined.</p>
<p dg="b1838">
Conforming implementations of this specification <rfc2119>may</rfc2119> provide
either the 1.1-based datatypes or the 1.0-based datatypes, or
both.  If both are supported, the choice of which datatypes to
use in a particular assessment episode <rfc2119>should</rfc2119> be under
user control.
</p>
<note dg="b1838"><p>
Implementations <rfc2119>may</rfc2119> provide the heuristic of using the 1.1 datatypes
if the input is labeled as XML 1.1, and the 1.0 datatypes if the input
is labeled 1.0. It should be noted however that the XML version number is
not required to be present in the input to an assessment episode, and in
any case the heuristic <rfc2119>should</rfc2119> be subject to override by users, to
support cases where users wish to accept XML 1.1 input but validate it
using the 1.0 datatypes, or accept XML 1.0 input and validate it using
the 1.1 datatypes.
</p>
</note>
<note dg="b1838">
<p>
Some users will perhaps wish to accept only XML 1.1 input, or only XML
1.0 input. Conforming implementations of this specification which accept
XML input <rfc2119>may</rfc2119> accept XML 1.0, XML 1.1, or both and <rfc2119>may</rfc2119> provide user
control over which versions of XML to accept.
</p>
</note>
</div2>

    <div2 id="intro-terminology">
        <head>Documentation Conventions and Terminology</head>
        <p>The section introduces the highlighting and typography as used in
          this document to present technical material.</p>
     <p dg="fpwd">Aspects of this document which the Working Group are committed to
changing, but where (all) changes are not yet in place, are signalled by the
appearance of an Issue, with a link to the associated version 1.1 Requirement,
for example:</p>
     <issue id="xmpl" role="example" status="open">
      <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public">Issue nnnn (RQ-nnn)</loc></p>
     </issue>
     <p dg="fpwd">All such issues are 
      <!--*
* material suppressed here by diff group wd2.silent *
*--><phrase dg="wd2.silent">tabulated</phrase> 
      in <specref ref="issues"/><phrase dg="wd2.silent">.</phrase></p>
        <p>Special terms are defined at their point of
introduction in the text.  For example <termdef id="key-sampledef" term="term" role="local">a <term>term</term> is
          something used with a special meaning</termdef>.  The definition is
labeled as such and the term it defines is displayed in boldface.  The end of the definition is not specially marked
in the displayed or printed text.  Uses of defined terms are links to
their definitions, set off with middle dots, for instance <termref def="key-sampledef">term</termref>.</p>
          <p>Non-normative examples are set off in boxes and accompanied by a brief
explanation:</p>
        <note role="example">
          <eg xml:space="preserve">&lt;schema targetNamespace="http://www.example.com/XMLSchema/1.0/mySchema"&gt;</eg>
          <p>And an explanation of the example.</p>
      </note>
      <p>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:</p>
        <!--* !!! not sure whether it's sensible or feasible to mark this 
            * as deletion and insertion.  It changed in first WD (vis a vis
            * 1.0 2E), but I'll leave it for now. *-->
        <compdef name="Example" abbrev="ex" showAKO="true">
         <property arity="singleton" name="example property" required="true" type="Component" valueType="component">
          <description>
           <p>An example property</p>
          </description>
         </property>
        </compdef>
     <p>References to properties of schema components are links to
the relevant definition as exemplified above, set off with curly braces, for instance 
<propref comp="ex" prop="example property"/>.</p>
      <p>The correspondence between an element information item which
is part of the XML representation of a schema and one or more schema
components is presented in a tableau which illustrates the element
information item(s) involved. This is followed by a tabulation of the
correspondence between properties of the component and properties of
the information item.  Where context <phrase dg="may">may determine</phrase><!--*
* material suppressed here by diff group may *
*--> which of several different components
<phrase dg="may">may arise</phrase><!--*
* material suppressed here by diff group may *
*-->, several
tabulations, one per context, are given.  The property correspondences
are normative, as are the illustrations of the XML representation
element information items.
</p>
     <p>In the XML representation, bold-face
attribute names (e.g. <term>count</term> below) indicate a required
attribute information item, and the rest are
optional.  Where an attribute information item has an enumerated type
definition, the values are shown separated by vertical bars, as for
<code>size</code> below; if there is a default value, it is shown
following a colon.  Where an attribute information item has a built-in simple
type definition defined in <bibref ref="ref-xsp2"/>, a hyperlink to its
definition therein is given.</p>
     <p>The allowed content of the information item is
shown as a grammar fragment, using the Kleene operators <code>?</code>,
<code>*</code> and <code>+</code>.  Each element name therein is a hyperlink to
its own illustration.</p>
     <note>
      <p>The illustrations are derived automatically from the <specref ref="normative-schemaSchema"/>.  In the case of apparent conflict, the <specref ref="normative-schemaSchema"/> takes precedence, as it, together with the <termref def="gloss-src">Schema Representation Constraints</termref>, provide the normative statement of
the form of XML representations.</p>
     </note>
<reprdef>
 <reprelt eltname="example"/>
 <reprcomp abstract="Example" ref="intro-terminology">
<propmap comp="ex" prop="example property">Description of what the property corresponds to, e.g. the value of the <code>size</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>
</propmap>
</reprcomp>
 </reprdef>
     <p>References to elements in the text are links to
the relevant illustration as exemplified above, set off with angle brackets, for instance <eltref ref="example"/>.</p>
     <p>References to properties of information items as defined in <bibref ref="ref-xmlinfo"/> are notated as links to the relevant section thereof, set off with square brackets, for example <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
     <p>Properties which this specification defines for information items are
introduced as follows:</p>
     <proplist item="example" role="psvi">
      <propdef id="ex-foo" name="new property">The value the property gets.</propdef>
     </proplist>
<p>References to properties of information items defined in this specification
are notated as links to their introduction as exemplified above, set off with square brackets, for example <propref role="psvi" ref="ex-foo"/>.</p>
      <p>The following highlighting is used for non-normative commentary in
        this document:</p>


      <note>
        <p>General comments directed to all readers. </p>
      </note>
     <p><!--*
* material suppressed here by diff group ep06a *
*--><phrase dg="ep06a">W</phrase>ithin normative prose 
in this specification, the words <rfc2119>may</rfc2119><!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="ep06a">, <rfc2119>should</rfc2119></phrase><phrase dg="fpwd">,</phrase> <rfc2119>must</rfc2119><phrase dg="fpwd"> and <rfc2119>must not</rfc2119></phrase> 
are defined as follows:</p>
     <glist>
      <gitem>
       <label><rfc2119>may</rfc2119></label>
       <def>
        <p>Conforming documents and XML Schema-aware processors are permitted to but need not behave as described.</p>
       </def>
<!--*
5. MAY   This word, or the adjective "OPTIONAL", mean that an item is
   truly optional.  One vendor may choose to include the item because a
   particular marketplace requires it or because the vendor feels that
   it enhances the product while another vendor may omit the same item.
   An implementation which does not include a particular option MUST be
   prepared to interoperate with another implementation which does
   include the option, though perhaps with reduced functionality. In the
   same vein an implementation which does include a particular option
   MUST be prepared to interoperate with another implementation which
   does not include the option (except, of course, for the feature the
   option provides.)
*-->
      </gitem>
      <gitem dg="ep06a">
       <label><rfc2119>should</rfc2119></label>
       <def>
        <p>It is recommended that conforming documents and 
XML Schema-aware processors behave as described, but there can
be valid reasons for them not to; it is important that the 
full implications be understood and carefully weighed before
adopting behavior at variance with the recommendation.</p>
       </def>
<!--*
3. SHOULD   This word, or the adjective "RECOMMENDED", mean that there
   may exist valid reasons in particular circumstances to ignore a
   particular item, but the full implications must be understood and
   carefully weighed before choosing a different course.
*-->
<!--*
4. SHOULD NOT   This phrase, or the phrase "NOT RECOMMENDED" mean that
   there may exist valid reasons in particular circumstances when the
   particular behavior is acceptable or even useful, but the full
   implications should be understood and the case carefully weighed
   before implementing any behavior described with this label.
*-->
      </gitem>
      <gitem>
       <label><rfc2119>must</rfc2119></label>
       <def>
        <p>Conforming documents and XML Schema-aware processors are required to behave as described; otherwise they are in error.</p>
       </def>
<!--*
1. MUST   This word, or the terms "REQUIRED" or "SHALL", mean that the
   definition is an absolute requirement of the specification.
*-->
      </gitem>
      <gitem dg="fpwd">
       <label><rfc2119>must not</rfc2119></label>
       <def>
        <p dg="fpwd">Conforming documents and XML Schema-aware processors are forbidden
to behave as described; if they do they are in error.</p>
       </def>
<!--*
2. MUST NOT   This phrase, or the phrase "SHALL NOT", mean that the
   definition is an absolute prohibition of the specification.
*-->
      </gitem>


     </glist>
<p dg="ep06a">These definitions describe in
terms specific to this document the meanings assigned to
these terms by <bibref ref="rfc-2119"/>.
The specific wording follows that of
<bibref ref="ref-xml"/>.
</p>
     <p><!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd">This</phrase> specification
provides a definition of error and of conformant processors'
responsibilities with respect to errors <!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd">in</phrase>
<specref ref="conformance"/><!--*
* material suppressed here by diff group fpwd *
*-->.</p>

    </div2>
  </div1>
  <div1 id="concepts">
    <head>Conceptual Framework</head>
<p>This chapter gives an overview of <emph>XML Schema: Structures</emph> at the level of its
abstract data model.  <specref ref="components"/> provides details on
this model, including a normative representation in XML for the
components of the model. Readers interested primarily in learning to
write schema documents <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> wish to first read <bibref ref="bib-expo"/> for a tutorial introduction, and
only then consult the sub-sections of 
<specref ref="components"/> named <emph>XML Representation of
...</emph> for the details.</p>
   <div2 id="xsover">
    <head>Overview of XML Schema</head>
    <p>An XML Schema
<phrase diff="nsq-del" dg="rq144">consists</phrase><phrase diff="nsq-add" dg="rq144">is
a set</phrase>
of components such as type definitions and element declarations.  
These can be used to assess the validity of well-formed element and 
attribute information items (as defined
in <bibref ref="ref-xmlinfo"/>), and furthermore
<phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> specify augmentations to those items and their descendants.  
This augmentation makes explicit information <phrase dg="may">which may have
been</phrase> implicit in the original document, such as normalized 
and/or default values for attributes and elements and
the types of element and attribute information items.
<phrase diff="nsq-add" dg="rq144">The input information set can
also be augmented with information about the validity of
the item, or about other properties described in this specification.</phrase>
<termdef term="post-schema-validation infoset" id="key-psvi">We refer to the
augmented infoset which results from conformant processing as defined
in this specification as the <term>post-schema-validation
infoset</term>, or PSVI</termdef>.
<phrase diff="nsq-add" dg="rq144">Conforming
processors <rfc2119>may</rfc2119> provide access to different parts of the
PSVI, as described in <specref ref="var_psvi"/>. The
mechanisms by which processors provide access to the PSVI
are neither defined nor constrained by this specification.</phrase></p>

    <!--*
* material suppressed here by diff group opt.144 *
*-->

	<issue id="RQ-142i" role="1.1" status="open">
<!--*
	  <p><loc href="&reqs;#PSVIProp" target="reqs">RQ-142 (PSVIProp)</loc>,
             <loc href="&reqs;#WhichPSVIPropertiesReqd" target="reqs">RQ-144 
             (WhichPSVIPropertiesReqd)</loc></p>
*-->
<p>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2846" target="reqs">Issue 2846 (RQ-142 PSVI properties)</loc>,
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2822" target="reqs">Issue 2822 (RQ-144 required properties)</loc></p>
  <p>Version 1.0 included several properties in the PSVI whose absence carried
information (e.g. <propref role="psvi" ref="e-type_definition"/>), while at the
same time not being completely clear about which PSVI properties, if any, were
required.  The Working Group intends to eliminate the former and clarify the latter.</p>
  <resolution>
   <p>For 142, which mandates that insofar as possible absence of a property
should not in general signify, when it does explicit 'if-and-only-if' language
is required, the effect is distributed throughout the PSVI sub-sub-sections in
section 3.</p>
   <p>The Working Group appears to be close to consensus (although no final
decision has been made) on views which can be summarized thus:
<olist>
 <item>
<p>We should eliminate any dependency on the absence of specific
    properties (i.e. important situations should be describable
    and distinguishable in terms of properties and their values,
    without appeal to the absence of particular properties), or if
    this proves unfeasible in particular cases we should say 
    explicitly that a property is present "if and only if" certain
    conditions apply.  Any remaining "if" (if any) would be a
    true conditional, not an equivalence.</p>
 </item>
 <item>
<p>Any specification of a class of processors (including ours) can
    require specific additional information not in the PSVI, though
    should note that interoperability is better if applications depend
    only on the properties present in the PSVI as we define it.</p>
 </item>
 <item>
<p>In our own specification of processor classes, we should be
    explicit that processors may provide additional information.
    (Or alternatively be explicit that they must not -- but the
    chair believes the WG consensus was to allow it.)</p>
 </item>
</olist> 
</p>
   <p>For 144, a few general remarks here about flexible-but-firm conformance
are wanted here; most of the new work should end up in section 4 and/or 5.</p>
  </resolution>
	  </issue>
    <p>Schema-validity assessment has two aspects:
<olist><item id="c-lsv"><p>Determining local schema-validity, that is
whether an element or attribute information item satisfies the
constraints embodied in the relevant
components of an XML Schema;</p></item>
<item><p>Synthesizing an overall validation outcome for the item,
combining local schema-validity with the results of schema-validity
assessments of its descendants, if any, and
adding appropriate augmentations to the infoset to record this outcome.</p></item></olist></p>
    <p>Throughout this specification, <termdef id="key-vn" term="valid">the
word <term>valid</term> and its derivatives are used to refer to
<clauseref ref="c-lsv"/> above, the determination of local
schema-validity</termdef>.</p>
<p>Throughout this specification, <termdef id="key-va" term="assessment"> 
the word <term>assessment</term> is used to refer
to the overall process of
local validation, schema-validity assessment and infoset augmentation</termdef>.</p>
   </div2>
   <div2 id="concepts-data-model">
    <head>XML Schema Abstract Data Model</head>
    <p>This specification builds on <bibref ref="ref-xml"/> and
<bibref ref="ref-xml-namespaces"/>.  The concepts and definitions used
herein regarding XML are framed at the abstract level of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xml-infoset/#infoitem">information
items</xtermref> as defined in <bibref ref="ref-xmlinfo"/>.  By
definition, this use of the infoset provides <emph>a priori</emph> guarantees of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#sec-well-formed">well-formedness</xtermref>
(as defined in <bibref ref="ref-xml"/>) and <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml-names/#Conformance">namespace
conformance</xtermref> (as defined in <bibref ref="ref-xml-namespaces"/>) for
all candidates for <termref def="key-va">assessment</termref> and for all <termref def="key-schemaDoc">schema documents</termref>.</p>
    <p>Just as <bibref ref="ref-xml"/> and
<bibref ref="ref-xml-namespaces"/> can be described in terms of
information items, XML Schemas can be described in terms of an
abstract data model.  In defining XML Schemas in terms of an abstract
data model, this specification rigorously specifies the information which
<rfc2119>must</rfc2119> be available to a conforming XML Schema processor.  The abstract
model for schemas is conceptual only, and does not mandate any
particular implementation or representation of this information.  To
facilitate interoperation and sharing of schema information, a
normative XML interchange format for schemas is provided.</p>
<!--* 
    <issue id="CC" role="1.1">
     <p><loc href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2003Jun/0090.html">2003-06-13 minutes (Component cleanup)</loc> (W3C-member-only link)</p>
     <p>Some aspects of the abstract components used to organise this
specification have proved clumsy and/or susceptible to improvement.  The way in
which components and their properties are referenced in constraints and
validation rules is sometimes irritatingly verbose.  Wherever possible these
problems should be addressed.</p>
     <resolution>
      <p>Changes to the component structure which do not produce
    substantially different functionality (i.e. change behavior only in
    edge cases) [are consistent with our overall goals].  Such changes might be made in order to make the
    component structure easier to understand, reason about, document,
    or talk about.  This class is not, however, restricted to changes
    which do not affect the information-theoretic information content
    of the component structure.  That is, it may contain changes
    that go beyond renaming or other changes which do not affect
    information content.</p>
      <p>These changes will be disruptive to (some) implementors, but (MSM
    suggested) not to all users, and probably not to any (or: many)
    users.</p>
      <p>The editor intends under this heading to make the presentation of
components much more systematic, because auto-generated from an XML-notated
explicit definition of components and properties, for example:</p>
      <p><![CDATA[<component name="Attribute Declaration" base="Component"
           abstract="false" abbrev="ad">
  <property name="type definition" valueType="component" arity="singleton"
            type="Simple Type Definition" required="true"/>
  . . .]]></p>
      <p>The editor also intends to introduce a number of 'micro-components',
replacing all values with complicated value types, e.g. replacing "A pair consisting of a value and one of <pt>default</pt>, <pt>fixed</pt>." with a
Value Contstraint micro-component.</p>
     </resolution>
    </issue> *-->
<p><termdef id="c" term="schema component"><term>Schema component</term> 
is the generic term for the building blocks that comprise the abstract data model of the schema.
</termdef>
<termdef id="key-schema" term="XML Schema">
An <term>XML Schema</term> is a
set of <termref def="c">schema components</termref></termdef>.  There are 13 kinds of
component in all, falling into three groups.  The primary components,
which <rfc2119>may</rfc2119>
(type definitions) or <rfc2119>must</rfc2119> (element and attribute declarations) have names,
are as follows:</p>
<ulist>
<item><p>Simple type definitions
</p></item>
<item><p>Complex type definitions</p></item>
<item><p>Attribute declarations</p></item>
 <item><p>Element declarations</p></item>
</ulist><p>The secondary components, which <rfc2119>must</rfc2119> have names, are as follows:</p>
<ulist>
<item><p>Attribute group definitions</p></item>
<item><p>Identity-constraint definitions</p></item>
<item><p>Model group definitions</p></item>
<item><p>Notation declarations</p></item>
</ulist>
<p>Finally, the <quote>helper</quote> components provide small parts of
other components; they are not independent of their context:</p>
<ulist>
<item><p>Annotations</p></item>
<item><p>Model groups</p></item>
<item><p>Particles</p></item>
<item><p>Wildcards</p></item>
 <item><p>Attribute Uses</p></item>
</ulist>
    <p dg="ep01-revert">The name <compdef name="Component" abbrev="xc" role="termdef" showAKO="true"> 
covers all the different kinds of component defined in this specification.</compdef></p>
     <p>During <termref def="key-vn">validation</termref>, <termdef id="key-declaration" term="declaration"><term>declaration</term> components are associated by
(qualified) name to information items being <termref def="key-vn">validated</termref></termdef>.</p>
<p>On the other hand, <termdef id="key-definition" term="definition"><term>definition</term> components define
internal schema components that can be used in other schema components</termdef>.
</p>
<p>
<termdef id="key-compName" term="component name">Declarations and
definitions <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> <phrase dg="modals">and in some cases <rfc2119>must</rfc2119></phrase>
have and be identified by <term>name</term>s,
which are NCNames as defined by <bibref ref="ref-xml-namespaces"/></termdef>.</p>

    <p>  <termdef id="key-targetNS" term="target namespace">Several kinds
of component have a <term>target namespace</term>, which is either
<termref def="key-null">absent</termref> or a namespace name, also as
defined by <bibref ref="ref-xml-namespaces"/></termdef>.  The <termref def="key-targetNS">target
namespace</termref> serves to identify the namespace within which the
association between the component and its name exists.  In the case of
declarations, this in turn determines the namespace name of, for example, the element
information items it <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> <termref def="key-vn">validate</termref>.</p>
    <note>
     <p>At the abstract level, there is
no requirement that the components of a schema share a
<termref def="key-targetNS">target namespace</termref>.  Any schema for use in
<termref def="key-va">assessment</termref> of documents containing names from more than one namespace
will of necessity include components with different <termref def="key-targetNS">target namespaces</termref>.  This contrasts with
the situation at the level of the XML representation of components, in which each schema document contributes
definitions and declarations to a single target namespace.</p>
    </note>
    <p><termref def="key-vn">Validation</termref>, defined in detail
in <specref ref="components"/>, is a relation between information
items and schema components.  For example, an attribute information
item <phrase dg="may">may <termref def="key-vn">validate</termref></phrase><!--*
* material suppressed here by diff group may *
*--> with
respect to an attribute declaration, a list of element information
items <phrase dg="may">may <termref def="key-vn">validate</termref></phrase> with respect to a content
model, and so on.  The following sections briefly introduce the kinds
of components in the schema abstract data model, other major features
of the abstract model, and how they contribute to <termref def="key-vn">validation</termref>.</p>
     <div3 id="Type_Definition_Summary">
<head>Type Definition Components</head>
<p>The abstract model provides two kinds of type definition component: simple
and complex.</p>
<p><termdef id="td" term="type definition">This specification uses
the phrase <term>type definition</term> in cases where no distinction
need be made between simple and complex types</termdef>.</p>
<p>Type definitions form a hierarchy with a single root.  The subsections below first describe characteristics of that
hierarchy, then provide an introduction to simple and complex type definitions themselves.</p>
<div4 id="Type_Derivation">
<head>Type Definition Hierarchy</head>
<!--*    <issue id="RQ-120i" role="1.1">
	      <p><loc href="&reqs;#term-&derived_AV;" target="reqs">RQ-120 (term-derived)</loc></p>
      <p>There is an inconsistency in the use of the word '&derived;' and related
words between parts 1 and 2 of version 1.0:  Sometimes it refers only to types
defined by
restriction and/or extension, but other times includes lists and unions as
well.  This terminological problem, and the underlying conceptual issue, should
be addressed.</p>
      <resolution>
       <p><loc href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004May/0007.html">http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004May/0007.html</loc>, <loc href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004May/0009.html">http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004May/0009.html</loc> (W3C-member-only links)</p>
       <p>In anticipation of a change in this area, the editor has replaced all
occurrences of '&derived;' and related words with one of two entity references:
&amp;&derived;; for restriction and extension only, and &amp;constructedDiff; for
restriction, extension, list and union.  The former is defined to be
'derived' for now, the latter a diff-marked replacement of 'derived'
by 'constructed'.</p>
      </resolution>
	      </issue> *-->
<p>
<termdef id="key-typeDefinitionHierarchy" term="Type Definition Hierarchy">Except for a distinguished <termref def="key-urType">ur-type definition</termref>, every <termref def="td">type definition</termref> is, by construction, either a
<termref def="key-typeRestriction">restriction</termref> or an <termref def="key-typeExtension">extension</termref> of some other type definition.  The graph of these relationships forms a tree known as the <term>Type Definition Hierarchy</term></termdef>.
</p>
<p dg="eg-1852-silent"><termdef id="key-baseTypeDefinition" term="base type definition"><!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852">The</phrase> type definition used as the
basis for an <termref def="key-typeExtension">extension</termref> or
<termref def="key-typeRestriction">restriction</termref> is known as
the <term>base type definition</term> of that definition</termdef>.
</p>
<p><termdef id="key-typeRestriction" term="restriction"><phrase diff="nsq-del" dg="rq17"><!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852">A type defined with the
same constraints as its <termref def="key-baseTypeDefinition"/>, or with more,</phrase> 
is said to be a <term>restriction</term></phrase>
   <phrase diff="nsq-add" dg="rq17">A type defined by appropriate use of facets or
declarations so as to validate a subset of
what another type definition validates, with consistent PSVI outcomes, is a
<term>restriction</term> of the other type</phrase></termdef>.
<phrase diff="nsq-del" dg="rq17">The <!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852">added constraints</phrase> might include narrowed ranges or reduced
alternatives.
Members of a type, A, whose definition is a <termref def="key-typeRestriction">restriction</termref> of the definition of
another type, B, are always members of type B as well.</phrase></p>
 <!--* <ednote>
  <edtext>What are we doing with these issue pointers? [Tentative answer:
    keep for now, delete when phase-2 wording is accepted. Actually, 
    for now, we should probably say 'there is draft wording here ...'
    But I have not yet done that.]</edtext>
 </ednote> *-->
	    <issue id="RQ-17i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#restrictn-rules" target="reqs">RQ-17 (restrictn-rules)</loc></p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2820" target="reqs">Issue 2820 (RQ-17 simplify restriction rules)</loc></p>
      <p>Version 1.0 made clear that the <emph>intention</emph>
for derivation by restriction was that restrictions validated a subset of what their
base validated.  However, the constructive rules for what constituted valid content model
restrictions for complex type definition not only failed to enforce this
completely correctly, but also ruled out various cases which evidently should
have been allowed.  The Working Group has decided to shift to a much higher
level statement of what constitutes a valid restriction, appealing directly to
the subset requirement, in order to address these problems.</p>
      <resolution>
       <p>A major change in definition/presentation, with only modest changes
in consequences for schemas and validity, will be made, by
<emph>defining</emph> restriction for complex type definitions in terms of the desired result, that is that
all members of a restricted type are members of its base type.  In the
normative part of the spec. this will be done by appeal to local validity.</p>
       <p><quote>Clarifying: R restricts B: any EII that is locally valid [per R]
<rfc2119>must</rfc2119> also be locally valid [per B], with side conditions on properties on terms
you appeal to [to] get same child allowed by two content models.</quote>
[-<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Group/2004/05/xml-schema-ftf-minutes.html">F2F
2004-03-12, section Subsumption</loc> (W3C-member-only link)]</p>
       <p>A non-normative appendix will provide references to published
algorithms for enforcing the constraint.</p>
      </resolution>
	      </issue>
<p><termdef id="key-typeExtension" term="extension">A complex type definition
which allows element or attribute content in addition to that allowed by
another specified type
definition is said to be an <term>extension</term></termdef>.</p>
<p><termdef id="key-urType" term="ur-type definition">A distinguished complex
type definition, the <term>ur-type 
definition</term>, whose
name is <phrase diff="nsq-del" dg="rq17"><pt>anyType</pt></phrase><phrase diff="nsq-add" dg="rq17"><pt>rootType</pt></phrase> in the XML Schema namespace, is present in each <termref def="key-schema">XML Schema</termref>, serving as the root of the type
definition hierarchy for that schema</termdef>.  
</p>
 <p diff="nsq-add" dg="rq17"><termdef id="key-anyType" term="definition of anyType">A further 
special complex type definition, whose name is <pt>anyType</pt> in the XML Schema 
namespace, is also present in each <termref def="key-schema">XML Schema</termref>.
The <term>definition of anyType</term> serves as default type
definition for element declarations whose XML representation does not specify 
one</termdef>.  <!--* why is the termdef closed inside the full stop?
                      HST: Because I always do it that way :-) *-->
</p>
<!--*
* material suppressed here by diff group eg-1852 *
*-->
</div4><div4 id="Simple_Type_Definition">

     <head>Simple Type Definition</head>
     <p>A simple type definition is a set of constraints on strings and information about the values they encode, applicable to the <termref def="key-nv">normalized value</termref> of an attribute
information 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.
</p>
     <p>Each simple type definition, whether built-in (that is, defined in <bibref ref="ref-xsp2"/>) or
user-defined, is a <termref def="key-typeRestriction">restriction</termref> of <!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852">its</phrase> <termref def="key-baseTypeDefinition">base type
definition</termref>.  <!--*
* material suppressed here by diff group eg-1852 *
*--><termdef id="key-simpleUrType" term="simple ur-type definition"><!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852">The</phrase> <term>simple
ur-type definition</term>, a special <termref def="key-typeRestriction">restriction</termref> of the
<termref def="key-urType">ur-type
definition</termref>, whose name is <local>anySimpleType</local> in the XML
Schema namespace</termdef><phrase dg="eg-1852"> is the root of the
<termref def="key-typeDefinitionHierarchy"/> for the simple type
definitions</phrase>.   The <termref def="key-simpleUrType">simple ur-type
definition</termref> 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.<phrase dg="eg-1852">  The
built-in list datatypes all have the <termref def="key-simpleUrType">simple ur-type
definition</termref> as their <termref def="key-baseTypeDefinition">base type
definition</termref>.</phrase></p>
        <p dg="eg-1852"><termdef id="key-anyAtomicType" term="anyAtomicType">There is a
further special datatype called <term>anyAtomicType</term>, a <termref def="key-typeRestriction">restriction</termref> of the <termref def="key-simpleUrType">simple ur-type
definition</termref>, which is the <termref def="key-baseTypeDefinition">base type
definition</termref> of all the primitive built-in datatypes.</termdef>  It too
is considered to have an unconstrained lexical space.  Its value space consists of the union of the value spaces of all the built-in
primitive datatypes.</p>
        <p>The mapping from lexical space to value space is
unspecified for items whose type definition is the
<termref def="key-simpleUrType">simple ur-type definition</termref><phrase dg="eg-1852">or <termref def="key-anyAtomicType"/></phrase>. 
Accordingly this specification does not constrain processors' behaviour in
areas where this mapping is implicated, for example checking such items against
enumerations, constructing default attributes or elements whose declared type
definition is the
<termref def="key-simpleUrType">simple ur-type definition</termref>, checking
identity constraints involving such items.</p>
        <note>
         <p>The Working Group expects to return to this area in a future
version of this specification.</p>
        </note>
        <p><!--*
* material suppressed here by diff group eg-1852 *
*--><phrase dg="eg-1852"><bibref ref="ref-xsp2"/> provides
mechanisms for defining new simple type definitions by <termref def="key-typeRestriction">restricting</termref> one of the built-in primitive or ordinary datatypes.  It also provides mechanisms for constructing new simple type definitions</phrase> whose members are lists of items
themselves constrained by some other simple type definition, or whose
membership is the union of the memberships of some other simple type
definitions.  Such list and union simple type definitions are also <termref def="key-typeRestriction">restrictions</termref> of the <termref def="key-simpleUrType">simple ur-type
definition</termref>.</p>
     <p>For detailed information on simple type definitions, see <specref ref="Simple_Type_Definitions"/> and <bibref ref="ref-xsp2"/>.  The latter also defines an extensive inventory of
pre-defined simple types.</p>
</div4>
<div4 id="Complex_Type_Definition">
<head>Complex Type Definition</head>
<p>A complex type definition is a set of attribute declarations and a
content type, applicable to the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of an
element information item respectively.  The content type <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*-->
require the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> to contain neither element nor character
information items (that is, to be empty), <phrase dg="modals">or</phrase> to be a string which belongs to a particular
simple type<phrase dg="modals">,</phrase> or to contain a
sequence of element information items which conforms to a particular
model group, with or without character information items as well.</p>
     <p>Each complex type definition other than the
<termref def="key-urType">ur-type definition</termref> is either
      <ulist>
       <item>
        <p>a restriction of a complex <termref def="key-baseTypeDefinition">base
type definition</termref></p>
       </item>
      </ulist>
      or
      <ulist><item>
<p>an <termref def="key-typeExtension">extension</termref> of a simple or complex <termref def="key-baseTypeDefinition">base
type definition</termref>.</p>
</item>
</ulist>
      
      
</p>
<p> A
complex type which extends another does so by having additional content model
particles at the end of the other definition's content model,
or by having additional attribute declarations, or both.
  <note>
   <p>This specification allows only appending, and not other kinds of
extensions. This decision
simplifies application processing required to cast instances from <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> to
base type.  Future versions may allow more kinds of extension, requiring more
complex transformations to effect casting.</p>
  </note></p>
     <p>
For detailed information on complex type definitions, see <specref ref="Complex_Type_Definitions"/>.</p>
</div4>
</div3>

     <div3 id="Declarations_Summary">
<head>Declaration Components</head>
<p>There are three kinds of declaration component: element, attribute, and
notation.  Each is described in a section below. Also included is a discussion
of element substitution groups, which is a feature provided in conjunction with
element declarations.</p>
<div4 id="Element_Declaration">
<head>Element Declaration</head>
<p>An element declaration is an association of a name with a type definition, either simple or
complex, an (optional) default value and a (possibly empty) set of identity-constraint
definitions.  The association is either global or scoped to a containing complex type definition.  A
top-level element declaration with name 'A' is broadly comparable to a pair of
DTD declarations as follows, where the associated type definition
fills in the ellipses:</p>
<eg xml:space="preserve">&lt;!ELEMENT A . . .&gt;
&lt;!ATTLIST A . . .&gt;
</eg>
<p>Element declarations contribute to
<termref def="key-vn">validation</termref> as part of model group <termref def="key-vn">validation</termref>, when their defaults and type components are checked against an element
information item with a matching name and namespace, and by triggering
identity-constraint definition <termref def="key-vn">validation</termref>.</p>
     <p>
For detailed information on element declarations, see <specref ref="cElement_Declarations"/>.</p>
</div4>
<div4 id="Element_Equivalence_Class">
<head>Element Substitution Group</head>
<p>In XML<!--*
* material suppressed here by diff group fpwd *
*-->, the name and content of an element <rfc2119>must</rfc2119> correspond exactly to the element type referenced in the corresponding content model.</p>
<p><termdef id="key-equivalenceClass" term="element substitution group">Through
the new mechanism of <term>element substitution groups</term>, XML Schemas provides a more powerful model supporting substitution of one named element for another</termdef>.
Any top-level element declaration can serve as the defining member, or
head, for an element substitution group.  Other top-level element declarations,
regardless of target namespace, can be designated as members of the
substitution group headed by this element.  In a suitably enabled content
model, a reference to the head <termref def="key-vn">validates</termref> not just the head itself, but elements
corresponding to any other member of the substitution group as well.
</p>
<p>All such members <rfc2119>must</rfc2119> have type definitions which are either the same as the
head's type definition or
restrictions or extensions of it.
Therefore, although the names of elements can vary widely as new
namespaces and members of the substitution group are defined, the
content of member elements is strictly limited according to the type
definition of the substitution group head.</p>
<p>Note that element substitution groups are not represented as separate components.  They are
specified in the property values for element declarations (see <specref ref="cElement_Declarations"/>).</p>
</div4>
<div4 id="Attribute_Declaration">
<head>Attribute Declaration</head>
<p>An attribute declaration is an association between a name and a simple type definition, together
with occurrence information and (optionally) a default value. The
association is either global, or local to its containing complex type definition.  Attribute declarations contribute to
<termref def="key-vn">validation</termref> as part of complex type definition <termref def="key-vn">validation</termref>, when their
occurrence, defaults and type components are checked against an attribute
information item with a matching name and namespace.</p>
     <p>
For detailed information on attribute declarations, see <specref ref="cAttribute_Declarations"/>.</p>
</div4>
<div4 id="Notation_Declaration">
<head>Notation Declaration</head>
<p>A notation declaration is an association between a name and an identifier for a
notation.  For an attribute information item to be <termref def="key-vn">valid</termref> with respect to a
<code>NOTATION</code> simple type definition, its value <rfc2119>must</rfc2119> have been declared
with a notation declaration.</p>
     <p>
For detailed information on notation declarations, see <specref ref="cNotation_Declarations"/>.</p>
</div4>
</div3>

     <div3 id="Model_Group_Summary">
<head>Model Group Components</head>
<p>The model group, particle, and wildcard components contribute to
the portion of a complex type definition that controls an element
information item's content.</p>
<div4 id="Model_Group">
<head>Model Group</head>
<p>A model group is a constraint in the form of a grammar fragment that applies to
lists of element information items.  It consists of a list of particles, i.e.
element declarations, wildcards and model groups.  There are three varieties of
model group:</p>
<ulist>
<item><p>Sequence (the element information items
match the particles in sequential order);</p></item>
<item><p>Conjunction (the element information items match the
particles, in any order);</p></item>
<item><p>Disjunction (the element information items match
one of the particles).</p></item>
</ulist>
     <p>
For detailed information on model groups, see <specref ref="Model_Groups"/>.</p>
</div4>
<div4 id="Particle">
<head>Particle</head>
<p>A particle is a term in the grammar for element content, consisting of either an element
declaration, a wildcard or a model group, together with
occurrence constraints.  Particles contribute to
<termref def="key-vn">validation</termref> as part of complex type definition <termref def="key-vn">validation</termref>, when they allow anywhere
from zero to many element information items or sequences thereof, depending on
their contents and occurrence
constraints.</p>
 <p dg="ep01">The name <compdef name="Term" abbrev="t" role="termdef" showAKO="true"> is used to refer to any of the three kinds of components which can appear in particles.</compdef>  All <termref def="t">Terms</termref> are themselves <termref def="ac">Annotated Components</termref>.</p>
      <p><termdef id="key-contentModel" term="content model">A particle can
be used in a complex type definition to constrain the <termref def="key-vn">validation</termref>
of the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of an element information item; such a particle is called
a <term>content model</term></termdef>.
<note>
<p><emph>XML Schema: Structures</emph> <termref def="key-contentModel">content models</termref> are similar to but more expressive than
<bibref ref="ref-xml"/> content models; unlike <bibref ref="ref-xml"/>, <emph>XML Schema: Structures</emph> applies <termref def="key-contentModel">content models</termref> to the <termref def="key-vn">validation</termref> of both mixed and element-only content. </p>
</note></p>
     <p>
For detailed information on particles, see <specref ref="cParticles"/>.</p>
</div4>
      <div4 id="Attribute_Use">
       <head>Attribute Use</head>
       <p>An attribute use plays a role similar to that of a particle, but for
attribute declarations:  an attribute declaration within a complex type definition
is embedded within an attribute use, which specifies whether the declaration
requires or merely allows its attribute, and whether it has a default or fixed value.</p>
      </div4>
      <div4 id="Wildcard">
<head>Wildcard</head>
<p>A wildcard is a special kind of particle which matches element and attribute information items dependent on their namespace name, independently
of their local names.</p>
     <p>
For detailed information on wildcards, see <specref ref="Wildcards"/>.</p>
</div4>
</div3>

     <div3 id="Identity-constraint_Definition">
<head>Identity-constraint Definition Components</head>
<p>An identity-constraint definition is an association between a name and one of
several varieties of
identity-constraint related to uniqueness and reference.  All the
varieties use <bibref ref="bib-xpath"/> expressions to pick out sets of
information items relative to particular target element
information items which are unique, or a key, or a <termref def="key-vn">valid</termref> reference, within
a specified scope. An element information item is only <termref def="key-vn">valid</termref> with
respect to an element declaration
with identity-constraint definitions if those definitions are all satisfied for all the descendants
of that element information item which they pick out.</p>
     <p>
For detailed information on identity-constraint definitions, see <specref ref="cIdentity-constraint_Definitions"/>.</p>
    </div3>
<div3 id="Group_Definitions">
<head>Group Definition Components</head>
<p>There are two kinds of convenience definitions provided to enable
the re-use of pieces of complex type definitions: model group definitions
and attribute group definitions.</p>
<div4 id="Model_Group_Definition">
<head>Model Group Definition</head>
<p>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 type
definitions.</p>
     <p>
For detailed information on model group definitions, see <specref ref="cModel_Group_Definitions"/>.</p>
</div4>
<div4 id="Attribute_Group_Definition">
<head>Attribute Group Definition</head>
<p>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 type
definitions.</p>
     <p>
For detailed information on attribute group definitions, see <specref ref="cAttribute_Group_Definitions"/>.</p>
</div4>
</div3>
    <div3 id="Annotation">
     <head>Annotation Components</head>
     <p>An annotation is information for human and/or mechanical
consumers. The interpretation of such information is
not defined in this specification.</p>
     <p>
For detailed information on annotations, see <specref ref="cAnnotations"/>.</p>

     </div3>
   </div2>
    <div2 id="concepts-schemaConstraints">
      <head>Constraints and Validation Rules</head>
      <p>The <bibref ref="ref-xml"/> specification describes two kinds of
        constraints on XML documents: <emph>well-formedness</emph> and
        <emph>validity</emph> constraints. Informally, the well-formedness constraints
        are those imposed by the definition of XML itself (such as the rules for the
        use of the &lt; and &gt; characters and the rules for proper nesting of
        elements), while validity constraints are the further constraints on document
        structure provided by a particular DTD. </p>
      <p>The preceding section focused on <termref def="key-vn">validation</termref>, that is
the constraints on information items which schema components supply.  In fact
however this specification provides four different kinds of normative statements about schema
        components, their representations in XML and their contribution to the
<termref def="key-vn">validation</termref> of information items:</p>
      <glist>
        <gitem>
          <label>Schema Component Constraint</label>
          <def>
            <p><termdef id="gloss-cos" term="Schema Component Constraint">Constraints on the schema components themselves, i.e.
conditions components <rfc2119>must</rfc2119> satisfy to be components at all.  Located in the
sixth sub-section of the per-component sections of <specref ref="components"/>
and tabulated in <specref ref="outcome-cos"/></termdef>.</p>
          </def>
        </gitem>
       <gitem>
        <label>Schema Representation Constraint</label>
        <def>
         <p><termdef id="gloss-src" term="Schema Representation Constraint">Constraints on the
representation of schema components in XML beyond those which are expressed
in <specref ref="normative-schemaSchema"/>.  Located in the
third sub-section of the per-component sections of <specref ref="components"/>
and tabulated in <specref ref="outcome-src"/></termdef>.</p>
        </def>
       </gitem>
        <gitem>
          <label>Validation Rules</label>
          <def>
            <p><termdef id="gloss-cvc" term="Validation Rules">Contributions to <termref def="key-vn">validation</termref> associated
with schema components.  Located in the
fourth sub-section of the per-component sections of <specref ref="components"/>
and tabulated in <specref ref="validation_failures"/></termdef>.</p>
          </def>
        </gitem>
       <gitem>
          <label>Schema Information Set
            Contribution</label>
          <def>
            <p><termdef id="gloss-sic" term="Schema Information Set Contribution">Augmentations to <termref def="key-psvi">post-schema-validation infoset</termref>s
expressed by schema components, which follow
              as a consequence of <termref def="key-vn">validation</termref> and/or <termref def="key-va">assessment</termref>.
Located in the
fifth sub-section of the per-component sections of <specref ref="components"/>
and tabulated in <specref ref="PSVI_contributions"/></termdef>.</p>
          </def>
        </gitem>
      </glist>
        <p>The last of these, schema information set
          contributions, are not as new as they might at first seem.  XML<!--*
* material suppressed here by diff group fpwd *
*-->
          validation augments the XML<!--*
* material suppressed here by diff group fpwd *
*--> 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 of <code>NMTOKENS</code> on attribute white space, and the semantics of
          <code>ID</code> and <code>IDREF</code>.) By including schema
information set contributions, this specification makes explicit some features
that XML<!--*
* material suppressed here by diff group fpwd *
*--> <!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd">leaves</phrase> implicit.</p>

    </div2>

<div2 id="concepts-conformance">
<head>Conformance</head>

<note diff="nsq-add" dg="rq144">
<p>The Working Group expects to revise this discussion of conformance in
future.  A sketch of relevant work can be found in <specref ref="impl-def-list"/>
and <specref ref="var_terminology"/>.</p>
</note>

<p>This specification describes three levels of conformance for schema aware processors.  
The first is
required of all processors.  Support for the other two will depend on the application environments
for which the processor is intended.</p>
<p><termdef id="key-minimallyConforming" term="minimally conforming"><term>Minimally 
conforming</term> processors <rfc2119>must</rfc2119> completely and
correctly implement the <termref def="gloss-cos">Schema Component
Constraints</termref>, <termref def="gloss-cvc">Validation Rules</termref>,
and <termref def="gloss-sic">Schema Information
Set Contributions</termref> contained in this specification</termdef>.</p>

<p><termdef id="key-interchange" term="schema-document aware"><termref def="key-minimallyConforming">Minimally conforming</termref> 
processors which accept schemas represented in the form of XML documents as 
described in <specref ref="layer2"/> are additionally said to 
<phrase diff="nsq-del" dg="rq144">provide <term>conformance to the XML 
Representation of Schemas</term></phrase><phrase diff="nsq-add" dg="rq144">be
<term>schema-document aware</term></phrase>.</termdef>
Such processors <rfc2119>must</rfc2119>, when processing schema documents, completely and
correctly implement all <termref def="gloss-src">Schema Representation
Constraints</termref> in this specification, and <rfc2119>must</rfc2119> adhere exactly to the
specifications in <specref ref="components"/> for mapping the contents of
such documents to <termref def="c">schema
components</termref> for use in 
<termref def="key-vn">validation</termref> and <termref def="key-va">assessment</termref>.</p>
<p diff="nsq-add" dg="rq144"><termdef id="key-XML-unaware" term="non-schema-document-aware">A 
<termref def="key-minimallyConforming">minimally conforming</termref>
processor which is not <termref def="key-interchange"/> is
said to be a <term>non-schema-document-aware</term> processor.</termdef></p>
<note>
<p>By separating the conformance requirements 
relating to the concrete syntax of XML schema
documents, this specification admits processors
which use schemas stored in optimized binary
representations, dynamically created schemas represented as 
programming language data structures, or implementations in which 
particular schemas are compiled into executable code
such as C or Java.  Such processors can be said to be 
<termref def="key-minimallyConforming">minimally conforming</termref> 
but not necessarily <phrase diff="nsq-del" dg="rq144">in 
<termref def="key-interchange">conformance to the 
XML Representation of Schemas</termref></phrase><phrase diff="nsq-add" dg="rq144"><termref def="key-interchange"/></phrase>.</p>
</note>
<p><termdef id="key-fullyConforming" term="Web-aware"><phrase diff="nsq-del" dg="rq144"><term>Fully conforming</term></phrase><phrase diff="nsq-add" dg="rq144"><term>Web-aware</term></phrase>
processors are network-enabled processors which are not only both 
<termref def="key-minimallyConforming">minimally conforming</termref> and 
<termref def="key-interchange"><phrase diff="nsq-del" dg="rq144">in conformance 
to the XML Representation of Schemas</phrase><phrase diff="nsq-add" dg="rq144">schema-document aware</phrase></termref>, but which additionally 
<rfc2119>must</rfc2119> be capable of accessing schema documents from the World Wide Web 
<phrase diff="nsq-del" dg="rq144">according to</phrase><phrase diff="nsq-add" dg="rq144">as described in</phrase>
<specref ref="web-representation"/> and <specref ref="schema-loc"/>.
</termdef>.
</p>
<note><p>Although this specification provides just these three standard levels of conformance, it is
anticipated that other conventions can be established in the future.  For example, the World Wide
Web Consortium is considering conventions for packaging on the Web a variety of
resources relating to individual documents and namespaces.  Should such
developments lead to new conventions for representing schemas, or for accessing them on the Web,
new levels of conformance can be established and named at that time.  There is no need to modify
or republish this specification to define such additional levels of conformance.</p></note>
 <p>See <specref ref="composition"/> for a more detailed explanation of the
mechanisms supporting these levels of conformance.</p>
</div2>
    <div2 id="concepts-nameSymbolSpaces">
      <head>Names and Symbol Spaces</head>
      <p>As discussed in <specref ref="concepts-data-model"/>, most schema
        components (<phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*-->) have <termref def="key-compName">names</termref>.
If all such names were assigned from the same <quote>pool</quote>, then
        it would be impossible to have, for example, a simple type definition and an element
declaration both with the name
<quote>title</quote> in a given <termref def="key-targetNS">target namespace</termref>.</p>
      <p>
        Therefore <termdef id="key-symbolSpace" term="symbol space">this specification introduces the term
<term>symbol space</term> to denote a
collection of names, each of which is unique with respect to the others</termdef>.  A symbol space is similar to the non-normative concept of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml-names/#ns-breakdown">namespace partition</xtermref> introduced in <bibref ref="ref-xml-namespaces"/>.
There is a single distinct symbol space within a given <termref def="key-targetNS">target
namespace</termref> for each kind of definition and declaration component
identified in <specref ref="concepts-data-model"/>, except that within a target namespace, simple
type definitions and complex type definitions share a symbol space.
Within a given symbol space, names are unique, but the same name <rfc2119>may</rfc2119> 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.
</p>
      <p>Locally scoped attribute and element
declarations 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 other
symbol spaces.  So, for example, two complex type definitions having
the same target namespace can contain
a local attribute declaration for the unqualified name <quote>priority</quote>, or contain a local element declaration
for the name <quote>address</quote>, without conflict or necessary relation between
the two.</p>
    </div2>
<div2 id="Instance_Document_Constructions"> <head>Schema-Related Markup in
Documents Being Validated</head>
  <p>The XML representation of schema components uses a vocabulary
identified by the namespace name <code>http://www.w3.org/2001/XMLSchema</code>.  For brevity, the text and examples in this specification use the prefix
<code>xs:</code> to stand for this namespace; in practice,
any prefix can be used.</p>

 <issue id="RQ-153i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#xsd-1.1-namespace" target="reqs">RQ-153 (xsd-1.1-namespace)</loc></p> 
    *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3047" target="reqs">Issue 3047 (RQ-153 XSD 1.1 namespace)</loc></p>
  <p>This specification must choose either to use the same namespace as XML
Schema 1.0, or to use a different namespace, or to use more than one namespace. 
An explicit decision should be made.</p>
 </issue>

 <p><emph>XML Schema: Structures</emph> also defines several attributes for direct use in any XML documents.  These attributes are in a different namespace,
which has the namespace name <code>http://www.w3.org/2001/XMLSchema-instance</code>.
For brevity, the text and examples in this specification use the prefix
<code>xsi:</code> to stand for this latter namespace; in practice,
any prefix can be used.  All schema processors have appropriate attribute
declarations for these attributes built in, see <specref ref="xsi.type"/>,
<specref ref="xsi.nil"/>, <specref ref="xsi.schemaLocation"/> and <specref ref="xsi.noNamespaceSchemaLocation"/>.</p>
<div3 id="xsi_type">
<head>xsi:type</head>
<p>The <specref ref="Simple_Type_Definition"/> or <specref ref="Complex_Type_Definition"/> used in <termref def="key-vn">validation</termref> of an element is usually
determined by reference to the appropriate schema components.
An element information item in an instance <rfc2119>may</rfc2119>, however,
explicitly assert its type using the attribute <code>xsi:type</code>.
The value of this attribute is a <termref def="gloss-QName">QName</termref>;  see <specref ref="src-qname"/> for
the means by which the <termref def="gloss-QName">QName</termref> is
associated with a type definition.
</p>
</div3>
<div3 id="xsi_nil">
<head>xsi:nil</head>
<p><emph>XML Schema: Structures</emph> introduces a mechanism for signaling that an element
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must</rfc2119></phrase> be accepted as <termref def="key-vn">valid</termref> when
it has no content despite a content type which does not require or
even necessarily allow empty content.  An element <phrase dg="may">may be</phrase><!--*
* material suppressed here by diff group may *
*--> 
<termref def="key-vn">valid</termref> without
content if it has the attribute <code>xsi:nil</code> with the value
<code>true</code>.  An element so labeled <rfc2119>must</rfc2119> be empty, but can
carry attributes if permitted by the corresponding complex type.</p>
</div3>
<div3 id="xsi_schemaLocation">
<head>xsi:schemaLocation, xsi:noNamespaceSchemaLocation</head>
<p>The <code>xsi:schemaLocation</code> and <code>xsi:noNamespaceSchemaLocation</code> 
attributes can be used in a document to provide
hints as to the physical location of schema documents which <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> 
be used for <termref def="key-va">assessment</termref>.
See <specref ref="schema-loc"/> for details on the use of these attributes.</p>
</div3>
</div2>
<div2 id="web-representation">
<head>Representation of Schemas on the World Wide Web</head>
<p>On the World Wide Web, schemas are conventionally represented as XML
documents (preferably of MIME type
<code>application/xml</code> or <code>text/xml</code>, but see <clauseref ref="c-vxd"/> of <specref ref="src-include"/>), conforming to the specifications in <specref ref="layer2"/>. For more information on
the representation and use of schema documents on the World Wide Web see <specref ref="schema-repr"/> and
<specref ref="schema-loc"/>. </p>
</div2>
 </div1>
  <div1 id="components">
   <head>Schema Component Details</head>
   <div2 id="scIntro">
    <head>Introduction</head>
    <p>The following sections provide full details on the composition of all schema components, together
with their XML representations and their contributions to <termref def="key-va">assessment</termref>.  Each section is devoted to a single component, with separate subsections for
     <olist>
      <item>
       <p>properties:  their values and significance</p>
      </item>
      <item>
       <p>XML representation and the mapping to properties</p>
      </item>
      <item>
       <p>constraints on representation</p>
      </item>
      <item>
       <p>validation rules</p>
      </item>
      <item>
       <p><termref def="key-psvi">post-schema-validation infoset</termref> contributions</p>
      </item>
      <item>
       <p>constraints on the components themselves</p>
      </item>
     </olist>
The sub-sections immediately below introduce conventions and terminology used throughout the component sections.</p>
   <div3>
    <head>Components and Properties</head>
    <p>Components are defined in terms of their
properties, and each property in turn is defined by giving its range,
that is the values it <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> have.  This can be understood as
defining a schema as a labeled directed graph, where the root is a schema,
every other vertex is a schema
component or a literal (string, boolean, <!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">decimal</phrase>) and every labeled edge is a
property.  The graph is <emph>not</emph> acyclic:  multiple copies of
components with the same name in the same <termref def="key-symbolSpace">symbol space</termref> 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must not</rfc2119></phrase> 
exist, so in some cases re-entrant chains of properties 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">will</phrase> 
exist.  Equality of components for the purposes of this
specification is always defined as equality of names (including target
namespaces) within symbol spaces.</p>
	  <issue id="RQ-125i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#id-anon-types" target="reqs">RQ-125 (id-anon-types)</loc>, 
<loc href="&reqs;#scd-origin-inheritance" target="reqs">RQ-134 (scd-origin-inheritance)</loc>
*-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2837" target="reqs">Issue 2837 (RQ-125 identity of anonymous types)</loc>,
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2842" target="reqs">Issue 2842 (RQ-134 inherited portions of content model)</loc>
</p>
    <p>Version 1.0 was deliberately reticent in stating identity conditions for
components.  With hindsight this was a mistake, and will be corrected.</p>
    <resolution>
     <p>Add {scope} property to type definition components
which will either be the enclosing element declaration or "global", by
analogy with element declarations {scope}. [For further
context, see <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Group/2004/05/xml-schema-ftf-minutes.html">F2F 
2004-03-12, section RQ-125</loc> (W3C-member-only link).]</p>
     <p>This change will solve the anonymous type equality problem by giving an
unequivocal answer to the <quote>who am I?</quote> question for such types by way of the
answer <quote>Your identity is determined by your scope's identity.</quote></p>
    </resolution>
    </issue>
    <note>
    <p>A schema and its components as defined in this chapter are an
idealization of the information a schema-aware processor requires:
implementations are not constrained in how they provide it.  In
particular, no implications about literal embedding versus indirection
follow from the use below of language such as 
<quote>properties . . . having . . . components as values</quote>.</p>
   </note>
    
    <p dg="ep01">Component properties are simply named values.  Most properties have either other components or literals (that is,
strings or booleans or enumerated keywords) for values, but in a few cases,
where more complex values are involved, <termdef id="t-propRec" term="property record">a property value may itself be a collection of
named values, which we call a <term>property record</term></termdef>.</p>
   <p><termdef id="key-null" term="absent">Throughout this specification, the
term <term>absent</term> is used as a distinguished property value denoting
absence</termdef>.<phrase dg="fpwd">  Again this should not be interpreting as
constraining implementations, as for instance between using a <pt>null</pt>
value for such properties or not representing them at all.</phrase></p>
   <p>Any property not
identified as optional is <phrase diff="nsq-del" dg="rq144">required to be 
present</phrase><phrase diff="nsq-add" dg="rq144">defined as always present</phrase>; 
optional properties which are
not present are taken to have <termref def="key-null">absent</termref> as their value.  Any
property identified as a having a set, subset or list value <rfc2119>may</rfc2119> have an empty value 
unless this is explicitly
ruled out:  this is <emph>not</emph> the same as <termref def="key-null">absent</termref>.  
Any property value identified as a superset or subset of some set <rfc2119>may</rfc2119> 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 a
sequence of ISO 10646 characters identified as 
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#charsets">legal XML characters</xtermref>
in <bibref ref="ref-xml"/>.</p>
<note dg="b1838">
<p>It is implementation-defined whether a schema processor
uses the definition of legal character from <bibref ref="ref-xml"/>
or <bibref ref="ref-xml-1.0"/>.</p>
</note>
</div3>
   <div3>
    <head>XML Representations of Components</head>
    <p>The principal purpose of <emph>XML Schema: Structures</emph> is to define a set of
      schema components that constrain the contents of instances and augment the
      information sets thereof.  Although no external representation
of schemas is required for this purpose, such representations will
obviously be widely used. To provide for this in an appropriate and
interoperable way, this specification provides a normative XML representation for schemas which
makes provision for every kind of schema
component.  <termdef id="key-schemaDoc" term="schema document">A document in
this form (i.e. a <eltref ref="schema"/> element information item) is a <term>schema document</term></termdef>.  For the schema document as a whole, and
its constituents, the sections below define correspondences between element
information items (with declarations in
<specref ref="normative-schemaSchema"/> and <specref ref="nonnormative-schemaDTD"/>) and
schema components.  All the element information items in the XML representation
of a schema <rfc2119>must</rfc2119> be in the XML Schema namespace, that is their <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace name</xpropref> <rfc2119>must</rfc2119> be <code>http://www.w3.org/2001/XMLSchema</code>.  Although a common way of creating the XML Infosets which are or contain <termref def="key-schemaDoc">schema documents</termref> will be using an XML parser, this is not required:  any mechanism which constructs conformant infosets as defined in <bibref ref="ref-xmlinfo"/> is a possible starting point.</p>
    <p>Two aspects of the XML representations of components presented in the
following sections are constant across them all:
    <olist>
     <item>
      <p>All of them allow attributes qualified with namespace names other than
the XML Schema namespace itself: these appear as annotations in the
corresponding schema component;</p>
     </item>
     <item>
      <p>All of them allow an <eltref ref="annotation"/> as their first child, for human-readable documentation and/or machine-targeted information.</p>
     </item>
    </olist>
   </p>
   </div3>
    <div3>
    <head>The Mapping between XML Representations and Components</head>
    <p>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 of
schema component on the one hand and the properties of information items in
that XML representation on the other, together
with constraints on that representation above and beyond those implicit in the
<specref ref="normative-schemaSchema"/>.</p>
 <p>The language used is as if the correspondences were mappings from XML representation to
schema component, but the mapping in the other direction, and therefore the
correspondence in the abstract, can always be
constructed therefrom.</p>
     <p>In discussing the mapping from XML representations to schema
components below, the value of a component property is often determined by the
value of an attribute information item, one of the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> of an element
information item.  Since schema documents are constrained by the
<specref ref="normative-schemaSchema"/>, there is always a simple type
definition associated with any such attribute information item.  <termdef id="key-vv" term="actual value">The
phrase <term>actual value</term> is used to refer to the member of the value space of the
simple type definition associated with an attribute information item which corresponds to
its <termref def="key-nv">normalized value</termref></termdef>.  This will often be a string, but <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> also be an
integer, a boolean, a URI reference, etc.  This term is also occasionally used with respect to element or attribute information items in a document being <termref def="key-va">validated</termref>.</p>
   <p>Many properties are identified below as having other schema
components or sets of components as values.  For the purposes of
exposition, the definitions in this section assume that (unless the
property is explicitly identified as optional) all such values are in
fact present.  When schema components are constructed from XML
representations involving reference by name to other components, this
assumption <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be violated if one
or more references cannot be resolved.  This specification addresses
the matter of missing components in a uniform manner, described in
<specref ref="conformance-missing"/>:  no mention of handling missing
components will be found in the individual component descriptions
below.</p>
   <p>Forward reference to named definitions and declarations
<emph>is</emph> allowed, both within and between <termref def="key-schemaDoc">schema documents</termref>. By the time the
component corresponding to an XML representation which contains a
forward reference is actually needed for <termref def="key-vn">validation</termref><!--*
* material suppressed here by diff group may *
*--> an appropriately-named component <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*-->
have become available to discharge the reference: see <specref ref="composition"/> for details.</p>
   </div3>
   <div3>
    <head>White Space Normalization during Validation</head>
    <p>Throughout this specification, <termdef id="key-iv" term="initial value">the
<term>initial value</term> of some
attribute information item is the value of the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">normalized
value</xpropref> property of that item.  Similarly, the <term>initial value</term> of an element information item is the string composed of, in order, the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.character">character code</xpropref> of each character information item in the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of that
element information item</termdef>.</p>
   <p>The above definition means that comments and processing instructions,
even in the midst of text, are ignored for all <termref def="key-vn">validation</termref> purposes.</p>
   <p><termdef id="key-nv" term="normalized value">The
<term>normalized value</term> of an element or
attribute information item is an <termref def="key-iv">initial value</termref> whose white space, if any, has been
normalized according to the value of the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#rf-whiteSpace">whiteSpace facet</xtermref> of the
simple type definition used in its <termref def="key-vn">validation</termref>:
 </termdef>
    <glist>
     <gitem>
      <label>preserve</label>
      <def>
       <p>No normalization is done, the value is the <termref def="key-nv">normalized value</termref></p>
      </def>
     </gitem>
     <gitem>
      <label>replace</label>
      <def>
       <p>All occurrences of <code>#x9</code> (tab), <code>#xA</code> (line feed) and
<code>#xD</code> (carriage return) are replaced with <code>#x20</code> (space).</p>
      </def>
     </gitem>
     <gitem>
      <label>collapse</label>
      <def>
       <p>Subsequent to the replacements specified above under <local>replace</local>,
contiguous sequences of <code>#x20</code>s are collapsed to a single
<code>#x20</code>, and initial and/or final <code>#x20</code>s are deleted.</p>
      </def>
     </gitem>
    </glist>
   </p>
    <p>If the simple type definition used in an item's 
<termref def="key-vn">validation</termref> is the 
<termref def="key-simpleUrType">simple ur-type definition</termref>, 
<phrase dg="iff">then </phrase>the 
<termref def="key-nv">normalized value</termref> <rfc2119>must</rfc2119> be determined 
as in the <local>preserve</local> case above.</p>
   <p>There are three alternative validation rules which <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> supply the necessary background for the
above:  <specref ref="cvc-attribute"/> (<clauseref ref="c-sva"/>), <specref ref="cvc-type"/> (<clauseref ref="c-sv1"/>) or <specref ref="cvc-complex-type"/> (<clauseref ref="c-sv2"/>).</p>
   <p>These three levels of normalization correspond to the processing mandated
in XML<!--*
* material suppressed here by diff group fpwd *
*--> for element content, CDATA attribute 
content and tokenized
attributed content, respectively.  See 
<xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#AVNormalize">Attribute Value Normalization</xspecref> 
in <bibref ref="ref-xml"/> for the precedent for <local>replace</local> and 
<local>collapse</local> for attributes.  Extending this processing to element 
content is necessary to ensure a consistent <termref def="key-vn">validation</termref> 
semantics for simple types, regardless of whether they are applied to attributes 
or elements.  Performing it twice in the case of attributes whose 
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">normalized
value</xpropref> has already been subject to replacement or collapse on the basis of
information in a DTD is necessary to ensure consistent treatment of attributes
regardless of the extent to which DTD-based information has been made use of
during infoset construction.</p>
   <note>
    <p>Even when DTD-based information <emph>has</emph> been appealed
to, and <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#AVNormalize">Attribute Value
Normalization</xspecref> has taken place, <phrase dg="may">the above definition of <termref def="key-nv">normalized value</termref> may mean</phrase><!--*
* material suppressed here by diff group may *
*-->
<emph>further</emph> normalization <phrase dg="may">takes</phrase><!--*
* material suppressed here by diff group may *
*--> place, as for instance when character entity references
in attribute values result in white space characters other than spaces
in their <termref def="key-iv">initial value</termref>s.</p>
   </note>
<note dg="b2532-rq127-r196">
<p>The values <local>replace</local> and 
<local>collapse</local> may appear to provide a
convenient way to <quote>unwrap</quote> text (i.e. undo the effects of
pretty-printing and word-wrapping).  In some cases, especially
highly constrained data consisting of lists of artificial tokens
such as part numbers or other identifiers, this appearance is
correct.  For natural-language data, however, the whitespace
processing prescribed for these values is not only unreliable but
will systematically remove the information needed to perform
unwrapping correctly.  For Asian scripts, for example, a correct
unwrapping process will replace line boundaries not with blanks but
with zero-width separators or nothing.  In consequence, it is
normally unwise to use these values for natural-language data, or
for any data other than lists of highly constrained tokens.</p>
</note>
   </div3>
   </div2>
   <div2 id="cAttribute_Declarations">
    <head>Attribute Declarations</head>
    <p>Attribute declarations provide for:</p>
    <ulist>
     <item><p>Local <termref def="key-vn">validation</termref> of attribute information item values using a simple type definition;</p></item>
     <item><p>Specifying default or fixed values for attribute information items.</p></item>
    </ulist>
 <note role="example">
<eg xml:space="preserve">&lt;xs:attribute name="age" type="xs:positiveInteger" use="required"/&gt;
</eg>
<p>The XML representation of an attribute declaration.</p>
</note>
    <div3 id="Attribute_Declaration_details">
     <head>The Attribute Declaration Schema Component</head>
<!--*
     <issue id="RQ-129i" role="1.1">
      <p><loc href="&reqs;#eliminate-canonical" target="reqs">RQ-129 (eliminate-canonical)</loc></p>
      <p>In a few places part 1 of version 1.0 relied on the ability to
determine a (canonical) lexical form for any simple typed value, e.g. in the
construction of default attribute information items.  But not all simple types
<emph>have</emph> such a canonical form.  The dependence on canonical forms,
which part 2 will no longer normatively require, will be removed.</p>
      <resolution>
       <p><loc href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004Mar/0072.html">minutes from XML Schema WG call 2004-03-19</loc> (W3C-member-only link)</p>
       <p>Modify the component structure to record / retain a lexical form.
   (There was some speculation in the WG about whether the existing 
   value property should or should not be repurposed, or a new property
   added; the WG did NOT decide this now, preferring to leave it to
   the editor as part of the plumbing and deal with it as part of
   Phase 2.)</p>
       <p>If the component comes from a schema document, then the lexical
   form in the component should be that appearing in the schema
   document.</p>
       <p>Otherwise (i.e. if the component is born binary), the lexical
   form in the component should be any appropriate one.</p>
      </resolution>
     </issue> *-->
    <p>The attribute declaration schema component has the following
properties:</p>
    <compdef name="Attribute Declaration" abbrev="ad" showAKO="true"/>
     <microCompdef name="Scope" abbrev="sc_a" dg="ep01"/>
    <microCompdef name="Value Constraint" abbrev="vc_a" dg="ep01"/>
<p>The <propref comp="ad" prop="name"/> property <rfc2119>must</rfc2119> match the local part of the names of attributes being <termref def="key-vn">validated</termref>.</p>
<p>The value of the attribute <rfc2119>must</rfc2119> conform to the supplied <propref comp="ad" prop="type definition"/>.</p>
    <p>A <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 value of the <propref comp="ad" prop="target namespace"/> property provides for <termref def="key-vn">validation</termref> of
namespace-qualified attribute information items (which <rfc2119>must</rfc2119> be explicitly
prefixed in the character-level form of XML documents).  <termref def="key-null">Absent</termref> values of
<propref comp="ad" prop="target namespace"/> <termref def="key-vn">validate</termref> unqualified (unprefixed) items.</p>
    <p>A <propref comp="ad" prop="scope"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">with <propref comp="sc_a" prop="variety"/></phrase> <pt>global</pt> identifies attribute declarations
available for use in complex type definitions throughout the schema.  Locally scoped declarations are available for use only within the
<phrase dg="scope-1973">complex type definition</phrase><!--*
* material suppressed here by diff group scope-1973 *
*--> identified by the <propref comp="ad" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_a" prop="parent"/></phrase> property. <phrase dg="scope-1973"> This property is <termref def="key-null">absent</termref> 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.</phrase>
</p>
<p><propref comp="ad" prop="value constraint"/> reproduces the functions of XML<!--*
* material suppressed here by diff group fpwd *
*--> default and <code>#FIXED</code>
attribute values.  <phrase dg="ep01">A <propref comp="vc_a" prop="variety"/> of </phrase><pt>default</pt> specifies that the attribute is to appear unconditionally in
the <termref def="key-psvi">post-schema-validation infoset</termref>, with <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_a" prop="value"/><phrase dg="rq129">
and <propref comp="vc_a" prop="lexical form"/></phrase></phrase> used
whenever the attribute is not actually present; <pt>fixed</pt> indicates that the attribute value if present <rfc2119>must</rfc2119> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">be identical to <propref comp="vc_a" prop="value"/></phrase>, and if absent receives <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_a" prop="value"/><phrase dg="rq129">
and <propref comp="vc_a" prop="lexical form"/></phrase></phrase> as for
<pt>default</pt>.  Note that it is <emph>values</emph> that are
<!--*
* material suppressed here by diff group ep01 *
*-->checked, not strings.</p>
    <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="ad" prop="annotations"/> property.</p>
<note><p>A more complete and formal presentation of the semantics of <propref comp="ad" prop="name"/>, <propref comp="ad" prop="target namespace"/> and <propref comp="ad" prop="value constraint"/> is provided in
conjunction with other aspects of complex type <termref def="key-vn">validation</termref> (see <specref ref="cvc-complex-type"/>.)</p></note>
    <p><bibref ref="ref-xmlinfo"/> distinguishes attributes with names such as <code>xmlns</code> or <code>xmlns:xsl</code> from
ordinary attributes, identifying them as <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace attributes</xpropref>.  Accordingly, it is unnecessary and in fact not possible for
schemas to contain attribute declarations corresponding to such
namespace declarations, see <specref ref="no-xmlns"/>.  No means is provided in
this specification to supply a
default value for a namespace declaration.</p> 
</div3>
    <div3 id="declare-attribute">
<head>XML Representation of Attribute Declaration Schema
Components</head>
	  <issue id="RQ-121i" role="1.1" status="open">
<!--* <p>
<loc href="&reqs;#prohibited-and-fixed" target="reqs">RQ-121 (prohibited-and-fixed)</loc>
</p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2835" target="reqs">Issue 2835 (RQ-121 prohibited + fixed)</loc></p>

    <p>Neither the prose of this specification nor the
schema for schema documents rules out XML representations of
attribute declarations containing both <code>use='prohibited'</code> and 
<code>fixed='...'</code>.  It
will be made clear that this is not an error and that
‘<code>prohibited</code>’ wins.</p>
</issue>
<p>The XML representation for an attribute declaration schema
component is an
<eltref ref="attribute"/> element information item.  It specifies a
simple type definition for an attribute either by reference or
explicitly, and <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> provide default information. The
correspondences between the properties of the information item and
properties of the component are as follows:</p>
<reprdef>
 <reprelt eltname="attribute" type="attribute"/>
 <p>If the <eltref ref="attribute"/> element information item has <eltref ref="schema"/> as its parent, the corresponding schema component is as follows:</p>
  <reprcomp ref="Attribute_Declaration_details" abstract="Attribute Declaration">
   <propmap comp="ad" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="ad" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <eltref ref="schema"/>
element information item, or <termref def="key-null">absent</termref> if there is none.</propmap>
 <propmap comp="ad" prop="type definition">The simple type definition
corresponding to the <eltref ref="simpleType"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise the simple type definition <termref def="src-resolve">resolved</termref> to by
the <termref def="key-vv">actual value</termref> of the <code>type</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise the
<termref def="simple-ur-type-itself">simple ur-type definition</termref>.</propmap>
   <propmap comp="ad" prop="scope"><phrase dg="ep01">A <compref ref="sc_a"/> as follows:</phrase>
    <pvlist>
     <pvpair comp="sc_a" prop="variety"><pt>global</pt></pvpair>
     <pvpair comp="sc_a" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
    </pvlist>
   </propmap>
 <propmap comp="ad" prop="value constraint">If there is a <code>default</code> or a <code>fixed</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, then <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="vc_a"/> as follows</phrase>, otherwise <termref def="key-null">absent</termref>.
  <pvlist>
   <pvpair comp="vc_a" prop="variety">either <pt>default</pt> or <pt>fixed</pt>, as appropriate</pvpair>
   <pvpair comp="vc_a" prop="value">the <termref def="key-vv">actual value</termref> (with respect to the
<propref comp="ad" prop="type definition"/>) of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the</phrase> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
   <pvpair comp="vc_a" prop="lexical form" dg="rq129">the <termref def="key-nv">normalized value</termref>
(with respect to the
<propref comp="ad" prop="type definition"/>) of the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
  </pvlist></propmap>
 <propmap comp="ad" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
 </reprcomp>
 <p>otherwise if the <eltref ref="attribute"/> element information item has
<eltref ref="complexType"/> or <eltref ref="attributeGroup"/> as an ancestor
and the <code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is absent, it corresponds to an
attribute use with properties as follows (unless <code>use='prohibited'</code>, in which case the item
corresponds to nothing at all):</p>
 <reprcomp ref="AU_details" abstract="Attribute Use">
  <propmap comp="au" prop="required"><pt>true</pt> if the <code>use</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present with <termref def="key-vv">actual value</termref> <code>required</code>, otherwise
<pt>false</pt>.</propmap>
  <propmap comp="au" prop="attribute declaration">See the Attribute Declaration mapping
immediately below.</propmap>
  <propmap comp="au" prop="value constraint">If there is a <code>default</code> or a <code>fixed</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, then a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="vc_au"/> as follows</phrase>, otherwise <termref def="key-null">absent</termref>.
  <pvlist>
   <pvpair comp="vc_au" prop="variety">either <pt>default</pt> or <pt>fixed</pt>, as appropriate</pvpair>
   <pvpair comp="vc_au" prop="value">the <termref def="key-vv">actual value</termref> (with respect to the
<propref comp="ad" prop="type definition"/> of the <propref comp="au" prop="attribute declaration"/>) of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the</phrase> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
   <pvpair comp="vc_au" prop="lexical form" dg="rq129">the <termref def="key-nv">normalized value</termref>
(with respect to the
<propref comp="ad" prop="type definition"/> of the <propref comp="au" prop="attribute declaration"/>) of the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
  </pvlist>
  </propmap>
 </reprcomp>
 <reprcomp ref="Attribute_Declaration_details" abstract="Attribute Declaration">
  <propmap comp="ad" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="ad" prop="target namespace">If <code>form</code> is present and its
<termref def="key-vv">actual value</termref> is <code>qualified</code>, or if <code>form</code> is absent and the
<termref def="key-vv">actual value</termref> of <code>attributeFormDefault</code> on the <eltref ref="schema"/>
ancestor is <code>qualified</code>, then the <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <eltref ref="schema"/>
element information item, or <termref def="key-null">absent</termref> if there
is none, otherwise <termref def="key-null">absent</termref>.</propmap>
  <propmap comp="ad" prop="type definition">The simple type definition
corresponding to the <eltref ref="simpleType"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise the simple type definition <termref def="src-resolve">resolved</termref> to by
the <termref def="key-vv">actual value</termref> of the <code>type</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise the
<termref def="simple-ur-type-itself">simple ur-type definition</termref>.</propmap>
  <propmap comp="ad" prop="scope"><phrase dg="ep01">A <compref ref="sc_a"/> as follows:</phrase>
   <pvlist>
     <pvpair comp="sc_a" prop="variety" dg="ep01"><pt>local</pt></pvpair>
     <pvpair comp="sc_a" prop="parent">If the <eltref ref="attribute"/> element information item
has <eltref ref="complexType"/> as an ancestor, the <compref ref="ctd"/>
corresponding to that item, otherwise (the <eltref ref="attribute"/> element
information item is within an <eltref ref="attributeGroup"/> <phrase dg="scope-1973">definition</phrase><!--*
* material suppressed here by diff group scope-1973 *
*-->),
<termref def="key-null" dg="scope-1973">absent</termref><!--*
* material suppressed here by diff group scope-1973 *
*-->.</pvpair>
    </pvlist>
   </propmap>
  <propmap comp="ad" prop="value constraint"><termref def="key-null">absent</termref>.</propmap>
 <propmap comp="ad" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
 </reprcomp>
 <p>otherwise (the <eltref ref="attribute"/> element information item has
<eltref ref="complexType"/> or <eltref ref="attributeGroup"/> as an ancestor and the
<code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present), it corresponds to an
attribute use with properties as follows (unless <code>use='prohibited'</code>, in which case the item
corresponds to nothing at all):</p>
 <reprcomp ref="AU_details" abstract="Attribute Use">
  <propmap comp="au" prop="required"><pt>true</pt> if the <code>use</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present with <termref def="key-vv">actual value</termref> <code>required</code>, otherwise
<pt>false</pt>.</propmap>
  <propmap comp="au" prop="attribute declaration">The (top-level) attribute declaration <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="au" prop="value constraint">If there is a <code>default</code> or a <code>fixed</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, then a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="vc_au"/> as follows</phrase>, otherwise <termref def="key-null">absent</termref>.
  <pvlist>
   <pvpair comp="vc_au" prop="variety">either <pt>default</pt> or <pt>fixed</pt>, as appropriate</pvpair>
   <pvpair comp="vc_au" prop="value">the <termref def="key-vv">actual value</termref> (with respect to the
<propref comp="ad" prop="type definition"/> of the <propref comp="au" prop="attribute declaration"/>) of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the</phrase> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
   <pvpair comp="vc_au" prop="lexical form" dg="rq129">the <termref def="key-nv">normalized value</termref>
(with respect to the
<propref comp="ad" prop="type definition"/> of the <propref comp="au" prop="attribute declaration"/>) of the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
  </pvlist>
  </propmap>
 </reprcomp>
 </reprdef>
 <p>Attribute declarations can appear at the top level of a schema document, or within complex
type definitions, either as complete (local) declarations, or by reference to top-level
declarations, or within attribute group definitions.  For complete declarations, top-level or local, the <code>type</code> attribute is used when the declaration can use a
built-in or pre-declared simple type definition.  Otherwise an
anonymous <eltref ref="simpleType"/> is provided inline.</p>
 <p>The default when no simple type definition is referenced or
provided is the <termref def="key-simpleUrType">simple ur-type definition</termref>, which imposes no constraints at all.</p>
 <p>Attribute information items <termref def="key-vn">validated</termref> by 
a top-level declaration <rfc2119>must</rfc2119> be qualified with the
<propref comp="ad" prop="target namespace"/> of that declaration<!--*
* material suppressed here by diff group iff *
*--><phrase dg="iff">.
If the 
<propref comp="ad" prop="target namespace"/> is <termref def="key-null">absent</termref>,
the item <rfc2119>must</rfc2119> be unqualified.</phrase>
Control over whether attribute information items
<termref def="key-vn">validated</termref> by a local 
declaration <rfc2119>must</rfc2119> be similarly qualified or not
is provided by the <code>form</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, whose default is provided
by the <code>attributeFormDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> on the 
enclosing <eltref ref="schema"/>, via its determination of 
<propref comp="ad" prop="target namespace"/>.</p>
 <p>The names for top-level attribute declarations are in their own
<termref def="key-symbolSpace">symbol space</termref>.  The names of locally-scoped
attribute declarations reside in symbol spaces local to the type definition which contains
them.</p>
    </div3>
    <div3>
     <head>Constraints on XML Representations of Attribute Declarations</head>
 <constraintnote id="src-attribute" type="src">
  <head>Attribute Declaration Representation OK</head>
  <p>In addition to the conditions imposed on <eltref ref="attribute"/> element
information items by the schema for schemas,
   <olist role="and.apply">
    <item>
     <p><code>default</code> and <code>fixed</code> <rfc2119>must not</rfc2119> both be present.</p>
    </item>
    <item>
     <p>If <code>default</code> and <code>use</code> are both present,
<code>use</code> <rfc2119>must</rfc2119> have the <termref def="key-vv">actual value</termref> <code>optional</code>.</p>
    </item>
    <item>
     <p>If the item's parent is not <eltref ref="schema"/>, then
      <olist role="and">
       <item>
     <p>One of <code>ref</code> or <code>name</code> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> present, but not both.</p>
    </item>
       <item>
        <p>If <code>ref</code> is present, then all of <eltref ref="simpleType"/>,
<code>form</code> and <code>type</code> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> absent.</p>
       </item>
      </olist>
     </p>
    </item>
    <item>
     <p><code>type</code> and <eltref ref="simpleType"/>
<rfc2119>must not</rfc2119> both be present.</p>
    </item>
    <item>
     <p>The corresponding attribute
declaration <rfc2119>must</rfc2119> satisfy the conditions set out in
<specref ref="coss-attribute"/>.</p>
    </item>
   </olist>
  </p>
 </constraintnote>
    </div3>
    <div3>
     <head>Attribute Declaration Validation Rules</head>
   <constraintnote type="cvc" id="cvc-attribute">
     <head>Attribute Locally Valid</head>
     <p>For an attribute information item to be locally <termref def="key-vn">valid</termref> 
with respect to an attribute declaration 
      <olist role="and">
       <item id="c-a1">
        <p>The declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> <termref def="key-null">absent</termref> 
(see <specref ref="conformance-missing"/> for
how this can fail to be the case).</p>
       </item>
       <item id="c-a2">
        <p>Its <propref comp="ad" prop="type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> absent.</p>
       </item>
       <item id="c-sva">
        <p>The item's <termref def="key-nv">normalized value</termref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> locally <termref def="key-vn">valid</termref> 
with respect to that <propref comp="ad" prop="type definition"/> 
as per <specref ref="cvc-simple-type"/>.</p>
       </item>
       <item>
        <p>The item's <termref def="key-vv">actual value</termref> 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">matches</phrase>
 the <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_a" prop="value"/></phrase> of the <propref comp="ad" prop="value constraint"/>, if it is
present and <phrase dg="ep01">its <propref comp="vc_a" prop="variety"/> is </phrase><pt>fixed</pt>.</p>
       </item>
      </olist>
     </p>
    </constraintnote>
    <constraintnote id="cvc-assess-attr" type="cvc">
     <head>Schema-Validity Assessment (Attribute)</head>
     <p>The schema-validity assessment of an attribute information item depends
on its <termref def="key-vn">validation</termref> alone.</p>
  <p><termdef id="key-dd" term="context-determined declaration">During <termref def="key-vn">validation</termref>, associations
between element and attribute information items among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>
and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> on the one hand, and element and attribute
declarations on the other, are established as a side-effect.  Such
declarations are called the <term>context-determined declarations</term></termdef>. 
See <clauseref ref="c-ctma"/> (in <specref ref="cvc-complex-type"/>) for
attribute declarations, <clauseref ref="c-cdde"/> (in <specref ref="cvc-particle"/>) for element
declarations.</p>
  <p>For an attribute information item's schema-validity to have been assessed
      <olist role="and">
       <item>
        <p>A <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 attribute declaration
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> known for it, namely
         <olist role="orval">
          <item>
           <p>A declaration which has been established as its <termref def="key-dd">context-determined declaration</termref>;</p>
          </item>
          <item id="c-adbyr">
           <p>A declaration resolved to by its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> as defined by <specref ref="cvc-resolve-instance"/>, provided its <termref def="key-dd">context-determined declaration</termref> is
not <pt>skip</pt>.</p>
          </item>
         </olist>
        </p>
       </item>
       <item>
        <p>Its <termref def="key-vn">validity</termref> with respect to that
declaration 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> 
been evaluated as per <specref ref="cvc-attribute"/>.</p>
       </item>
       <item>
        <p>Both <clauseref ref="c-a1"/> and <clauseref ref="c-a2"/> of <specref ref="cvc-attribute"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> satisfied.</p>
       </item>
      </olist>
     </p>
<p><termdef id="key-svaa" term="strictly assessed" role="local">For
attributes, there is no difference between assessment and strict
assessment, so <!--*
* material suppressed here by diff group iff *
*--> 
the attribute information item has
been <term>strictly assessed</term></termdef><phrase dg="iff">
if and only if its schema-validity has been assessed</phrase>.</p> 
    </constraintnote>
    </div3>
    <div3>
     <head>Attribute Declaration Information Set Contributions</head>
    <constraintnote id="sic-a-outcome" type="sic">
     <head>Assessment Outcome (Attribute)</head>
<issue id="RQ-143i" role="1.1" status="open">
<!--*
  <p><loc href="&reqs;#AssessmentOfAtts" target="reqs">RQ-143 (AssessmentOfAtts)</loc></p>
*-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2827" target="reqs">Issue 2827 (RQ-143 attribute assessment)</loc></p>
      <p>An attribute with no type declaration cannot be 'assessed', as defined
by (Schema-Validity Assessment (Attribute)), so it will never have any PSVI
properties, whereas it would be natural for it to have [validation attempted] =
none and [validity] = notKnown.  This will be fixed.</p>
      <resolution>
       <p>It is likely that the current backward-chaining approach to defining
schema-validity assessment will be reworked, in which case this will get fixed as
part of that.</p>
      </resolution>
	      </issue>
     <p>If<!--*
* material suppressed here by diff group iff.144.r *
*--> the schema-validity of an attribute information item has been assessed
as per <specref ref="cvc-assess-attr"/>, then in the <termref def="key-psvi">post-schema-validation infoset</termref> it 
<phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> properties as follows:</p>
     <proplist role="psvi" item="attribute">
       <propdef name="validation context" id="a-validation_context">The nearest ancestor element information
item with a <propref role="psvi" ref="e-schema_information"/> property.</propdef>
       <propdef name="validity" id="a-validity">
        <olist role="Caseval">
       <item>
        <p role="if">it was <termref def="key-svaa">strictly assessed</termref></p>
        <p role="then">
         <olist role="caseval">
          <item>
           <p role="if">it was
<termref def="key-vn">valid</termref> as defined by <specref ref="cvc-attribute"/></p>
           <p role="then"><pt>valid</pt>;</p>
          </item>
          <item>
           <p role="otherwise"><pt>invalid</pt>.</p>
          </item>
         </olist> 
        </p>
       </item>
       <item>
        <p role="otherwise"><pt>notKnown</pt>.</p>
       </item>
      </olist>
       </propdef>
       <propdef name="validation attempted" id="a-validation_attempted">
       <olist role="Caseval">
       <item>
        <p role="if">it was <termref def="key-svaa">strictly assessed</termref></p>
        <p role="then"><pt>full</pt>;</p>
       </item>
       <item>
        <p role="otherwise"><pt>none</pt>.</p>
       </item>
      </olist></propdef>
       <propdef name="schema specified" id="a-schema_specified"><pt>infoset</pt>.  See <specref ref="sic-attrDefault"/> for the other possible value.</propdef>
      </proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-attr-error-code">
     <head>Validation Failure (Attribute)</head>
     <p>If<phrase dg="iff.144"> and only if</phrase> the local <termref def="key-vn">validity</termref>, as defined 
by <specref ref="cvc-attribute"/>
above, of an attribute information item has been assessed,
<phrase dg="iff.144">then</phrase> in the <termref def="key-psvi">post-schema-validation infoset</termref> the item 
<phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a property:</p>
     <proplist role="psvi" item="attribute">
      <propdef id="a-schema_error_code" name="schema error code">
       <olist role="Caseval">
        <item>
         <p role="if">the item is <!--*
* material suppressed here by diff group b1892 *
*--><phrase dg="b1892"><termref def="key-vn">invalid</termref></phrase></p>
         <p role="then">a list.  Applications wishing to provide
information as to the reason(s) for the <termref def="key-vn">validation</termref> failure are encouraged to record one or more
error codes (see <specref ref="outcomes"/>) herein.</p>
        </item>
        <item>
         <p role="otherwise"><termref def="key-null">absent</termref>.</p>
        </item>
       </olist>
      </propdef>
     </proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-attr-decl">
     <head>Attribute Declaration</head>
     <p>If<!--*
* material suppressed here by diff group iff.144.r *
*--> an attribute information item is <termref def="key-vn">valid</termref> 
with respect to an attribute declaration as 
per <specref ref="cvc-attribute"/><phrase dg="iff">,</phrase> then 
in the <termref def="key-psvi">post-schema-validation infoset</termref> the attribute
information item <rfc2119>may</rfc2119>, at processor option, have a property:</p>
     <proplist role="psvi" item="attribute">
      <propdef id="a-declaration" name="attribute declaration">
       An <termref def="key-iso">item isomorphic</termref> to the declaration component itself.
      </propdef>
     </proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-attrType">
     <head>Attribute Validated by Type</head>
     <p>If<!--*
* material suppressed here by diff group iff.144.r *
*--> <clauseref ref="c-sva"/> of <specref ref="cvc-attribute"/> applies with
respect to an attribute information item, <phrase dg="iff">then</phrase>
in the <termref def="key-psvi">post-schema-validation infoset</termref> the attribute
information item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a property:</p>
     <proplist role="psvi" item="attribute">
      <propdef id="a-schema_normalized_value" name="schema normalized value">
       The <termref def="key-nv">normalized value</termref> of the item as <termref def="key-vn">validated</termref>.
      </propdef>
     </proplist>

<p>Furthermore, the item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> one of the following
alternative sets of properties:</p>

<p>Either</p>

<proplist role="psvi" item="attribute">
<propdef id="a-type_definition" name="type definition">An <termref def="key-iso">item isomorphic</termref> to the relevant attribute
declaration's
<propref comp="ad" prop="type definition"/> component.</propdef>
<propdef name="member type definition" id="a-member_type_definition">If and only if that type definition has
<propref comp="std" prop="variety"/> <pt>union</pt>, then 
<phrase dg="b2333b">an <termref def="key-iso">item isomorphic</termref> to
<phrase dg="b2333c">that <!--*
* material suppressed here by diff group b2333a *
*--><phrase dg="b2333a"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of its <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive
membership</xtermref></phrase></phrase><!--*
* material suppressed here by diff group b2333c *
*--></phrase><!--*
* material suppressed here by diff group b2333b *
*--><phrase dg="b2333c"> which
actually <termref def="key-vn">validated</termref></phrase> the
attribute item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">normalized
value</xpropref><!--* <phrase diff="add" dg="b2333c"> was ultimately
assigned</phrase> *--><!--*
* material suppressed here by diff group b2333b *
*-->.</propdef>
</proplist>

<p>or</p>

<proplist role="psvi" item="attribute">
<propdef id="a-type_definition_type" name="type definition type">
<pt>simple</pt>.</propdef>
<propdef id="a-type_definition_namespace" name="type definition namespace">The <propref comp="std" prop="target namespace"/> of the
<termref def="td">type definition</termref>.</propdef>
<propdef name="type definition anonymous" id="a-type_definition_anonymous"><pt>true</pt> if the <propref comp="std" prop="name"/> of the <termref def="td">type
definition</termref> is <termref def="key-null">absent</termref>,
otherwise <pt>false</pt>.</propdef>
<propdef name="type definition name" id="a-type_definition_name">The
<propref comp="std" prop="name"/> of the <termref def="td">type definition</termref>, if it is not <termref def="key-null">absent</termref>.  If it is <termref def="key-null">absent</termref>, schema processors <rfc2119>may</rfc2119>, but need
not, provide a value unique to the definition.</propdef>
</proplist>

<p dg="b2333b">If the <termref def="td">type
definition</termref> has
<propref comp="std" prop="variety"/> <pt>union</pt>, then calling
<termdef id="a-key-amt" term="actual member type definition" role="local"> that <phrase dg="b2333c"><!--*
* material suppressed here by diff group b2333a *
*--><phrase dg="b2333a"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of its <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive
membership</xtermref></phrase> which actually <termref def="key-vn">validated</termref></phrase><!--*
* material suppressed here by diff group b2333c *
*--> the
attribute item's <termref def="key-nv">normalized value</termref> <!--* 
<phrase diff="add" dg="b2333c">was
ultimately assigned</phrase> *-->
the <term>actual member type
definition</term></termdef>, there <phrase dg="opt.144">are</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> three additional properties:</p>

<!--*
* material suppressed here by diff group b2333b *
*-->
<!--*
* material suppressed here by diff group b2333b *
*-->

<proplist role="psvi" item="attribute">
<propdef name="member type definition namespace" id="a-member_type_definition_namespace">The <propref comp="std" prop="target namespace"/> of the <termref def="a-key-amt">actual
member type definition</termref>.</propdef>
<propdef name="member type definition anonymous" id="a-member_type_definition_anonymous"><pt>true</pt> if the <propref comp="std" prop="name"/> of the <termref def="a-key-amt">actual member
type definition</termref> is <termref def="key-null">absent</termref>,
otherwise <pt>false</pt>.</propdef>
<propdef name="member type definition name" id="a-member_type_definition_name">The <propref comp="std" prop="name"/> of the <termref def="a-key-amt">actual member type
definition</termref>, if it is not <termref def="key-null">absent</termref>.  If it is <termref def="key-null">absent</termref>, schema processors <rfc2119>may</rfc2119>, but need
not, provide a value unique to the definition.</propdef>
</proplist>

<p>The first (<termref def="key-iso">item isomorphic</termref>)
alternative above is provided for applications such as query
processors which need access to the full range of details about an
item's <termref def="key-va">assessment</termref>, for example the
type hierarchy; the second, for lighter-weight processors for whom
representing the significant parts of the type hierarchy as
information items might be a significant burden.</p>
     
<p>Also, if<phrase dg="iff"> and only if</phrase> the declaration has a <propref comp="ad" prop="value constraint"/>, the item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a property:</p>

     <proplist role="psvi" item="attribute">
      <propdef id="a-schema_default" name="schema default">The 
       <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="vc_a" prop="lexical form"/> of the </phrase>declaration's <propref comp="ad" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*-->.</propdef>
     </proplist>
     <p>If<!--*
* material suppressed here by diff group iff.144.r *
*--> the attribute information item was not <termref def="key-svaa">strictly assessed</termref>, then instead of the values specified above,
      <olist>
       <item>
        <p>The item's <propref ref="a-schema_normalized_value" role="psvi"/>
property has
the <termref def="key-iv">initial value</termref> of the item as its value;</p>
       </item>
       <item>
        <p>The <propref ref="a-type_definition" role="psvi"/> and
<propref ref="a-member_type_definition" role="psvi"/> properties, or their
alternatives, are based on the <termref def="simple-ur-type-itself">simple ur-type definition</termref>.</p>
       </item>
      </olist>
     </p>   
    </constraintnote>
    </div3>
    <div3 id="coss-attribute">
     <head>Constraints on Attribute Declaration Schema Components</head>
  <p>All attribute declarations (see <specref ref="cAttribute_Declarations"/>) <rfc2119>must</rfc2119> satisfy the following constraints.</p>
  <constraintnote type="cos" id="a-props-correct">
   <head>Attribute Declaration Properties Correct</head>
   <olist role="And">
    <item>
     <p>The values of the properties of an attribute declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in <specref ref="Attribute_Declaration_details"/>, modulo the impact 
of <specref ref="conformance-missing"/>.</p>
    </item>
    <item>
     <p>if there is a <propref comp="ad" prop="value constraint"/>, 
<phrase dg="iff">then</phrase>
      <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">it is a valid default with respect to the <propref comp="ad" prop="type definition"/> as defined in <specref ref="cos-valid-simple-default"/></phrase>.
     </p>
    </item>
    <item>
     <p>If the <propref comp="ad" prop="type definition"/> is or is <!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> 
from <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref><phrase dg="iff">,</phrase> then there 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is no</phrase>
<propref comp="ad" prop="value constraint"/>.</p>
    </item>
   </olist>
  </constraintnote>
     <constraintnote type="cos" id="cos-valid-simple-default" dg="rq129">
      <head>Simple Default Valid</head>
      <p>For a Value Constraint to be a valid default with respect to a <compref ref="std"/>
       <olist role="andtest">
        <item>
         <p>the Value Constraint's <propref comp="vc_a" prop="lexical form"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
<termref def="key-vn">valid</termref> with respect to that <compref ref="std"/> as defined by <specref ref="cvc-simple-type"/>.</p></item>
        <item>
         <p>the Value Constraint's <propref comp="vc_a" prop="lexical form"/>
maps to its <propref comp="vc_a" prop="value"/> in that <compref ref="std"/>'s value space.</p>
        </item>
       </olist>
      </p>
     </constraintnote>
  <constraintnote type="cos" id="no-xmlns">
   <head><code>xmlns</code> Not Allowed</head>
   <p>The <propref comp="ad" prop="name"/> of an attribute declaration <rfc2119>must not</rfc2119> match <code>xmlns</code>.</p>
<note>
<p>The <propref comp="ad" prop="name"/> of an attribute is an <termref def="gloss-NCName">NCName</termref>, which implicitly
prohibits attribute declarations of the form <code>xmlns:*</code>.</p>
</note>
  </constraintnote>
  <constraintnote type="cos" id="no-xsi">
   <head><code>xsi:</code> Not Allowed</head>
   <p>The <propref comp="ad" prop="target namespace"/> of an attribute declaration,
whether local or top-level, <rfc2119>must not</rfc2119> match <code>http://www.w3.org/2001/XMLSchema-instance</code>
(unless it is one of the four built-in declarations given in the next section).</p>
   <note>
<p>This reinforces the special status of these attributes, so that they not
only <emph>need</emph> not be declared to be allowed in instances, but
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><rfc2119>must not</rfc2119></phrase> be declared.  It also removes any temptation to 
experiment with supplying global or fixed values
for e.g. <code>xsi:type</code> or <code>xsi:nil</code>, which would be
seriously misleading, as they would have no effect.</p>
</note>
  </constraintnote>
    </div3>
    <div3>
     <head>Built-in Attribute Declarations</head>
     <p>There are four attribute declarations present in every
schema by definition:</p>
    <schemaComp id="xsi.type">
     <head>Attribute Declaration for the 'type' attribute</head>
     <pvlist>
      <pvpair comp="ad" prop="name"><code>type</code></pvpair>
      <pvpair comp="ad" prop="target namespace"><code>http://www.w3.org/2001/XMLSchema-instance</code></pvpair>
      <pvpair comp="ad" prop="type definition">The built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#QName">QName</xtermref> simple
type definition</pvpair>
      <pvpair comp="ad" prop="scope">A <compref ref="sc_a"/> as follows:
       <pvlist>
        <pvpair comp="sc_a" prop="variety"><pt>global</pt></pvpair>
        <pvpair comp="sc_a" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ad" prop="value constraint"><termref def="key-null">absent</termref></pvpair>
      <pvpair comp="ad" prop="annotations"><termref def="key-null">absent</termref></pvpair>
     </pvlist>
    </schemaComp>
     <schemaComp id="xsi.nil">
     <head>Attribute Declaration for the 'nil' attribute</head>
      <pvlist>
      <pvpair comp="ad" prop="name"><code>nil</code></pvpair>
      <pvpair comp="ad" prop="target namespace"><code>http://www.w3.org/2001/XMLSchema-instance</code></pvpair>
      <pvpair comp="ad" prop="type definition">The built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#boolean">boolean</xtermref> simple
type definition</pvpair>
      <pvpair comp="ad" prop="scope">A <compref ref="sc_a"/> as follows:
       <pvlist>
        <pvpair comp="sc_a" prop="variety"><pt>global</pt></pvpair>
        <pvpair comp="sc_a" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ad" prop="value constraint"><termref def="key-null">absent</termref></pvpair>
      <pvpair comp="ad" prop="annotations"><termref def="key-null">absent</termref></pvpair>
     </pvlist>
     </schemaComp>
     <schemaComp id="xsi.schemaLocation">
     <head>Attribute Declaration for the 'schemaLocation' attribute</head>
      <pvlist>
      <pvpair comp="ad" prop="name"><code>schemaLocation</code></pvpair>
      <pvpair comp="ad" prop="target namespace"><code>http://www.w3.org/2001/XMLSchema-instance</code></pvpair>
      <pvpair comp="ad" prop="type definition">An anonymous simple type definition, as follows:
       <pvlist>
        <pvpair comp="std" prop="name"><termref def="key-null">absent</termref></pvpair>
        <pvpair comp="std" prop="target namespace"><code>http://www.w3.org/2001/XMLSchema-instance</code></pvpair>
        <pvpair comp="std" prop="base type definition">The built in <termref def="simple-ur-type-itself">simple ur-type definition</termref></pvpair>
        <pvpair comp="std" prop="facets"><termref def="key-null">absent</termref></pvpair>
        <pvpair comp="std" prop="variety"><pt>list</pt></pvpair>
        <pvpair comp="std" prop="item type definition">The built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#anyURI">anyURI</xtermref> simple
type definition</pvpair>
        <pvpair comp="std" prop="annotations"><termref def="key-null">absent</termref></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ad" prop="scope">A <compref ref="sc_a"/> as follows:
       <pvlist>
        <pvpair comp="sc_a" prop="variety"><pt>global</pt></pvpair>
        <pvpair comp="sc_a" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ad" prop="value constraint"><termref def="key-null">absent</termref></pvpair>
      <pvpair comp="ad" prop="annotations"><termref def="key-null">absent</termref></pvpair>
     </pvlist>
     </schemaComp>
     <schemaComp id="xsi.noNamespaceSchemaLocation">
     <head>Attribute Declaration for the 'noNamespaceSchemaLocation' attribute</head>
      <pvlist>
      <pvpair comp="ad" prop="name"><code>noNamespaceSchemaLocation</code></pvpair>
      <pvpair comp="ad" prop="target namespace"><code>http://www.w3.org/2001/XMLSchema-instance</code></pvpair>
      <pvpair comp="ad" prop="type definition">The built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#anyURI">anyURI</xtermref> simple
type definition</pvpair>
      <pvpair comp="ad" prop="scope">A <compref ref="sc_a"/> as follows:
       <pvlist>
        <pvpair comp="sc_a" prop="variety"><pt>global</pt></pvpair>
        <pvpair comp="sc_a" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
       </pvlist> 
      </pvpair>
      <pvpair comp="ad" prop="value constraint"><termref def="key-null">absent</termref></pvpair>
      <pvpair comp="ad" prop="annotations"><termref def="key-null">absent</termref></pvpair>
     </pvlist>
     </schemaComp>
    </div3>
   </div2>
   <div2 id="cElement_Declarations">
    <head>Element Declarations</head>
       <p>Element declarations provide for:</p>
    <ulist>
     <item><p>Local <termref def="key-vn">validation</termref> of element information item values using a type definition;</p></item>
     <item><p>Specifying default or fixed values for an element information items;</p></item>
     <item><p>Establishing uniquenesses and reference constraint relationships among the values of related elements and
attributes;</p>
</item>
     <item><p>Controlling the substitutability of elements through the
mechanism of <termref def="key-equivalenceClass">element substitution groups</termref>.</p>
     </item>
    </ulist>
    <note role="example">
     <eg xml:space="preserve">&lt;xs:element name="PurchaseOrder" type="PurchaseOrderType"/&gt;

&lt;xs:element name="gift"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element name="birthday" type="xs:date"/&gt;
   &lt;xs:element ref="PurchaseOrder"/&gt;
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;
</eg>
     <p>XML representations of several different types of element declaration</p>
    </note>
    <div3 id="Element_Declaration_details">
     <head>The Element Declaration Schema Component</head>
<p>The element declaration schema component has the following
properties:</p>

    <compdef name="Element Declaration" abbrev="ed" showAKO="true"/>
     <microCompdef name="Scope" abbrev="sc_e" dg="ep01"/>
    <microCompdef name="Value Constraint" abbrev="vc_e" dg="ep01"/>
<p>The <propref comp="ed" prop="name"/> property <rfc2119>must</rfc2119> match the local part of the names
of element information items being <termref def="key-vn">validated</termref>.</p>
     <p>A <propref comp="ed" prop="scope"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">with <propref comp="sc_e" prop="variety"/></phrase> <pt>global</pt> identifies element declarations
available for use in content models throughout the schema.  Locally scoped declarations are available for use only within the
<phrase dg="scope-1973">complex type</phrase><!--*
* material suppressed here by diff group scope-1973 *
*--> identified by the <propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="parent"/></phrase> property. <phrase dg="scope-1973"> This property is <termref def="key-null">absent</termref> in the case of declarations within named model groups:  their scope will be determined when they are used in the construction of complex type definitions.</phrase>
</p>
    <p>A <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 value of the <propref comp="ed" prop="target namespace"/> property provides for <termref def="key-vn">validation</termref> of
namespace-qualified element information items.  <termref def="key-null">Absent</termref> values of
<propref comp="ed" prop="target namespace"/> <termref def="key-vn">validate</termref> unqualified items.</p>
<p>An element information item is <termref def="key-vn">valid</termref>
<phrase dg="iff">only </phrase>if it satisfies 
the <propref comp="ed" prop="type definition"/>.  For such an
item, schema information set contributions appropriate to the <propref comp="ed" prop="type definition"/> are added to the
corresponding element information item in the <termref def="key-psvi">post-schema-validation infoset</termref>.
</p>
<p>If <propref comp="ed" prop="nillable"/> is <pt>true</pt>, then an
element <!--*
* material suppressed here by diff group ep08a *
*--><phrase dg="ep08a">can</phrase> also be <termref def="key-vn">valid</termref> if it carries the namespace qualified
attribute with <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local
name</xpropref> <code>nil</code> from namespace
<code>http://www.w3.org/2001/XMLSchema-instance</code> and value <code>true</code> (see
<specref ref="xsi_nil"/>) even if it has no text or element content
despite a <propref comp="ctd" prop="content type"/> which would otherwise 
require content. Formal details of
element <termref def="key-vn">validation</termref> are described in
<specref ref="cvc-elt"/>.</p>
<p><propref comp="ed" prop="value constraint"/> establishes a default or fixed
value for an element.  If <phrase dg="ep01">a <propref comp="ed" prop="value constraint"/> with a <propref comp="vc_e" prop="variety"/> of </phrase><pt>default</pt> is <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">present</phrase>, and if the element
being <termref def="key-vn">validated</termref> is empty, then <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">the <propref comp="ed" prop="value constraint"/>'s <propref comp="vc_e" prop="lexical form"/></phrase> becomes the <propref role="psvi" ref="e-schema_normalized_value"/> of the <termref def="key-vn">validated</termref> element in the <termref def="key-psvi">post-schema-validation infoset</termref>.  If <pt>fixed</pt> is specified, then the element's content
<rfc2119>must</rfc2119> either be empty, in which case <pt>fixed</pt> behaves as <pt>default</pt>,
or its value <rfc2119>must</rfc2119> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">be intentical to</phrase> the <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ed" prop="value constraint"/>'s <propref comp="vc_e" prop="value"/></phrase>.</p>
     <note>
      <p>The provision of defaults for elements goes beyond what is possible in
XML<!--*
* material suppressed here by diff group fpwd *
*--> DTDs, and does not exactly correspond to defaults for attributes.  In
particular, an element with a non-empty <propref comp="ed" prop="value constraint"/> whose simple
type definition includes the empty string in its lexical space will
nonetheless never receive that value, because the <propref comp="ed" prop="value constraint"/> will override it.</p>
     </note>
<p><propref comp="s" prop="identity-constraint definitions"/> express constraints establishing uniquenesses and reference relationships among the values of related elements and
attributes.  See <specref ref="cIdentity-constraint_Definitions"/>.</p>
<p>Element declarations are potential members of the substitution group, if any, identified
by <propref comp="ed" prop="substitution group affiliation"/>.  Potential membership is transitive but not symmetric;  an element
declaration is a potential member of any group of which its <propref comp="ed" prop="substitution group affiliation"/> is a potential member.  
Actual membership <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*-->
be blocked by the effects of <propref comp="ed" prop="substitution group exclusions"/> or <propref comp="ed" prop="disallowed substitutions"/>, see below.</p>
<p>An empty <propref comp="ed" prop="substitution group exclusions"/> allows a declaration to be nominated as
the <propref comp="ed" prop="substitution group affiliation"/> of other element declarations having the same <propref comp="ed" prop="type definition"/> or
types <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> therefrom.  The explicit
values of <propref comp="ed" prop="substitution group exclusions"/> rule out element declarations having types which
are <pt>extension</pt>s or <pt>restriction</pt>s respectively of <propref comp="ed" prop="type definition"/>.  If
both values are specified, then the declaration <rfc2119>must not</rfc2119> be nominated as the
<propref comp="ed" prop="substitution group affiliation"/> of any other declaration.</p>

<p>The supplied values for <propref comp="ed" prop="disallowed substitutions"/> determine
whether an element declaration appearing in a <termref def="key-contentModel">content model</termref> will be prevented from additionally
<termref def="key-vn">validating</termref> elements (a) with an <specref ref="xsi_type"/> that identifies an
<pt>extension</pt> or <pt>restriction</pt> of the type of the declared element, and/or (b) from <termref def="key-vn">validating</termref> elements which are in the
substitution group headed by the declared element.
If <propref comp="ed" prop="disallowed substitutions"/> is empty, then all <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> types and substitution group members are allowed.</p>
<p>Element declarations for which <propref comp="ed" prop="abstract"/> is <pt>true</pt> can appear in
content models only when substitution is allowed;
such declarations 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must not</rfc2119></phrase> 
themselves ever be used to <termref def="key-vn">validate</termref> element content.</p>
     <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="ed" prop="annotations"/> property.</p>
    </div3>
    <div3 id="declare-element">
<head>XML Representation of Element Declaration Schema Components</head>
<p>The XML representation for an element declaration schema component is an
<eltref ref="element"/> element information item.  It specifies a type
definition for an element either by reference or explicitly, and <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> provide
occurrence and default information.  The correspondences between the
properties of the information item and
properties of the component(s) it corresponds to are as follows:</p>
<reprdef>
 <reprelt eltname="element" type="element"/>
<p>If the <eltref ref="element"/> element information item has <eltref ref="schema"/> as its parent, the corresponding schema component is as
follows:</p>
<reprcomp abstract="Element Declaration" ref="Element_Declaration_details">  

<propmap comp="ed" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>.</propmap>

<propmap comp="ed" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <eltref ref="schema"/> element information item, or <termref def="key-null">absent</termref> if there is none.</propmap>
  
<propmap comp="ed" prop="scope"><phrase dg="ep01">A
<compref ref="sc_e"/> as follows</phrase>
    <pvlist>
     <pvpair comp="sc_e" prop="variety"><pt>global</pt></pvpair>
     <pvpair comp="sc_e" prop="parent" dg="ep01"><termref def="key-null">absent</termref></pvpair>
    </pvlist>
</propmap>

<propmap comp="ed" prop="type definition">The type definition
corresponding to the <eltref ref="simpleType"/> or <eltref ref="complexType"/> element information item in the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if
either is present, otherwise the type definition <termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref> of the
<code>type</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, otherwise the
<propref comp="ed" prop="type definition"/> of the element declaration
<termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref> of
the <code>substitutionGroup</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present,
otherwise the <termref diff="nsq-del" def="ur-type-itself" dg="rq17">ur-type definition</termref><termref diff="nsq-add" def="any-type-itself" dg="rq17">definition of anyType</termref>.</propmap>

<propmap comp="ed" prop="nillable">The <termref def="key-vv">actual value</termref> of the <code>nillable</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <pt>false</pt>.</propmap>

<propmap comp="ed" prop="value constraint">If there is a
<code>default</code> or a <code>fixed</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, then
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="vc_e"/> as follows</phrase>,
otherwise <termref def="key-null">absent</termref>. <termdef id="l-std" term="effective simple type definition" role="local" dg="ep01">Use the name <term>effective simple type
definition</term> for the <propref comp="ed" prop="type definition"/>,
if it is a simple type definition, or, if the <propref comp="ed" prop="type definition"/>'s <propref comp="ctd" prop="content type"/> has
<propref comp="ct" prop="variety"/> <pt>simple</pt>, that <propref comp="ctd" prop="content type"/>'s <propref comp="ct" prop="simple type definition"/>, or else the built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#string">string</xtermref> simple type
definition).</termdef>
  <pvlist>
   <pvpair comp="vc_e" prop="variety">either <pt>default</pt> or
<pt>fixed</pt>, as appropriate</pvpair>
   <pvpair comp="vc_e" prop="value">the <termref def="key-vv">actual value</termref> (with respect to the
<termref def="l-std"/>) of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the</phrase>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
   <pvpair comp="vc_e" prop="lexical form" dg="rq129">the
<termref def="key-nv">normalized value</termref> (with respect to the <termref def="l-std"/>) of the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></pvpair>
  </pvlist></propmap>
  <propmap comp="ed" prop="identity-constraint definitions">A set consisting of the
identity-constraint-definitions corresponding to all the <eltref ref="key"/>, <eltref ref="unique"/> and <eltref ref="keyref"/> element information items in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any, otherwise the empty set.</propmap>
  <propmap comp="ed" prop="substitution group affiliation">The element declaration <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the
<code>substitutionGroup</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
  <propmap comp="ed" prop="disallowed substitutions">A set depending on the <termref def="key-vv">actual value</termref> of the
<code>block</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise on the <termref def="key-vv">actual value</termref> of the
<code>blockDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the ancestor <eltref ref="schema"/> element
information item, if present, otherwise on the empty string.  Call this the <local>EBV</local> (for effective block value).  Then the value of this property is
 <olist role="caseval">
  <item>
   <p role="if">the <local>EBV</local> is the empty string</p>
   <p role="then">the empty set;</p>
  </item>
  <item>
   <p role="if">the <local>EBV</local> is <code>#all</code></p>
   <p role="then"><code>{</code><pt>extension</pt>, <pt>restriction</pt>, <pt>substitution</pt><code>}</code>;</p>
  </item>
  <item>
   <p role="otherwise">a set with members drawn from the set above, each being present or
absent depending on whether the <termref def="key-vv">actual value</termref> (which is a list) contains an
equivalently named item.
   <note>
       <p>Although the <code>blockDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of
<eltref ref="schema"/> <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> include values other than
<pt>extension</pt>, <pt>restriction</pt> or <pt>substitution</pt>,
those values are ignored in the determination of <propref comp="ed" prop="disallowed substitutions"/> for element declarations (they
<emph>are</emph> used elsewhere).</p>
      </note>
   </p>
  </item>
 </olist>
  </propmap>
  <propmap comp="ed" prop="substitution group exclusions">As for <propref comp="ed" prop="disallowed substitutions"/> above, but using the
<code>final</code> and <code>finalDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> in place of the
<code>block</code> and <code>blockDefault</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> and with the
relevant set being <code>{</code><pt>extension</pt>, <pt>restriction</pt><code>}</code>.</propmap>
  <propmap comp="ed" prop="abstract">The <termref def="key-vv">actual value</termref> of the <code>abstract</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <pt>false</pt>.</propmap>
  <propmap comp="ed" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp>
 <p>otherwise if the <eltref ref="element"/> element information item has
<eltref ref="complexType"/> or <eltref ref="group"/> as an ancestor and the
<code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is absent, the corresponding schema components
are as follows (unless <code>minOccurs=maxOccurs=0</code>, in which case the item
corresponds to no component at all):</p>
 <reprcomp abstract="Particle" ref="Particle_details">
  <propmap comp="p" prop="min occurs">The <termref def="key-vv">actual value</termref> of the <code>minOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="max occurs"><pt>unbounded</pt>, if the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> equals <pt>unbounded</pt>, otherwise the <termref def="key-vv">actual value</termref> of the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="term">A (local) element declaration as given below.</propmap>
  
</reprcomp>
 <p> 
An element declaration as in the first case above, with the exception of its <propref comp="ed" prop="target namespace"/> and <propref comp="ed" prop="scope"/> properties, which are as below:</p>
 <reprcomp abstract="Element Declaration" ref="Element_Declaration_details">
  <propmap comp="ed" prop="target namespace">If <code>form</code> is present and its
<termref def="key-vv">actual value</termref> is <code>qualified</code>, or if <code>form</code> is absent and the
<termref def="key-vv">actual value</termref> of <code>elementFormDefault</code> on the <eltref ref="schema"/>
ancestor is <code>qualified</code>, then the <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <eltref ref="schema"/>
element information item, or <termref def="key-null">absent</termref> if there
is none, otherwise <termref def="key-null">absent</termref>.</propmap>
  <propmap comp="ed" prop="scope"><phrase dg="ep01">A <compref ref="sc_e"/> as follows:</phrase>
   <pvlist>
     <pvpair comp="sc_e" prop="variety" dg="ep01"><pt>local</pt></pvpair>
     <pvpair comp="sc_e" prop="parent">If the <eltref ref="element"/> element information item
has <eltref ref="complexType"/> as an ancestor, the <compref ref="ctd"/>
corresponding to that item, otherwise (the <eltref ref="element"/> element
information item is within a named <eltref ref="group"/> <phrase dg="scope-1973">definition</phrase><!--*
* material suppressed here by diff group scope-1973 *
*-->),
<termref def="key-null" dg="scope-1973">absent</termref><!--*
* material suppressed here by diff group scope-1973 *
*-->.</pvpair>
    </pvlist>
   </propmap>
 </reprcomp>
 <p>otherwise (the <eltref ref="element"/> element information item has
<eltref ref="complexType"/> or <eltref ref="group"/> as an ancestor and the
<code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present), the corresponding schema component is as
follows (unless <code>minOccurs=maxOccurs=0</code>, in which case the item
corresponds to no component at all):</p>
 <reprcomp abstract="Particle" ref="Particle_details">
  <propmap comp="p" prop="min occurs">The <termref def="key-vv">actual value</termref> of the <code>minOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="max occurs"><pt>unbounded</pt>, if the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> equals <pt>unbounded</pt>, otherwise the <termref def="key-vv">actual value</termref> of the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="term">The (top-level) element declaration <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>.</propmap>
</reprcomp>
</reprdef>


<p><eltref ref="element"/> corresponds to an element declaration, and allows
the type definition of that declaration to be specified either by reference or
by explicit inclusion.</p>
  <p><eltref ref="element"/>s within <eltref ref="schema"/> produce
<pt>global</pt> element declarations; <eltref ref="element"/>s within <eltref ref="group"/> or <eltref ref="complexType"/> produce either particles which contain <pt>global</pt> element declarations (if there's a <code>ref</code> attribute) or local declarations (otherwise).  For complete declarations, top-level or local, the <code>type</code> attribute is used when the declaration can use a
built-in or pre-declared type definition.  Otherwise an
anonymous <eltref ref="simpleType"/> or <eltref ref="complexType"/> is provided inline.</p>
 <p>Element information items <termref def="key-vn">validated</termref> by a top-level 
declaration <rfc2119>must</rfc2119> be qualified with the
<propref comp="ed" prop="target namespace"/> of that 
declaration<!--*
* material suppressed here by diff group iff *
*--><phrase dg="iff">.
If the 
<propref comp="ed" prop="target namespace"/> is <termref def="key-null">absent</termref>,
the item <rfc2119>must</rfc2119> be unqualified.</phrase>
Control over whether element information items <termref def="key-vn">validated</termref> by a local declaration <rfc2119>must</rfc2119> be similarly qualified or not
is provided by the <code>form</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, whose default is provided
by the <code>elementFormDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> on the enclosing <eltref ref="schema"/>, via its determination of <propref comp="ed" prop="target namespace"/>.</p>
<p>As noted above the names for top-level element declarations are in a separate
<termref def="key-symbolSpace">symbol space</termref> from the symbol spaces for
the names of type definitions, so there can (but need
not be) a simple or complex type definition with the same name as a
top-level element.  As with attribute names, the names of locally-scoped
element declarations with no <propref comp="ed" prop="target namespace"/> reside in symbol spaces local to the type definition which contains
them.</p>

  <p>Note that the above allows for two levels of defaulting for unspecified
type definitions.  An <eltref ref="element"/> with no referenced or included type definition will
correspond to an element declaration which has the same type definition as the
head of its substitution group if it identifies one, otherwise the <termref diff="nsq-del" def="key-urType" dg="rq17">ur-type definition</termref><termref diff="nsq-add" def="key-anyType" dg="rq17">definition of anyType</termref>.  This has the important consequence that the minimum valid element declaration, that is, one with only a <code>name</code> 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.</p>

 <p>See below at <specref ref="declare-key"/> for <eltref ref="key"/>, <eltref ref="unique"/> and <eltref ref="keyref"/>.</p>


<note role="example">
<eg xml:space="preserve">&lt;xs:element name="unconstrained"/&gt;

&lt;xs:element name="emptyElt"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:attribute ...&gt;. . .&lt;/xs:attribute&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;

&lt;xs:element name="contextOne"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element name="myLocalElement" type="myFirstType"/&gt;
   &lt;xs:element ref="globalElement"/&gt;
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;

&lt;xs:element name="contextTwo"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element name="myLocalElement" type="mySecondType"/&gt;
   &lt;xs:element ref="globalElement"/&gt;
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;</eg>
<p>The first example above declares an element whose type, by default, is 
<phrase diff="nsq-del" dg="rq17">the</phrase>
<termref diff="nsq-del" def="key-urType" dg="rq17">ur-type
definition</termref><!--* <termref def="key-anyType" diff="add" dg="rq17">definition
of anyType</termref>*--><termref diff="nsq-add" def="key-anyType" dg="rq17">anyType</termref>.  
<!--* NOT "whose type is the definition of anyType", unless you want me 
    * to recite "The name of the song is called ..." at every occasion. *-->
<!--* MSM notes that we're on our way to a spec in which the word 'ur-' 
    * does not occur.  I'm resisting the temptation to stop working on RQ-17
    * and do it now. Maybe later, as dessert. *-->
The second uses an embedded anonymous complex
type definition.</p>
<p>The last two examples illustrate the use of local element declarations.  Instances of <code>myLocalElement</code> within
<code>contextOne</code> will be constrained by <code>myFirstType</code>,
while those within <code>contextTwo</code> will be constrained by
<code>mySecondType</code>. </p>

</note>
<note>
<p>The possibility that differing attribute declarations and/or content models
would apply to elements with the same name in different contexts is an
extension beyond the expressive power of a DTD in XML<!--*
* material suppressed here by diff group fpwd *
*-->.</p>
</note>
  <note role="example">
   <eg xml:space="preserve"> &lt;xs:complexType name="facet"&gt;
  &lt;xs:complexContent&gt;
   &lt;xs:extension base="xs:annotated"&gt;
    &lt;xs:attribute name="value" use="required"/&gt;
   &lt;/xs:extension&gt;
  &lt;/xs:complexContent&gt;
 &lt;/xs:complexType&gt;

 &lt;xs:element name="facet" type="xs:facet" abstract="true"/&gt;

 &lt;xs:element name="encoding" substitutionGroup="xs:facet"&gt;
  &lt;xs:complexType&gt;
   &lt;xs:complexContent&gt;
    &lt;xs:restriction base="xs:facet"&gt;
     &lt;xs:sequence&gt;
      &lt;xs:element ref="annotation" minOccurs="0"/&gt;
     &lt;/xs:sequence&gt;
     &lt;xs:attribute name="value" type="xs:encodings"/&gt;
    &lt;/xs:restriction&gt;
   &lt;/xs:complexContent&gt;
  &lt;/xs:complexType&gt;
 &lt;/xs:element&gt;

 &lt;xs:element name="period" substitutionGroup="xs:facet"&gt;
  &lt;xs:complexType&gt;
   &lt;xs:complexContent&gt;
    &lt;xs:restriction base="xs:facet"&gt;
     &lt;xs:sequence&gt;
      &lt;xs:element ref="annotation" minOccurs="0"/&gt;
     &lt;/xs:sequence&gt;
     &lt;xs:attribute name="value" type="xs:duration"/&gt;
    &lt;/xs:restriction&gt;
   &lt;/xs:complexContent&gt;
  &lt;/xs:complexType&gt;
 &lt;/xs:element&gt;

 &lt;xs:complexType name="datatype"&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element ref="facet" minOccurs="0" maxOccurs="unbounded"/&gt;
  &lt;/xs:sequence&gt;
  &lt;xs:attribute name="name" type="xs:NCName" use="optional"/&gt;
  . . .
 &lt;/xs:complexType&gt;
</eg>
   <p>An example from a previous version of the schema for datatypes.  The
<code>facet</code> type is defined
and the <code>facet</code> element is declared to use it. The <code>facet</code> element is abstract -- it's
<emph>only</emph> defined to stand as the head for a substitution group.  Two further
elements are declared, each a member of the <code>facet</code> substitution group.  Finally a type is defined which refers to <code>facet</code>, thereby
allowing <emph>either</emph> <code>period</code> or <code>encoding</code> (or
any other member of the group).</p>
  </note>
</div3>
    <div3>
     <head>Constraints on XML Representations of Element Declarations</head>
 <constraintnote id="src-element" type="src">
  <head>Element Declaration Representation OK</head>
  <p>In addition to the conditions imposed on <eltref ref="element"/> element
information items by the schema for schemas:
   <olist role="and">
    <item>
     <p><code>default</code> and <code>fixed</code> 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are not
both</phrase> present.</p>
    </item>
    <item>
     <p>If the item's parent is not <eltref ref="schema"/>, then
      <olist role="andtest">
       <item>
     <p>One of <code>ref</code> or <code>name</code> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> present, but not both.</p>
    </item>
       <item>
        <p>If <code>ref</code> is present, then all of <eltref ref="complexType"/>,
<eltref ref="simpleType"/>, <eltref ref="key"/>, <eltref ref="keyref"/>,
<eltref ref="unique"/>, <code>nillable</code>, <code>default</code>,
<code>fixed</code>, <code>form</code>, <code>block</code> and <code>type</code> 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> absent,
i.e. only <code>minOccurs</code>, <code>maxOccurs</code>, <code>id</code> 
<phrase dg="modals">and <eltref ref="annotation"/></phrase> are
allowed <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">to appear together with</phrase> 
<code>ref</code><!--*
* material suppressed here by diff group modals *
*-->.</p>
       </item>
      </olist>
     </p>
    </item>
    <item>
     <!--*
* material suppressed here by diff group modals *
*-->
     <p dg="modals"><!--*
* material suppressed here by diff group ep08a *
*--><phrase dg="ep08a">The <eltref ref="element"/> element does not have both a
<eltref ref="simpleType"/> or <eltref ref="complexType"/> child and a
type attribute.</phrase></p>
    </item>
    <item>
     <p>The corresponding particle and/or element declarations 
<!--*
* material suppressed here by diff group modals *
*--> satisfy the conditions set
out in <specref ref="coss-element"/> and <specref ref="coss-particle"/>.</p>
    </item>
   </olist>
  </p>
 </constraintnote>
    </div3>
    <div3 id="eldec_vr">
     <head>Element Declaration Validation Rules</head>
     <constraintnote type="cvc" id="cvc-elt">
      <head>Element Locally Valid (Element)</head>
      <p>For an element information item to be locally <termref def="key-vn">valid</termref> with respect to an element
       declaration
       <olist role="and">
	<item id="c-ea">
	 <p>The declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> <termref def="key-null">absent</termref>.</p>
	</item>
	<item>
	 <p>Its <propref comp="ed" prop="abstract"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
	  <pt>false</pt>.</p>
	</item>
	<item>	 
	 <!--*
* material suppressed here by diff group modals *
*-->
	 <olist role="Ortest" dg="modals">
	  <item>
	   <p><propref comp="ed" prop="nillable"/> is <pt>false</pt>,
	    and there is no attribute information item among the
	    element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace 
	     name</xpropref> is identical to
	    <code>http://www.w3.org/2001/XMLSchema-instance</code> and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local 
	     name</xpropref> is <code>nil</code>.</p>
	  </item>
	  <item id="c-nl">
	   <!--* added after agreement between SG and MSM *-->
	   <p><propref comp="ed" prop="nillable"/> is <pt>true</pt>
	    and 
	    <olist role="ortest">
	     <item>
	      <p>There is no such attribute information item.</p>
	     </item>
	     <item>
	      <p>There is such an attribute information item,
	       and its <termref def="key-vv">actual value</termref> is <code>false</code>.</p>
	     </item>
	     <item>
	      <p>There is such an attribute information item,
	       and its <termref def="key-vv">actual value</termref> is <code>true</code>, and 
	       <olist role="andtest">
		<item>
		 <p>The element information item has no character or
		  element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
		</item>
		<item>
		 <p>There is no <!--*
* material suppressed here by diff group ep01 *
*--><propref comp="ed" prop="value constraint"/><phrase dg="ep01"> with <propref comp="vc_e" prop="variety"/> <pt>fixed</pt></phrase>.</p>
		</item>
	       </olist></p>
	     </item>
	    </olist></p>
	  </item>
	  <!--*
* material suppressed here by diff group abandoned *
*-->
	  <!--*
* material suppressed here by diff group abandoned *
*-->
	  <!--*
* material suppressed here by diff group abandoned *
*-->
	 </olist>
	</item>
	<item>
	 <p>If there is an attribute information item among the
	  element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace 
	   name</xpropref> is identical to
	  <code>http://www.w3.org/2001/XMLSchema-instance</code> and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local 
	   name</xpropref> is <code>type</code>, then
	  <olist role="andtest">
	   <item>
	    <p>The <termref def="key-nv">normalized value</termref> of that attribute information item
	     <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with
	     respect to the built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#QName">QName</xtermref> simple type, as
	     defined by <specref ref="cvc-simple-type"/>;</p>
	   </item>
	   <item>
	    <p>The <termref def="q-local">local name</termref> and
	     <termref def="q-uri">namespace name</termref> (as defined
	     in <specref ref="src-qname"/>), of the <termref def="key-vv">actual value</termref> of that
	     attribute information item <!--*
* material suppressed here by diff group modals *
*--> resolve to a type
	     definition, as defined in <specref ref="cvc-resolve-instance"/> — <termdef id="key-ltd" term="local type definition" role="local">call this type definition the <term>local
	       type definition</term></termdef>;</p></item>
	   <item>
	    <p>The <termref def="key-ltd">local type
	      definition</termref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from the
	     <propref comp="ed" prop="type        definition"/> given the union of the <propref comp="ed" prop="disallowed        substitutions"/> and the <propref comp="ed" prop="type        definition"/>'s <propref comp="ctd" prop="prohibited         substitutions"/>, as defined in <specref ref="cos-ct-derived-ok"/> (if it is a complex type
	     definition), or given <propref comp="ed" prop="disallowed        substitutions"/> as defined in <specref ref="cos-st-derived-ok"/> (if it is a simple type
	     definition).</p>
	   </item>
	  </olist> <termdef id="key-atd" term="actual type definition" role="local">The phrase <term>actual type definition</term>
	   occurs below.  If the above three clauses are satisfied,
	   this <rfc2119>must</rfc2119> be understood as referring to the <termref def="key-ltd">local type definition</termref>, otherwise
	   to the <propref comp="ed" prop="type      definition"/></termdef>.
	 </p>
	</item>
	<item>
	 <olist role="Casetest">
	  <item>
	   <p role="if">the declaration has a <propref comp="ed" prop="value constraint"/>, <phrase dg="modals">and</phrase> the item has neither element nor
	    character <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref><phrase dg="modals">,</phrase> and <clauseref ref="c-nl"/> has
	    not applied</p>
	   <p role="then">
	    <olist role="andtest">
	     <item>
	      <p>If the <termref def="key-atd">actual type
		definition</termref> is a <termref def="key-ltd">local
		type definition</termref><phrase dg="iff">,</phrase> 
                then the 
       <!--*
* material suppressed here by diff group rq129 *
*-->declaration's <propref comp="ed" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*--> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a valid default for the
	       <termref def="key-atd">actual type definition</termref>
	       as defined in <specref ref="cos-valid-default"/>.
	      </p>
	     </item>
	     <item>
	      <p>The element information item with the 
       <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="vc_e" prop="lexical form"/> of the </phrase>declaration's <propref comp="ed" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*--> used as its
	       <termref def="key-nv">normalized value</termref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref>
	       with respect to the <termref def="key-atd">actual type
		definition</termref> as defined by <specref ref="cvc-type"/>.</p>
	     </item>
	    </olist>
	   </p>
	  </item>
	  <item>
	   <p role="if">the declaration has no <propref comp="ed" prop="value constraint"/><phrase dg="modals">,</phrase> or the item has either element or
	    character <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref><phrase dg="modals">,</phrase> or <clauseref ref="c-nl"/> has
	    applied</p>
	   <p role="then"><olist role="andtest">
	     <item>
	      <p>The element information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to the
	       <termref def="key-atd">actual type definition</termref>
	       as defined by <specref ref="cvc-type"/>.</p>
	     </item>
	     <item>
	      <p>If there is a <!--*
* material suppressed here by diff group ep01 *
*--><propref comp="ed" prop="value constraint"/><phrase dg="ep01"> with <propref comp="vc_e" prop="variety"/> <pt>fixed</pt></phrase> and
	       <clauseref ref="c-nl"/> has not applied, <phrase dg="iff">then</phrase>
	       <olist role="andtest">
		<item>
		 <p>The element information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> no element
		  information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
		</item>
		<item>
		 <olist role="Case">
		  <item>
		   <p role="if">the <!--*
* material suppressed here by diff group rq129 *
*--><termref def="key-atd">actual type
		     definition</termref> <phrase dg="rq129">is a <compref name="complex type definition" ref="ctd"/> whose <propref comp="ctd" prop="content type"/></phrase><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>mixed</pt></p>
		   <p role="then">the <termref def="key-iv">initial
		     value</termref> of the item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">matches</phrase> the 
       <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="vc_e" prop="lexical form"/> of the </phrase>declaration's <propref comp="ed" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*-->.</p>
		  </item>
		  <item>
		   <p role="if">the 
                     <!--*
* material suppressed here by diff group rq129 *
*--><termref def="key-atd">actual type
		     definition</termref> <phrase dg="rq129">is a <compref name="simple type definition" ref="std"/> or
a <compref name="complex type definition" ref="ctd"/> whose <propref comp="ctd" prop="content type"/> </phrase><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>simple</pt></p>
		   <p role="then">the <termref def="key-vv">actual value</termref> of the item <!--*
* material suppressed here by diff group modals *
*--><!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">is identical to</phrase> the<!--*
* material suppressed here by diff group rq129 *
*--> <propref comp="ed" prop="value        constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">'s <propref comp="vc_e" prop="value"/></phrase>.
     <ednote>
      <edtext>Most of the above change is actually nothing to do with rq129,
but is a fix for a long-standing bug, which called for the comparison of a
value and a lexical form.  Need to check if we decided on identical or equal.</edtext>
     </ednote></p>
		  </item>
		 </olist>
		</item>
	       </olist>
	      </p>
	     </item>
	    </olist></p>
	  </item>
	 </olist>
	</item>
       
	<item>
	 <p>The element information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to each of the
	  <propref comp="s" prop="identity-constraint     definitions"/> as per <specref ref="cvc-identity-constraint"/>.</p>
	</item>
	<item>
	 <p>If the element information item is the <termref def="key-vr">validation root</termref>, <phrase dg="modals">then</phrase> it <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> per <specref ref="cvc-id"/>.</p>
	</item>
      </olist>      
     </p>
    </constraintnote>
    <constraintnote type="cvc" id="cvc-type">
     <head>Element Locally Valid (Type)</head>
     <p>For an element information item to be locally <termref def="key-vn">valid</termref> with respect to a type definition
      <olist role="and">
       <item id="c-ct">
        <p>The type definition <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> <termref def="key-null">absent</termref>;</p>
       </item>
       <item>
        <p>
        It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">does not</phrase> have
<propref comp="ctd" prop="abstract"/> with value <pt>true</pt>.</p>
       </item>
       <item>
        <olist role="Casetest">
         <item>
        <p role="if">the type definition is a simple type
definition</p>
        <p role="then">
         <olist role="andtest">
          <item><p>The element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> empty,
excepting those whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> is identical to <code>http://www.w3.org/2001/XMLSchema-instance</code> and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> is one of <code>type</code>, <code>nil</code>, <code>schemaLocation</code> or <code>noNamespaceSchemaLocation</code>.</p>
          </item>
          <item>
           <p>The element information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> no element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
          </item>
          <item id="c-sv1">
           <p>If <clauseref ref="c-nl"/> of <specref ref="cvc-elt"/> did not apply, then the <termref def="key-nv">normalized value</termref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to the type definition as defined by <specref ref="cvc-simple-type"/>.</p>
          </item>
         </olist>
        </p>
       </item>
         <item>
          <p role="if">the type definition is a complex type definition</p>
          <p role="then">the element information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to the type definition as per <specref ref="cvc-complex-type"/>;</p>
         </item>
        </olist>
       </item>
      </olist>
     </p>
    </constraintnote>
     <constraintnote type="cvc" id="cvc-id">
  <head>Validation Root Valid (ID/IDREF)</head>
      <p>For an element information item which is the <termref def="key-vr">validation root</termref> to be <termref def="key-vn">valid</termref>
       <olist role="and">
        <item>
         <p>There <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> no <local>ID/IDREF binding</local> in the item's
<propref ref="e-ii_table" role="psvi"/> whose <propref role="psvi" ref="iib-binding"/> is the
empty set.</p>
        </item>
        <item id="c-uba">
         <p>There <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> no <local>ID/IDREF binding</local> in the item's <propref ref="e-ii_table" role="psvi"/> whose <propref role="psvi" ref="iib-binding"/> has more
than one member.</p>
        </item>
       </olist>
      </p>
      <p>See <specref ref="sic-id"/> for the definition of <local>ID/IDREF binding</local>.</p>
      <note>
       <p>The first clause above applies when there is a reference to an
undefined ID.  The second applies when there is a multiply-defined ID.  They
are separated out to ensure that distinct error codes (see <specref ref="outcomes"/>) are associated with these two cases.</p>
      </note>
      <note>
       <p>Although this rule applies at the <termref def="key-vr">validation root</termref>, in practice processors,
particularly streaming processors, <phrase dg="may"><rfc2119>may</rfc2119></phrase><!--*
* material suppressed here by diff group may *
*--> wish to detect and signal the <clauseref ref="c-uba"/> case as it arises.</p>
      </note>
      <note>
       <p>This reconstruction of <bibref ref="ref-xml"/>'s <code>ID/IDREF</code>
functionality is imperfect in that if the <termref def="key-vr">validation
root</termref> is not the document element of an XML document, the results will
not necessarily be the same as those a validating parser would give were the
document to have a DTD with equivalent declarations.</p>
      </note>
 </constraintnote>
    <constraintnote id="cvc-assess-elt" type="cvc">
     <head>Schema-Validity Assessment (Element)</head>
     <p>The schema-validity assessment of an element information item depends
on its <termref def="key-vn">validation</termref> and the <termref def="key-va">assessment</termref> of its element information item
children and associated attribute information items, if any.</p>
  <p>So for an element information item's schema-validity to be assessed      
      <olist role="and">
       <item id="c-xd">
        <p><olist role="Ortest">
       <item id="c-ed">        
      <olist role="Andtest">
       <item>
        <p>A <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
element declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> known for it, because
        <olist role="ortest">
         <item>
          <p>A declaration was stipulated by the processor (see <specref ref="validation_outcome"/>).</p>
         </item>
         <item>
          <p>A declaration has been established as its <termref def="key-dd">context-determined declaration</termref>.</p>
         </item>
         <item>
          <olist role="Andtest">
           <item>
            <p>Its <termref def="key-dd">context-determined declaration</termref> is
not <pt>skip</pt>.</p>
           </item>
           <item>
            <p>Its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">local name</xpropref> and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace name</xpropref> resolve to an element declaration as defined by <specref ref="cvc-resolve-instance"/>.</p>
           </item>
          </olist>          
         </item>
        </olist></p>        
       </item>
       <item>
        <p>Its <termref def="key-vn">validity</termref> with respect
to that declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> been
evaluated as per <specref ref="cvc-elt"/>.</p>
       </item>
       <item>
        <p>If that evaluation involved the evaluation of <specref ref="cvc-type"/>, <clauseref ref="c-ct"/> thereof <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> satisfied.</p>
       </item>
      </olist>        
       </item>
            <item id="c-td">
        <olist role="Andtest">
       <item>
<p>A <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 type definition is known for
it because 
 <olist role="ortest">
  <item>
   <p>A type definition was stipulated by the processor
(see <specref ref="validation_outcome"/>).</p>
  </item>
  <item>
   <olist role="Andtest">
    <item>
     <p>There is an attribute information item among the element
information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> is identical to <code>http://www.w3.org/2001/XMLSchema-instance</code> and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> is <code>type</code>.</p>
    </item>
    <item>
        <p>The <termref def="key-nv">normalized value</termref> of that attribute information item is
<termref def="key-vn">valid</termref> with respect to the built-in <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#QName">QName</xtermref> simple type, as defined by <specref ref="cvc-simple-type"/>.</p>
       </item>
       <item>
        <p>The <termref def="q-local">local name</termref> and <termref def="q-uri">namespace name</termref> (as defined in <specref ref="src-qname"/>), of the <termref def="key-vv">actual value</termref> of that attribute information item resolve to a type definition, as defined in <specref ref="cvc-resolve-instance"/> -- <termdef id="key-ltd1" term="item type definition" role="local">call this type definition the <term>local type definition</term></termdef>.</p></item>
    <item>
        <p>If there is also a processor-stipulated type definition, the <termref def="key-ltd1">local type definition</termref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from that type definition given its <propref comp="ctd" prop="prohibited substitutions"/>,
as defined in <specref ref="cos-ct-derived-ok"/> (if it is a complex type
definition), or given the empty set, as defined in <specref ref="cos-st-derived-ok"/> (if it is a simple type definition).</p>
       </item>
   </olist>
  </item>
 </olist>
</p>
</item>
       
       
         <item>
        <p>The element information item's <termref def="key-vn">validity</termref> with respect to the <termref def="key-ltd1">local type definition</termref> (if present and validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref>)
or the processor-stipulated type definition (if no <termref def="key-ltd1">local
type definition</termref> is present) has been evaluated as per <specref ref="cvc-type"/>.</p>
       </item>
      </olist>        
       </item>
      </olist>
        </p>
       </item>
       <item>
        <p>The schema-validity of all the element information items among its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> has been assessed as per <specref ref="cvc-assess-elt"/>, and the
schema-validity of all the attribute information items among its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> has been assessed as per <specref ref="cvc-assess-attr"/>.</p>
       </item>
      </olist>
     </p>
        <p><termdef id="key-sva" term="strictly assessed" role="local">If either case of
<clauseref ref="c-xd"/> above holds, the element information item has been 
<term>strictly assessed</term></termdef>.</p>
     <p>If the item cannot be <termref def="key-sva">strictly
assessed</termref>, because neither <clauseref ref="c-ed"/> nor
<clauseref ref="c-td"/> above are satisfied, <termdef id="key-lva" term="laxly assessed">an element information item's schema validity
<rfc2119>may</rfc2119> be <term>laxly assessed</term> if <phrase dg="modals">and only if</phrase> its <termref def="key-dd">context-determined declaration</termref> is not
<pt>skip</pt> by <termref def="key-vn">validating</termref> with
respect to the <termref diff="nsq-del" def="ur-type-itself" dg="rq17">ur-type definition</termref><termref diff="nsq-add" def="any-type-itself" dg="rq17">definition of anyType</termref> as per <specref ref="cvc-type"/></termdef>.</p>     
     <note>
      <p>In general if <clauseref ref="c-ed"/> above holds 
<clauseref ref="c-td"/> does not, and vice versa.  When an
<code>xsi:type</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is involved, however, <clauseref ref="c-td"/> 
<!--* !!! 'takes precedence is surely the wrong phrase here. *-->
takes precedence,
as is made clear in <specref ref="cvc-elt"/>.</p>
     </note>
    </constraintnote>
    <note><p>The <propref comp="ed" prop="name"/> and <propref comp="ed" prop="target namespace"/> properties are not
mentioned above because they are checked during particle <termref def="key-vn">validation</termref>, as per
<specref ref="cvc-particle"/>.</p></note>
    </div3>
    <div3>
     <head>Element Declaration Information Set Contributions</head>
    <constraintnote id="sic-e-outcome" type="sic">
     <head>Assessment Outcome (Element)</head>
     <p>If<phrase dg="iff.144"> and only if</phrase> the schema-validity of an element information item has been assessed
as per <specref ref="cvc-assess-elt"/>, then in the <termref def="key-psvi">post-schema-validation infoset</termref> it <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> 
properties as follows:</p>
     <proplist role="psvi" item="element">
       <propdef name="validation context" id="e-validation_context">The nearest ancestor element information
item with a <propref role="psvi" ref="e-schema_information"/> property (or this element item itself if it has such a property).</propdef>
       <propdef name="validity" id="e-validity">
        <olist role="Caseval">
       <item>
        <p role="if">it was <termref def="key-sva">strictly
assessed</termref></p>
        <p role="then">
        <olist role="caseval">
         <item>
          <p role="if">
          <olist role="andtest">
           <item>
            <olist role="Ortest">
             <item>
              <p><clauseref ref="c-ed"/> of <specref ref="cvc-assess-elt"/>
applied and the item was
<termref def="key-vn">valid</termref> as defined by <specref ref="cvc-elt"/>;</p>
             </item>
             <item>
              <p><clauseref ref="c-td"/> of <specref ref="cvc-assess-elt"/>
applied and the item was
<termref def="key-vn">valid</termref> as defined by <specref ref="cvc-type"/>.</p>
             </item>
            </olist>            
           </item>
            <item>
             <p>Neither its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> nor its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> contains an information item (element or attribute respectively) whose  <xpropref role="psviAnon">validity</xpropref> is <pt>invalid</pt>.</p>
            </item>
           <item>
            <p>Neither its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> nor its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> contains an information item (element or attribute respectively) with a <termref def="key-dd">context-determined declaration</termref> of
<pt>mustFind</pt> whose  <xpropref role="psviAnon">validity</xpropref>
is <pt>notKnown</pt>.</p>
           </item>
          </olist>
          </p>
          <p role="then"><pt>valid</pt>;</p>
         </item>
         <item>
          <p role="otherwise"><pt>invalid.</pt>.</p>
         </item>
        </olist>
        </p>
       </item>
       <item>
        <p role="otherwise"><pt>notKnown</pt>.</p>
       </item>
      </olist>
        </propdef>
       <propdef name="validation attempted" id="e-validation_attempted">
       <olist role="Caseval">
       <item>
        <p role="if">it was <termref def="key-sva">strictly assessed</termref> and neither its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> nor its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> contains an information item (element or attribute
respectively) whose  <xpropref role="psviAnon">validation attempted</xpropref> is not
<pt>full</pt></p>
        <p role="then"><pt>full</pt>;</p>
       </item>
        <item>
         <p role="if">it was not <termref def="key-sva">strictly assessed</termref> and neither its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> nor its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> contains an information item (element or attribute
respectively) whose  <xpropref role="psviAnon">validation attempted</xpropref> is not
<pt>none</pt></p>
         <p role="then"><pt>none</pt>;</p>
        </item>
        <item>
        <p role="otherwise"><pt>partial</pt>.</p>
       </item>
      </olist></propdef></proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-elt-error-code">
     <head>Validation Failure (Element)</head>
     <p>If<phrase dg="iff.144"> and only if</phrase> the local <termref def="key-vn">validity</termref>, as defined by
<specref ref="cvc-elt"/> above and/or <specref ref="cvc-type"/>
below, of an element information item has been assessed, <phrase dg="iff">then</phrase>
in the <termref def="key-psvi">post-schema-validation infoset</termref> the item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a
property:</p>
     <proplist role="psvi" item="element">
      <propdef id="e-schema_error_code" name="schema error code">
       <olist role="Caseval">
        <item>
         <p role="if">the item is <!--*
* material suppressed here by diff group b1892 *
*--><phrase dg="b1892"><termref def="key-vn">invalid</termref></phrase></p>
         <p role="then">a list.  Applications wishing to provide
information as to the reason(s) for the <termref def="key-vn">validation</termref> failure are encouraged to record one or more
error codes (see <specref ref="outcomes"/>) herein.</p>
        </item>
        <item>
         <p role="otherwise"><termref def="key-null">absent</termref>.</p>
        </item>
       </olist>
      </propdef>
     </proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-elt-decl">
     <head>Element Declaration</head>
     <p>If<phrase dg="iff.144"> and only if</phrase> an element information item is <termref def="key-vn">valid</termref> 
with respect to an element declaration as per 
<specref ref="cvc-elt"/><phrase dg="iff">,</phrase> then in 
the <termref def="key-psvi">post-schema-validation infoset</termref> the element information item 
<phrase diff="nsq-del" dg="rq144"><rfc2119>must</rfc2119></phrase><phrase diff="nsq-add" dg="rq144"><rfc2119>may</rfc2119></phrase>, 
at processor option, have either:</p>
     <proplist role="psvi" item="element">
      <propdef id="e-declaration" name="element declaration">
       an <termref def="key-iso">item isomorphic</termref> to the declaration component itself
      </propdef>
     </proplist>
       <p>or</p>

     <proplist role="psvi" item="element">
      <propdef id="e-nil" name="nil"><pt>true</pt> if <clauseref ref="c-nl"/> of <specref ref="cvc-elt"/> above is satisfied,
otherwise <pt>false</pt>
      </propdef>
     </proplist>
    </constraintnote>
    <constraintnote type="sic" id="sic-eltType">
     <head>Element Validated by Type</head>
     <p>If<phrase dg="iff.144"> and only if</phrase> an element information item is <termref def="key-vn">valid</termref> 
with respect to a <termref def="td">type definition</termref>
as per <specref ref="cvc-type"/>, <phrase dg="iff">then</phrase>
in the <termref def="key-psvi">post-schema-validation infoset</termref> the item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a property:</p>
     <proplist role="psvi" item="element">
      <propdef id="e-schema_normalized_value" name="schema normalized value">
      <olist role="Caseval">
         <item><p role="if"><clauseref ref="c-nl"/> of <specref ref="cvc-elt"/> and <specref ref="sic-eltDefault"/> above have
<emph>not</emph> applied and either the <termref def="td">type
definition</termref> is a simple type definition or its <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase></p>
<p role="then">
the <termref def="key-nv">normalized value</termref> of the item as <termref def="key-vn">validated</termref>.</p>
</item>
<item><p role="otherwise"><termref def="key-null">absent</termref>.</p>
</item>
</olist>
</propdef>
</proplist>
<p>Furthermore, the item has one of the following alternative sets of properties:</p>

<p>Either</p>
<proplist role="psvi" item="element">
<propdef id="e-type_definition" name="type definition">An <termref def="key-iso">item isomorphic</termref> to the <termref def="td">type definition</termref> component
itself.</propdef>
<propdef name="member type definition" id="e-member_type_definition">If and only if that type definition is a
simple type definition with <propref comp="std" prop="variety"/>
<pt>union</pt>, or a complex type definition whose <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt> and <propref comp="ct" prop="simple type definition"/></phrase> a simple type definition with <propref comp="std" prop="variety"/> <pt>union</pt>, then 
<phrase dg="b2333b">an <termref def="key-iso">item isomorphic</termref> to <phrase dg="b2333c">that 
<!--*
* material suppressed here by diff group b2333a *
*--><phrase dg="b2333a"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of its <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive 
membership</xtermref></phrase></phrase><!--*
* material suppressed here by diff group b2333c *
*--></phrase><!--*
* material suppressed here by diff group b2333b *
*--><phrase dg="b2333c"> which 
actually <termref def="key-vn">validated</termref></phrase> the element item's
<termref def="key-nv">normalized value</termref><!--* <phrase diff="add" dg="b2333c"> was ultimately 
assigned</phrase> *--><!--*
* material suppressed here by diff group b2333b *
*-->.</propdef>
</proplist>
<p>or</p>
<proplist role="psvi" item="element">
<propdef id="e-type_definition_type" name="type definition type">
<pt>simple</pt> or <pt>complex</pt>, depending on the <termref def="td">type definition</termref>.</propdef>
<propdef id="e-type_definition_namespace" name="type definition namespace">The <xpropref role="anon">target namespace</xpropref> of the <termref def="td">type definition</termref>.</propdef>
<propdef name="type definition anonymous" id="e-type_definition_anonymous"><pt>true</pt> if the <xpropref role="anon">name</xpropref> of the <termref def="td">type definition</termref> is <termref def="key-null">absent</termref>, otherwise <pt>false</pt>.</propdef>
<propdef name="type definition name" id="e-type_definition_name">The <xpropref role="anon">name</xpropref> of the <termref def="td">type definition</termref>, if it is not <termref def="key-null">absent</termref>.  If it is
<termref def="key-null">absent</termref>, schema processors <rfc2119>may</rfc2119>, but need not,
provide a value unique to the definition.</propdef>
</proplist>

<p dg="b2333b">If the <termref def="td">type definition</termref> is a
simple type definition<phrase dg="ep01"> with <propref comp="std" prop="variety"/> <pt>union</pt></phrase>or its <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has
<propref comp="ct" prop="variety"/> <pt>simple</pt> and <propref comp="ct" prop="simple type definition"/> a simple type definition with</phrase> <propref comp="std" prop="variety"/> <pt>union</pt>, then calling
<termdef id="key-amt" term="actual member type definition" role="local"> that
<phrase dg="b2333c"><!--*
* material suppressed here by diff group b2333a *
*--><phrase dg="b2333a"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of 
its <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive
membership</xtermref></phrase> which actually
<termref def="key-vn">validated</termref></phrase><!--*
* material suppressed here by diff group b2333c *
*--> 
the element item's <termref def="key-nv">normalized value</termref> <!--* <phrase diff="add" dg="b2333c">was
ultimately assigned</phrase> *--> the
<term>actual member type definition</term></termdef>, there are three additional properties:</p>

<!--*
* material suppressed here by diff group b2333b *
*-->

    <proplist role="psvi" item="element">
     <propdef name="member type definition namespace" id="e-member_type_definition_namespace">The <propref comp="std" prop="target namespace"/> of the <termref def="key-amt">actual
member type definition</termref>.</propdef>
     <propdef name="member type definition anonymous" id="e-member_type_definition_anonymous"><pt>true</pt> if the <propref comp="std" prop="name"/> of the <termref def="key-amt">actual member type definition</termref> is <termref def="key-null">absent</termref>, otherwise <pt>false</pt>.</propdef>
     <propdef name="member type definition name" id="e-member_type_definition_name">The <propref comp="std" prop="name"/> of the <termref def="key-amt">actual member type definition</termref>, if it is not <termref def="key-null">absent</termref>.  If it is
<termref def="key-null">absent</termref>, schema processors <rfc2119>may</rfc2119>, but need not,
provide a value unique to the definition.</propdef>
         </proplist>
     <p>The first (<termref def="key-iso">item isomorphic</termref>) alternative above is provided for applications such as query
processors which need access to the full range of details about an item's
<termref def="key-va">assessment</termref>, for example the type hierarchy; the second, for lighter-weight
processors for whom representing the significant parts of the type hierarchy as
information items might be a significant burden.</p>
     <p>Also, if the declaration has a <propref comp="ed" prop="value constraint"/>, the item has a property:</p>
     <proplist role="psvi" item="element">
      <propdef id="e-schema_default" name="schema default">The 
       <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="vc_e" prop="lexical form"/> of the </phrase>declaration's <propref comp="ed" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*-->.</propdef>
     </proplist>
     <p>Note that if an element is <termref def="key-lva">laxly assessed</termref>, then the <propref ref="e-type_definition" role="psvi"/> and
<propref ref="e-member_type_definition" role="psvi"/> properties, or their
alternatives, are based on the <termref diff="nsq-del" def="ur-type-itself" dg="rq17">ur-type definition</termref><termref diff="nsq-add" def="any-type-itself" dg="rq17">definition of anyType</termref>.</p>
    </constraintnote>
    <constraintnote type="sic" id="sic-eltDefault">
     <head>Element Default Value</head>
<p>If<phrase dg="iff.144"> and only if</phrase> the local <termref def="key-vn">validity</termref>, as defined by <specref ref="cvc-elt"/>
above, of an element information item has been assessed,
in the <termref def="key-psvi">post-schema-validation infoset</termref> the item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a
property:</p>
<proplist role="psvi" item="element">
<propdef id="e-schema_specified" name="schema specified">
<olist role="Caseval"><item>
<p role="if">the item is <termref def="key-vn">valid</termref> with respect to an element
declaration as per <specref ref="cvc-elt"/> and the <propref comp="ed" prop="value constraint"/> is present, but <clauseref ref="c-nl"/>
of <specref ref="cvc-elt"/> above is not satisfied and the item has no element or character information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref></p>
<p role="then">
<pt>schema</pt>.  Furthermore, the
<termref def="key-psvi">post-schema-validation infoset</termref> has the <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="vc_e" prop="lexical form"/> of the </phrase> <propref comp="ed" prop="value constraint"/><!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*--> as the
item's <propref role="psvi" ref="e-schema_normalized_value"/>
property.</p></item>
<item>
<p role="otherwise"><pt>infoset</pt>.</p></item></olist></propdef></proplist>
    </constraintnote>
    </div3>
    <div3 id="coss-element">
     <head>Constraints on Element Declaration Schema Components</head>
  <p>All element declarations (see <specref ref="cElement_Declarations"/>) <rfc2119>must</rfc2119> satisfy the following constraint.</p>
  <constraintnote type="cos" id="e-props-correct">
   <head>Element Declaration Properties Correct</head>
   <olist role="And">
    <item>
     <p>The values of the properties of an element declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Element_Declaration_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
    </item>
    <item>
     <p>If there is a <propref comp="ed" prop="value constraint"/>, <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">it
is a valid default</phrase> with respect to the <propref comp="ed" prop="type definition"/> as defined in <specref ref="cos-valid-default"/>.</p>
    </item>
    <item>
     <p>If there is a <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>

<propref comp="ed" prop="substitution group affiliation"/>, then <propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <pt>global</pt>.</p>
    </item>
    <item>
     <p>If there is a <propref comp="ed" prop="substitution group affiliation"/>, the <propref comp="ed" prop="type definition"/> of the
element declaration <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from the <propref comp="ed" prop="type definition"/> of the <propref comp="ed" prop="substitution group affiliation"/>, given the value of the <propref comp="ed" prop="substitution group exclusions"/> of the <propref comp="ed" prop="substitution group affiliation"/>, as defined in <specref ref="cos-ct-derived-ok"/> (if the <propref comp="ed" prop="type definition"/> is complex) or as defined in <specref ref="cos-st-derived-ok"/> (if the <propref comp="ed" prop="type definition"/> is simple).
     </p>
    </item>
    <item>
     <p>If the <propref comp="ed" prop="type definition"/> or <propref comp="ed" prop="type definition"/>'s <propref comp="ctd" prop="content type"/><phrase dg="ep01">'s <propref comp="ct" prop="simple type definition"/></phrase> is or is <!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> from 
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref><phrase dg="iff">,</phrase> then there 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is no</phrase> 
<propref comp="ed" prop="value constraint"/>.</p>
     <note>
      <p>The use of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref> as a type
definition for elements goes beyond XML<!--*
* material suppressed here by diff group fpwd *
*-->, and <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><rfc2119>should</rfc2119></phrase> be avoided if backwards
compatibility is desired.</p>
     </note>
    </item>
    <item>
     <p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">There are no circular substitution groups. </phrase>
That is, it
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> possible to return to an element declaration by repeatedly following
the <propref comp="ed" prop="substitution group affiliation"/> property.</p>
    </item>
   </olist>
  </constraintnote>
  <p>The following constraints define relations appealed to elsewhere in this specification.</p>
  <constraintnote id="cos-valid-default" type="cos">
   <head>Element Default Valid (Immediate)</head>
   <p>For a <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><compref ref="vc_e"/></phrase> to be a valid default with respect to a type definition
    <olist role="case">
     <item>
      <p role="if">the type definition is a simple type definition<phrase dg="rq129">or a complex type definition whose <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><propref comp="ct" prop="variety"/> <pt>simple type definition</pt></phrase></phrase></phrase></p>
      <p role="then">
       <!--*
* material suppressed here by diff group rq129 *
*-->
       <phrase dg="rq129"> the <compref ref="vc_e"/> is a valid
default with respect to the <propref comp="ctd" prop="content type"/>'s
<propref comp="ct" prop="simple type definition"/> as defined by <specref ref="cos-valid-simple-default"/>.</phrase>
       </p>
     </item>
     <item>
      <p role="if">the type definition is a complex type definition <phrase dg="rq129">whose <propref comp="ctd" prop="content type"/>'s <propref comp="ct" prop="variety"/> is not <pt>simple type definition</pt></phrase></p>
      <p role="then">
       <olist role="andtest">
        <item>
         <p>its <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><!--*
* material suppressed here by diff group rq129 *
*--> <phrase dg="ep01">has <propref comp="ct" prop="variety"/> </phrase><pt>mixed</pt>.</p>
        </item>
        <item>
         <!--*
* material suppressed here by diff group rq129 *
*-->
         <p dg="rq129">the <propref comp="ctd" prop="content type"/>'s <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="cd-emptiable">emptiable</termref> as defined by <specref ref="cos-group-emptiable"/>.</p>
        </item>
       </olist>
      </p>
     </item>
    </olist>
   </p>
  </constraintnote>
  <constraintnote id="cos-equiv-derived-ok-rec" type="cos">
   <head>Substitution Group OK (Transitive)</head>
   <p>For an element declaration (call it <local>D</local>)  to be validly
substitutable for another element declaration (call it <local>C</local>)
subject to a blocking constraint (a subset of
{<pt>substitution</pt>, <pt>extension</pt>, <pt>restriction</pt>}, the value of
a <propref comp="ed" prop="disallowed substitutions"/>)
    <olist role="or">
     <item>
      <p><local>D</local> and <local>C</local> are the same element declaration.</p>
     </item>
     <item>
      <olist role="Andtest">
     <item>
      <p>The blocking constraint does not contain <pt>substitution</pt>.</p>
     </item>
     <item>
      <p>There is a chain of <propref comp="ed" prop="substitution group affiliation"/>s from <local>D</local> to
<local>C</local>, that is, either <local>D</local>'s <propref comp="ed" prop="substitution group affiliation"/> is
<local>C</local>, or <local>D</local>'s <propref comp="ed" prop="substitution group affiliation"/>'s <propref comp="ed" prop="substitution group affiliation"/> is <local>C</local>, or . . .</p>
     </item>
     <item>
      <p>The set of all <propref comp="ctd" prop="derivation method"/>s
involved in the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> of <local>D</local>'s <propref comp="ed" prop="type definition"/> from
<local>C</local>'s <propref comp="ed" prop="type definition"/> does not intersect with the union
of the blocking constraint, <local>C</local>'s <propref comp="ctd" prop="prohibited substitutions"/> (if <local>C</local>
is complex, otherwise the empty set) and the
<propref comp="ctd" prop="prohibited substitutions"/> (respectively the empty set) of any intermediate <propref comp="ed" prop="type definition"/>s
in the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> of <local>D</local>'s <propref comp="ed" prop="type definition"/> from
<local>C</local>'s <propref comp="ed" prop="type definition"/>.</p>
     </item>
    </olist>
     </item>
    </olist>
    
   </p>
  </constraintnote>
  <constraintnote id="cos-equiv-class" type="cos">
   <head>Substitution Group</head>
   <p><termdef id="key-eq" term="substitution group">Every element
declaration (call this <local>HEAD</local>)
in the <propref comp="s" prop="element declarations"/> of a schema defines a
<term>substitution group</term>, a subset of those <propref comp="s" prop="element declarations"/>, as follows:</termdef></p>
   <p>Define <local>P</local>, the potential substitution group for <local>HEAD</local>, as follows:</p>
   <olist>
     <item>
      <p>The element declaration itself is in <local>P</local>;</p>
     </item>
     <item>
      <p><local>P</local> is closed with respect to <propref comp="ed" prop="substitution group affiliation"/>, that
is, if any element declaration in the <propref comp="s" prop="element declarations"/> 
has a <propref comp="ed" prop="substitution group affiliation"/> in <local>P</local>, then that element is also in <local>P</local> itself.</p>
     </item>
    </olist>
   <p><local>HEAD</local>'s actual <termref def="key-eq">substitution
group</termref> is then the set consisting of each member of <local>P</local>
such that <olist role="andtest">
    <item>
     <p>Its <propref comp="ed" prop="abstract"/> is <pt>false</pt>.</p>
    </item>
    <item>
     <p>It is validly substitutable for <local>HEAD</local> subject to
<local>HEAD</local>'s <propref comp="ed" prop="disallowed substitutions"/> as the
blocking constraint, as defined in <specref ref="cos-equiv-derived-ok-rec"/>.</p>
    </item>
   </olist></p>
  </constraintnote>
    </div3>
   </div2>
   <div2 id="Complex_Type_Definitions">
    <head>Complex Type Definitions</head>
<p>Complex Type Definitions provide for:</p>
<ulist>
     <item><p>Constraining element information items by providing <specref ref="Attribute_Declaration"/>s governing the appearance and content of
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref></p></item>
     <item><p>Constraining element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> to be empty,
or to conform to a specified element-only or mixed content model, or else
constraining the character information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> to conform to a
specified simple type definition.</p></item>
     <item><p>Using the mechanisms of <specref ref="Type_Derivation"/> to <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derive</xtermref> a complex type from another simple or complex type.</p></item>
     <item>
<p>Specifying <termref def="gloss-sic">post-schema-validation infoset contributions</termref> for elements. </p>
</item>
     <item><p>Limiting the ability to <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derive</xtermref> additional types from a given complex type.</p></item>
     <item><p>Controlling the permission to substitute, in an instance, elements of a <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref>
type for elements declared in a content model to be of a given complex type.</p></item>
</ulist>
<issue id="RQ-36i" role="1.1" status="open">
<!--*
<p>
<loc href="&reqs;#wildcards" target="reqs"
>RQ-7 (wildcards)</loc>,
<loc href="&reqs;#local-references" target="reqs"
>RQ-36 (local-references)</loc>, 
<loc href="&reqs;#ElementDeclarationsConsistent" target="reqs"
>RQ-146 (ElementDeclarationsConsistent)</loc></p>
*-->
<p>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2857" target="reqs">Issue 2857 (RQ-7 wildcards)</loc>,
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2860" target="reqs">Issue 2860 (RQ-36 local references)</loc>, 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2544" target="reqs">Issue 2544 (RQ-146 element declarations consistent)</loc></p>

  <p>Although extremely useful, wildcards have proved to interact in
unfortunate ways with the Unique Particle Attribution and Element Declarations
Consistent constraints, and this has limited their utility, particularly for
use in allowing for extension and anticipating subsequent versions.  The
interpretation of wildcards will be changed to address these problems, without
compromising backward compatibility.</p>
<!--*
  <resolution><p>As part of an overall reworking of the interpretation of local
declarations and of the Unique Particle Attribution and Element Declarations
Consistent constraints, we will change the interpretation of wildcards to
allow them to reference local declarations and subordinate them to explicit
declarations, thereby fixing the main conflicts.</p>
   <p>The so-called <loc href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004Apr/0091.html">landscape summary</loc> (W3C-member-only link) covers
this along with related issues.</p>
  </resolution>
*-->
	  </issue>
<note role="example">
 <eg xml:space="preserve">&lt;xs:complexType name="PurchaseOrderType"&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element name="shipTo" type="USAddress"/&gt;
   &lt;xs:element name="billTo" type="USAddress"/&gt;
   &lt;xs:element ref="comment" minOccurs="0"/&gt;
   &lt;xs:element name="items"  type="Items"/&gt;
  &lt;/xs:sequence&gt;
  &lt;xs:attribute name="orderDate" type="xs:date"/&gt;
 &lt;/xs:complexType&gt;
</eg>
 <p>The XML representation of a complex type definition.</p>
</note>
<div3 id="Complex_Type_Definition_details">
 <head>The Complex Type Definition Schema Component</head>
 <p>A complex type definition schema component has the following
properties:</p>

<compdef name="Complex Type Definition" abbrev="ctd" showAKO="true"/>
<!--*
* material suppressed here by diff group ep01-part1 *
*-->
<microCompdef name="Content Type" abbrev="ct" dg="ep01"/>

<issue id="RQ-131i" role="1.1" status="open">
<!--* <p>
<loc href="&reqs;#scd-ordering-annotation" target="reqs"
>RQ-131 (scd-ordering-annotation)</loc>, 
<loc href="&reqs;#scd-lost-annotation" target="reqs"
>RQ-130 (scd-lost-annotation)</loc>, 
<loc href="&reqs;#annotation-psvi" target="reqs"
>RQ-19 (annotation-psvi)</loc></p>
*-->
<p>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2841" target="reqs">Issue 2841 (RQ-131 ordering of annotations)</loc>, 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2840" target="reqs">Issue 2840 (RQ-130 lost annotations)</loc>, 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2851" target="reqs">Issue 2851 (RQ-19 annotations in PSVI)</loc></p>
<p>Version 1.0 was inconsistent in providing for multiple sources of
annotation, particularly where components corresponded to multiple nested
elements in schema documents (e.g. Complex Type Definitions <emph>vis a
vis</emph> <code>xs:complexType</code>, <code>xs:complexContent</code> and
<code>xs:restriction</code>).  This will change so that all components can have
multiple annotations, and annotations will be handled consistently across all
kinds of components.</p>
<p>Also applies anywhere else {annotations}
plural appears — everywhere, in fact.</p>
<resolution>
<olist>
<item>
<p>All components have an {annotations} property;</p>
</item>
<item>
<p>It contains a sequence of annotations;</p>
</item>
<item>
<p>Namely all annotations "scoped" by this component, but not "scoped"
by any other component "further down".</p>
</item>
<item>
<p>The order of annotations within {annotations} is
implementation-determined.</p>
</item>
</olist>
<p>Note that when point 3 above mentions "annotations 'scoped' by . . ."
this means &lt;annotation&gt; elements <emph>and</emph> out-of-band attributes.</p>
<p>[<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004Mar/0169.html">Agendum 
4.1 SCD-related requirements</loc> (W3C-member-only link)]</p>
</resolution>
</issue>

<p>Complex type definitions are identified by their <propref comp="ctd" prop="name"/> and <propref comp="ctd" prop="target namespace"/>.  Except
for anonymous complex type definitions (those with no <propref comp="ctd" prop="name"/>), since
type definitions (i.e. both simple and complex type definitions taken together) <rfc2119>must</rfc2119> be uniquely identified within an <termref def="key-schema">XML
Schema</termref>, no complex type definition can have the same name as another
simple or complex type definition.  Complex type <propref comp="ctd" prop="name"/>s and <propref comp="ctd" prop="target namespace"/>s
are provided for reference from
instances (see <specref ref="xsi_type"/>), and for use in the XML
representation of schema components
(specifically in <eltref ref="element"/>).  See <specref ref="composition-schemaImport"/> for the use of component
identifiers when importing one schema into another.</p>
<note>
<p>The <propref comp="ctd" prop="name"/> of a complex type is not <emph>ipso
facto</emph> the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">(local) name</xpropref> of the
  element information items <termref def="key-vn">validated</termref> by that definition. The connection between a
  name and a type definition is described in <specref ref="cElement_Declarations"/>. </p>
</note>
   <p>As described in <specref ref="Type_Derivation"/>, each complex type is <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from a
<propref comp="ctd" prop="base type definition"/> which is itself either a <specref ref="Simple_Type_Definition"/> or a <specref ref="Complex_Type_Definition"/>.  <propref comp="ctd" prop="derivation method"/> specifies the means of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> as either <pt>extension</pt> or <pt>restriction</pt> (see <specref ref="Type_Derivation"/>).</p>

<p>A complex type with an empty specification for <propref comp="ctd" prop="final"/> can be used as a
<propref comp="ctd" prop="base type definition"/> for other types <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> by either of
extension or restriction; the explicit values <pt>extension</pt>, and <pt>restriction</pt> prevent further
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivations</xtermref> by extension and restriction respectively.  If all values are specified, then <termdef id="key-ct-final" term="final">the complex type is said to be
<term>final</term>, because no
further <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivations</xtermref> are possible</termdef>.  Finality is <emph>not</emph>
inherited, that is, a type definition <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> by restriction from a type
definition which is final for extension is not itself, in the absence of any
explicit <code>final</code> attribute of its own, final for anything.</p>
<p dg="context-2338">The <propref comp="ctd" prop="context"/>
property is only relevant for anonymous type definitions, for which its value
is the component in which this type definition appears as the value of a property, e.g. <propref comp="ed" prop="type definition"/>.</p>
<p>Complex types for which <propref comp="ctd" prop="abstract"/> is <pt>true</pt> <rfc2119>must not</rfc2119> be used as the
<propref comp="ed" prop="type definition"/> for the <termref def="key-vn">validation</termref> of element information items.  It follows that they <rfc2119>must not</rfc2119> be referenced from an
<specref ref="xsi_type"/> attribute in an instance document.  Abstract complex types can be
used as <propref comp="ctd" prop="base type definition"/>s, or even as the <propref comp="ed" prop="type definition"/>s of element declarations, provided in every case a concrete <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> type definition is used for <termref def="key-vn">validation</termref>, either via <specref ref="xsi_type"/> or the operation of a substitution group.</p>

<p><propref comp="ctd" prop="attribute uses"/> are a set of attribute uses.  See <specref ref="cvc-complex-type"/>
and <specref ref="cvc-attribute"/> for details of attribute <termref def="key-vn">validation</termref>.</p>
<p><propref comp="ctd" prop="attribute wildcard"/>s provide a more flexible specification for <termref def="key-vn">validation</termref> of
attributes not explicitly included in <propref comp="ctd" prop="attribute uses"/>.
Informally, the specific values
of <propref comp="ctd" prop="attribute wildcard"/> are interpreted as follows:
<ulist><item>
<p><pt>any</pt>: <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> can include attributes with any qualified or unqualified name.</p>
</item>
<item>
<p>a set whose
members are either namespace names or <termref def="key-null">absent</termref>: <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> can
include any attribute(s) from the specified namespace(s).  If <termref def="key-null">absent</termref> is included in the set, then any unqualified attributes are (also) allowed.</p>
</item>
<item>
<p><pt>'not'</pt> and a namespace name: <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> cannot include attributes from the specified namespace.</p>
</item>
<item>
<p><pt>'not'</pt> and <termref def="key-null">absent</termref>: <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> cannot include
unqualified attributes.</p>
</item></ulist>
See <specref ref="cvc-complex-type"/> and <specref ref="cvc-wildcard-namespace"/> for formal
details of attribute wildcard <termref def="key-vn">validation</termref>. </p>
<p><propref comp="ctd" prop="content type"/> determines the <termref def="key-vn">validation</termref> of <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of element information items.  Informally:
<ulist>
<item>
<p>A <propref comp="ctd" prop="content type"/> with <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="variety"/></phrase> <pt>empty</pt> <termref def="key-vn">validates</termref> elements
with no character or element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
</item>
<item>
<p>A <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">with <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase> <termref def="key-vn">validates</termref>
elements with character-only <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref><phrase dg="ep01">using its <propref comp="ct" prop="simple type definition"/></phrase>.</p>
</item>
<item>
<p>A<!--*
* material suppressed here by diff group ep01 *
*--> <propref comp="ctd" prop="content type"/><phrase dg="ep01"> with <propref comp="ct" prop="variety"/> <pt>element-only</pt></phrase> <termref def="key-vn">validates</termref> elements with <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> that
conform to the <!--*
* material suppressed here by diff group ep01 *
*--><termref def="key-contentModel">content model</termref><phrase dg="ep01"> supplied by its <propref comp="ct" prop="particle"/></phrase>.</p>
</item>
<item>
<p>A<!--*
* material suppressed here by diff group ep01 *
*--> <propref comp="ctd" prop="content type"/><phrase dg="ep01"> with <propref comp="ct" prop="variety"/> <pt>mixed</pt></phrase> <termref def="key-vn">validates</termref> elements whose element <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> (i.e. specifically ignoring other <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> such as character information items)
conform to the <!--*
* material suppressed here by diff group ep01 *
*--><termref def="key-contentModel">content model</termref><phrase dg="ep01"> supplied by its <propref comp="ct" prop="particle"/></phrase>.</p>
</item></ulist>
</p>
<p><propref comp="ctd" prop="prohibited substitutions"/> determine
whether an element declaration appearing in a <termref def="key-contentModel">
content model</termref> is prevented from additionally
<termref def="key-vn">validating</termref> element items with an <specref ref="xsi_type"/> attribute that
identifies a complex type definition <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> by <pt>extension</pt> or
<pt>restriction</pt> from this definition, or element items in
a substitution group whose type definition is similarly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref>:
If <propref comp="ctd" prop="prohibited substitutions"/> is empty,
then all such substitutions are allowed, otherwise, the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> method(s) it
names are disallowed.
</p>
 <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="ctd" prop="annotations"/> property.</p>
</div3>
    <div3 id="declare-type">
<head>XML Representation of Complex Type Definitions</head>
<p>The XML representation for a complex type definition schema component is a
<eltref ref="complexType"/> element information item.</p>
 <p>The XML representation for complex type definitions with
a <!--*
* material suppressed here by diff group ep01 *
*--><propref comp="ctd" prop="content type"/><phrase dg="ep01">with <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase> is significantly different
from that of those with other <propref comp="ctd" prop="content type"/>s, and this
is reflected in the presentation below, which displays first the elements
involved in the first case, then those for the second.  The property mapping is shown once for each case.</p>
<reprdef>
 <reprelt eltname="complexType" type="complexType"/>
 <p>Whichever alternative for the content of <eltref ref="complexType"/> is
chosen, the following property mappings apply:</p>
 <reprcomp abstract="Complex Type Definition" ref="Complex_Type_Definition_details">
  <propmap comp="ctd" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> if present, otherwise <termref def="key-null">absent</termref>.</propmap>
  <propmap comp="ctd" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="schema"/> ancestor
element information item if present, otherwise <termref def="key-null">absent</termref>.</propmap>
<propmap comp="ctd" prop="abstract">The <termref def="key-vv">actual value</termref> of the <code>abstract</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <pt>false</pt>.</propmap>
<propmap comp="ctd" prop="prohibited substitutions">A set corresponding to the <termref def="key-vv">actual value</termref> of the
<code>block</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise on the <termref def="key-vv">actual value</termref> of the
<code>blockDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the ancestor <eltref ref="schema"/> element
information item, if present, otherwise on the empty string.  Call this the <local>EBV</local> (for effective block value).  Then the value of this property is
 <olist role="caseval">
  <item>
   <p role="if">the <local>EBV</local> is the empty string</p>
   <p role="then">the empty set;</p>
  </item>
  <item>
   <p role="if">the <local>EBV</local> is <code>#all</code></p>
   <p role="then"><code>{</code><pt>extension</pt>, <pt>restriction</pt><code>}</code>;</p>
  </item>
  <item>
   <p role="otherwise">a set with members drawn from the set above, each being present or
absent depending on whether the <termref def="key-vv">actual value</termref> (which is a list) contains an
equivalently named item.
   <note>
       <p>Although the <code>blockDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of <eltref ref="schema"/> <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> include values other than <pt>restriction</pt> or<pt>extension</pt>, those values are ignored in the determination of <propref comp="ctd" prop="prohibited substitutions"/> for complex type definitions (they <emph>are</emph> used elsewhere).</p>
      </note>
   </p>
  </item>
 </olist>
</propmap>
<propmap comp="ctd" prop="final">As for <propref comp="ctd" prop="prohibited substitutions"/> above, but using the
<code>final</code> and <code>finalDefault</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> in place of the
<code>block</code> and <code>blockDefault</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref>.</propmap>
  <propmap comp="ctd" prop="context" dg="context-2338">If the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present, then <termref def="key-null"/>,
otherwise (the parent element information item will be <eltref ref="element"/>), the <compref ref="ed"/> corresponding to that parent information item.</propmap>
  <propmap comp="ctd" prop="annotations">The annotations corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, in the <eltref ref="simpleContent"/> and
<eltref ref="complexContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, and in their <eltref ref="restriction" inside="simpleContent"/> and <eltref ref="extension" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp>
<p>When the <eltref ref="simpleContent"/> alternative is chosen, the following
elements are relevant, and the remaining property mappings are as below.  Note that either
<eltref ref="restriction" inside="simpleContent"/> or <eltref ref="extension" inside="simpleContent"/> <rfc2119>must</rfc2119> be chosen as the
content of <eltref ref="simpleContent"/>.</p>
 <reprelt eltname="simpleContent"/>
 <reprelt eltname="restriction" type="simpleRestrictionType" local="simpleContent"/>
 <reprelt eltname="extension" type="simpleExtensionType" local="simpleContent"/> 
 <reprelt eltname="attributeGroup" type="attributeGroupRef" local="simpleContent"/>
 <reprelt eltname="anyAttribute"/>
 <reprcomp abstract="Complex Type Definition with simple content" ref="Complex_Type_Definition_details">
<propmap comp="ctd" prop="base type definition">The type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="ctd" prop="derivation method">If the <eltref ref="restriction" inside="simpleContent"/> alternative
is chosen, then <pt>restriction</pt>, otherwise (the <eltref ref="extension" inside="simpleContent"/> alternative
is chosen) <pt>extension</pt>.</propmap>
<propmap comp="ctd" prop="attribute uses">A union of sets of attribute uses as follows 
 <olist>
  <item id="c-add1">
   <p>The set of attribute uses corresponding to the <eltref ref="attribute"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any.</p>
  </item>
  <item id="c-add2">
   <p>The <propref comp="agd" prop="attribute uses"/> of the
attribute groups <termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref>s of the <code>ref</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any.</p>
  </item>
  <item>
   <p>if the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a complex type definition, the
<propref comp="ctd" prop="attribute uses"/> of that type definition, unless
the <eltref ref="restriction" inside="simpleContent"/> alternative is chosen, in which case some members of
that type definition's <propref comp="ctd" prop="attribute uses"/> 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must not</rfc2119></phrase> 
be
included, namely those whose
<propref comp="au" prop="attribute declaration"/>'s
<propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> are the same as
<olist role="orval">
 <item>
  <p>the <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> of the <propref comp="au" prop="attribute declaration"/> of an attribute use in the set per <clauseref ref="c-add1"/> or <clauseref ref="c-add2"/> above;</p>
 </item>
 <item>
  <p>what would have been the <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> of the <propref comp="au" prop="attribute declaration"/> of an attribute use in the set per <clauseref ref="c-add1"/> above but for the <termref def="key-vv">actual value</termref> of the <code>use</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the relevant <eltref ref="attribute"/> among the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of <eltref ref="restriction" inside="simpleContent"/> being <pt>prohibited</pt>.</p>
 </item>
</olist></p>
  </item>
 </olist>
</propmap>
<propmap comp="ctd" prop="attribute wildcard">
 <olist>
  <item>
   <p><termdef id="key-law" term="local wildcard" role="local">Let the <term>local wildcard</term> be defined as</termdef>
 <olist role="caseval">
     <item>
      <p role="if">there is an <eltref ref="anyAttribute"/> present</p>
      <p role="then">a wildcard based
on the <termref def="key-vv">actual value</termref>s of the <code>namespace</code> and
<code>processContents</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> and the <eltref ref="annotation"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, exactly as for the wildcard
corresponding to an <eltref ref="any"/> element as set out in <specref ref="declare-openness"/>;</p>
     </item>
     <item>
      <p role="otherwise"><termref def="key-null">absent</termref>.</p>
     </item>
    </olist></p>
  </item>
  <item>
   <p><termdef id="key-eaw" term="complete wildcard" role="local">Let the <term>complete wildcard</term> be defined as</termdef>
 <olist role="caseval">
  <item>
   <p role="if">there are no <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> corresponding
to attribute groups with <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="agd" prop="attribute wildcard"/>s</p>
   <p role="then">the <termref def="key-law">local wildcard</termref>.</p>
  </item>
  <item>
   <p role="if">there are one or more <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> corresponding
to attribute groups with <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="agd" prop="attribute wildcard"/>s</p>
   <p role="then">
    <olist role="caseval">
     <item id="c-awi1">
      <p role="if">there is an <eltref ref="anyAttribute"/> present</p>
      <p role="then">a wildcard whose <propref comp="w" prop="process contents"/> and
<propref comp="w" prop="annotations"/> are those of the <termref def="key-law">local
wildcard</termref>, and whose <propref comp="w" prop="namespace constraint"/> is the intensional intersection of the <propref comp="w" prop="namespace constraint"/> of the <termref def="key-law">local wildcard</termref>
and of the <propref comp="w" prop="namespace constraint"/>s of all the <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="agd" prop="attribute wildcard"/>s of the attribute groups corresponding to the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, as defined in <specref ref="cos-aw-intersect"/>.</p>
     </item>
     <item id="c-awi2">
   <p role="if">there is no <eltref ref="anyAttribute"/> present</p>
      <p role="then">a wildcard whose properties are as follows:
       <glist>
        <gitem>
         <label><propref comp="w" prop="process contents"/></label>
         <def>
          <p>The <propref comp="w" prop="process contents"/> of the first <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="agd" prop="attribute wildcard"/> of an attribute group among the
attribute groups corresponding to the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="w" prop="namespace constraint"/></label>
         <def>
          <p>The intensional intersection of the <propref comp="w" prop="namespace constraint"/>s of all the <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="agd" prop="attribute wildcard"/>s of the attribute groups corresponding to the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, as defined in <specref ref="cos-aw-intersect"/>.</p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="w" prop="annotations"/></label>
         <def><p><termref def="key-null">absent</termref>.</p>
         </def>
        </gitem>
       </glist>
      </p>
  </item>
    </olist>
   </p>
  </item>  
 </olist>
</p>
  </item>
  <item>
   <p>The value is then determined by
 <olist role="caseval">
<item>
      <p role="if">the <eltref ref="restriction" inside="simpleContent"/> alternative is chosen</p>
      <p role="then">the <termref def="key-eaw">complete wildcard</termref>;</p>
     </item>
  <item>
   <p role="if">the <eltref ref="extension" inside="simpleContent"/> alternative is chosen</p>
   <p role="then">
    <olist>
     <item>
      <p><termdef id="key-baw" term="base wildcard" role="local">let the <term>base
wildcard</term> be defined as</termdef>
       <olist role="caseval">
     <item>
      <p role="if">the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a complex type definition
with an <propref comp="ctd" prop="attribute wildcard"/></p>
      <p role="then">that <propref comp="ctd" prop="attribute wildcard"/>.</p>
     </item>
     <item>
      <p role="otherwise"><termref def="key-null">absent</termref>.</p>
     </item>
    </olist>
      </p>
     </item>
     <item>
      <p>The value is then determined by
    <olist role="caseval">
     <item>
      <p role="if">the <termref def="key-baw">base wildcard</termref> is <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
</p>
      <p role="then">
       <olist role="caseval">
        <item>
         <p role="if">the <termref def="key-eaw">complete wildcard</termref> is <termref def="key-null">absent</termref></p>
         <p role="then">the <termref def="key-baw">base wildcard</termref>.</p>
        </item>
        <item id="c-awu">
         <p role="otherwise">a wildcard whose <propref comp="w" prop="process contents"/> and
<propref comp="w" prop="annotations"/> are those of the <termref def="key-eaw">complete
wildcard</termref>, and whose <propref comp="w" prop="namespace constraint"/> is the
intensional union of the <propref comp="w" prop="namespace constraint"/> of the <termref def="key-eaw">complete wildcard</termref>
and of the <termref def="key-baw">base wildcard</termref>, as defined in <specref ref="cos-aw-union"/>.</p>
        </item>
       </olist>
      </p>
     </item>     
     <item>
      <p role="otherwise">(the <termref def="key-baw">base
wildcard</termref> is <termref def="key-null">absent</termref>) the <termref def="key-eaw">complete
wildcard</termref></p>
     </item>
    </olist></p>
     </item>
    </olist>
   </p>
  </item>
 </olist></p>
  </item>
 </olist>
</propmap>
<propmap comp="ctd" prop="content type">
 <phrase dg="ep01">A <compref name="Content Type" ref="ct"/> as follows:</phrase>
 <pvlist>
  <pvpair comp="ct" prop="variety" dg="ep01"><pt>simple</pt></pvpair>
  <pvpair comp="ct" prop="particle" dg="ep01"><termref def="key-null"/></pvpair>
  <pvpair comp="ct" prop="simple type definition"><olist role="caseval">
  <item><p role="if">the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a complex type definition whose own <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase> and the <eltref ref="restriction" inside="simpleContent"/> alternative is chosen</p>
   <p role="then">starting from either
         <olist>
          <item id="std1cl">
           <p>the simple type definition corresponding to the <eltref ref="simpleType"/> among
the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of <eltref ref="restriction" inside="simpleContent"/> if there
is one;</p>
          </item>
          <item id="std2cl">
           <p>otherwise (<eltref ref="restriction" inside="simpleContent"/> has no <eltref ref="simpleType"/> among its
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>), the simple type definition which is the <phrase dg="ep01"><propref comp="ct" prop="simple type definition"/> of the </phrase><propref comp="ctd" prop="content type"/> of the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></p>
          </item>
         </olist>
a simple type definition which restricts the simple type definition identified in
<clauseref ref="std1cl"/> or <clauseref ref="std2cl"/> with a
set of facet components corresponding to the appropriate element information
items among the <eltref ref="restriction" inside="simpleContent"/>'s
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> (i.e. those which specify facets, if any), as
defined in <specref ref="st-restrict-facets"/>;
   </p>
  </item>
  <item><p role="if">the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a complex type definition
whose own <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase>
<pt>mixed</pt> and <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> a <compref name="Particle" ref="p"/></phrase> which
is <termref def="cd-emptiable">emptiable</termref>, as defined in <specref ref="cos-group-emptiable"/> and the <eltref ref="restriction" inside="simpleContent"/> alternative is chosen</p>
   <p role="then">starting from
         the simple type definition corresponding to the <eltref ref="simpleType"/> among
the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of <eltref ref="restriction" inside="simpleContent"/> (which
<rfc2119>must</rfc2119> be present)
a simple type definition which restricts that simple type definition with a
set of facet components corresponding to the appropriate element information
items among the <eltref ref="restriction" inside="simpleContent"/>'s
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> (i.e. those which specify facets, if any), as
defined in <specref ref="st-restrict-facets"/>;
   </p>
  </item>
  <item><p role="if">the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a complex type definition
(whose own <propref comp="ctd" prop="content type"/> <rfc2119>must</rfc2119> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase>, see below) and the <eltref ref="extension" inside="simpleContent"/> alternative is chosen</p>
   <p role="then">
the <phrase dg="ep01"><propref comp="ct" prop="simple type definition"/> of the </phrase><propref comp="ctd" prop="content type"/> of that complex type definition;</p>
  </item>
  <item>
   <p role="otherwise">(the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is a simple type definition and
the <eltref ref="extension" inside="simpleContent"/> alternative is chosen), then
that simple type definition.</p>
  </item>
 </olist></pvpair>
 </pvlist>
 
</propmap>
</reprcomp>
<p>When the <eltref ref="complexContent"/> alternative is chosen, the following
elements are relevant (as are the <eltref ref="attributeGroup" inside="simpleContent"/> and <eltref ref="anyAttribute"/> elements, not repeated here), and the additional property mappings are as below.  Note that either
<eltref ref="restriction" inside="complexContent"/> or <eltref ref="extension" inside="complexContent"/> <rfc2119>must</rfc2119> be chosen as the
content of <eltref ref="complexContent"/>, but their content models are
different in this case from the case above when they occur as children of
<eltref ref="simpleContent"/>.</p>
 <p>The property mappings below are <emph>also</emph> used in the case where
the third alternative (neither <eltref ref="simpleContent"/> nor <eltref ref="complexContent"/>) is chosen.  This case is understood as shorthand for complex content restricting the <termref def="key-urType">ur-type definition</termref>, and the details of the mappings 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must</rfc2119></phrase>
be modified as necessary.</p>
 <reprelt eltname="complexContent"/>
 <reprelt eltname="restriction" type="complexRestrictionType" local="complexContent"/>
 <reprelt eltname="extension" type="extensionType" local="complexContent"/>
 <reprcomp abstract="Complex Type Definition with complex content" ref="Complex_Type_Definition_details">
<propmap comp="ctd" prop="base type definition">The type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="ctd" prop="derivation method">If the <eltref ref="restriction" inside="complexContent"/> alternative
is chosen, then <pt>restriction</pt>, otherwise (the <eltref ref="extension" inside="complexContent"/> alternative
is chosen) <pt>extension</pt>.</propmap>
<propmap comp="ctd" prop="attribute uses">A union of sets of attribute uses as follows: 
 <olist>
  <item id="c-ad1">
   <p>The set of attribute uses corresponding to the <eltref ref="attribute"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any.</p>
  </item>
  <item id="c-ad2">
   <p>The <propref comp="agd" prop="attribute uses"/> of the
attribute groups <termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref>s of the <code>ref</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any.</p>
  </item>
  <item>
   <p>The
<propref comp="ctd" prop="attribute uses"/> of the type definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, unless
the <eltref ref="restriction" inside="complexContent"/> alternative
is chosen, in which case some members of
that type definition's <propref comp="ctd" prop="attribute uses"/> <rfc2119>must not</rfc2119> be
included, namely those whose
<propref comp="au" prop="attribute declaration"/>'s
<propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> are the same as
<olist role="orval">
 <item>
  <p>The <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> of the <propref comp="au" prop="attribute declaration"/> of an attribute use in the set per <clauseref ref="c-ad1"/> or <clauseref ref="c-ad2"/> above;</p>
 </item>
 <item>
  <p>what would have been the <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> of the <propref comp="au" prop="attribute declaration"/> of an attribute use in the set per <clauseref ref="c-ad1"/> above but for the <termref def="key-vv">actual value</termref> of the <code>use</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the relevant <eltref ref="attribute"/> among the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of <eltref ref="restriction" inside="complexContent"/> being <pt>prohibited</pt>.</p>
 </item>
</olist></p>
  </item>
 </olist>
</propmap>
<propmap comp="ctd" prop="attribute wildcard">As above for the <eltref ref="simpleContent"/> alternative.</propmap>
<propmap comp="ctd" prop="content type">
 <olist>
  <item>
   <p><termdef id="key-efm" term="effective mixed" role="local">Let the
<term>effective mixed</term> be </termdef>
 <olist role="caseval">
       <item>
        <p role="if">the <code>mixed</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present on <eltref ref="complexContent"/></p>
        <p role="then">its <termref def="key-vv">actual value</termref>;</p>
       </item>
       <item>
        <p role="if">the <code>mixed</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present on
<eltref ref="complexType"/></p>
        <p role="then">its <termref def="key-vv">actual value</termref>;</p>
       </item>
       <item>
        <p role="otherwise"><code>false</code>.</p>
       </item>
      </olist></p>
  </item>
  <item>
   <p>
<termdef id="key-exg" term="effective content" role="local">Let the <term>effective
content</term> be </termdef><olist role="caseval">
  <item id="c-cme"><p role="if"> 
<olist role="ortest">
 <item>
  <p>There is no <eltref ref="group"/>, <eltref ref="all"/>, <eltref ref="choice"/> or <eltref ref="sequence"/> among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>;</p>
 </item>
 <item>
           <p>There is an <eltref ref="all"/> or <eltref ref="sequence"/> among
the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> with no <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of its own excluding <eltref ref="annotation"/>;</p>
          </item>
 <item>
           <p>There is a <eltref ref="choice"/> among
the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> with no <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of its own excluding <eltref ref="annotation"/> whose <code>minOccurs</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> has the <termref def="key-vv">actual value</termref> <code>0</code>;</p>
          </item>
</olist>
</p>
   <p role="then">
    <olist role="caseval">
     <item>
      <p role="if">the <termref def="key-efm">effective mixed</termref> is <code>true</code></p>
      <p role="then">A particle whose properties are as follows:
       <glist>
        <gitem>
         <label><propref comp="p" prop="min occurs"/></label>
         <def>
          <p><code>1</code></p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="p" prop="max occurs"/></label>
         <def>
          <p><code>1</code></p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="p" prop="term"/></label>
         <def>
          <p>A model group whose <propref comp="mg" prop="compositor"/> is
<pt>sequence</pt> and whose <propref comp="mg" prop="particles"/> is empty.</p>
         </def>
        </gitem>
       </glist>.</p></item>
     <item>
     <p role="otherwise"><pt>empty</pt></p></item>
    </olist></p>
  </item>
                             <item>
                              <p role="otherwise">the particle corresponding to
the <eltref ref="all"/>, <eltref ref="choice"/>, <eltref ref="group"/> or
<eltref ref="sequence"/> among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
                             </item>
   </olist></p>
  </item>
  <item>
   <p>
 Then the value of the property is
 <olist role="caseval">
  <item><p role="if">the <eltref ref="restriction" inside="complexContent"/> alternative is chosen</p>
  <p role="then">
   <olist role="caseval">
    <item>
     <p role="if">the <termref def="key-exg">effective content</termref> is
<pt>empty</pt> </p>
     <p role="then"><phrase dg="ep01">a <compref name="Content Type" ref="ct"/> as follows:</phrase>
      <pvlist>
       <pvpair comp="ct" prop="variety"><pt>empty</pt></pvpair>
       <pvpair comp="ct" prop="particle" dg="ep01"><termref def="key-null"/></pvpair>
       <pvpair comp="ct" prop="simple type definition" dg="ep01"><termref def="key-null"/></pvpair>
      </pvlist>
     </p>
    </item>
    <item id="c-ctrp">
   <p role="otherwise"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref name="Content Type" ref="ct"/> as follows:</phrase> 
    <!--*
* material suppressed here by diff group ep01 *
*-->
    <pvlist>
     <pvpair comp="ct" prop="variety"><pt>mixed</pt> if the <termref def="key-efm">effective mixed</termref> is <code>true</code>, otherwise <pt>elementOnly</pt></pvpair>
       <pvpair comp="ct" prop="particle" dg="ep01">The <termref def="key-exg">effective content</termref></pvpair>
       <pvpair comp="ct" prop="simple type definition" dg="ep01"><termref def="key-null"/></pvpair>
    </pvlist>
   </p>
  </item>
   </olist>
  </p>
  </item>
  <item><p role="if">the <eltref ref="extension" inside="complexContent"/> alternative is chosen</p>
   <p role="then">
    <olist role="caseval">
        <item>
         <p role="if">the <termref def="key-exg">effective
content</termref> is <pt>empty</pt></p>
         <p role="then">the
<propref comp="ctd" prop="content type"/> of the type definition <termref def="src-resolve">resolved</termref> to
by the <termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></p>
        </item>
     <item>
         <p role="if">the type definition <termref def="src-resolve">resolved</termref> to
by the <termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> has a <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">with <propref comp="ct" prop="variety"/></phrase> <pt>empty</pt></p>
      <p role="then">a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref name="Content Type" ref="ct"/></phrase> as per <clauseref ref="c-ctrp"/> above;</p>
        </item>
     <item>
         <p role="otherwise">a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref name="Content Type" ref="ct"/> as follows:</phrase>
          <pvlist>
           <pvpair comp="ct" prop="variety"><pt>mixed</pt> if the <termref def="key-efm">effective mixed</termref> is <code>true</code>, otherwise <pt>elementOnly</pt></pvpair>
           <pvpair comp="ct" prop="particle">a <compref name="Particle" ref="p"/> whose properties are as follows:
       <glist>
        <gitem>
         <label><propref comp="p" prop="min occurs"/></label>
         <def>
          <p><code>1</code></p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="p" prop="max occurs"/></label>
         <def>
          <p><code>1</code></p>
         </def>
        </gitem>
        <gitem>
         <label><propref comp="p" prop="term"/></label>
         <def>
          <p>A model group whose <propref comp="mg" prop="compositor"/> is
<pt>sequence</pt> and whose <propref comp="mg" prop="particles"/> are the particle of
the <propref comp="ctd" prop="content type"/> of the type definition <termref def="src-resolve">resolved</termref> to
by the <termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> followed by the
<termref def="key-exg">effective content</termref>.</p>
         </def>
        </gitem>
       </glist></pvpair>
           <pvpair comp="ct" prop="simple type definition" dg="ep01"><termref def="key-null"/></pvpair>
          </pvlist></p>
        </item>
       </olist>
   </p>
</item>
 </olist></p>
  </item>
 </olist>
</propmap>
</reprcomp>
</reprdef>
 <note>
  <p>Aside from the simple coherence requirements enforced above, constraining
type definitions identified as restrictions to actually <emph>be</emph>
restrictions, that is, to <termref def="key-vn">validate</termref> a
subset of the items which are
<termref def="key-vn">validated</termref> by their base type definition, is enforced in <specref ref="coss-ct"/>.</p>
 </note>
     <note>
      <p>The <emph>only</emph> substantive function of the value <pt>prohibited</pt> for the
<code>use</code> attribute of an <eltref ref="attribute"/> is in establishing
the correspondence between a complex type defined by restriction and its XML
representation.  It serves to prevent
inheritance of an identically named attribute use from the <propref comp="ctd" prop="base type definition"/>.  Such an <eltref ref="attribute"/> does not correspond to any component, and hence there is no interaction with either explicit or inherited wildcards in the operation of <specref ref="formal-complex-type"/> or <specref ref="coss-ct"/>.</p>
     </note>
<p>Careful consideration of the above concrete syntax reveals that
a type definition need consist of no more than a name, i.e. that
 <code>&lt;complexType name="anyThing"/&gt;</code> is allowed.</p>
 <note role="example">
    <eg xml:space="preserve">&lt;xs:complexType name="length1"&gt;
 &lt;xs:simpleContent&gt;
  &lt;xs:extension base="xs:nonNegativeInteger"&gt;
   &lt;xs:attribute name="unit" type="xs:NMTOKEN"/&gt;
  &lt;/xs:extension&gt;
 &lt;/xs:simpleContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:element name="width" type="length1"/&gt;

  &lt;width unit="cm"&gt;25&lt;/width&gt;

&lt;xs:complexType name="length2"&gt;
 &lt;xs:complexContent&gt;
  &lt;xs:restriction base="
     <phrase diff="nsq-del" dg="rq17">xs:anyType</phrase>
     <phrase diff="nsq-add" dg="rq17">xs:rootType</phrase>
     "&gt;
   &lt;xs:sequence&gt;
    &lt;xs:element name="size" type="xs:nonNegativeInteger"/&gt;
    &lt;xs:element name="unit" type="xs:NMTOKEN"/&gt;
   &lt;/xs:sequence&gt;
  &lt;/xs:restriction&gt;
 &lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:element name="depth" type="length2"/&gt;

  &lt;depth&gt;
   &lt;size&gt;25&lt;/size&gt;&lt;unit&gt;cm&lt;/unit&gt;
  &lt;/depth&gt;

&lt;xs:complexType name="length3"&gt;
 &lt;xs:sequence&gt;
  &lt;xs:element name="size" type="xs:nonNegativeInteger"/&gt;
  &lt;xs:element name="unit" type="xs:NMTOKEN"/&gt;
 &lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;
    </eg>
  <p>
    Three approaches to defining a type for length:  one with
character data content constrained by reference to
    a built-in datatype, and one attribute, the other two using two
elements.  <code>length3</code> is the abbreviated alternative to
<code>length2</code>:  they correspond to identical type definition components.
</p>
</note>
 
<note role="example">
   <eg xml:space="preserve">&lt;xs:complexType name="personName"&gt;
 &lt;xs:sequence&gt;
  &lt;xs:element name="title" minOccurs="0"/&gt;
  &lt;xs:element name="forename" minOccurs="0" maxOccurs="unbounded"/&gt;
  &lt;xs:element name="surname"/&gt;
 &lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;

&lt;xs:complexType name="extendedName"&gt;
 &lt;xs:complexContent&gt;
  &lt;xs:extension base="personName"&gt;
   &lt;xs:sequence&gt;
    &lt;xs:element name="generation" minOccurs="0"/&gt;
   &lt;/xs:sequence&gt;
  &lt;/xs:extension&gt;
 &lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:element name="addressee" type="extendedName"/&gt;

  &lt;addressee&gt;
   &lt;forename&gt;Albert&lt;/forename&gt;
   &lt;forename&gt;Arnold&lt;/forename&gt;
   &lt;surname&gt;Gore&lt;/surname&gt;
   &lt;generation&gt;Jr&lt;/generation&gt;
  &lt;/addressee&gt;</eg>
   <p>A type definition for personal names, and a definition <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> by
extension which adds a single element; an element declaration referencing the
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> definition, and a <termref def="key-vn">valid</termref> instance thereof.</p>
  </note> 
<note role="example">
   <eg xml:space="preserve">&lt;xs:complexType name="simpleName"&gt;
 &lt;xs:complexContent&gt;
  &lt;xs:restriction base="personName"&gt;
   &lt;xs:sequence&gt;
    &lt;xs:element name="forename" minOccurs="1" maxOccurs="1"/&gt;
    &lt;xs:element name="surname"/&gt;
   &lt;/xs:sequence&gt;
  &lt;/xs:restriction&gt;
 &lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:element name="who" type="simpleName"/&gt;

   &lt;who&gt;
    &lt;forename&gt;Bill&lt;/forename&gt;
    &lt;surname&gt;Clinton&lt;/surname&gt;
   &lt;/who&gt;</eg>
   <p>A simplified type definition
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from the base type from the previous example by restriction, eliminating one optional daughter and
fixing another to occur exactly once; an element declared by reference to it,
and a <termref def="key-vn">valid</termref> instance thereof.</p>
  </note>
 <note role="example">
  <eg xml:space="preserve">&lt;xs:complexType name="paraType" mixed="true"&gt;
 &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;
  &lt;xs:element ref="emph"/&gt;
  &lt;xs:element ref="strong"/&gt;
 &lt;/xs:choice&gt;
 &lt;xs:attribute name="version" type="xs:<!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">decimal</phrase>"/&gt;
&lt;/xs:complexType&gt;</eg>
  <p>A further illustration of the abbreviated form, with the
<code>mixed</code> attribute appearing on <code>complexType</code> itself.</p>
 </note>
</div3>
    <div3>
      <head>Constraints on XML Representations of Complex Type Definitions</head>
      <constraintnote id="src-ct" type="src">
  <head>Complex Type Definition Representation OK</head>
  <p>In addition to the conditions imposed on <eltref ref="complexType"/> element
information items by the schema for schemas, 
   <olist role="and.apply">
    <item>
     <p>If the <eltref ref="complexContent"/> alternative is chosen, the type definition <termref def="src-resolve">resolved</termref> to
by the <termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> <rfc2119>must</rfc2119> be a complex type definition;</p>
    </item>
    <item>
     <p>If the <eltref ref="simpleContent"/> alternative is chosen, 
      <olist role="and">
       <item>
        <p>The type definition <termref def="src-resolve">resolved</termref> to
by the <termref def="key-vv">actual value</termref> of the <code>base</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
      <olist role="orval">
       <item>
        <p>a complex type
definition whose <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase>;</p>
       </item>
       <item id="cl-esc">
        <p>only if the
<eltref ref="restriction" inside="simpleContent"/> alternative is also chosen, a complex type
definition whose <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has
<propref comp="ct" prop="variety"/></phrase> <pt>mixed</pt> and
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> a <compref name="Particle" ref="p"/></phrase>
which is
  <termref def="cd-emptiable">emptiable</termref>, as defined in <specref ref="cos-group-emptiable"/>;</p>
       </item>
       <item>
        <p>only if the
<eltref ref="extension" inside="simpleContent"/> alternative is also chosen, a simple type definition.</p>
       </item>
      </olist></p>
       </item>
       <item>
        <p>If <clauseref ref="cl-esc"/> above is satisfied, then there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a
<eltref ref="simpleType"/> among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of <eltref ref="restriction" inside="simpleContent"/>.</p>
       </item>
      </olist>
     </p>            
     <note>
      <p>Although not explicitly ruled out either here or in <specref ref="normative-schemaSchema"/>, specifying <code>&lt;xs:complexType . . .mixed='true'</code> when the <eltref ref="simpleContent"/> alternative is chosen has no effect on the corresponding component, and <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><rfc2119>should</rfc2119></phrase> be avoided.  This may be ruled out in a subsequent version of this specification.</p>
     </note>
    </item>
    <item>
     <p>The corresponding complex type definition component <rfc2119>must</rfc2119> satisfy the conditions set
out in <specref ref="coss-ct"/>;</p>
    </item>
    <item>
     <p>If <clauseref ref="c-awi1"/> or <clauseref ref="c-awi2"/> in the correspondence specification above for <propref comp="ctd" prop="attribute wildcard"/> is satisfied, the intensional intersection <rfc2119>must</rfc2119> be expressible, as defined in <specref ref="cos-aw-intersect"/>.</p>
    </item>
   </olist>
  </p>
 </constraintnote>
     </div3>
    <div3 id="formal-complex-type">
    <head>Complex Type Definition Validation Rules</head>
    <constraintnote type="cvc" id="cvc-complex-type">
     <head>Element Locally Valid (Complex Type)</head>
     <p>For an element information item to be locally <termref def="key-vn">valid</termref> with respect to a complex type definition
      <olist role="and">
       <!--* <item> ALV ALV ALV *-->
       <item dg="rq17p">
        <p><propref comp="ctd" prop="abstract"/> is <pt>false</pt>.</p>
       </item>
       <item>
        <p>If <clauseref ref="c-nl"/> of <specref ref="cvc-elt"/> did not
apply, then <olist role="casetest">
         <item>
        <p role="if">the <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>empty</pt></p>
          <p role="then">the element
information item has no character or element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>.</p>
       </item>
       <item id="c-sv2">
        <p role="if">the <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase></p>
        <p role="then">the element information item has no element
information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, and the <termref def="key-nv">normalized value</termref> of the element information
item is <termref def="key-vn">valid</termref> with respect to <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the <propref comp="ctd" prop="content type"/>'s <propref comp="ct" prop="simple type definition"/></phrase> as defined by <specref ref="cvc-simple-type"/>.</p>
       </item>
       <item>
        <p role="if">the <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>element-only</pt></p>
        <p role="then">the
element information item has no character information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> other
than those whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.character">character code</xpropref> is defined as a <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xml11/#NT-S">white space</xtermref>
in <bibref ref="ref-xml"/>.
<note dg="b1838">
<p>It is implementation-defined whether a schema processor supports
the definition of <xnt xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xml11/#NT-S">white space</xnt>
from <bibref ref="ref-xml"/>, or that from <bibref ref="ref-xml-1.0"/>,
or both.</p>
</note>
</p>
       </item>
       <item>
        <p role="if">the <propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>element-only</pt> or
<pt>mixed</pt></p>
        <p role="then">the sequence of the element information item's element
information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any, taken in order, is <termref def="key-vn">valid</termref> with
respect to the <propref comp="ctd" prop="content type"/>'s <phrase dg="ep01"><propref comp="ct" prop="particle"/></phrase>, as defined in <specref ref="cvc-particle"/>.</p>
       </item>
        </olist></p>
       </item>
       <item id="c-aam">
        <p>For each attribute information item in the element information
item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> excepting those whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> is identical to <code>http://www.w3.org/2001/XMLSchema-instance</code> and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> is one of <code>type</code>, <code>nil</code>, <code>schemaLocation</code> or <code>noNamespaceSchemaLocation</code>,
         <olist role="casetest">
          <item id="c-ctma">
           <p role="if">there is among the <propref comp="ctd" prop="attribute uses"/> an
attribute use with an <propref comp="au" prop="attribute declaration"/> whose
<propref comp="ad" prop="name"/> matches the attribute information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> and whose <propref comp="ad" prop="target namespace"/> is identical to the attribute information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> (where an <termref def="key-null">absent</termref> <propref comp="ad" prop="target namespace"/> is taken to be identical to a <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> with no value)</p>           
           <p role="then">the attribute information <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to that attribute use as per <specref ref="cvc-au"/>.  In this case the <propref comp="au" prop="attribute declaration"/> of that attribute use is the <termref def="key-dd">context-determined declaration</termref> for the attribute information item with respect to <specref ref="cvc-assess-attr"/> and <specref ref="sic-a-outcome"/>.</p>
          </item>
          <item id="c-avaw">
           <p role="otherwise">
            <olist role="andtest">
             <item>
              <p>There <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an <propref comp="ctd" prop="attribute wildcard"/>.</p>
             </item>
             <item>
              <p>The
attribute information item <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to it as defined in <specref ref="cvc-wildcard"/>.</p>
             </item>
            </olist>
           </p>
          </item>
         </olist>
        </p>
       </item>
       <item>
        <p>The <propref comp="au" prop="attribute declaration"/> of each attribute use in the <propref comp="ctd" prop="attribute uses"/> whose
<propref comp="au" prop="required"/> is <pt>true</pt> matches one of the attribute information items in the element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> as per <clauseref ref="c-ctma"/> above.</p>
       </item>
       <item>
<!--* n.b. the typo correction in the next item has nothing to do with
bug 1913, except that the WG noticed it when we were approving 1913. *-->
              <p>Let <termdef id="key-ida" term="wild IDs" role="local">the <term>wild
IDs</term> be the set of all
attribute information item<phrase dg="derive-1913">s</phrase> 
to which <clauseref ref="c-avaw"/> applied and whose 
<termref def="key-vn">validation</termref> resulted in
a <termref def="key-dd">context-determined declaration</termref> of
<pt>mustFind</pt> or no <termref def="key-dd">context-determined
declaration</termref> at all, and whose <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref> and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref> resolve (as defined by <specref ref="cvc-resolve-instance"/>) to an attribute declaration whose <propref comp="ad" prop="type definition"/> is or is <!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> from <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref></termdef>. Then
               <olist role="andtest">
                <item>
                 <p>There <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> no more than one item in <termref def="key-ida">wild IDs</termref>.</p>
                </item>
                <item>
                 <p>If <termref def="key-ida">wild IDs</termref> is
non-empty, there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are no</phrase> attribute
uses among the <propref comp="ctd" prop="attribute uses"/>
whose <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="type definition"/> is or is <!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> from
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref>.</p>
                </item>
               </olist>
               <note>
                <p>This clause serves to ensure that even via attribute
wildcards no element has more than one attribute of type ID, and that even when
an element legitimately lacks a declared attribute of type ID, a
wildcard-validated attribute <rfc2119>must not</rfc2119> supply it.  That is, if an element has a
type whose attribute declarations include one of type ID, it either has that
attribute or no attribute of type ID.</p>
               </note>
              </p>
             </item>
      </olist>
     </p>
     <note>
      <p>When an <propref comp="ctd" prop="attribute wildcard"/> is present, this does
<emph>not</emph> introduce any ambiguity with respect to how attribute
information items for
which an attribute use is present amongst the <propref comp="ctd" prop="attribute uses"/> whose name and target namespace match are <termref def="key-va">assessed</termref>.  In such cases the attribute use <emph>always</emph> takes precedence, and the <termref def="key-va">assessment</termref> of such items stands or falls entirely on the basis of the attribute use and its <propref comp="au" prop="attribute declaration"/>.  This follows from the details of <clauseref ref="c-aam"/>.</p>
     </note>
    </constraintnote>
    </div3>
     <div3>
     <head>Complex Type Definition Information Set Contributions</head>
     <constraintnote type="sic" id="sic-attrDefault">
     <head>Attribute Default Value</head>
     <p>For each attribute use in the <propref comp="ctd" prop="attribute uses"/> whose
<propref comp="au" prop="required"/> is <pt>false</pt> and whose
<propref comp="au" prop="value constraint"/> is not <termref def="key-null">absent</termref> but whose <propref comp="au" prop="attribute declaration"/> does not match one of the attribute
information items in the element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> as
per <clauseref ref="c-ctma"/> of <specref ref="cvc-complex-type"/>
above, the <termref def="key-psvi">post-schema-validation infoset</termref> <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> an attribute information item whose properties
are as below added to the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attributes</xpropref> of the element information
item.</p>
      <issue id="RQ-22i" role="1.1" status="open">
<!--*  <p><loc href="&reqs;#norm-default" target="reqs">RQ-22 (norm-default)</loc></p> *-->
       <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2852" target="reqs">Issue 2852 (RQ-22 add normalized default)</loc></p>
       <p>Constructed default attribute information items in the PSVI did not have a [normalized
value] property, only a [schema normalized value], making them incompatible
with ordinary attribute infoitems.  On balance, it seems sensible to correct this.</p>
       <resolution><p>Add a [normalized value] property to the constructed attribute infoitem which arises when a default value is applied.</p></resolution>
      </issue>
      <glist>
       <gitem>
        <label><xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">local name</xpropref></label>
        <def>
<p>The <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="name"/>.</p>
        </def>
       </gitem>
       <gitem>
        <label><xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">namespace name</xpropref></label>
        <def>
<p>The <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="target namespace"/>.</p>
        </def>
       </gitem>
       <gitem>
        <label><propref ref="a-schema_normalized_value" role="psvi"/></label>
        <def>
         <p>The <!--*
* material suppressed here by diff group rq129 *
*--><termref def="key-evc">effective value constraint</termref><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="rq129">'s <propref comp="vc_a" prop="lexical form"/></phrase>.</p>
        </def>
       </gitem>
       <gitem>
        <label><propref ref="a-schema_default" role="psvi"/></label>
        <def>
         <p>The <!--*
* material suppressed here by diff group rq129 *
*--><termref def="key-evc">effective value constraint</termref><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="rq129">'s <propref comp="vc_a" prop="lexical form"/></phrase>.</p>
        </def>
       </gitem>
       <gitem>
        <label><propref ref="a-validation_context" role="psvi"/></label>
        <def><p>The nearest ancestor element information item with a
<propref role="psvi" ref="e-schema_information"/> property.</p></def>
       </gitem>
       <gitem>
        <label><propref ref="a-validity" role="psvi"/></label>
        <def>
         <p><pt>valid</pt>.</p>
        </def>
       </gitem>
       <gitem>
        <label><propref ref="a-validation_attempted" role="psvi"/></label>
        <def><p><pt>full</pt>.</p></def>
       </gitem>
       <gitem>
        <label><propref ref="a-schema_specified" role="psvi"/></label>
        <def><p><pt>schema</pt>.</p></def>
       </gitem>
      </glist>
      <p>The added items 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must</rfc2119></phrase> 
also either have <propref role="psvi" ref="a-type_definition"/> (and <propref role="psvi" ref="a-member_type_definition"/> if appropriate) properties, or their lighter-weight alternatives, as specified in <specref ref="sic-attrType"/>.</p>
    </constraintnote>
</div3>
 <div3 id="coss-ct">
  <head>Constraints on Complex Type Definition Schema Components</head>
  <p>All complex type definitions (see <specref ref="Complex_Type_Definitions"/>) <rfc2119>must</rfc2119> satisfy the following constraints.</p>
  <constraintnote type="cos" id="ct-props-correct">
   <head>Complex Type Definition Properties Correct</head>
   <olist role="And">
    <item>
     <p>The values of the properties of a complex type definition <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Complex_Type_Definition_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
    </item>
    <item>
     <p>If the <propref comp="ctd" prop="base type definition"/> is a simple type
definition, the <propref comp="ctd" prop="derivation method"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <pt>extension</pt>.</p>
    </item>
    <item><p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">There are no circular 
definitions, except for that of <pt>rootType</pt></phrase>.  That is, it <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> 
possible to reach the <phrase diff="nsq-del" dg="rq17"><termref def="ur-type-itself">ur-type 
definition</termref></phrase><phrase diff="nsq-add" dg="rq17">definition of 
<pt>rootType</pt></phrase> by repeatedly following the 
<propref comp="ctd" prop="base type definition"/>.</p></item>
    <item>
     <p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">No two</phrase> 
distinct attribute declarations in the 
<propref comp="ctd" prop="attribute uses"/> <!--*
* material suppressed here by diff group modals *
*--> 
have identical <propref comp="ad" prop="name"/>s and 
<propref comp="ad" prop="target namespace"/>s.</p>
    </item>
    <item>
     <p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">No two</phrase> 
distinct attribute declarations in the <propref comp="ctd" prop="attribute uses"/> 
<!--*
* material suppressed here by diff group modals *
*--> have 
<propref comp="ad" prop="type definition"/>s which are or are <!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> from 
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref>.</p>
    </item>
   </olist>
  </constraintnote>
  <constraintnote type="cos" id="cos-ct-extends">
     <head>Derivation Valid (Extension)</head>
     <p>If the <propref comp="ctd" prop="derivation method"/> is <pt>extension</pt>, <phrase dg="iff">then</phrase>
      <olist role="case">
       <item>
        <p role="if">the <propref comp="ctd" prop="base type definition"/> is a complex type
definition</p>
        <p role="then">
         <olist role="andtest">
          <item>
           <p>The <propref comp="ctd" prop="final"/> of the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">does not</phrase> contain <pt>extension</pt>.</p>
          </item>
          <item id="c-cte">
           <p>Its <propref comp="ctd" prop="attribute uses"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a subset
of the <propref comp="ctd" prop="attribute uses"/> of the complex type
definition itself<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">.
That is</phrase>, for every attribute use in the
<propref comp="ctd" prop="attribute uses"/> of the
<propref comp="ctd" prop="base type definition"/>, 
there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an attribute use in the 
<propref comp="ctd" prop="attribute uses"/> of the complex
type definition itself whose <propref comp="au" prop="attribute declaration"/> 
has the same <propref comp="ad" prop="name"/>,
<propref comp="ad" prop="target namespace"/> and
<propref comp="ad" prop="type definition"/> as its attribute declaration.</p>
          </item>
          <item>
           <p>If it has an <propref comp="ctd" prop="attribute wildcard"/>, 
<phrase dg="modals">then</phrase> the complex type definition 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">also has</phrase>
one, and the base type definition's 
<propref comp="ctd" prop="attribute wildcard"/>'s 
<propref comp="w" prop="namespace constraint"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> 
a subset of the complex type definition's 
<propref comp="ctd" prop="attribute wildcard"/>'s 
<propref comp="w" prop="namespace constraint"/>, 
as defined by <specref ref="cos-ns-subset"/>.</p>
          </item>
          <item>
           <p>
            <olist role="Ortest">
             <item>
              <p>The <propref comp="ctd" prop="content type"/> of
the <propref comp="ctd" prop="base type definition"/> and the
<propref comp="ctd" prop="content type"/> of the complex type definition itself
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">both
have <propref comp="ct" prop="variety"/> <pt>simple</pt> and <propref comp="ct" prop="simple type definition"/></phrase> the
same simple type definition.</p>
             </item>
             <item><p>The
<propref comp="ctd" prop="content type"/> of both the <propref comp="ctd" prop="base type definition"/> and the complex type definition itself
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="ct" prop="variety"/></phrase> <pt>empty</pt>.</p></item>
             <item>
              <olist role="Andtest">
               <item>
                <p>The
<propref comp="ctd" prop="content type"/> of the complex type
definition itself <!--*
* material suppressed here by diff group modals *
*--><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>element-only</pt> or <pt>mixed</pt></phrase>.</p>
               </item>
               <item>
                <olist role="Ortest">
                 <item>
                  <p>The
<propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/>
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>empty</pt>.</p>
                 </item>
                 <item>
                  <p>
                   <olist role="Andtest">
                    <item>
                     <p>Both
<propref comp="ctd" prop="content type"/>s <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="ct" prop="variety"/></phrase> <pt>mixed</pt> or both <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="ct" prop="variety"/></phrase>
<pt>element-only</pt>.</p>
                    </item>
                    <item>
                     <p>The <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> of the <propref comp="ctd" prop="content type"/></phrase> of the complex type
definition <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a <termref def="cd-model-extension">valid
extension</termref> of the <propref comp="ctd" prop="base type definition"/>'s
<!--*
* material suppressed here by diff group ep01 *
*--><propref comp="ctd" prop="content type"/>'s <propref comp="ct" prop="particle"/>,
as defined in <specref ref="cos-particle-extend"/>.</p>
                    </item>
                   </olist>
                  </p>
                  </item>
                </olist>
               </item>
              </olist>
             </item>
            </olist>
           </p>
           </item>
          <item>
           <p>It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is in principle</phrase> possible 
to <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derive</xtermref> the complex type
definition in two steps, the first an extension and the
second a restriction (possibly vacuous), from that type definition among its
ancestors whose <propref comp="ctd" prop="base type definition"/> is the <termref def="ur-type-itself">ur-type definition</termref>.</p>
           <note>
            <p>This requirement ensures that nothing removed by a restriction
is subsequently added back by an extension.  It is trivial to check if the
extension in question is the only extension in its <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref>, or if there are
no restrictions bar the first from the <termref def="ur-type-itself">ur-type
definition</termref>.</p>
            <p>Constructing the intermediate type definition to check this
constraint is straightforward:  simply re-order the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> to put all the
extension steps first, then collapse them into a single extension.  If the
resulting definition can be the basis for a valid restriction to the desired
definition, the constraint is satisfied.</p>
           </note>
          </item>
          </olist>
        </p>
       </item>
       <item>
        <p role="if">the <propref comp="ctd" prop="base type definition"/> is a simple type
definition</p>
        <p role="then">
         <olist role="andtest">
         <item>
          <p>The <propref comp="ctd" prop="content type"/><phrase dg="ep01">'s <propref comp="ct" prop="variety"/> is <pt>simple</pt> and its  <propref comp="ct" prop="simple type definition"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> the same simple type
definition.</p>
         </item>
         <item>
           <p>The <propref comp="std" prop="final"/> of the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">does not</phrase> contain <pt>extension</pt>.</p>
          </item>
        </olist>
        </p>        
       </item>
      </olist>
      <!--*
* material suppressed here by diff group iff *
*-->.
     </p>
    </constraintnote>

<p dg="iff"><termdef id="cd-ct-extension" term="valid extension">
A complex type <local>T</local> is a <term>valid extension</term> of its 
<propref comp="ctd" prop="base type definition"/> if and only if <local>T</local>
has a <propref comp="ctd" prop="derivation method"/> of <pt>extension</pt> and
satisfies the constraint <specref ref="cos-ct-extends"/></termdef>.</p>

<constraintnote type="cos" id="derivation-ok-restriction">
<head>Derivation Valid (Restriction, Complex)</head>
<p>If the <propref comp="ctd" prop="derivation method"/> is <pt>restriction</pt>
<olist role="and">
<item>
<!--* MSM begins a long campaign to eliminate places that seem to imply
    * modal logic must be used.  It suffices, here, that the base type
    * definition lack 'restriction' as an element of its final set.
    * It need not be logically necessary, factuality suffices. 
    *-->
<p>The <propref comp="ctd" prop="base type definition"/> 
<!--* !!! rq17 and modals both want this baby changed !!! *-->
<!--* !!! Since rq17 has already gone out, MSM changed 
    * the diff group to modals, so as to include it also
    * in the modals proposal.
    *-->
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> 
a complex type definition whose <propref comp="ctd" prop="final"/> does not 
contain <pt>restriction</pt>.</p>
</item>
<item diff="nsq-del" id="c-rad" dg="rq17">
<p>For each attribute use (call this <local>R</local>) in the <propref comp="ctd" prop="attribute uses"/>
<olist role="casetest">
<item>
<p role="if">there is an attribute use in the
<propref comp="ctd" prop="attribute uses"/> of the <propref comp="ctd" prop="base type definition"/> (call this <local>B</local>) whose <propref comp="au" prop="attribute declaration"/> has the same <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/></p>
<p role="then">
<olist role="andtest">
<item>
<p><olist role="ortest">
<item>
<p><local>B</local>'s <propref comp="au" prop="required"/> is <pt>false</pt>.</p>
</item>
<item>
<p><local>R</local>'s <propref comp="au" prop="required"/> is <pt>true</pt>.</p>
</item>
</olist></p>
</item>
<item>
<p><local>R</local>'s <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from <local>B</local>'s <propref comp="ad" prop="type definition"/> given the empty set as defined in
<specref ref="cos-st-derived-ok"/>.</p>
</item>
<item>
<p><termdef id="del-key-evc" term="effective base value constraint" role="local">Let the
<term>effective value constraint</term> of an attribute use be
its <propref comp="au" prop="value constraint"/>, if present, otherwise
its <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="value constraint"/>
</termdef>.  Then <olist role="ortest">
<item>
<p><local>B</local>'s <termref def="key-evc">effective value
constraint</termref> is <termref def="key-null">absent</termref> or<phrase dg="ep01"> has <propref comp="vc_a" prop="variety"/></phrase> <pt>default</pt>.</p>
</item>
<item>
<p><local>R</local>'s <termref def="key-evc">effective value
constraint</termref> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="vc_a" prop="variety"/></phrase>
<pt>fixed</pt> <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">and</phrase> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_a" prop="value"/> identical to</phrase><!--*
* material suppressed here by diff group rq129 *
*--> <local>B</local>'s.</p>
</item>
</olist>
</p>
</item>
</olist>
</p>
</item>
<item>
<p role="otherwise">the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> an <propref comp="ctd" prop="attribute wildcard"/> and the <propref comp="ad" prop="target namespace"/> of <!--*
* material suppressed here by diff group modals *
*--><local>R</local>'s <propref comp="au" prop="attribute declaration"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to that wildcard, as defined
in <specref ref="cvc-wildcard-namespace"/>.</p>
</item>
</olist>
</p>
</item>
<item diff="nsq-del" id="c-rad2" dg="rq17">
<p>For each attribute use in the <propref comp="ctd" prop="attribute uses"/> of
the <propref comp="ctd" prop="base type definition"/> whose <propref comp="au" prop="required"/> is
<pt>true</pt>, there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an attribute use with an <propref comp="au" prop="attribute declaration"/> with the same <propref comp="ad" prop="name"/> and <propref comp="ad" prop="target namespace"/> as its <propref comp="au" prop="attribute declaration"/> in the
<propref comp="ctd" prop="attribute uses"/> of the complex type definition
itself whose <propref comp="au" prop="required"/> is
<pt>true</pt>.</p>
</item>
<item diff="nsq-del" id="c-raw" dg="rq17">
<p>If there is an <propref comp="ctd" prop="attribute wildcard"/>, 
<olist role="andtest">
<item>
<p>The
<propref comp="ctd" prop="base type definition"/> 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">also
has</phrase> one.</p>
</item>
<item>
<p>The complex
type definition's <propref comp="ctd" prop="attribute wildcard"/>'s <propref comp="w" prop="namespace constraint"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a subset of the <propref comp="ctd" prop="base type definition"/>'s <propref comp="ctd" prop="attribute wildcard"/>'s <propref comp="w" prop="namespace constraint"/>, as defined by <specref ref="cos-ns-subset"/>.</p>
</item>
<item>
<p>Unless the <propref comp="ctd" prop="base type definition"/> is the <termref def="ur-type-itself">ur-type definition</termref>, the complex
type definition's <propref comp="ctd" prop="attribute wildcard"/>'s <propref comp="w" prop="process contents"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> identical
to or stronger than the <propref comp="ctd" prop="base type definition"/>'s <propref comp="ctd" prop="attribute wildcard"/>'s <propref comp="w" prop="process contents"/>, where
<pt>strict</pt> is stronger than <pt>lax</pt> is stronger than <pt>skip</pt>.</p>
</item>
</olist>
</p>
</item>
<item diff="nsq-del" dg="rq17">
<olist role="Ortest">
<item>
<p>The <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> the <termref def="ur-type-itself">ur-type definition</termref>.</p>
</item>
<item>
<olist role="Andtest">
<item><p>The <propref comp="ctd" prop="content type"/> of the complex type definition
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/> <pt>simple</pt></phrase></p></item>
<item><olist role="Ortest">
<item>
<p>The <phrase dg="ep01"><propref comp="ct" prop="simple type definition"/> of the</phrase><propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a simple type
definition from which
the <propref comp="ctd" prop="content type"/><phrase dg="ep01">'s <propref comp="ct" prop="simple type definition"/></phrase> is  validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> given the empty set as defined in
<specref ref="cos-st-derived-ok"/>.</p>
</item>
<item>
<p>The <propref comp="ctd" prop="base type definition"/><phrase dg="ep01">'s <propref comp="ctd" prop="content type"/> has <propref comp="ct" prop="variety"/></phrase> <!--*
* material suppressed here by diff group ep01 *
*--><pt>mixed</pt>
and <!--*
* material suppressed here by diff group modals *
*--><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> a <compref ref="p"/></phrase> which is <termref def="cd-emptiable">emptiable</termref> as defined in <specref ref="cos-group-emptiable"/>.</p>
</item>
</olist></item>
</olist>
</item>
<item>
<olist role="Andtest">
<item><p>The <propref comp="ctd" prop="content type"/> of the complex type itself
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>empty</pt>
</p></item>
<item><olist role="Ortest">
<item>
<p>The <propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">also has <propref comp="ct" prop="variety"/></phrase></phrase>
<pt>empty</pt>.</p>
</item>
<item>
<p>The <propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>elementOnly</pt>
or <pt>mixed</pt> and 
<!--*
* material suppressed here by diff group modals *
*--><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> a <compref ref="p"/></phrase> which is <termref def="cd-emptiable">emptiable</termref> as defined in <specref ref="cos-group-emptiable"/>.</p>
</item>
</olist></item>
</olist>
</item>
<item>
<olist role="Andtest">
<item>

<olist role="Ortest">
<item><p>The <propref comp="ctd" prop="content type"/> of the complex type
definition itself <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="ct" prop="variety"/></phrase> <pt>element-only</pt><!--*
* material suppressed here by diff group rq17p *
*--></p></item>
<item><p>The <propref comp="ctd" prop="content type"/> of the complex
type definition itself and of the
<propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="ct" prop="variety"/></phrase> <pt>mixed</pt>.</p></item>

</olist></item>
<item dg="rq17p"><p>The <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/> of the <propref comp="ctd" prop="content type"/></phrase> of the complex type definition itself
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a <termref def="cd-model-restriction">valid restriction</termref> of the <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="ct" prop="particle"/></phrase> of the <propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> as defined in <specref ref="cos-particle-restrict"/>.</p></item>
 <!--*
* material suppressed here by diff group rq17p *
*-->
</olist>
</item>         
</olist>
<note>
<p>Attempts to <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derive</xtermref> complex type definitions whose 
<propref comp="ctd" prop="content type"/> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has 
<propref comp="ct" prop="variety"/></phrase> <pt>element-only</pt> by restricting
a <propref comp="ctd" prop="base type definition"/> whose 
<propref comp="ctd" prop="content type"/>
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has 
<propref comp="ct" prop="variety"/></phrase> <pt>empty</pt> are not ruled out by this 
clause.  <phrase dg="rq17p">However if the complex
type definition itself has a non-pointless particle it will fail to satisfy
<specref ref="cos-particle-restrict"/>.  On the other hand some type
definitions with pointless <pt>element-only</pt> content, for example an empty
<eltref ref="sequence"/>, will satisfy <specref ref="cos-particle-restrict"/>
with respect to an <pt>empty</pt> <propref comp="ctd" prop="base type definition"/>, and
so be valid restrictions.</phrase>
<!--*
* material suppressed here by diff group rq17p *
*--></p>
 <!--*
* material suppressed here by diff group rq17p *
*-->
</note>
</item>
<item diff="nsq-add" dg="rq17"><p>The complex type definition
<termref def="cd-actual-restriction">restricts</termref> 
the <propref comp="ctd" prop="base type definition"/> as 
defined in <specref ref="cos-ct-restrict"/>.</p></item>
</olist>
<termdef id="cd-ct-restriction" term="valid restriction" dg="rq17p">
If this constraint <specref ref="derivation-ok-restriction"/> holds of a
complex type definition, it is a <term>valid restriction</term> of its
<propref comp="ctd" prop="base type definition"/></termdef>
<!--*
* material suppressed here by diff group rq17p *
*-->.
</p>
<!--* The added condition 'with {derivation method{ restriction' seems 
    * to be required to avoid extensions, for which the constraint 
    * vacuously holds, being valid restrictions of their base. 
    *-->
</constraintnote>

<note diff="nsq-add" dg="rq17">
  <p>In <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xmlschema-1/#key-typeRestriction">the 
definition of <phrase role="local">restriction</phrase> in version 1.0 of this
specification</xspecref>, it says
   <display><quote>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.</quote></display>
   However no definition of membership in a type was provided, and this
statement accordingly lacked force.  We can now restate the intended sense of
'restriction' as follows:</p>
</note>

<p diff="nsq-add" dg="rq17">A type definition <local>R</local> is a
valid
<termref def="key-typeRestriction">restriction</termref> of another
type definition <local>B</local> if and only if:
<olist role="and.mxm">
<item><p>All element information items which are 
<termref def="dt-avalid">abstractly valid</termref> against
<local>R</local> are <termref def="dt-avalid">abstractly valid</termref> 
against <local>B</local>.</p></item>
<item><p>When type definitions are assigned to children or attributes
of an element information item in the PSVI by both <local>R</local>
and <local>B</local>, those assigned by <local>R</local> are identical
to or derived by one or more restriction or subsetting steps from the corresponding 
ones assigned by <local>B</local>.</p></item>
<item><p>When element declarations are assigned to children or
attributes of an element information item in the PSVI by both
<local>R</local> and <local>B</local>, the corresponding ones assigned
by <local>R</local> appeal to at least the same identity
constraints, value constraints and disallowed substitutions as
those assigned by <local>B</local>, and may appeal to stronger 
ones.</p>
</item>
<item><p>Either <local>B</local> is the base type definition
of <local>R</local>, or else the base type definition of <local>R</local>
is a restriction of <local>B</local>.</p></item>
</olist></p>

<note diff="nsq-add" dg="rq17">
<p>It will be noted that valid restriction involves both a subset
relation on the set of elements valid against <local>R</local> and
those valid against <local>B</local>, and an derivation relation,
explicit in the type hierarchy, between the types assigned to
attributes and child elements by <local>R</local> and those assigned
to the same attributes and children by <local>B</local>.</p>
</note>

<!--* <ednote diff="add" dg="rq17">
<edtext>The term <quote>in-principle valid</quote> (used in text
briefly discussed by the WG in Brisbane) has been replaced above with
<quote>abstractly valid</quote>.  The WG 
may wish to express a preference for one term or the other (or for some
third term); the editors have not achieved consensus (or, for that 
matter, conviction).</edtext>
</ednote> *-->


<!--* HST is very uneasy with this definition, as it only works if the
	  assessment rules _require_ you to carry on with recursive
	  assessment after finding an error, but they don't -->
<!--* Touch&eacute;.  I still don't like the subjunctive, but 
    * it's currently the best we've got.
    *-->
<p diff="nsq-add" dg="rq17">
<termdef id="dt-avalid" term="abstractly valid">An attribute or 
element information item <local>I</local> is <term>abstractly valid</term>
with respect to a simple or complex type definition <local>D</local>
if and only if schema-validity assessment of <local>I</local> with
respect to <local>D</local> (as defined by <specref ref="cvc-assess-elt"/>
or <specref ref="cvc-assess-attr"/>) either results in a 
<xpropref role="psviAnon">validity</xpropref> property of <pt>valid</pt>, or 
would result in <xpropref role="psviAnon">validity</xpropref> of <pt>valid</pt>
if constraints on the abstractness of type definitions and element 
declarations were ignored</termdef>.</p>
<!--* 
results in errors raised by violations of constraints on the 
abstractness of type definitions, element declarations, or
attribute declarations, but no other errors.</termdef></p>
*-->

<!--* MSM is uneasy with the word 'actually' here, since it seems to 
    * want the constraint to be one that forbids vacuous restriction.
    * hmmm.  After consideration, he just deletes the 'actually'.
    *-->
<!--*   <p diff="add" dg="rq17">In practice the above definition cannot 
be directly understood as a Constraint on Components.  The following 
constraint is the operationally normative statement.</p> *-->

<!-- HST is not at all happy with an appeal to empty types as the
	  basis for including 'actually restricts'.  It has the same
	  'problem', so arguing that we use it to avoid the 'problem'
	  makes no sense.  About that which we can say nothing,
	  thereof we should remain silent. -->
<!--
For a variety of reasons, the description of
restriction just given is not suitable as a Constraint on Components.
In particular, if no elements at all are valid with respect to a type
<local>R</local>, then <local>R</local> satisfies the first constraint
for <emph>any possible</emph> base type <local>B</local>. It is not
necessarily easy, however, to detect type definitions which accept no
elements, however, and so the following constraint is the
operationally normative statement of valid restriction.-->

<p diff="nsq-add" dg="rq17">In practice, it is difficult to enforce
the definition above directly as a Constraint on Components, owing
to a number of corner cases which are difficult to detect or describe
concisely.
The following constraint is the operationally normative statement.</p> 

  <constraintnote diff="nsq-add" id="cos-ct-restrict" type="cos" dg="rq17">
   <head>Complex type definition actually restricts</head>
   <p><termdef id="cd-actual-restriction" term="actually restricts">A
complex type definition <local>R</local> (for <quote>restriction</quote>)
<term>actually
restricts</term> another type definition <local>B</local> (for
<quote>base</quote>) if and only if</termdef>
    <olist role="andtest">
     <item><p>Every element information item which is 
<termref def="loc-locallyValid">locally valid</termref> 
with respect to <local>R</local> is also 
<termref def="loc-locallyValid">locally valid</termref> 
with respect to <local>B</local>.</p></item>
     <item><p>If <local>R</local> and <local>B</local> have
<pt>elementOnly</pt> or <pt>mixed</pt> <phrase dg="ep01">as the
<propref comp="ct" prop="variety"/> of their </phrase><propref comp="ctd" prop="content type"/>s, then for all element information items <local>E</local> which are 
<termref def="loc-locallyValid">locally valid</termref> 
with respect to <local>R</local>, for all
        children <local>C</local> of <local>E</local>,
            <olist role="ortest">
             <item><p><local>Test[E,PR]</local> is not defined for <local>C</local>.</p></item>
             <item><olist role="andtest">
<item><p><local>Test[E,PB]</local> and <local>Test[E,PR]</local> are both defined for <local>C</local></p></item>
             <item><p><local>Test[E,PB]</local>(<local>C</local>) subsumes <local>Test[E,PR]</local>(<local>C</local>).</p></item>
</olist></item>             
            </olist>where <local>PR</local> is <local>R</local>'s <propref comp="ctd" prop="content type"/><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">'s <propref comp="ct" prop="particle"/></phrase> and <local>PB</local> is <local>B</local>'s <propref comp="ctd" prop="content type"/><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">'s <propref comp="ct" prop="particle"/></phrase>.
</p></item>
    </olist>
   </p>
   <p><termdef role="local" id="loc-locallyValid" term="locally valid">An 
element information item is <term>locally valid</term> with respect 
to a complex type definition if and only if it satisfies all but the last
clause of
<specref ref="cvc-complex-type"/> with respect to that definition</termdef>.</p>

<!--* 
   <p><termdef role="local" id="loc-locallyValid" term="abstractly locally valid">An 
element information item is <term>abstractly locally valid</term> with respect 
to a complex type definition if and only if it satisfies clauses 2, 3 and 4 of 
<specref ref="cvc-complex-type"/> with respect to that definition</termdef>.</p>
*-->
<!--* MSM is not happy with the wording of the following, but does not
    * have the energy to try to rewrite it now.  
    *-->
   <p>When the child sequence of an element information item <local>E</local> is 
<termref def="loc-locallyValid">locally valid</termref>
   against a type definition <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">whose</phrase> 
<propref comp="ctd" prop="content type"/><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">'s <propref comp="ct" prop="particle"/> is</phrase> <local>P</local> 
there is a (partial) functional mapping from
the element information items in the child sequence to tests, where tests
are either Element
   Declarations, <termref def="key-urType">the ur-type</termref> or
<pt>empty</pt>, arising as follows:
    <glist>
     <gitem>
      <label>Element Declarations</label>
      <def>
       <p>Either explicitly present, or successfully located as a result of a
<pt>strict</pt> or <pt>lax</pt> Wildcard.</p>
      </def>
     </gitem>
     <gitem>
      <label><termref def="key-urType">the ur-type</termref></label>
      <def>
       <p>An undischarged <pt>lax</pt> Wildcard.</p>
      </def>
     </gitem>
     <gitem>
      <label><pt>empty</pt></label>
      <def>
       <p>a <pt>skip</pt> Wildcard.</p>
      </def>
     </gitem>
     <gitem>
      <label>(failure to map)</label>
      <def>
       <p>An undischarged <pt>strict</pt> Wildcard.</p>
      </def>
     </gitem>
    </glist>
    <termdef role="local" id="loc-Test" term="Test">Call this mapping <term>Test[E,P]</term>.</termdef></p>
   <p><termdef role="local" id="loc-testSub" term="subsumes">A test
<local>G</local> (for general) <term>subsumes</term> another test
<local>S</local> (for specific) if and only if </termdef>
    <olist role="ortest">
     <item>
      <p><local>G</local> is <pt>empty</pt>.</p>
     </item>
     <item>
      <p><local>G</local> is <termref def="key-urType">the ur-type</termref>
and <local>S</local> is not <pt>empty</pt>.</p>
     </item>
     <item>
      <p><local>G</local> and <local>S</local> are both Element Declarations
and
       <olist role="andtest">
        <item>
         <p>Either <local>G</local> has <propref comp="ed" prop="nillable"/> <pt>true</pt> or <local>S</local> has <propref comp="ed" prop="nillable"/> <pt>false</pt>.</p>
        </item>
        <item>
         <p>Either <local>G</local> has no <propref comp="ed" prop="value constraint"/>, or it is not <pt>fixed</pt>,
      or <local>S</local> has a <pt>fixed</pt> <propref comp="ed" prop="value constraint"/> with the same value.</p>
        </item>
        <item>
         <p><local>S</local>'s <propref comp="ed" prop="identity-constraint definitions"/> are a superset of <local>G</local>'s.</p>
        </item>
        <item>
         <p><local>S</local> disallows a superset of the substitutions that <local>G</local> does.</p>
        </item>
        <item>
         <p><local>S</local>'s <propref comp="ed" prop="type definition"/> is validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> given
{<pt>extension</pt>, <pt>list</pt>, <pt>union</pt>} from <local>G</local>'s <propref comp="ed" prop="type definition"/> as defined by
<specref ref="cos-ct-derived-ok"/> or <specref ref="cos-st-derived-ok"/>, as appropriate.</p>
        </item>
       </olist>
      </p>
     </item>
    </olist>
   </p>
   <note>
    <p><specref ref="subsumptionCheck"/> provides guidance to
implementors on how to implement this constraint.</p>
   </note>
  </constraintnote>
  
  <!--*
* material suppressed here by diff group rq17p *
*-->

<!--* <ednote diff="add" dg="rq17">
<edtext>The editors have not found a term better than <quote>actually
restrict</quote> for use in the definition just given, but have not
yet learned to believe that there is none.  If the WG has suggestions,
the editors would be glad to hear a plausible alternative.</edtext>
</ednote> *-->

  <note>
   <p>To restrict a complex type definition with a simple base type definition
to <pt>empty</pt>, use a simple type definition with a <pt>fixed</pt> value of
the empty string: this preserves the type information.</p>
  </note>

<p>The following constraint defines a relation appealed to elsewhere
in this specification.</p>
<constraintnote id="cos-ct-derived-ok" type="cos">
<head>Type Derivation OK (Complex)</head>
<p>For a complex type definition (call it <local>D</local>, for
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref>) to be validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from a type definition (call this
<local>B</local>, for base) given a subset of {<pt>extension</pt>,
<pt>restriction</pt>}
<olist role="and">
<item>
<p>If <local>B</local> and <local>D</local> are not the same type
definition, then the <propref comp="ctd" prop="derivation method"/> of
<local>D</local> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase>
in the subset.</p>
</item>
<item>      
<p>
<olist role="Ortest">
<item id="c-tid">
<p><local>B</local> and <local>D</local> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> the same type
definition.</p>
</item>
<item>
<p><local>B</local> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <local>D</local>'s <propref comp="ctd" prop="base type definition"/>.</p>
</item>
<item>
<p>
<olist role="Andtest">
<item>
<p><local>D</local>'s <propref comp="ctd" prop="base type definition"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> the <termref def="ur-type-itself">ur-type
definition</termref>.</p>
</item>
<item>
<p>
<olist role="Casetest">
<item>
<p role="if"><local>D</local>'s <propref comp="ctd" prop="base type definition"/> is complex</p>
<p role="then">it <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from <local>B</local>
given the subset as defined by this constraint.</p>
</item>
<item>
<p role="if"><local>D</local>'s <propref comp="ctd" prop="base type definition"/> is simple</p>
<p role="then">it <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from <local>B</local>
given the subset as defined in <specref ref="cos-st-derived-ok"/>.</p>
</item>
</olist>
</p>
</item>
</olist>
</p>
</item>
</olist>
</p>
</item>
</olist>
</p>
</constraintnote>
  <note>
   <p>This constraint is used to check that when someone uses a type in a
context where another type was expected (either via <code>xsi:type</code> or
substitution groups), that the type used is actually <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> from the expected
type, and that that <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> does not involve a form of <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> which was
ruled out by the expected type.</p>
  </note>
  <note id="no-identity">
   <p>The wording of <clauseref ref="c-tid"/> above appeals to a notion of component identity which
is only incompletely defined by this version of this specification.
In some cases, the wording of this specification does make clear the
rules for component identity.  These cases include:
    <ulist>
     <item>
      <p>When they are both top-level components with the same component type,
namespace name, and local name;</p>
     </item>
     <item>
      <p>When they are necessarily the same type definition (for example, when
the two types definitions in question are the type definitions associated with
two attribute or element declarations, which are discovered to be the same
declaration);</p>
     </item>
     <item>
      <p>When they are the same by construction (for example, when an element's
type definition defaults to being the same type definition as that of its
substitution-group head or when a complex type definition inherits an attribute
declaration from its base type definition).</p>
     </item>
    </ulist>
   </p>
   <p>In other cases <!--*
* material suppressed here by diff group ep08a *
*--> 
<phrase dg="modals">it is possible
that</phrase> conforming implementations <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">will</phrase>
disagree as to whether components are identical.</p>
  </note>
 </div3>

    <div3>
     <head>Built-in Complex Type <phrase diff="nsq-del" dg="rq17">Definition</phrase><phrase diff="nsq-add" dg="rq17">Definitions</phrase></head>
     <p diff="nsq-add" dg="rq17">There is a <compref ref="ctd"/> corresponding to the root of the type
hierarchy present in every schema by definition:</p>
     <schemaComp diff="nsq-add" id="ur-type-itself" dg="rq17">
     <head>Complex Type Definition of the root of the type hierarchy (the ur-type)</head>
     <pvlist>
      <pvpair comp="ctd" prop="name">rootType</pvpair>
      <pvpair comp="ctd" prop="target namespace">http://www.w3.org/2001/XMLSchema</pvpair>
      <pvpair comp="ctd" prop="base type definition">Itself</pvpair>
      <pvpair comp="ctd" prop="derivation method"><pt>restriction</pt></pvpair>
      <pvpair comp="ctd" prop="content type">A <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="ct"/> as follows:</phrase>
       <pvlist>
        <pvpair comp="ct" prop="variety"><pt>mixed</pt></pvpair>        
        <pvpair comp="ct" prop="simple type definition"><termref def="key-null"/></pvpair>
        <pvpair comp="ct" prop="particle">a
<compref ref="p"/> with the <phrase diff="nsq-del" dg="rq129ter">following properties: 
</phrase><phrase dg="rq129ter">properties shown below in 
       <specref ref="rootType-outer-particle"/>.</phrase>
       <pvlist diff="nsq-del" dg="rq129ter">
        <pvpair comp="p" prop="min occurs">1</pvpair>
        <pvpair comp="p" prop="max occurs">1</pvpair>
        <pvpair comp="p" prop="term">a model group with
the following properties:
         <pvlist>
          <pvpair comp="mg" prop="compositor"><pt>sequence</pt></pvpair>
          <pvpair comp="mg" prop="particles">
           a list containing one particle with the following properties:
           <pvlist>
            <pvpair comp="p" prop="min occurs">0</pvpair>
            <pvpair comp="p" prop="max occurs"><pt>unbounded</pt></pvpair>
            <pvpair comp="p" prop="term">a wildcard with the following properties:
             <pvlist>
              <pvpair comp="w" prop="namespace constraint"><pt>any</pt></pvpair>
              <pvpair comp="w" prop="process contents"><pt>skip</pt></pvpair>
             </pvlist>
            </pvpair>
           </pvlist>
           </pvpair>
         </pvlist>
        </pvpair>
       </pvlist></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ctd" prop="attribute uses">The empty set</pvpair>
        <pvpair comp="ctd" prop="attribute wildcard">
        a wildcard with the following properties::
             <pvlist>
              <pvpair comp="w" prop="namespace constraint"><pt>any</pt></pvpair>
              <pvpair comp="w" prop="process contents"><pt>skip</pt></pvpair>
             </pvlist></pvpair>
        <pvpair comp="ctd" prop="final">The empty set</pvpair>
      <pvpair dg="context-2338" comp="ctd" prop="context"><termref def="key-null"/></pvpair>
        <pvpair comp="ctd" prop="prohibited substitutions">The empty set</pvpair>
        <pvpair comp="ctd" prop="abstract"><pt>false</pt></pvpair>
     </pvlist>
    </schemaComp>
<p diff="nsq-add" dg="rq129ter">
The outer particle of <pt>rootType</pt> contains a simple sequence:
</p>
<schemaComp diff="nsq-add" id="rootType-outer-particle" dg="rq129ter">
<head>Outer particle for rootType</head>
  <pvlist>
    <pvpair comp="p" prop="min occurs">1</pvpair>
    <pvpair comp="p" prop="max occurs">1</pvpair>
    <pvpair comp="p" prop="term">a model group with
the following properties:
      <pvlist>
        <pvpair comp="mg" prop="compositor"><pt>sequence</pt></pvpair>
        <pvpair comp="mg" prop="particles">
           a list containing one particle with the properties shown
           below in <specref ref="rootType-inner-particle"/>.
        </pvpair>
      </pvlist>
    </pvpair>
  </pvlist>
</schemaComp>
<p diff="nsq-add" dg="rq129ter">
The inner particle of <pt>rootType</pt> contains a <pt>skip</pt> wildcard:
</p>
<schemaComp diff="nsq-add" id="rootType-inner-particle" dg="rq129ter">
<head>Inner particle for rootType</head>
  <pvlist>
    <pvpair comp="p" prop="min occurs">0</pvpair>
    <pvpair comp="p" prop="max occurs"><pt>unbounded</pt></pvpair>
    <pvpair comp="p" prop="term">a wildcard with the following properties:
      <pvlist>
        <pvpair comp="w" prop="namespace constraint"><pt>any</pt></pvpair>
        <pvpair comp="w" prop="process contents"><pt>skip</pt></pvpair>
      </pvlist>
    </pvpair>
  </pvlist>
</schemaComp>

    <p diff="nsq-add" dg="rq17">The <code>mixed</code> content specification together with the
<pt>skip</pt> wildcard  and attribute specification produce the defining
property for the root of the type hierarchy, namely that <emph>every</emph>  type
definition is (eventually) a restriction
of it:  its permissions and requirements are
the least restrictive possible.</p>

    <p>There is <phrase diff="nsq-add" dg="rq17">also </phrase>a complex
type definition <phrase diff="nsq-del" dg="rq17">nearly equivalent to the
<termref def="key-urType">ur-type definition</termref></phrase><phrase diff="nsq-add" dg="rq17">for <termref def="key-anyType">anyType</termref></phrase> present in every schema
by definition.  It has the following properties:</p>

<!--* WARNING!!! The following schema-component definition occurs twice
    * in order to avoid IDREF validity problems when generating status quo text
    * without RQ-17.  If you edit, be sure you edit the right one!
    * N.B. After RQ-17 is adopted, we may wish to suppress the older
    * version. *-->
<!--* Edit this copy with id=any-type-itself if you are working in 
    * a world where RQ17 is adopted *-->
    <schemaComp diff="nsq-add" id="any-type-itself" dg="rq17">
     <head>Complex Type Definition of anyType</head>
     <pvlist>
      <pvpair comp="ctd" prop="name">anyType</pvpair>
      <pvpair comp="ctd" prop="target namespace">http://www.w3.org/2001/XMLSchema</pvpair>
      <pvpair comp="ctd" prop="base type definition">The built-in <termref def="ur-type-itself">root type definition</termref></pvpair>
      <pvpair comp="ctd" prop="derivation method"><pt>restriction</pt></pvpair>
      <pvpair comp="ctd" prop="content type">A <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="ct"/> as follows:</phrase>
       <pvlist>
        <pvpair comp="ct" prop="variety"><pt>mixed</pt></pvpair>
        <pvpair comp="ct" prop="particle">a
<compref ref="p"/> with the <!--*
* material suppressed here by diff group rq129bis *
*-->properties<phrase dg="rq129bis"> shown
         below in <specref ref="anyType-outer-particle"/>.</phrase><!--*
* material suppressed here by diff group rq129bis *
*-->
       <!--*
* material suppressed here by diff group rq129bis *
*--></pvpair>
        <pvpair comp="ct" prop="simple type definition"><termref def="key-null"/></pvpair>
       </pvlist>
      </pvpair>
      <pvpair comp="ctd" prop="attribute uses">The empty set</pvpair>
        <pvpair comp="ctd" prop="attribute wildcard">
        a wildcard with the following properties::
             <pvlist>
              <pvpair comp="w" prop="namespace constraint"><pt>any</pt></pvpair>
              <pvpair comp="w" prop="process contents"><pt>lax</pt></pvpair>
             </pvlist></pvpair>
        <pvpair comp="ctd" prop="final">The empty set</pvpair>
      <pvpair dg="context-2338" comp="ctd" prop="context"><termref def="key-null"/></pvpair>
        <pvpair comp="ctd" prop="prohibited substitutions">The empty set</pvpair>
        <pvpair comp="ctd" prop="abstract"><pt>false</pt></pvpair>
     </pvlist>
    </schemaComp>

<!--* Edit this copy with del-ur-type-itself if you are working in a world 
    * where RQ17 has been rejected *-->
    <!--*
* material suppressed here by diff group rq17aux *
*-->

<p dg="rq129bis">
The outer particle of <termref def="key-anyType">anyType</termref> contains a sequence with a single term:
</p>
<schemaComp id="anyType-outer-particle" dg="rq129bis">
<head>Outer Particle for Content Type of anyType</head>
       <pvlist>
        <pvpair comp="p" prop="min occurs">1</pvpair>
        <pvpair comp="p" prop="max occurs">1</pvpair>
        <pvpair comp="p" prop="term">a model group with
the following properties:
         <pvlist>
          <pvpair comp="mg" prop="compositor"><pt>sequence</pt></pvpair>
          <pvpair comp="mg" prop="particles">
           a list containing one particle with the properties shown
           below in <specref ref="anyType-inner-particle"/>.
           </pvpair>
         </pvlist>
        </pvpair>
       </pvlist>
</schemaComp>
<p dg="rq129bis">
The inner particle of <termref def="key-anyType">anyType</termref> contains a wildcard which matches any element:
</p>
<schemaComp id="anyType-inner-particle" dg="rq129bis">
<head>Inner Particle for Content Type of anyType</head>
  <pvlist>
    <pvpair comp="p" prop="min occurs">0</pvpair>
    <pvpair comp="p" prop="max occurs"><pt>unbounded</pt></pvpair>
    <pvpair comp="p" prop="term">a wildcard with the following properties:
      <pvlist>
        <pvpair comp="w" prop="namespace constraint"><pt>any</pt></pvpair>
        <pvpair comp="w" prop="process contents"><pt>lax</pt></pvpair>
      </pvlist>
    </pvpair>
  </pvlist>
</schemaComp>

     <note><p>This specification does not provide an inventory of built-in complex
type definitions for use in user schemas.  A preliminary library of complex type
definitions is available which includes both mathematical (e.g.
<code>rational</code>) and utility (e.g. <code>array</code>) type definitions. 
In particular, there is a <code>text</code> type definition which is recommended for use
as the type definition in element declarations intended for general text
content, as it makes sensible provision for various aspects of
internationalization.  For more details, see the schema document for the type
library at its namespace name: <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2001/03/XMLSchema/TypeLibrary.xsd">http://www.w3.org/2001/03/XMLSchema/TypeLibrary.xsd</loc>.</p></note>
    </div3>
   </div2>
   <div2 id="cAttributeUse">
    <head>AttributeUses</head>
    <p>An attribute use is a utility component which controls the occurrence and
defaulting behavior of attribute declarations.  It plays the same role for
attribute declarations in complex types that particles play for element declarations.</p>
    <note role="example">
     <eg xml:space="preserve">&lt;xs:complexType&gt;
 . . .
 &lt;xs:attribute ref="xml:lang" use="required"/&gt;
 &lt;xs:attribute ref="xml:space" default="preserve"/&gt;
 &lt;xs:attribute name="version" type="xs:<!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">decimal</phrase>" fixed="1.0"/&gt;
&lt;/xs:complexType&gt;
     </eg>
     <p>XML representations which all involve attribute uses, illustrating some of
the possibilities for controlling occurrence.</p>
    </note>
    <div3 id="AU_details">
     <head>The Attribute Use Schema Component</head>
<p>The attribute use schema component has the following properties:</p>

  <compdef name="Attribute Use" abbrev="au" showAKO="true"/>
     <microCompdef name="Value Constraint" abbrev="vc_au" dg="ep01"/>
     <p><propref comp="au" prop="required"/> determines whether this use of an attribute
declaration requires an appropriate attribute information item to be present, or
merely allows it.</p>
     <p><propref comp="au" prop="attribute declaration"/> provides the attribute declaration itself,
which will in turn determine the simple type definition used.</p>
     <p><propref comp="au" prop="value constraint"/> allows for local specification of a
default or fixed value.  This <rfc2119>must</rfc2119> be consistent with that of the <propref comp="au" prop="attribute declaration"/>, in that if the <propref comp="au" prop="attribute declaration"/> specifies a fixed value, the only allowed <propref comp="au" prop="value constraint"/> is the same fixed value.</p>
    </div3>
    <div3>
     <head>XML Representation of Attribute Use Components</head>
     <p>Attribute uses correspond to all uses of <eltref ref="attribute"/> which
allow a <code>use</code> attribute.  These in turn correspond to
<emph>two</emph> components in each case, an attribute use and its <propref comp="au" prop="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 in <specref ref="declare-attribute"/>.</p>
    </div3>
    <div3>
     <head>Constraints on XML Representations of Attribute Uses</head>
     <p>None as such.</p>
    </div3>
    <div3>
     <head>Attribute Use Validation Rules</head>
<constraintnote type="cvc" id="cvc-au">
 <head>Attribute Locally Valid (Use)</head>
 <p>The item's <termref def="key-vv">actual value</termref> 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">matches</phrase>
 the <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_a" prop="value"/></phrase> of the <propref comp="ad" prop="value constraint"/>, if it is
present and <phrase dg="ep01">its <propref comp="vc_a" prop="variety"/> is </phrase><pt>fixed</pt>.</p>
 <p>For an attribute information item to be<termref def="key-vn">valid</termref> with respect to an attribute use its <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"><termref def="key-vv">actual value</termref></phrase> <rfc2119>must</rfc2119> <!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129">be identical to the <propref comp="vc_a" prop="value"/></phrase> of the attribute use's <propref comp="au" prop="value constraint"/><!--*
* material suppressed here by diff group rq129 *
*-->, if it is present and 
  <phrase dg="ep01">has <propref comp="vc_a" prop="variety"/> </phrase><pt>fixed</pt>.</p>
</constraintnote>
    </div3>
    <div3>
     <head>Attribute Use Information Set Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-attruse">
     <head>Constraints on Attribute Use Schema Components</head>
  <p>All attribute uses (see <specref ref="cAttributeUse"/>) <rfc2119>must</rfc2119> satisfy the following constraints.</p>
<constraintnote type="cos" id="au-props-correct">
<head>Attribute Use Correct</head>
<olist role="And">
<item>
<p>The values of the properties of an attribute use <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as
described in the property tableau in
<specref ref="AU_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
</item>
 <item dg="rq129">
  <p>If the <propref comp="au" prop="value constraint"/> is not <termref def="key-null"/>, then it is a valid default with
respect to the <propref comp="au" prop="attribute declaration"/>'s <propref comp="ad" prop="type definition"/> as defined in <specref ref="cos-valid-simple-default"/>.</p>
 </item>
<item>
<p>If the <propref comp="au" prop="attribute declaration"/> has a
<!--*
* material suppressed here by diff group ep01 *
*--><propref comp="ad" prop="value constraint"/><phrase dg="ep01"> with <propref comp="vc_a" prop="variety"/> <pt>fixed</pt></phrase><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">and</phrase>
the attribute use itself has a <propref comp="au" prop="value constraint"/>, <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">then the 
<propref comp="au" prop="value constraint"/> on the attribute
use<!--*
* material suppressed here by diff group ep01 *
*--> also</phrase><phrase dg="ep01"> has <propref comp="vc_au" prop="variety"/></phrase>
<pt>fixed</pt> and its <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="vc_au" prop="value"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><!--*
* material suppressed here by diff group rq129 *
*--><phrase dg="rq129"> is identical to the <propref comp="vc_a" prop="value"/></phrase> 
of the <propref comp="au" prop="attribute declaration"/>'s
<propref comp="ad" prop="value constraint"/>.</p>
</item>
</olist>
</constraintnote> 
    </div3>
   </div2>
   <div2 id="cAttribute_Group_Definitions">
    <head>Attribute Group Definitions</head>
<p>A schema can name a group of attribute declarations so that they <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be incorporated as a
group into complex type definitions.</p>
<p>
Attribute group definitions do not participate in <termref def="key-vn">validation</termref> as such, but the
<propref comp="ctd" prop="attribute uses"/> and <propref comp="ctd" prop="attribute wildcard"/> of one or
more complex type definitions <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be constructed in whole or part by reference
to an attribute group.  Thus, attribute group definitions provide a
replacement for some uses of XML's
<xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#dt-PE">parameter entity</xspecref> facility.
Attribute group definitions are provided primarily for reference from the XML
representation of schema components
(see <eltref ref="complexType"/> and <eltref ref="attributeGroup" inside="simpleContent"/>).
</p>
    <note role="example">
<eg xml:space="preserve">&lt;xs:attributeGroup name="myAttrGroup"&gt;
    &lt;xs:attribute . . ./&gt;
    . . .
&lt;/xs:attributeGroup&gt;

&lt;xs:complexType name="myelement"&gt;
    . . .
    &lt;xs:attributeGroup ref="myAttrGroup"/&gt;
&lt;/xs:complexType&gt;
</eg>
<p>XML representations for attribute group definitions. The effect is as if the attribute
declarations in the group were present in the type definition.</p>
</note>
    <div3 id="Attribute_Group_Definition_details">
     <head>The Attribute Group Definition Schema Component</head>
    <p>The attribute group definition schema component has the
following properties:</p>

  <compdef name="Attribute Group Definition" abbrev="agd" showAKO="true"/>

  <p>Attribute groups are identified by their <propref comp="agd" prop="name"/> and <propref comp="agd" prop="target namespace"/>; attribute group identities <rfc2119>must</rfc2119> be unique within an <termref def="key-schema">XML Schema</termref>.  See <specref ref="composition-schemaImport"/> for the use of component
identifiers when importing one schema into another.</p>
<p><propref comp="agd" prop="attribute uses"/> is a set attribute uses, allowing
for local specification of occurrence and default or fixed values.</p>
<p><propref comp="agd" prop="attribute wildcard"/> provides for an attribute wildcard to be included in an
attribute group.
See above under <specref ref="Complex_Type_Definitions"/> for the
interpretation of
attribute wildcards during <termref def="key-vn">validation</termref>.</p>
     <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="agd" prop="annotations"/> property.</p>
    </div3>
    <div3 id="declare-attributeGroup">
<head>XML Representation of Attribute Group Definition Schema Components</head>
<p>The XML representation for an attribute group definition schema component is an
<eltref ref="attributeGroup"/> element information item.  It provides for
naming a group of attribute declarations and an attribute wildcard for use by reference in the XML representation of
complex type definitions and other attribute group definitions.  The correspondences between the
properties of the information item and
properties of the component it corresponds to are as follows:</p>

 <reprdef>
 <reprelt eltname="attributeGroup" type="attributeGroup"/>
  <p>When an <eltref ref="attributeGroup"/> appears as a daughter of
<eltref ref="schema"/> or <eltref ref="redefine"/>, it corresponds to an attribute group definition as
below.  When it appears as a daughter of <eltref ref="complexType"/> or <eltref ref="attributeGroup"/>, it does not correspond to any component as such.</p>
 <reprcomp abstract="Attribute Group Definition" ref="Attribute_Group_Definition_details">
  <propmap comp="agd" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="agd" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <code>schema</code>
element information item.</propmap>
  <propmap comp="agd" prop="attribute uses">The union of the set of attribute uses corresponding to the <eltref ref="attribute"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any, with the <propref comp="agd" prop="attribute uses"/> of the
attribute groups <termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref>s of the <code>ref</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="attributeGroup" inside="simpleContent"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any.</propmap>
<propmap comp="agd" prop="attribute wildcard">As for the <termref def="key-eaw">complete wildcard</termref> as described in <specref ref="declare-type"/>.</propmap>
<propmap comp="agd" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp></reprdef>
 <p>The example above illustrates a pattern which
recurs in the XML representation of schemas:  The same element, in this case <code>attributeGroup</code>, serves both to
define and to incorporate by reference.  In the first case the
<code>name</code> attribute is required, in the second the <code>ref</code>
attribute is required, and the element <rfc2119>must</rfc2119> be empty.  These two are mutually exclusive, and also conditioned
by context:  the defining form, with a <code>name</code>, <rfc2119>must</rfc2119> occur at the top
level of a schema, whereas the referring form, with a <code>ref</code>, <rfc2119>must</rfc2119>
occur within a complex type definition or an attribute group definition.</p>
 </div3>
    <div3>
     <head>Constraints on XML Representations of Attribute Group Definitions</head>
<constraintnote id="src-attribute_group" type="src">
<head>Attribute Group Definition Representation OK</head>
<p>In addition to the conditions imposed on <eltref ref="attributeGroup"/> element
information items by the schema for schemas,
<olist role="and.apply">
<item>
<p>The corresponding attribute group definition, if any, <rfc2119>must</rfc2119>
satisfy the conditions set out in <specref ref="coss-attrGroup"/>.</p>
</item>
<item>
<p>If <clauseref ref="c-awi1"/> or <clauseref ref="c-awi2"/> in the
correspondence specification in <specref ref="declare-type"/> for
<propref comp="ctd" prop="attribute wildcard"/>, as referenced above,
is satisfied, the intensional intersection <rfc2119>must</rfc2119> be expressible, as
defined in <specref ref="cos-aw-intersect"/>.</p>
</item>
<item>
<p>Circular group reference is disallowed outside <eltref ref="redefine"/>.  That is, unless this element information item's
parent is <eltref ref="redefine"/>, then among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if
any, there <rfc2119>must not</rfc2119> be an <eltref ref="attributeGroup" inside="simpleContent"/> with <code>ref</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> which resolves to the component corresponding to this
<eltref ref="attributeGroup"/>.  Indirect circularity is also ruled
out.  That is, when  <specref ref="src-resolve"/> is applied to a
<termref def="gloss-QName">QName</termref> arising from any <eltref ref="attributeGroup" inside="simpleContent"/>s with a <code>ref</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, it <rfc2119>must not</rfc2119> be the case that a
<termref def="gloss-QName">QName</termref> is encountered at any depth
which resolves to the component corresponding to this <eltref ref="attributeGroup"/>.</p>
</item>
</olist>
</p>
</constraintnote>
    </div3>
    <div3>
     <head>Attribute Group Definition Validation Rules</head>
     <p>None as such.</p>
    </div3>
    <div3>
     <head>Attribute Group Definition Information Set
Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-attrGroup">
     <head>Constraints on Attribute Group Definition Schema Components</head>
<p>All attribute group definitions (see <specref ref="cAttribute_Group_Definitions"/>) <rfc2119>must</rfc2119> satisfy the following constraint.</p>
<constraintnote type="cos" id="ag-props-correct">
<head>Attribute Group Definition Properties Correct</head>
<olist role="And">
<item>
<p>The values of the properties of an attribute group definition
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in the property tableau in
<specref ref="Attribute_Group_Definition_details"/>, modulo the impact
of <specref ref="conformance-missing"/>;</p>
</item>
<item>
<p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">No two</phrase> distinct members of the <propref comp="agd" prop="attribute uses"/> <!--*
* material suppressed here by diff group modals *
*--> have
<propref comp="au" prop="attribute declaration"/>s both of whose
<propref comp="ad" prop="name"/>s match and whose <propref comp="ad" prop="target namespace"/>s are identical.</p>
</item>
<item>
<p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">No two</phrase> 
distinct members of the <propref comp="agd" prop="attribute uses"/> 
<!--*
* material suppressed here by diff group modals *
*--> have <propref comp="au" prop="attribute declaration"/>s both of whose <propref comp="ad" prop="type definition"/>s are or are
<!--*
* material suppressed here by diff group derive-1913 *
*--><phrase dg="derive-1913"><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-constructed">constructed</xtermref></phrase> from <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#ID">ID</xtermref>.</p>
</item>
</olist>
</constraintnote>
    </div3>
   </div2>
   <div2 id="cModel_Group_Definitions">
    <head>Model Group Definitions</head>
<p>A model group definition associates a name and optional annotations with a <compref ref="mg"/>.
By reference to the name, the entire model group can be incorporated by reference into a <propref comp="p" prop="term"/>.</p>
<p>
Model group definitions are provided
primarily for reference from the <specref ref="declare-type"/> (see <eltref ref="complexType"/>
and <eltref ref="group"/>).  Thus, model group definitions provide a
replacement for some uses of XML's
<xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#dt-PE">parameter entity</xspecref> facility.
</p>
    <note role="example">
<eg xml:space="preserve">&lt;xs:group name="myModelGroup"&gt;
 &lt;xs:sequence&gt;
  &lt;xs:element ref="someThing"/&gt;
  . . .
 &lt;/xs:sequence&gt;
&lt;/xs:group&gt;

&lt;xs:complexType name="trivial"&gt;
 &lt;xs:group ref="myModelGroup"/&gt;
 &lt;xs:attribute .../&gt;
&lt;/xs:complexType&gt;

&lt;xs:complexType name="moreSo"&gt;
 &lt;xs:choice&gt;
  &lt;xs:element ref="anotherThing"/&gt;
  &lt;xs:group ref="myModelGroup"/&gt;
 &lt;/xs:choice&gt;
 &lt;xs:attribute .../&gt;
&lt;/xs:complexType&gt;</eg>
<p>A minimal model group is defined and used by reference, first as the whole
content model, then as one alternative in a choice. </p>
</note>
    <div3 id="Model_Group_Definition_details">
     <head>The Model Group Definition Schema Component</head>
    <p>The model group definition schema component has the following
properties:</p>

  <compdef name="Model Group Definition" abbrev="mgd" showAKO="true"/>

<p>Model group definitions are identified by their <propref comp="mgd" prop="name"/> and <propref comp="mgd" prop="target namespace"/>; model group identities <rfc2119>must</rfc2119> be unique within an <termref def="key-schema">XML Schema</termref>.  See <specref ref="composition-schemaImport"/> for the use of component
identifiers when importing one schema into another.</p>
<p>Model group definitions <emph>per se</emph> do not participate in <termref def="key-vn">validation</termref>, but the <propref comp="p" prop="term"/> of
a particle <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> correspond in whole or in part
to a model group from a model group definition.</p>
<p><propref comp="mgd" prop="model group"/> is the <compref ref="mg"/> for which the model group definition provides a name.</p>
<p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="mgd" prop="annotations"/> property.</p>
    </div3>
<div3 id="declare-namedModelGroup">
<head>XML Representation of Model Group Definition Schema Components</head>
 <p>The XML representation for a model group definition schema component is a
<eltref ref="group"/> element information item.  It provides for
naming a model group for use by reference in the XML representation of
complex type definitions and model groups.  The correspondences between the
properties of the information item and
properties of the component it corresponds to are as follows:</p>
<reprdef>
 <reprelt eltname="group" type="realGroup"/> 
 <p>If there is a <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> (in which case the
item will have <eltref ref="schema"/> or <eltref ref="redefine"/> as parent), then the item corresponds to
a model group definition component with properties as follows:</p>
 <reprcomp abstract="Model Group Definition" ref="Model_Group_Definition_details">
<propmap comp="mgd" prop="name">The <termref def="key-vv">actual value</termref> of the
<code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>

  <propmap comp="mgd" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <code>schema</code>
element information item.</propmap>
<propmap comp="mgd" prop="model group">A model group which is the <propref comp="p" prop="term"/> of a
particle corresponding to the <eltref ref="all"/>, <eltref ref="choice"/> or
<eltref ref="sequence"/> among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> (there <rfc2119>must</rfc2119> be one).</propmap>
<propmap comp="mgd" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp>
 <p>Otherwise, the item will have a <code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>,
in which case it corresponds to a particle component with properties as follows (unless <code>minOccurs=maxOccurs=0</code>, in which case the item
corresponds to no component at all):</p>
 <reprcomp abstract="Particle" ref="Particle">
  <propmap comp="p" prop="min occurs">The <termref def="key-vv">actual value</termref> of the <code>minOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="max occurs"><pt>unbounded</pt>, if the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> equals <pt>unbounded</pt>, otherwise the <termref def="key-vv">actual value</termref> of the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="term">The <propref comp="mgd" prop="model group"/> of the
model group definition <termref def="src-resolve">resolved</termref> to by the <termref def="key-vv">actual value</termref> of the <code>ref</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  </reprcomp>
</reprdef>
 <p>The name of this section is slightly misleading, in that the second, un-named,
case above (with a
<code>ref</code> and no <code>name</code>) is not really a named model
group at all, but a reference to one.  Also note that in the first (named)
case above no reference is made to <code>minOccurs</code> or
<code>maxOccurs</code>: this is because the schema for schemas does not allow
them on the child of <eltref ref="group"/> when it is named.  This in turn is
because the <propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> of
the particles which <emph>refer</emph> to the definition are what count.</p>
 <p>Given the constraints on its appearance in content models, an
<eltref ref="all"/> 
<!--*
* material suppressed here by diff group fpwd *
*--><phrase dg="fpwd"><rfc2119>must</rfc2119></phrase> 
only occur as the only item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of a named model group definition or a content model: see <specref ref="coss-modelGroup"/>.</p>
</div3>
    <div3>
     <head>Constraints on XML Representations of Model Group Definitions</head>
<constraintnote id="src-model_group_defn" type="src">
  <head>Model Group Definition Representation OK</head>
  <p>In addition to the conditions imposed on <eltref ref="group"/> element
information items by the schema for schemas, the corresponding model group definition, if any, <rfc2119>must</rfc2119> satisfy the conditions set
out in <specref ref="coss-modelGroup"/>.
  </p>
 </constraintnote>
    </div3>
    <div3>
     <head>Model Group Definition Validation Rules</head>
     <p>None as such.</p>
    </div3>
    <div3>
     <head>Model Group Definition Information Set Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-groupDef">
     <head>Constraints on Model Group Definition Schema Components</head>
  <p>All model group definitions (see <specref ref="cModel_Group_Definitions"/>) <rfc2119>must</rfc2119> satisfy the following constraint.</p>
  <constraintnote type="cos" id="mgd-props-correct">
   <head>Model Group Definition Properties Correct</head>
   <p>The values of the properties of a model group definition <rfc2119>must</rfc2119> be as described in
the property tableau in
<specref ref="Model_Group_Definition_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
  </constraintnote>
 
    </div3>
   </div2>
   <div2 id="Model_Groups">
    <head>Model Groups</head>
    <p>When the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of element information items are not constrained
to be <pt>empty</pt> or by reference to a simple type definition
(<specref ref="Simple_Type_Definitions"/>), the sequence of element
information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> content <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be specified in
more detail with a model group.  Because the <propref comp="p" prop="term"/> property of a particle can be a
model group, and model groups contain particles, model groups can indirectly contain other model groups; the grammar for content models
is therefore recursive.</p>
    <note role="example">
<eg xml:space="preserve">&lt;xs:all&gt;
 &lt;xs:element ref="cats"/&gt;
 &lt;xs:element ref="dogs"/&gt;
&lt;/xs:all&gt;

&lt;xs:sequence&gt;
 &lt;xs:choice&gt;
  &lt;xs:element ref="left"/&gt;
  &lt;xs:element ref="right"/&gt;
 &lt;/xs:choice&gt;
 &lt;xs:element ref="landmark"/&gt;
&lt;/xs:sequence&gt;
</eg>
<p>XML representations for the three kinds of model group, the third nested
inside the second.</p>
</note>
    <div3 id="Model_Group_details">
     <head>The Model Group Schema Component</head>
    <p>The model group schema component has the following
properties:</p>

  <compdef name="Model Group" abbrev="mg" showAKO="true"/>
<p>specifies a sequential (<pt>sequence</pt>),
disjunctive (<pt>choice</pt>) or conjunctive (<pt>all</pt>) interpretation of
the <propref comp="mg" prop="particles"/>.  This in turn 
determines whether the element
information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> <termref def="key-vn">validated</termref> by the model group <rfc2119>must</rfc2119>:
<ulist>
<item><p>(<pt>sequence</pt>) correspond, in order, to the specified <propref comp="mg" prop="particles"/>;</p>
</item>
<item><p>(<pt>choice</pt>) corresponded to exactly one of the specified <propref comp="mg" prop="particles"/>;</p>
</item>
<item><p>(<pt>all</pt>) contain all and only exactly zero or one of each
element specified in <propref comp="mg" prop="particles"/>.  The elements can occur in any
order.  In this case, to reduce implementation complexity, <propref comp="mg" prop="particles"/> is restricted to contain local and top-level element
declarations only, with <propref comp="p" prop="min occurs"/><code>=0</code> or
<code>1</code>, <propref comp="p" prop="max occurs"/><code>=1</code>.</p>
</item>
</ulist></p>
    <p>When two or more particles contained directly or indirectly in the
<propref comp="mg" prop="particles"/> of a model group have identically named
element declarations as their 
<propref comp="p" prop="term"/>, the type definitions of those declarations <rfc2119>must</rfc2119> be the
same.  By 'indirectly' is meant particles within the <propref comp="mg" prop="particles"/>
of a group which is itself the <propref comp="p" prop="term"/> of a directly contained
particle, and so on recursively.</p>
<p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="mg" prop="annotations"/> property.</p>
    </div3>
<div3 id="declare-contentModel">
<head>XML Representation of Model Group Schema Components</head>
<p>The XML representation for a model group schema component is
either an
<eltref ref="all"/>, a <eltref ref="choice"/> or a <eltref ref="sequence"/>
element information item.    The correspondences between the
properties of those information items and
properties of the component they correspond to are as follows:</p>
<reprdef>
 <reprelt eltname="all"/>
 <reprelt eltname="choice"/>
 <reprelt eltname="sequence"/>  
 <p>Each of the above items corresponds to a particle containing a model
group, with properties as follows (unless <code>minOccurs=maxOccurs=0</code>, in which case the item
corresponds to no component at all):</p>
 <reprcomp abstract="Particle" ref="Particle_details">
<propmap comp="p" prop="min occurs">The <termref def="key-vv">actual value</termref> of the <code>minOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="max occurs"><pt>unbounded</pt>, if the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> equals <pt>unbounded</pt>, otherwise the <termref def="key-vv">actual value</termref> of the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
<propmap comp="p" prop="term">A model group as given below:</propmap>
</reprcomp><reprcomp abstract="Model Group" ref="Model_Group_details">
<propmap comp="mg" prop="compositor">One of <pt>all</pt>, <pt>choice</pt>,
<pt>sequence</pt> depending on the element information item.</propmap>
<propmap comp="mg" prop="particles">A sequence of particles
corresponding to all the <eltref ref="all"/>, <eltref ref="choice"/>,
<eltref ref="sequence"/>, <eltref ref="any"/>,
<eltref ref="group"/> or <eltref ref="element"/> items among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>,
in order.</propmap>
<propmap comp="mg" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp>
</reprdef>
</div3>
    <div3>
     <head>Constraints on XML Representations of Model Groups</head>
  <constraintnote type="src" id="src-model_group">
   <head>Model Group Representation OK</head>
   <p>In addition to the conditions imposed on <eltref ref="all"/>, <eltref ref="choice"/> and <eltref ref="sequence"/> element
information items by the schema for schemas, the corresponding particle and model group <rfc2119>must</rfc2119> satisfy the conditions set
out in <specref ref="coss-modelGroup"/> and <specref ref="coss-particle"/>.   
   </p>
  </constraintnote>
    </div3>
    <div3>
     <head>Model Group Validation Rules</head>
<constraintnote type="cvc" id="cvc-model-group">
 <head>Element Sequence Valid</head>
 <p><termdef id="key-partition" term="partition">Define a
<term>partition</term> of a sequence as a sequence of sub-sequences, some or
all of which <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be empty, such that concatenating all the sub-sequences yields
the original sequence</termdef>.</p>
 <p>For a sequence (possibly empty) of element information items to be
locally <termref def="key-vn">valid</termref> with respect to
a model group
  <olist role="case">
   <item>
    <p role="if">the <propref comp="mg" prop="compositor"/> is <pt>sequence</pt></p>
    <p role="then">there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a
<termref def="key-partition">partition</termref> of the sequence into <code>n</code> sub-sequences where <code>n</code> is the length of <propref comp="mg" prop="particles"/> such that each of the sub-sequences in order is <termref def="key-vn">valid</termref>
with respect to the corresponding particle in the <propref comp="mg" prop="particles"/> as defined in <specref ref="cvc-particle"/>.</p>
   </item>
   <item>
    <p role="if">the <propref comp="mg" prop="compositor"/> is <pt>choice</pt></p>
    <p role="then">there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a
particle among the <propref comp="mg" prop="particles"/> such that the sequence is
<termref def="key-vn">valid</termref> with respect to that particle as defined in <specref ref="cvc-particle"/>.</p>
   </item>
   <item>
    <p role="if">the <propref comp="mg" prop="compositor"/> is <pt>all</pt></p>
    <p role="then">there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a
<termref def="key-partition">partition</termref> of the sequence into <code>n</code> sub-sequences where <code>n</code> is the length of <propref comp="mg" prop="particles"/> such that there is a one-to-one mapping between the sub-sequences and the <propref comp="mg" prop="particles"/> where each sub-sequence is <termref def="key-vn">valid</termref> with respect to the corresponding particle as defined in <specref ref="cvc-particle"/>.</p>
   </item>
  </olist>
 </p>
 <p>Nothing in the above should be understood as ruling out groups whose
<propref comp="mg" prop="particles"/> is empty:  although no sequence can be <termref def="key-vn">valid</termref>
with respect to such a group whose <propref comp="mg" prop="compositor"/> is
<pt>choice</pt>, the empty sequence <emph>is</emph> <termref def="key-vn">valid</termref> with respect
to empty groups whose <propref comp="mg" prop="compositor"/> is <pt>sequence</pt> or <pt>all</pt>.</p>
</constraintnote>
    <note>
     <p>The above definition is implicitly non-deterministic, and should not be
taken as a 
<!--* 'recipe' is Latin, not French, from the typical first word of the text *-->
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">recipe</phrase>
for implementations.  Note in particular that when 
<propref comp="mg" prop="compositor"/> is <pt>all</pt>, particles is restricted to a list
of local and top-level element declarations (see <specref ref="coss-modelGroup"/>).   A much simpler implementation is possible than would arise from a literal interpretation of the definition above; informally, the content is <termref def="key-vn">valid</termref> when each declared element occurs exactly once (or at most once, if <propref comp="p" prop="min occurs"/> is <code>0</code>), and each is <termref def="key-vn">valid</termref> with respect to its corresponding declaration.  The elements can occur in arbitrary order.</p>
    </note>
    </div3>
    <div3>
     <head>Model Group Information Set Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-modelGroup">
     <head>Constraints on Model Group Schema Components</head>
  <p>All model groups (see <specref ref="Model_Groups"/>) <rfc2119>must</rfc2119> satisfy the following constraints.</p>
  <constraintnote type="cos" id="mg-props-correct">
   <head>Model Group Correct</head>
   <olist role="And">
    <item><p>The values of the properties of a model group <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Model_Group_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p></item>
    <item><p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">There are no circular groups.</phrase>  
That is, within the <propref comp="mg" prop="particles"/> of a group there 
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is no 
particle at any depth</phrase> whose <propref comp="p" prop="term"/> is the
group itself.</p></item>
   </olist>   
  </constraintnote>
  <constraintnote type="cos" id="cos-all-limited">
   <head>All Group Limited</head>
   <p>When a model group has <propref comp="mg" prop="compositor"/> <pt>all</pt>, then
    <olist role="and">
     <item>
<p>It appears only as the value of one or both of the following properties:</p>
<olist>
     <item>
      <p>the <propref comp="mgd" prop="model group"/> property of a model group definition.</p>
     </item>
     <item>
      <p>the
<propref comp="p" prop="term"/> property of a <compref ref="p"/> with <propref comp="p" prop="max occurs"/><code>=1</code>which is <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the <propref comp="ct" prop="particle"/> of</phrase> the <propref comp="ctd" prop="content type"/> of a
complex type definition.</p>
     </item>
    </olist>
     </item>
     <item>
<p>The <propref comp="p" prop="max occurs"/> of all the particles in the
<propref comp="mg" prop="particles"/> of the group <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <code>0</code> or <code>1</code>.</p>
</item>
    </olist> 
   </p>
  </constraintnote>
<constraintnote type="cos" id="cos-element-consistent">
<head>Element Declarations Consistent</head>
<issue id="RQ-146i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#ElementDeclarationsConsistent" target="reqs">RQ-146 (ElementDeclarationsConsistent)</loc></p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2544" target="reqs">Issue 2544 (RQ-146 element declarations consistent)</loc></p>
<p>Some corner cases, e.g. involving 'skip' wildcards, have emerged with
respect to this constraint.  It will be restated at a higher level of
abstraction, in terms of desired outcome.  See also <specref ref="RQ-36i"/>.</p>
<resolution>
<p>This constraint will be restated in terms of intended outcome, i.e.
that (modulo the impact of xsi:type) validation of an EII with a type
definition will always assign the same type definitions to elements or
attributes of the same name.</p>
</resolution>
</issue>
<p>If the <propref comp="mg" prop="particles"/> contains, either
directly, indirectly (that is, within the <propref comp="mg" prop="particles"/> of a
contained model group, recursively) or <termref def="key-impl-cont">implicitly</termref> two or more element
declaration particles with the same <propref comp="ed" prop="name"/> and
<propref comp="ed" prop="target namespace"/>, then all their type
definitions <rfc2119>must</rfc2119> be the same top-level definition, that is,
<olist role="and">
<item>
<p>all their <propref comp="ed" prop="type definition"/>s <!--*
* material suppressed here by diff group modals *
*--> have a <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals"><termref def="key-null">non-absent</termref></phrase>
 <propref comp="ctd" prop="name"/>.</p>
</item>
<item>
<p>all their
<propref comp="ed" prop="type definition"/>s <!--*
* material suppressed here by diff group modals *
*--> have the same
<propref comp="ctd" prop="name"/>.</p>
</item>
<item>
<p>all their
<propref comp="ed" prop="type definition"/>s <!--*
* material suppressed here by diff group modals *
*--> have the same
<propref comp="ctd" prop="target namespace"/>.</p>
</item>
</olist>
</p>
<p><termdef id="key-impl-cont" term="implicitly contains">A list
of particles <term>implicitly contains</term> an element declaration if<phrase dg="iff"> and only if</phrase> a
member of the list contains that
element declaration in its <termref def="key-eq">substitution group</termref></termdef>.</p>
</constraintnote>
  <constraintnote type="cos" id="cos-nonambig">
<head>Unique Particle Attribution</head>
<p>A content model <rfc2119>must</rfc2119> be formed such that
during <termref def="key-vn">validation</termref> of an element information
item sequence, the particle component
contained directly, indirectly or <termref def="key-impl-cont">implicitly</termref> therein with which to attempt to <termref def="key-vn">validate</termref> each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence.</p>
   <!--*
* material suppressed here by diff group ww *
*-->
   <note>
    <p>This constraint reconstructs for XML Schema the equivalent constraints of
<bibref ref="ref-xml"/> and SGML.  Given the presence of element substitution groups and wildcards, the concise expression of this constraint is difficult,
see <specref ref="non-ambig"/> for further discussion.</p>
    <p>Since this constraint is expressed at the component level, it
applies to content models whose origins (e.g. via type <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> and
references to named model groups) are no longer evident.  So particles at
different points in the content model are always distinct from one another,
even if they originated from the same named model group.</p>
   </note>
</constraintnote>
  <note>
    <p>Because locally-scoped element declarations <phrase dg="may">may or may not</phrase><!--*
* material suppressed here by diff group may *
*--> have a
<propref comp="ed" prop="target namespace"/>, the scope of
declarations is <emph>not</emph> relevant to enforcing either of the
two preceding constraints.</p>
   </note>
  <p>The following constraints define relations appealed to elsewhere in this specification.</p>
  <constraintnote type="cos" id="cos-seq-range">
   <head>Effective Total Range (<pt>all</pt> and <pt>sequence</pt>)</head>
   <p>The effective total range of a particle whose <propref comp="p" prop="term"/> is a group whose <propref comp="mg" prop="compositor"/> is
<pt>all</pt> or <pt>sequence</pt> is a pair of minimum and maximum, as follows: </p>
   <glist>
    <gitem>
     <label>minimum</label>
     <def>
      <p>The product of the particle's <propref comp="p" prop="min occurs"/> and the
sum of the <propref comp="p" prop="min occurs"/> of every wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> and the minimum
part of the effective total range of each of the group particles in the group's <propref comp="mg" prop="particles"/> (or <code>0</code> if there are no <propref comp="mg" prop="particles"/>).</p>
     </def>
    </gitem>
    <gitem>
     <label>maximum</label>
     <def>
      <p><pt>unbounded</pt> if the <propref comp="p" prop="max occurs"/> of any wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> or the maximum
part of the effective total range of any of the group particles in the group's
<propref comp="mg" prop="particles"/> is <pt>unbounded</pt>, or if any of those is non-zero
and the <propref comp="p" prop="max occurs"/> of the particle itself is <pt>unbounded</pt>,
otherwise the product of the particle's <propref comp="p" prop="max occurs"/> and the
sum of the <propref comp="p" prop="max occurs"/> of every wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> and the maximum
part of the effective total range of each of the group particles in the group's <propref comp="mg" prop="particles"/> (or <code>0</code> if there are no <propref comp="mg" prop="particles"/>).</p>
     </def>
    </gitem>
   </glist>
  </constraintnote>
  <constraintnote type="cos" id="cos-choice-range">
   <head>Effective Total Range (<pt>choice</pt>)</head>
   <p>The effective total range of a particle whose <propref comp="p" prop="term"/> is a group whose <propref comp="mg" prop="compositor"/> is
<pt>choice</pt> is a pair of minimum and maximum, as follows:</p>
   <glist>
    <gitem>
     <label>minimum</label>
     <def>
      <p>The product of the particle's <propref comp="p" prop="min occurs"/> and the
minimum of the <propref comp="p" prop="min occurs"/> of every wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> and the minimum
part of the effective total range of each of the group particles in the group's <propref comp="mg" prop="particles"/> (or <code>0</code> if there are no <propref comp="mg" prop="particles"/>).</p>
     </def>
    </gitem>
    <gitem>
     <label>maximum</label>
     <def>
      <p><pt>unbounded</pt> if the <propref comp="p" prop="max occurs"/> of any wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> or the maximum
part of the effective total range of any of the group particles in the group's
<propref comp="mg" prop="particles"/> is <pt>unbounded</pt>, or if any of those is non-zero
and the <propref comp="p" prop="max occurs"/> of the particle itself is <pt>unbounded</pt>,
otherwise the product of the particle's <propref comp="p" prop="max occurs"/> and the
maximum of the <propref comp="p" prop="max occurs"/> of every wildcard or element
declaration particle in the group's <propref comp="mg" prop="particles"/> and the maximum
part of the effective total range of each of the group particles in the group's <propref comp="mg" prop="particles"/> (or <code>0</code> if there are no <propref comp="mg" prop="particles"/>).</p>
     </def>
    </gitem>
   </glist>
  </constraintnote>
    </div3>
   </div2>
   <div2 id="cParticles">
    <head>Particles</head>
    <p>As described in <specref ref="Model_Groups"/>, particles contribute to the definition
of content models.</p>
    <note role="example">
     <eg xml:space="preserve">&lt;xs:element ref="egg" minOccurs="12" maxOccurs="12"/&gt;

&lt;xs:group ref="omelette" minOccurs="0"/&gt;

&lt;xs:any maxOccurs="unbounded"/&gt;
     </eg>
     <p>XML representations which all involve particles, illustrating some of
the possibilities for controlling occurrence.</p>
    </note>
    <div3 id="Particle_details">
     <head>The Particle Schema Component</head>
<p>The particle schema component has the following properties:</p>

  <compdef name="Particle" abbrev="p" showAKO="true"/>
<p>In general, multiple element
information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, possibly with intervening character <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> if the content type
is <pt>mixed</pt>, can be <termref def="key-vn">validated</termref> with
respect to a single particle.  When the <propref comp="p" prop="term"/> is an element
declaration or wildcard, <propref comp="p" prop="min occurs"/> determines the minimum number of such element <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> that can occur.  The number of such children <rfc2119>must</rfc2119> be greater than or equal to <propref comp="p" prop="min occurs"/>.  If <propref comp="p" prop="min occurs"/> is <pt>0</pt>, then occurrence of such children is optional.</p>
<p>Again, when the <propref comp="p" prop="term"/> is an element
declaration or wildcard, the number of such element <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> <rfc2119>must</rfc2119> be less than or equal to any numeric specification of
<propref comp="p" prop="max occurs"/>; if <propref comp="p" prop="max occurs"/> is <pt>unbounded</pt>, then there is no
upper bound on the number of such children.</p>
     <p>When the <propref comp="p" prop="term"/> is a model group, the permitted
occurrence range is determined by a combination of <propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> and the occurrence ranges of the <propref comp="p" prop="term"/>'s <propref comp="mg" prop="particles"/>.</p>
    </div3>
    <div3>
     <head>XML Representation of Particle Components</head>
     <p>Particles correspond to all three elements (<eltref ref="element" inside="complexType"/> not immediately within <eltref ref="schema"/>, <eltref ref="group" inside="complexType"/> not immediately within <eltref ref="schema"/> and <eltref ref="any"/>) which allow <code>minOccurs</code> and <code>maxOccurs</code> attributes.  These in turn correspond to
<emph>two</emph> components in each case, a particle and its <propref comp="p" prop="term"/>.  The appropriate mapping is described in <specref ref="declare-element"/>, <specref ref="declare-contentModel"/> and <specref ref="declare-openness"/> respectively.</p>
    </div3>
    <div3>
     <head>Constraints on XML Representations of Particles</head>
     <p>None as such.</p>
    </div3>
    <div3>
     <head>Particle Validation Rules</head>
<constraintnote type="cvc" id="cvc-particle">
<head>Element Sequence Locally Valid (Particle)</head>
<p>For a sequence (possibly empty) of element information items to be
locally <termref def="key-vn">valid</termref> with respect to a
<compref ref="p"/>
 <olist role="and">
  <item><p>The sequence must be accepted by the <compref ref="p"/>, as defined
in <specref ref="cvc-accept"/>.</p></item>
  <!--*
* material suppressed here by diff group rq146 *
*-->
 </olist>
</p>
</constraintnote>
     <constraintnote type="cvc" id="cvc-accept">
      <head>Element Sequence Accepted (Particle)</head>
      <!--*
* material suppressed here by diff group rq146 *
*-->
      <olist role="case">
<item id="c-pw">
<p role="if">the <propref comp="p" prop="term"/> is a wildcard</p>
<p role="then">
<olist role="andtest">
<item>
<p>The length of the sequence <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> greater than or equal to the
<propref comp="p" prop="min occurs"/>.</p>
</item>
<item>
<p>If <propref comp="p" prop="max occurs"/> is a number, the length of
the sequence <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> less than or equal to the <propref comp="p" prop="max occurs"/>.</p>
</item>
<item>
<p>Each element information item in the sequence <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <termref def="key-vn">valid</termref> with respect to the wildcard as defined
by <specref ref="cvc-wildcard"/>.</p>
</item>
</olist>
</p>
</item>
<item id="c-cdde">
<p role="if">the <propref comp="p" prop="term"/> is an element
declaration</p>
<p role="then">
<olist role="andtest">
<item>
<p>The length of the sequence <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> greater than or equal to the
<propref comp="p" prop="min occurs"/>.</p>
</item>
<item>
<p>If <propref comp="p" prop="max occurs"/> is a number, the length of
the sequence <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> less than or equal to the <propref comp="p" prop="max occurs"/>.</p>
</item>
<item>
<p>For each element information item in the sequence
<olist role="ortest">
<item>
<p>The element declaration is local (i.e. its
<propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> <pt>global</pt>),
<phrase dg="rq17p">its <propref comp="ed" prop="abstract"/>
is <pt>false</pt>, </phrase>the element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> is identical to the element declaration's <propref comp="ed" prop="target namespace"/> (where an <termref def="key-null">absent</termref> <propref comp="ed" prop="target namespace"/> is taken to be identical to a <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> with no value) and the element information item's
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">local
name</xpropref> matches the element declaration's <propref comp="ed" prop="name"/>.</p>
<p>In this case the element declaration is the <termref def="key-dd">context-determined declaration</termref> for the element
information item with respect to <specref ref="cvc-assess-elt"/> and
<specref ref="sic-e-outcome"/>.</p>
</item>
<item>
<p>The element declaration is top-level (i.e. its
<propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> is <pt>global</pt>), <phrase dg="rq17p">its <propref comp="ed" prop="abstract"/> is
<pt>false</pt>, </phrase>the element information item's <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> is identical to the element declaration's <propref comp="ed" prop="target namespace"/> (where an <termref def="key-null">absent</termref> <propref comp="ed" prop="target namespace"/> is taken to be identical to a <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> with no value) and the element information item's
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">local
name</xpropref> matches the element declaration's <propref comp="ed" prop="name"/>.</p>
<p>In this case the element declaration is the <termref def="key-dd">context-determined declaration</termref> for the element
information item with respect to <specref ref="cvc-assess-elt"/> and
<specref ref="sic-e-outcome"/>.</p>
</item>
<item id="c-psg">
<p>The element declaration is top-level (i.e. its
<propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> is <pt>global</pt>), its <propref comp="ed" prop="disallowed substitutions"/> does not contain
<pt>substitution</pt>, the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">local
</xpropref> and <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> of the element information item resolve to an element
declaration, as defined in <specref ref="cvc-resolve-instance"/> --
<termdef id="key-eqd" term="substituting declaration" role="local">call this
declaration the <term>substituting declaration</term></termdef> and
the <termref def="key-eqd">substituting declaration</termref> together
with the particle's element declaration's <propref comp="ed" prop="disallowed substitutions"/> is validly substitutable for the
particle's element declaration as defined in <specref ref="cos-equiv-derived-ok-rec"/>.</p>
<p>In this case the <termref def="key-eqd">substituting
declaration</termref> is the <termref def="key-dd">context-determined
declaration</termref> for the element information item with respect to
<specref ref="cvc-assess-elt"/> and <specref ref="sic-e-outcome"/>.</p>
</item>
</olist></p>
</item>
</olist>
</p>
</item>
<item>
<p role="if">the <propref comp="p" prop="term"/> is a model group</p>
<p role="then">
<olist role="andtest">
<item><p>There is a <termref def="key-partition">partition</termref>
of the sequence into <code>n</code> sub-sequences such that
<code>n</code> is greater than or equal to <propref comp="p" prop="min occurs"/>.</p></item>
<item><p>If <propref comp="p" prop="max occurs"/> is a number,
<code>n</code> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> less than or equal to <propref comp="p" prop="max occurs"/>.</p></item>
<item><p>Each sub-sequence in the <termref def="key-partition">partition</termref> is <termref def="key-vn">valid</termref> with respect to that model group as
defined in <specref ref="cvc-model-group"/>.</p></item>
</olist>
</p>
</item>
</olist>
 <!--*
* material suppressed here by diff group ww *
*-->
<note>
<p>Clauses <clauseref ref="c-pw"/> and <clauseref ref="c-psg"/> do not
interact: an element information item validatable by a declaration
with a substitution group head in a different namespace is
<emph>not</emph> validatable by a wildcard which accepts the head's
namespace but not its own.</p>
</note>
 <!--*
* material suppressed here by diff group rq146 *
*-->
 <!--*
* material suppressed here by diff group rq146 *
*-->
 <!--*
* material suppressed here by diff group rq146 *
*-->
     </constraintnote>
    </div3>
    <div3>
     <head>Particle Information Set Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-particle">
     <head>Constraints on Particle Schema Components</head>
  <p>All particles (see <specref ref="cParticles"/>) <rfc2119>must</rfc2119> satisfy the following constraints.</p>
  <constraintnote type="cos" id="p-props-correct">
   <head>Particle Correct</head>
   <olist role="And">
    <item>
   <p>The values of the properties of a particle <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Particle_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
    </item>
    <item>
     <p>If <propref comp="p" prop="max occurs"/> is not <pt>unbounded</pt>, that is, it has a
numeric value, then
    <olist role="andtest">
     <item>
     <p><propref comp="p" prop="min occurs"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> greater than <propref comp="p" prop="max occurs"/>.</p>
    </item>
    <item>
     <p><propref comp="p" prop="max occurs"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> greater than or equal to 1.</p>
    </item>
    </olist>
   </p>
    </item>
   </olist>
  </constraintnote>
  <p>The following constraints define relations appealed to elsewhere in this specification.</p>
  <constraintnote type="cos" id="cos-particle-extend">
   <head>Particle Valid (Extension)</head>
   <p><termdef id="cd-model-extension" term="valid extension" role="local">For a particle
(call it <local>E</local>, for extension) to be a <term>valid extension</term> of
another particle (call it <local>B</local>, for base)</termdef>
    <olist role="or">
     <item>
      <p>They are the same particle.</p>
     </item>
     <item>
      <p><local>E</local>'s <propref comp="p" prop="min occurs"/>=<propref comp="p" prop="max occurs"/><code>=1</code> and its <propref comp="p" prop="term"/> is a <pt>sequence</pt> group whose <propref comp="mg" prop="particles"/>' first member is a particle all of whose properties, recursively, are identical to those of <local>B</local>, with the exception of <xpropref role="anon">annotation</xpropref> properties.</p>
     </item>
    </olist>
   </p>
  </constraintnote>
   <p dg="rq17p">The approach to defining a type by restricting another type definition
set out here is designed to ensure that types defined in this way are
guaranteed to be a subset of the type they restrict.  This is accomplished by
requiring a clear mapping between the components of the base type definition and the
restricting type definition.  Permissible mappings are set out below via a set
of recursive definitions, bottoming out in the obvious cases, e.g. where an
(restricted) element declaration corresponds to another (base) element
declaration with the same name and type but the same or wider range of occurrence.</p>
   <note role="pf" dg="rq17p">
    <p>The structural correspondence approach to guaranteeing the subset
relation set out here is necessarily verbose, but has the advantage of being
checkable in a straightforward way.  The working group solicits feedback on how
difficult this is in practice, and on whether other approaches are found to be viable.</p>
   </note>
     
  <constraintnote type="cos" id="cos-particle-restrict" dg="rq17p">
   <head>Particle Valid (Restriction)</head>
   <issue id="RQ-11i" role="1.1" status="open">
<!--* <p>
<loc href="&reqs;#pointless-occs">RQ-11 (pointless-occs)</loc>, 
<loc href="&reqs;#choice-vs-choice">RQ-12 (choice-vs-choice)</loc>, 
<loc href="&reqs;#restrictn-rules" target="reqs">RQ-17 (restrictn-rules)</loc>
</p> *-->
<p>
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3042" target="reqs">Issue 3042 (RQ-11 pointless occurrences rule)</loc>, 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3043" target="reqs">Issue 3043 (RQ-12 choice-vs-choice rules)</loc>, 
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2820" target="reqs">Issue 2820 (RQ-17 simplify restriction rules)</loc>
</p>
    <p>A number of cases have emerged in which the detailed rules in this
section do not allow content models that common sense suggests should be
allowed, or <emph>vice versa</emph>.  The decision to move to a higher-level 
definition of restriction (see
<specref ref="RQ-17i"/>) means these issues have actually been overtaken.</p>
    <resolution>
     <p>The decision to move to a higher-level definition of restriction means
almost all of this constraint will disappear.</p>
    </resolution>
   </issue>
   <p><termdef id="cd-model-restriction" term="valid restriction" role="local">For a particle (call it <local>R</local>, for restriction) to be a <term>valid restriction</term> of
another particle (call it <local>B</local>, for base)</termdef>
    <olist role="or">
     <item>
      <p>They are the same particle.</p>
     </item>
     <item>
      <p><!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">Depending</phrase> on the kind of particle, per
the table below, with the qualifications that
       <olist role="andtest">
        <item>
         <p>Any top-level element declaration particle (in <local>R</local> or
<local>B</local>) which is the
<propref comp="ed" prop="substitution group affiliation"/> of one or more other element declarations
and whose <termref def="key-eq">substitution group</termref>
contains at least one element declaration other than itself is
treated as if it were a <pt>choice</pt> group whose <propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> are those of the particle, and whose <propref comp="mg" prop="particles"/> consists of
one particle with <propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> of <code>1</code>  for each of the declarations in its <termref def="key-eq">substitution group</termref>.</p>
        </item>
        <item>
         <p>Any pointless occurrences of <eltref ref="sequence"/>, <eltref ref="choice"/> or <eltref ref="all"/> are ignored, where pointlessness is understood as follows:
          <glist>
           <gitem>
            <label><eltref ref="sequence"/></label>
            <def>
              <olist role="Ortest">
              <item>
               <p><propref comp="mg" prop="particles"/> is empty.</p>
              </item>
               <item>
                <olist role="Andtest">
                 <item><p>The particle within which this <eltref ref="sequence"/>
appears has <propref comp="p" prop="max occurs"/> and <propref comp="p" prop="min occurs"/> of
<code>1</code>.</p></item>
                 <item>
                  <olist role="Ortest"> 
                  <item>
                   <p>The <eltref ref="sequence"/>'s <propref comp="mg" prop="particles"/>
has only one member.</p>
                  </item>
                   <item>
                   <p>The particle within which this <eltref ref="sequence"/>
appears is itself among the <propref comp="mg" prop="particles"/> of a <eltref ref="sequence"/>.</p>
                  </item>
                 </olist>
                 </item>
                </olist>
               </item>
             </olist>             
            </def>
           </gitem>
           <gitem>
            <label><eltref ref="all"/></label>
            <def>
              <olist role="Ortest">
              <item>
               <p><propref comp="mg" prop="particles"/> is empty.</p>
              </item>
               <item>
                <p><propref comp="mg" prop="particles"/> has only one member.</p>
               </item>
             </olist>             
            </def>
           </gitem>
           <gitem>
            <label><eltref ref="choice"/></label>
            <def>
              <olist role="Ortest">
              <item>
               <p><propref comp="mg" prop="particles"/> is empty and the
particle within which this <eltref ref="choice"/> appears has <propref comp="p" prop="min occurs"/> of <code>0</code>.</p>
              </item>
               <item>
                <olist role="Andtest">
                 <item><p>The particle within which this <eltref ref="choice"/>
appears has <propref comp="p" prop="max occurs"/> and <propref comp="p" prop="min occurs"/> of
<code>1</code>.</p></item>
                 <item>
                 <olist role="Ortest"> 
                  <item>
                   <p>The <eltref ref="choice"/>'s <propref comp="mg" prop="particles"/>
has only one member.</p>
                  </item>
                  <item>
                   <p>The particle within which this <eltref ref="choice"/>
appears is itself among the <propref comp="mg" prop="particles"/> of a <eltref ref="choice"/>.</p>
                  </item>
                 </olist>
                </item>
                </olist>
               </item>
             </olist>             
            </def>
           </gitem>
          </glist>
         </p>
        </item>
       </olist>
       </p>
      <restrictCases>
        <restrict case="elt">
         <elt ref="NameAndTypeOK">NameAnd- TypeOK</elt>
         <any>NSCompat</any>
         <all ref="RecurseAsIfGroup">Recurse- AsIfGroup</all>
         <choice ref="RecurseAsIfGroup">Recurse- AsIfGroup</choice>
         <seq ref="RecurseAsIfGroup">RecurseAs- IfGroup</seq>
        </restrict>
        <restrict case="any">
         <any>NSSubset</any>
         <elt>Forbidden</elt>
         <all>Forbidden</all>
         <choice>Forbidden</choice>
         <seq>Forbidden</seq>
        </restrict>
        <restrict case="all">
         <any ref="NSRecurseCheckCardinality">NSRecurse- CheckCardinality</any>
         <all>Recurse</all>
         <elt>Forbidden</elt>
         <choice>Forbidden</choice>
         <seq>Forbidden</seq>
        </restrict>
        <restrict case="choice">
         <any ref="NSRecurseCheckCardinality">NSRecurse- CheckCardinality</any>
         <choice>RecurseLax</choice>
         <all>Forbidden</all>
         <elt>Forbidden</elt>
         <seq>Forbidden</seq>
        </restrict>
        <restrict case="seq- uence">
         <any ref="NSRecurseCheckCardinality">NSRecurse- CheckCardinality</any>
         <all ref="RecurseUnordered">Recurse- Unordered</all>
         <choice>MapAndSum</choice>
         <seq>Recurse</seq>
         <elt>Forbidden</elt>
        </restrict>
       </restrictCases>
     </item>
    </olist>
   </p>
  </constraintnote>
  <constraintnote id="range-ok" type="cos" dg="rq17p">
   <head>Occurrence Range OK</head>
   <p>For a particle's occurrence range to be a valid restriction of another's
occurrence range
    <olist role="and">
     <item>
      <p>Its <propref comp="p" prop="min occurs"/> is greater than or equal to the
other's <propref comp="p" prop="min occurs"/>.</p>
     </item>
     <item>
      
       <olist role="ortest">
        <item>
         <p>The other's <propref comp="p" prop="max occurs"/> is <pt>unbounded</pt>.</p>
        </item>
        <item>
         <p>Both <propref comp="p" prop="max occurs"/> are numbers, and the particle's is less than or equal to the
other's.</p>
        </item>
       </olist>      
     </item>
    </olist>
   </p>
  </constraintnote>
  <constraintnote type="cos" id="rcase-NameAndTypeOK" dg="rq17p">
   <head>Particle Restriction OK (Elt:Elt -- NameAndTypeOK)</head>
   <p>For an element declaration particle to be a <termref def="cd-model-restriction">valid restriction</termref> of another element declaration particle
    <olist role="and">
     <item>
      <p>The declarations' <propref comp="ed" prop="name"/>s and <propref comp="ed" prop="target namespace"/>s are the same.</p>
     </item>
     <item>
      <p><local>R</local>'s occurrence range is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
     <item>
      <olist role="Ortest">
       <item>
        <p>Both <local>B</local>'s declaration's <propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> and
<local>R</local>'s declaration's <propref comp="ed" prop="scope"/><phrase dg="ep01">'s <propref comp="sc_e" prop="variety"/></phrase> are <pt>global</pt>.</p>
       </item>
       <item>
        <olist role="Andtest">
         <item>
      <p>Either <local>B</local>'s <propref comp="ed" prop="nillable"/> is <pt>true</pt> or <local>R</local>'s <propref comp="ed" prop="nillable"/> is <pt>false</pt>.</p>
     </item>
     <item>
      <p>either <local>B</local>'s declaration's <propref comp="ed" prop="value constraint"/> is
absent, or <phrase dg="ep01">its <propref comp="vc_e" prop="variety"/> </phrase>is
not <pt>fixed</pt>, or <local>R</local>'s declaration's <propref comp="ed" prop="value constraint"/><phrase dg="ep01">'s <propref comp="vc_e" prop="variety"/> </phrase> is
<pt>fixed</pt> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">and the two <propref comp="ed" prop="value constraint"/>'s <propref comp="vc_e" prop="value"/>s are identical</phrase>.</p>
     </item>
     <item>
      <p><local>R</local>'s declaration's <propref comp="s" prop="identity-constraint definitions"/> is
a subset of <local>B</local>'s declaration's <propref comp="s" prop="identity-constraint definitions"/>,
if any.</p>

<issue id="RQ-15i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#id-restriction" target="reqs">RQ-15 (id-restriction)</loc></p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2850" target="reqs">Issue 2850 (RQ-15 restriction and identity constraints)</loc></p>
<p>Version 1.0 got the appropriate constraint for identity-constraint
definitions and restriction backwards — the restricted definition <rfc2119>must</rfc2119> have
the same or <emph>more</emph> constraints, not less.</p>
<resolution>
<p>When you're constructing a restricted type, then</p>
<ulist>
<item>
<p>the identity constraints of a local element are inherited;</p>
</item>
<item><p>any new ones (those occurring in the declaration of E local to R) 
are added.</p>
</item>
</ulist>
<p>[<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2004Apr/0178.html">IG Archive</loc> (W3C-member-only link)]</p>
</resolution>
</issue>
</item>
     <item>
      <p><local>R</local>'s declaration's <propref comp="ed" prop="disallowed substitutions"/> is
a superset of <local>B</local>'s declaration's <propref comp="ed" prop="disallowed substitutions"/>.</p>
     </item>
     <item>
      <p><local>R</local>'s <propref comp="ed" prop="type definition"/> is validly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> given
{<pt>extension</pt>, <pt>list</pt>, <pt>union</pt>} from <local>B</local>'s <propref comp="ed" prop="type definition"/> as defined by
<specref ref="cos-ct-derived-ok"/> or <specref ref="cos-st-derived-ok"/>, as appropriate.</p>
     </item>
        </olist>
       </item>
      </olist>
     </item>
    </olist>
   </p>
   <note>
    <p>The above constraint on <propref comp="ed" prop="type definition"/> means that in
<xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">deriving</xtermref> a type by restriction, any contained type definitions <rfc2119>must</rfc2119> themselves be
explicitly <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> by restriction from the corresponding type definitions in the
base definition, or be one of the member types of a
corresponding union..</p>
   </note>
  </constraintnote>
  <constraintnote type="cos" id="rcase-NSCompat" dg="rq17p">
   <head>Particle Derivation OK (Elt:Any -- NSCompat)</head>
   <p>For an element declaration particle to be a <termref def="cd-model-restriction">valid restriction</termref> of a wildcard particle
    <olist role="and">
     <item>
      <p>The element declaration's <propref comp="ed" prop="target namespace"/> is
<termref def="key-vn">valid</termref> with respect to the wildcard's <propref comp="w" prop="namespace constraint"/> as
defined by <specref ref="cvc-wildcard-namespace"/>.</p>
     </item>
     <item>
      <p><local>R</local>'s occurrence range is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
    </olist>
   </p>
  </constraintnote>
  <constraintnote type="cos" id="rcase-RecurseAsIfGroup" dg="rq17p">
   <head>Particle Derivation OK (Elt:All/Choice/Sequence -- RecurseAsIfGroup)</head>
   <p>For an element declaration particle to be a <termref def="cd-model-restriction">valid restriction</termref> of a group particle (<pt>all</pt>, <pt>choice</pt> or <pt>sequence</pt>)
a group particle of the variety corresponding to <local>B</local>'s, with
<propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> of <code>1</code> and with <propref comp="mg" prop="particles"/> consisting of a single particle
the same as the element declaration <rfc2119>must</rfc2119> be a <termref def="cd-model-restriction">valid restriction</termref> of the group as defined by <specref ref="rcase-Recurse"/>, <specref ref="rcase-RecurseLax"/> or <specref ref="rcase-Recurse"/>, depending on whether the group is <pt>all</pt>, <pt>choice</pt> or <pt>sequence</pt>.</p>
  </constraintnote>
  <constraintnote type="cos" id="rcase-NSSubset" dg="rq17p">
   <head>Particle Derivation OK (Any:Any -- NSSubset)</head>
   <p>For a wildcard particle to be a <termref def="cd-model-restriction">valid restriction</termref> of another wildcard particle
    <olist role="and">
     <item>
      <p><local>R</local>'s occurrence range <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
     <item>
      <p><local>R</local>'s <propref comp="w" prop="namespace constraint"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an intensional
subset of <local>B</local>'s <propref comp="w" prop="namespace constraint"/> as defined by <specref ref="cos-ns-subset"/>.</p>
     </item>
     <item>
      <p>Unless <local>B</local> is the content model wildcard of
the <termref def="ur-type-itself">ur-type definition</termref>, <local>R</local>'s <propref comp="w" prop="process contents"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> identical
to or stronger than <local>B</local>'s <propref comp="w" prop="process contents"/>, where
<pt>strict</pt> is stronger than <pt>lax</pt> is stronger than <pt>skip</pt>.</p>
     </item>
    </olist>
   </p>
   <note id="procContNote" role="forceNote">
    <p>The exception to the third clause above for <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivations</xtermref> from
the <termref def="ur-type-itself">ur-type definition</termref> is necessary as
its wildcards have a <propref comp="w" prop="process contents"/> of <pt>lax</pt>, so
without this exception, no use of wildcards with <propref comp="w" prop="process contents"/> of <pt>skip</pt> would be possible.</p>
   </note>
  </constraintnote>
  <constraintnote type="cos" id="rcase-NSRecurseCheckCardinality" dg="rq17p">
   <head>Particle Derivation OK (All/Choice/Sequence:Any -- NSRecurseCheckCardinality)</head>
   <p>For a group particle to be a <termref def="cd-model-restriction">valid restriction</termref> of a wildcard particle
    <olist role="and">
     <item>
      <p>Every member of the <propref comp="mg" prop="particles"/> of the group is a
<termref def="cd-model-restriction">valid restriction</termref> of the wildcard
as defined by <specref ref="cos-particle-restrict"/>.</p>
     </item>
     <item>
      <p>The effective total range of the group, as defined by <specref ref="cos-seq-range"/> (if
the group is <pt>all</pt> or <pt>sequence</pt>) or 
<specref ref="cos-choice-range"/> (if it is <pt>choice</pt>) is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
    </olist>
   </p>
  </constraintnote>
  <constraintnote type="cos" id="rcase-Recurse" dg="rq17p">
   <head>Particle Derivation OK (All:All,Sequence:Sequence -- Recurse)</head>
   <p>For an <pt>all</pt> or <pt>sequence</pt> group particle to be a <termref def="cd-model-restriction">valid restriction</termref> of another group particle with the same <propref comp="mg" prop="compositor"/> 
    <olist role="and">
     <item>
      <p><local>R</local>'s occurrence range is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
     <item>
      <p>There is a complete <termref def="key-op">order-preserving</termref> functional mapping from the particles in the
<propref comp="mg" prop="particles"/> of <local>R</local> to the particles in the <propref comp="mg" prop="particles"/> of <local>B</local> such that
       <olist role="andtest">
        <item>
         <p>Each particle in the <propref comp="mg" prop="particles"/> of <local>R</local> is a
<termref def="cd-model-restriction">valid restriction</termref> of the
particle in the <propref comp="mg" prop="particles"/> of <local>B</local> it maps to as defined
by <specref ref="cos-particle-restrict"/>.</p>
        </item>
        <item>
         <p>All particles in the <propref comp="mg" prop="particles"/> of <local>B</local> which
are not mapped to by any particle in the <propref comp="mg" prop="particles"/> of <local>R</local>
are <termref def="cd-emptiable">emptiable</termref> as defined by <specref ref="cos-group-emptiable"/>.</p>
        </item>
       </olist></p>
     </item>
    </olist>
   </p>
   <note>
    <p>Although the <termref def="key-vn">validation</termref> semantics of an <pt>all</pt> group does not
depend on the order of its particles, <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> <pt>all</pt> groups are required to
match the order of their base in order to simplify checking that the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> is OK.</p>
   </note>
   <p><termdef id="key-op" term="order-preserving" role="local">A complete functional mapping is
<term>order-preserving</term> if each particle <local>r</local> in the domain <local>R</local> maps to a
particle <local>b</local> in the range <local>B</local> which follows (not necessarily
immediately) the particle in the range
<local>B</local> mapped to by the predecessor of <local>r</local>, if any, where
<quote>predecessor</quote> and <quote>follows</quote> are defined with respect
to the order of the lists which constitute <local>R</local> and <local>B</local></termdef>.</p>
  </constraintnote>
  <constraintnote type="cos" id="rcase-RecurseLax" dg="rq17p">
   <head>Particle Derivation OK (Choice:Choice -- RecurseLax)</head>
   <p>For a <pt>choice</pt> group particle to be a <termref def="cd-model-restriction">valid restriction</termref> of another <pt>choice</pt> group particle 
    <olist role="and">
     <item>
      <p><local>R</local>'s occurrence range is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>;</p>
     </item>
     <item>
      <p>There is a complete <termref def="key-op">order-preserving</termref> functional mapping from the particles in the
<propref comp="mg" prop="particles"/> of <local>R</local> to the particles in the <propref comp="mg" prop="particles"/> of <local>B</local> such that each particle in the <propref comp="mg" prop="particles"/> of <local>R</local> is a
<termref def="cd-model-restriction">valid restriction</termref> of the
particle in the <propref comp="mg" prop="particles"/> of <local>B</local> it maps to as defined
by <specref ref="cos-particle-restrict"/>.</p>
     </item>
    </olist>
    </p>
   <note>
    <p>Although the <termref def="key-vn">validation</termref> semantics of a <pt>choice</pt> group does not
depend on the order of its particles, <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derived</xtermref> <pt>choice</pt> groups are
required to
match the order of their base in order to simplify checking that the <xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-derived">derivation</xtermref> is OK.</p>
   </note>
  </constraintnote>
  <constraintnote type="cos" id="rcase-RecurseUnordered" dg="rq17p">
   <head>Particle Derivation OK (Sequence:All -- RecurseUnordered)</head>
   <p>For a <pt>sequence</pt> group particle to be a <termref def="cd-model-restriction">valid restriction</termref> of an <pt>all</pt> group particle
    <olist role="and">
     <item>
      <p><local>R</local>'s occurrence range is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
     </item>
     <item>
      <p>There is a complete functional mapping from the particles in the
<propref comp="mg" prop="particles"/> of <local>R</local> to the particles in the <propref comp="mg" prop="particles"/> of <local>B</local> such that
       <olist role="andtest">
        <item>
         <p>No particle in the <propref comp="mg" prop="particles"/> of <local>B</local> is mapped
to by more than one of the particles in the
<propref comp="mg" prop="particles"/> of <local>R</local>;</p>
        </item>
        <item>
         <p>Each particle in the <propref comp="mg" prop="particles"/> of <local>R</local> is a
<termref def="cd-model-restriction">valid restriction</termref> of the
particle in the <propref comp="mg" prop="particles"/> of <local>B</local> it maps to as defined
by <specref ref="cos-particle-restrict"/>;</p>
        </item>
        <item>
         <p>All particles in the <propref comp="mg" prop="particles"/> of <local>B</local> which
are not mapped to by any particle in the <propref comp="mg" prop="particles"/> of <local>R</local>
are <termref def="cd-emptiable">emptiable</termref> as defined by <specref ref="cos-group-emptiable"/>.</p>
        </item>
       </olist>
      </p>
     </item>
    </olist>
   </p>
   <note>
    <p>Although this clause allows reordering, because of the limits on the
contents of <pt>all</pt> groups the checking process can still be deterministic.</p>
   </note>
  </constraintnote>
  <constraintnote type="cos" id="rcase-MapAndSum" dg="rq17p">
   <head>Particle Derivation OK (Sequence:Choice -- MapAndSum)</head>
   <p>For a <pt>sequence</pt> group particle to be a <termref def="cd-model-restriction">valid restriction</termref> of a <pt>choice</pt> group particle
    <olist role="and">
     <item>
      <p>There is a complete functional mapping from the particles in the
<propref comp="mg" prop="particles"/> of <local>R</local> to the particles in the <propref comp="mg" prop="particles"/> of <local>B</local> such that each particle in the <propref comp="mg" prop="particles"/> of <local>R</local> is a
<termref def="cd-model-restriction">valid restriction</termref> of the
particle in the <propref comp="mg" prop="particles"/> of <local>B</local> it maps to as defined
by <specref ref="cos-particle-restrict"/>.</p>
     </item>
     <item>
      <p>The pair consisting of the product of the <propref comp="p" prop="min occurs"/> of <local>R</local> and the length of its <propref comp="mg" prop="particles"/> and <pt>unbounded</pt> if <propref comp="p" prop="max occurs"/> is <pt>unbounded</pt> otherwise the product of the <propref comp="p" prop="max occurs"/> of <local>R</local> and the length of its <propref comp="mg" prop="particles"/> is a valid
restriction of <local>B</local>'s occurrence range as defined by <specref ref="range-ok"/>.</p>
      <note>
       <p>This clause is in principle more restrictive than absolutely
necessary, but in practice will cover all the likely cases, and is much easier
to specify than the fully general version.</p>
      </note>
     </item>
    </olist>
   </p>
   <note>
    <p>This case allows the <quote>unfolding</quote> of iterated disjunctions
into sequences.  It <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be particularly useful when the disjunction is an
implicit one arising from the use of substitution groups.</p>
   </note>
  </constraintnote>
 <constraintnote id="cos-group-emptiable" type="cos">
  <head>Particle Emptiable</head>
  <p><termdef id="cd-emptiable" term="emptiable" role="local">For a particle to be
<term>emptiable</term></termdef>
   <olist role="or">
    <item>
     <p>Its <propref comp="p" prop="min occurs"/> is <code>0</code>.</p>
    </item>
    <item>
     <p>Its <propref comp="p" prop="term"/> is a group and the minimum part of the
effective total range of that group, as defined by <specref ref="cos-seq-range"/> (if
the group is <pt>all</pt> or <pt>sequence</pt>) or 
<specref ref="cos-choice-range"/> (if it is <pt>choice</pt>), is <code>0</code>.</p>
    </item>
   </olist>
  </p>
 </constraintnote> 
    </div3>
   </div2>
   <div2 id="Wildcards">
    <head>Wildcards</head>
    <p>In order to exploit the full potential for extensibility offered by XML
plus namespaces, more provision is needed than DTDs allow for targeted flexibility in content
models and attribute declarations.  A wildcard provides for <termref def="key-vn">validation</termref> of
attribute and element information items dependent on their namespace
name, but independently of their local name.</p>
<issue id="RQ-9i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#wildcard-ns-sets" target="reqs">RQ-9
(wildcard-ns-sets)</loc></p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2867" target="reqs">Issue 2867 (RQ-9 wildcard namespace sets)</loc></p>
<p>In version 1.0 negated wildcards were restricted to negating only
one namespace.  Experience suggests that at least at the component
level this <emph>may</emph> need to be expanded, but no final decision
will be made on this until details of the change in interpretation of wildcards
more generally (see <specref ref="RQ-36i"/>) are worked out.</p>

<p>At the moment wildcards can only negate a single namespace.  To
handle certain cases which become possible because to the change in
interpretation of wildcards as subordinate to explicit elements (see
<specref ref="RQ-36i"/>), it may be necessary to negate/exclude a set
of explicitly enumerated expanded names.  This would be a change at
the component level only.</p>
<p>A related possibility, more likely motivated by versioning needs,
would be to provide, perhaps again only at the component level for
now, for <emph>sets</emph> of namespace names to be negated.</p>
</issue>
<note role="example"><eg xml:space="preserve">&lt;xs:any processContents="skip"/&gt;

&lt;xs:any namespace="##other" processContents="lax"/&gt;

&lt;xs:any namespace="http://www.w3.org/1999/XSL/Transform"/&gt;

&lt;xs:any namespace="##targetNamespace"/&gt;

&lt;xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/&gt;</eg>
    <p>XML representations of the four basic types of wildcard, plus one attribute wildcard.</p>
</note>
    <div3 id="Wildcard_details">
     <head>The Wildcard Schema Component</head>
   <p>The wildcard schema component has the following properties:</p>
     <compdef name="Wildcard" abbrev="w" showAKO="true"/>
    <microCompdef name="Namespace Constraint" abbrev="nc" dg="ep01"/>
<p><propref comp="w" prop="namespace constraint"/> provides for <termref def="key-vn">validation</termref> of attribute and element items that:
<olist>
<item>
<p>(<phrase dg="ep01"><propref comp="nc" prop="variety"/> </phrase><pt>any</pt>) have any namespace or are not namespace-qualified;</p>
</item>
<item>
<p>(<phrase dg="ep01"><propref comp="nc" prop="variety"/> </phrase><pt>not</pt> and <phrase dg="ep01"><propref comp="nc" prop="namespaces"/> </phrase>a<phrase dg="ep01"> set containing exactly one</phrase> namespace name) are namespace-qualified with a namespace
other than the specified namespace name;</p>
</item>
<item>
<p>(<phrase dg="ep01"><propref comp="nc" prop="variety"/>
</phrase><pt>not</pt> and <phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a  set containing exactly one member, namely </phrase><termref def="key-null">absent</termref>) are namespace-qualified;</p>
</item>
<item>
<p>(<phrase dg="ep01"><propref comp="nc" prop="variety"/>
<pt>enumeration</pt> and <propref comp="nc" prop="namespaces"/> </phrase>a set whose
members are either namespace names or <termref def="key-null">absent</termref>) have any of the
specified namespaces and/or, if <termref def="key-null">absent</termref> is included in the set, are unqualified.</p>
</item>
</olist></p>
    <p><propref comp="w" prop="process contents"/> controls the impact on <termref def="key-va">assessment</termref>
of the information items allowed by wildcards, as follows:
     <glist>
      <gitem>
       <label>strict</label>
       <def>
        <p>There <rfc2119>must</rfc2119> be a top-level declaration for the item
available, or the item <rfc2119>must</rfc2119> have an <code>xsi:type</code>, and the
item <rfc2119>must</rfc2119> be <termref def="key-vn">valid</termref> as
appropriate.</p>
       </def>
      </gitem>
      <gitem>
       <label>skip</label>
       <def>
        <p>No constraints at all:  the item <rfc2119>must</rfc2119> simply be well-formed XML.</p>
       </def>
      </gitem>
      <gitem>
       <label>lax</label>
       <def>
        <p>If the item has a uniquely
determined declaration available, it <rfc2119>must</rfc2119> be <termref def="key-vn">valid</termref> with respect to
that definition, that is, <termref def="key-vn">validate</termref>
if you
can, don't worry if you can't.</p>
       </def>
      </gitem>
     </glist>
    </p>
     <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="w" prop="annotations"/> property.</p>
    </div3>
     <div3 id="declare-openness">
    <head>XML Representation of Wildcard Schema Components</head>
    <p>The XML representation for a wildcard schema component is an
<eltref ref="any"/> or <eltref ref="anyAttribute"/> element information item.    The correspondences between the
properties of an <eltref ref="any"/> information item and
properties of the components it corresponds to are as follows (see <eltref ref="complexType"/> and <eltref ref="attributeGroup"/> for the correspondences for <eltref ref="anyAttribute"/>):</p>
    <reprdef>
 <reprelt eltname="any"/>
     <p>A particle containing a wildcard, with properties as follows (unless <code>minOccurs=maxOccurs=0</code>, in which case the item
corresponds to no component at all):</p>
     <reprcomp abstract="Particle" ref="Particle_details">
<propmap comp="p" prop="min occurs">The <termref def="key-vv">actual value</termref> of the <code>minOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
  <propmap comp="p" prop="max occurs"><pt>unbounded</pt>, if the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> equals <pt>unbounded</pt>, otherwise the <termref def="key-vv">actual value</termref> of the <code>maxOccurs</code>
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <code>1</code>.</propmap>
<propmap comp="p" prop="term">A wildcard as given below:</propmap>
</reprcomp>
 <reprcomp abstract="Wildcard" ref="Wildcard_details">
<propmap comp="w" prop="namespace constraint">Dependent on the <termref def="key-vv">actual value</termref> of the
<code>namespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>: if absent, then <phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> </phrase><pt>any</pt>, otherwise as follows:<glist>
  <gitem>
   <label>##any</label>
   <def>
    <p><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> </phrase><pt>any</pt>.
     </p>
   </def>
  </gitem>
  <gitem>
   <label>##other</label>
   <def>
    <p><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> </phrase><pt>not</pt> and <phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a set
with exactly one member, </phrase>the <termref def="key-vv">actual value</termref> of the <code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="schema"/> ancestor
element information item if present, otherwise<termref def="key-null"/></p>
   </def>
  </gitem>
  <gitem>
   <label><emph>otherwise</emph></label>
   <def>
    <p>
     <pvlist>
      <pvpair comp="nc" prop="variety" dg="ep01"><pt>enumeration</pt></pvpair>
      <pvpair comp="nc" prop="namespaces">a set whose members are namespace names corresponding to the
space-delimited substrings of the string, except
     <olist>
      <item>
       <p>if one such
substring is <code>##targetNamespace</code>, the corresponding member is the <termref def="key-vv">actual value</termref> of the <code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="schema"/> ancestor
element information item if present, otherwise <termref def="key-null">absent</termref>.</p>
      </item>
      <item>
       <p>if one such
substring is <code>##local</code>, the corresponding member is <termref def="key-null">absent</termref>.</p>
      </item>
     </olist></pvpair>
     </pvlist>
    </p>
   </def>
  </gitem>
 </glist>
</propmap>
  <propmap comp="w" prop="process contents">The <termref def="key-vv">actual value</termref> of the
<code>processContents</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, if present, otherwise <pt>strict</pt>.</propmap>
<propmap comp="w" prop="annotations">The annotation corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp></reprdef>
    <p>Wildcards are subject to the same ambiguity constraints
(<specref ref="cos-nonambig"/>) as other
content model particles:  If an instance element could match<phrase dg="ww"> either an explicit
particle and a wildcard, or</phrase> one of two wildcards, within the content model of a
type, that model is in error.</p>
   </div3>
    <div3>
     <head>Constraints on XML Representations of Wildcards</head>
    <constraintnote type="src" id="src-wildcard">
   <head>Wildcard Representation OK</head>
   <p>In addition to the conditions imposed on <eltref ref="any"/> element
information items by the schema for schemas, the corresponding particle and model group <rfc2119>must</rfc2119> satisfy the conditions set
out in <specref ref="coss-modelGroup"/> and <specref ref="coss-particle"/>.</p>
  </constraintnote>
    </div3>
    <div3>
     <head>Wildcard Validation Rules</head>
    <constraintnote type="cvc" id="cvc-wildcard">
     <head>Item Valid (Wildcard)</head>
     <p>For an element or attribute information item to be locally <termref def="key-vn">valid</termref> with respect to a wildcard
constraint
      its <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace name</xpropref> <rfc2119>must</rfc2119> be <termref def="key-vn">valid</termref> with respect to the wildcard constraint, as defined in <specref ref="cvc-wildcard-namespace"/>.</p>
     <p>When this constraint applies
      <olist role="case">
       <item>
        <p role="if"><propref comp="w" prop="process contents"/> is <pt>lax</pt></p>
        <p role="then">the item has no <termref def="key-dd">context-determined declaration</termref> with respect to <specref ref="sic-e-outcome"/>, <specref ref="cvc-assess-elt"/> and <specref ref="cvc-assess-attr"/>.</p>
       </item>
       <item>
        <p role="if"><propref comp="w" prop="process contents"/> is <pt>strict</pt></p>
        <p role="then">the item's <termref def="key-dd">context-determined declaration</termref> is <pt>mustFind</pt>.</p>
       </item>
       <item>
        <p role="if"><propref comp="w" prop="process contents"/> is <pt>skip</pt></p>
        <p role="then">the item's <termref def="key-dd">context-determined declaration</termref> is <pt>skip</pt>.</p>
       </item>
      </olist>
     </p>
    </constraintnote>
    <constraintnote type="cvc" id="cvc-wildcard-namespace">
     <head>Wildcard allows Namespace Name</head>
     <p>For a value which is either a namespace name or <termref def="key-null">absent</termref> to be <termref def="key-vn">valid</termref> with respect to a wildcard constraint (the
value of a <propref comp="w" prop="namespace constraint"/>)
      <olist role="or">
       <item>
        <p>The constraint<phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <pt>any</pt>.</p>
       </item>
       <item>
        <olist role="Andtest">
         <item>
          <p>The constraint<phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> is <!--*
* material suppressed here by diff group ep01 *
*--><pt>not</pt> and <phrase dg="ep01">its <propref comp="nc" prop="namespaces"/> is a set with exactly one member, </phrase>a namespace name or
<termref def="key-null">absent</termref> (<termdef id="key-nst" term="namespace test" role="local">call this the <term>namespace test</term>)</termdef>.</p>
         </item>
         <item>
            <p>The value <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> identical to the <termref def="key-nst">namespace test</termref>.</p>
           </item>
         <item>
          <p>The value <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is not</phrase> <termref def="key-null">absent</termref>.</p>
         </item>
        </olist>        
       </item>
       <item>
        <p>The constraint<phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> is <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><pt>enumeration</pt></phrase>, and the value is identical to one of the members of the <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">constraint's <propref comp="nc" prop="namespaces"/></phrase>.</p>
       </item>
      </olist>
     </p>
    </constraintnote>
    </div3>
    <div3>
     <head>Wildcard Information Set Contributions</head>
     <p>None as such.</p>
    </div3>
    <div3 id="coss-wildcard">
     <head>Constraints on Wildcard Schema Components</head>
  <p>All wildcards (see <specref ref="Wildcards"/>) <rfc2119>must</rfc2119> satisfy the following constraint.</p>
  <constraintnote type="cos" id="w-props-correct">
   <head>Wildcard Properties Correct</head>
   <olist role="And">
    <item>
     <p>The values of the properties of a wildcard <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Wildcard_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
    </item>
    <item dg="ep01"><p>If <propref comp="nc" prop="variety"/> is <pt>not</pt>, <propref comp="nc" prop="namespaces"/> has exactly one member.</p></item>
   </olist>
   
  </constraintnote>
  <p>The following constraints define a relation appealed to elsewhere in this specification.</p>
  <constraintnote type="cos" id="cos-ns-subset">
  <head>Wildcard Subset</head>
   <p>For a namespace constraint (call it <local>sub</local>) to be an intensional subset of
another namespace constraint (call it <local>super</local>)
    <olist role="or">
     <item>
      <p><local>super</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <pt>any</pt>.</p>
     </item>
     <item>
      <olist role="Andtest">
       <item><p><local>sub</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <!--*
* material suppressed here by diff group ep01 *
*--><pt>not</pt><!--*
* material suppressed here by diff group ep01 *
*-->.</p></item>
       <item><p><local>super</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <!--*
* material suppressed here by diff group ep01 *
*--><pt>not</pt> and <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the single member of its <propref comp="nc" prop="namespaces"/> is identical to the single member of <local>sub</local>'s <propref comp="nc" prop="namespaces"/></phrase>.</p></item>
      </olist>
     </item>
     <item>
      <olist role="Andtest">
       <item>
        <p><local>sub</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/> is <pt>enumeration</pt></phrase><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
       </item>
       <item>
        <olist role="Ortest">
       <item>
        <p><local>super</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/> is <pt>enumeration</pt> and its <propref comp="nc" prop="namespaces"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> the same set or a superset <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">of <local>sub</local>'s <propref comp="nc" prop="namespaces"/></phrase>.</p>
       </item>
         <item>
         <p><local>super</local><phrase dg="ep01">'s <propref comp="nc" prop="variety"/></phrase> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> <!--*
* material suppressed here by diff group ep01 *
*--><pt>not</pt><!--*
* material suppressed here by diff group ep01 *
*-->
and neither <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the single member of its <propref comp="nc" prop="namespaces"/></phrase> nor
<termref def="key-null">absent</termref>
<!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> in <local>sub</local>'s <!--*
* material suppressed here by diff group ep01 *
*--><propref comp="nc" prop="namespaces"/>.</p>
        </item>
      </olist>
       </item>
      </olist>
     </item>
    </olist>
   </p>
  </constraintnote>
     <constraintnote id="cos-aw-union" type="cos">
   <head>Attribute Wildcard Union</head>
   <p>For a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/></phrase> to be the intensional
union of two other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/>s</phrase> (call them <local>O1</local> and <local>O2</local>), it <rfc2119>must</rfc2119> be as given by
    <olist role="caseval">
     <item>
      <p role="if"><local>O1</local> and <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have</phrase> the same <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="nc" prop="variety"/> and identical <propref comp="nc" prop="namespaces"/></phrase></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> and <propref comp="nc" prop="namespaces"/> as for <local>O1</local>.</phrase>
      </p>
     </item>
     <item>
      <p role="if">either <local>O1</local> or <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>any</pt></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> <pt>any</pt>.</phrase></p>
     </item>
     <item>
      <p role="if">both <local>O1</local> and <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="nc" prop="variety"/> <pt>enumeration</pt></phrase></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> <pt>enumeration</pt> and <propref comp="nc" prop="namespaces"/> the union of <local>O1</local>'s
<propref comp="nc" prop="namespaces"/> and <local>O2</local>'s
<propref comp="nc" prop="namespaces"/>.</phrase></p>
     </item>
     <item>
      <p role="if">the two <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">both have <propref comp="nc" prop="variety"/> <pt>not</pt></phrase></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> <pt>not</pt> and <propref comp="nc" prop="namespaces"/> a set with <termref def="key-null"/> as the only member.</phrase></p>
     </item>
     <item>
      <p role="if">either <local>O1</local> or <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>not</pt>
and <phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a set
whose single member is</phrase>a namespace name<phrase dg="ep01">
(call this <local>N</local>)</phrase> and the other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/> <pt>enumeration</pt></phrase> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">and <propref comp="nc" prop="namespaces"/></phrase> <local>S</local><!--*
* material suppressed here by diff group ep01 *
*--></p>
      <p role="then">
       <olist role="caseval">
        <item>
         <p role="if">the set <local>S</local> includes both <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>N</local></phrase> and <termref def="key-null">absent</termref></p>
         <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> </phrase><pt>any</pt><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
        </item>
        <item>
         <p role="if">the set <local>S</local> includes <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>N</local></phrase> but not <termref def="key-null">absent</termref></p>
         <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/></phrase> <pt>not</pt> and <phrase dg="ep01"> <propref comp="nc" prop="namespaces"/> a set whose only member is </phrase><termref def="key-null">absent</termref><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
        </item>
        <item>
         <p role="if">the set <local>S</local> includes <termref def="key-null">absent</termref>
but not <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>N</local></phrase></p>
         <p role="then">the union is not expressible.</p>
        </item>
        <item>
         <p role="if">the set <local>S</local> does not include either <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>N</local></phrase> or <termref def="key-null">absent</termref></p>
         <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> <pt>not</pt> and <propref comp="nc" prop="namespaces"/> the same as the <propref comp="nc" prop="namespaces"/> of </phrase>whichever of <local>O1</local> or <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>not</pt><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
        </item>
       </olist>
      </p>
     </item>
     <item>
      <p role="if">either <local>O1</local> or <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>not</pt>
and<phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a set
whose single member is</phrase> <termref def="key-null">absent</termref> and the other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/> <pt>enumeration</pt></phrase> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">and <propref comp="nc" prop="namespaces"/></phrase> <local>S</local><!--*
* material suppressed here by diff group ep01 *
*--></p>
      <p role="then">
       <olist role="caseval">
        <item>
         <p role="if">the set <local>S</local> includes <termref def="key-null">absent</termref></p>
         <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> </phrase><pt>any</pt><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
        </item>
        <item>
         <p role="if">the set <local>S</local> does not include <termref def="key-null">absent</termref></p>
         <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/></phrase> <pt>not</pt> and <phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a set whose only member is </phrase><termref def="key-null">absent</termref><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
        </item>
       </olist>
      </p>
     </item>
    </olist>
    In the case where there are more than two <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/>s to be combined</phrase>, the intensional
union is determined by identifying the intensional union of two
of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">them</phrase> as above, then the intensional union of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the result</phrase> with
the third (providing the first union was expressible), and so on as required.
   </p>
  </constraintnote>
  <constraintnote id="cos-aw-intersect" type="cos">
   <head>Attribute Wildcard Intersection</head>
   <p>For a <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/></phrase> to be the intensional
intersection of two other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/>s</phrase> (call them <local>O1</local> and <local>O2</local>), it <rfc2119>must</rfc2119> be as given by:
    <olist role="caseval">
     <item>
      <p role="if"><local>O1</local> and <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have</phrase> the same <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="nc" prop="variety"/> and identical <propref comp="nc" prop="namespaces"/></phrase></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with <propref comp="nc" prop="variety"/> and <propref comp="nc" prop="namespaces"/> as for <local>O1</local>.</phrase>
      </p>
     </item>
     <item>
      <p role="if">either <local>O1</local> or <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>any</pt></p>
      <p role="then"><!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> and <propref comp="nc" prop="namespaces"/> as for the other.</phrase></p>
     </item>
     <item>
      <p role="if">either <local>O1</local> or <local>O2</local> 
<!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/></phrase> <pt>not</pt>
and <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><propref comp="nc" prop="namespaces"/> a set
whose single member is <local>N</local></phrase> and the other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/> <pt>enumeration</pt></phrase> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">and <propref comp="nc" prop="namespaces"/></phrase> <local>S</local></p>
      <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> <pt>enumeration</pt> and <propref comp="nc" prop="namespaces"/>
the same as <local>S</local></phrase><!--*
* material suppressed here by diff group ep01 *
*-->,
minus <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>N</local></phrase> if it was in <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>S</local></phrase>, minus <termref def="key-null">absent</termref> if it was in <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><local>S</local></phrase><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
     </item>
     <item>
      <p role="if">both <local>O1</local> and <local>O2</local> <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="nc" prop="variety"/> <pt>enumeration</pt></phrase></p>
      <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> <pt>enumeration</pt> and <propref comp="nc" prop="namespaces"/> </phrase>the intersection of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">their <propref comp="nc" prop="namespaces"/></phrase>.</p>
     </item>
     <item>
      <p role="if">the two <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">have <propref comp="nc" prop="variety"/> <pt>not</pt> but the single members of their <propref comp="nc" prop="namespaces"/> are</phrase> different namespace names</p>
      <p role="then">the intersection is not expressible.</p>
     </item>
     <item>
      <p role="if">the one <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/>
<pt>not</pt> and <propref comp="nc" prop="namespaces"/> a set
whose single member is</phrase> a namespace name <phrase dg="ep01">(call the set <local>N</local>)</phrase> and the other <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">has <propref comp="nc" prop="variety"/>
<pt>not</pt> and <propref comp="nc" prop="namespaces"/> a set
whose single member is</phrase> <termref def="key-null">absent</termref></p>
      <p role="then"><phrase dg="ep01">a <compref ref="nc"/> with
<propref comp="nc" prop="variety"/> <pt>not</pt> and <propref comp="nc" prop="namespaces"/> <local>N</local></phrase><!--*
* material suppressed here by diff group ep01 *
*-->.</p>
     </item>
    </olist>
    In the case where there are more than two <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01"><compref ref="nc"/>s to be combined</phrase>, the intensional
intersection is determined by identifying the intensional intersection of two
of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">them</phrase> as above, then the intensional intersection of <!--*
* material suppressed here by diff group ep01 *
*--><phrase dg="ep01">the result</phrase> with
the third (providing the first intersection was expressible), and so on as required.
   </p>
  </constraintnote>
    </div3>
   </div2>
<div2 id="cIdentity-constraint_Definitions">
    <head>Identity-constraint Definitions</head>
<p>Identity-constraint definition components provide for uniqueness and
reference constraints with respect to the contents of multiple elements and attributes.</p>
 <note role="example">
  <eg xml:space="preserve">&lt;xs:key name="fullName"&gt;
 &lt;xs:selector xpath=".//person"/&gt;
 &lt;xs:field xpath="forename"/&gt;
 &lt;xs:field xpath="surname"/&gt;
&lt;/xs:key&gt;

&lt;xs:keyref name="personRef" refer="fullName"&gt;
 &lt;xs:selector xpath=".//personPointer"/&gt;
 &lt;xs:field xpath="@first"/&gt;
 &lt;xs:field xpath="@last"/&gt;
&lt;/xs:keyref&gt;

&lt;xs:unique name="nearlyID"&gt;
 &lt;xs:selector xpath=".//*"/&gt;
 &lt;xs:field xpath="@id"/&gt;
&lt;/xs:unique&gt;</eg>
  <p>XML representations for the three kinds of identity-constraint definitions.</p>
 </note>
    <div3 id="Identity-constraint_Definition_details">
     <head>The Identity-constraint Definition Schema Component</head>
     <p>The identity-constraint definition schema component has the following
properties:
</p>   

<issue id="RQ-14i" role="1.1" status="open">
<!--* <p><loc href="&reqs;#id-inconsistency" target="reqs">RQ-14 (id-inconsistency)</loc></p> *-->
<p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2848" target="reqs">Issue 2848 (RQ-14 annotations on field and select)</loc></p>
<p>Version 1.0 provided no home for annotations on <code>xs:field</code>
and <code>xs:select</code>.  The overall reworking of annotation at the
component level described in <specref ref="RQ-131i"/> will take care of this.</p>
<resolution>
<p>See <specref ref="RQ-131i"/>.</p>
</resolution>
</issue>
  <compdef name="Identity-constraint Definition" abbrev="icd" showAKO="true"/>

<p>Identity-constraint definitions are identified by their <propref comp="icd" prop="name"/> and <propref comp="icd" prop="target namespace"/>; Identity-constraint definition identities <rfc2119>must</rfc2119> be unique within an <termref def="key-schema">XML Schema</termref>.  See <specref ref="composition-schemaImport"/> for the use of component
identifiers when importing one schema into another.</p>
<p>Informally, <propref comp="icd" prop="identity-constraint category"/> identifies the Identity-constraint definition as playing one of
three roles:
<ulist>
 
<item><p>(<pt>unique</pt>) the Identity-constraint definition asserts uniqueness, with respect to the content
identified by <propref comp="icd" prop="selector"/>, of the tuples resulting from
evaluation of the <propref comp="icd" prop="fields"/> XPath expression(s). </p></item>
 
<item>
<p>(<pt>key</pt>) the Identity-constraint definition asserts uniqueness as for
<pt>unique</pt>.  <pt>key</pt> further asserts that all selected content
actually has such tuples.</p>
</item>
<item><p>(<pt>keyref</pt>) the Identity-constraint definition asserts a correspondence, with respect to the content
identified by <propref comp="icd" prop="selector"/>, of the tuples resulting from
evaluation of the <propref comp="icd" prop="fields"/> XPath expression(s), with those of the <propref comp="icd" prop="referenced key"/>. </p></item>
</ulist> </p>
<p>These constraints are specified along side the specification of types for the
attributes and elements involved, i.e. something declared as of type integer
<phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> also serve as a key.  Each constraint declaration has a name, which exists in a
single symbol space for constraints.  The 
<!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">identity</phrase>
conditions
appealed to in checking these constraints apply to the 
<emph>value<phrase dg="b1915bis">s</phrase></emph> of
the fields selected<phrase dg="b1915bis">, not their
lexical representation</phrase>, so that for example <code>3.0</code> and <code>3</code>
would be conflicting keys if they were both 
<!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">decimal</phrase>, but non-conflicting if
they were both strings, or one was a string and one a <!--*
* material suppressed here by diff group b1915bis *
*--><phrase dg="b1915bis">decimal</phrase>.  
<!--*
* material suppressed here by diff group b1915bis *
*--></p>
    <p>Overall the augmentations to XML's <code>ID/IDREF</code> mechanism are:</p>
    <ulist>
     <item>
<p>Functioning as a part of an identity-constraint is in addition to, not instead of,
having a type;</p>
     </item>
     <item><p>Not just attribute values, but also element content and combinations
of values and content can be declared to be unique;</p></item>
     <item><p>Identity-constraints are specified to hold within the scope of particular elements;</p></item>
     <item><p>(Combinations of) attribute values and/or element content can be
declared to be keys, that is, not only unique, but always present and non-nillable;</p></item>
     <item>
      <p>The comparison between <pt>keyref</pt> <propref comp="icd" prop="fields"/> and
<pt>key</pt> or <pt>unique</pt> <propref comp="icd" prop="fields"/> is by value equality,
not by string equality.</p>
     </item>
    </ulist>
    <p><propref comp="icd" prop="selector"/> specifies a restricted XPath (<bibref ref="bib-xpath"/>) expression relative to
instances of the element being declared.  This <rfc2119>must</rfc2119> identify a node set of
subordinate elements (i.e. contained within the declared element) to which the constraint applies.</p>
    <p><propref comp="icd" prop="fields"/> specifies XPath expressions relative to each
element selected by a <propref comp="icd" prop="selector"/>.  This <rfc2119>must</rfc2119> identify
a single node (element or attribute) whose content or value, which <rfc2119>must</rfc2119> be
of a simple type, is used in the constraint.  It is possible to specify an
ordered list of <propref comp="icd" prop="fields"/>s, to cater to multi-field keys,
keyrefs, and uniqueness constraints.
     </p>
     <p>In order to reduce the burden on implementers, in particular
implementers of streaming processors, only restricted subsets of XPath
expressions are allowed in <propref comp="icd" prop="selector"/> and <propref comp="icd" prop="fields"/>.  The details are given in <specref ref="coss-identity-constraint"/>.</p>
 <note>
      <p>Provision for multi-field keys etc. goes beyond what is supported by <code>xsl:key</code>.</p>
     </note>
     <p>See <specref ref="cAnnotations"/> for information on the role of the
<propref comp="icd" prop="annotations"/> property.</p>
    </div3>
 <div3 id="declare-key">
    <head>XML Representation of Identity-constraint Definition Schema Components</head>
<p>The XML representation for an identity-constraint definition schema component is
either a
<eltref ref="key"/>, a <eltref ref="keyref"/> or a <eltref ref="unique"/>
element information item.    The correspondences between the
properties of those information items and
properties of the component they correspond to are as follows:</p>
    <reprdef>
 <reprelt eltname="unique"/>
 <reprelt eltname="key"/>
 <reprelt eltname="keyref"/>
 <reprelt eltname="selector"/>
 <reprelt eltname="field"/>
 <reprcomp abstract="Identity-constraint Definition" ref="Identity-constraint_Definition_details"><propmap comp="icd" prop="name">The <termref def="key-vv">actual value</termref> of the <code>name</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref></propmap>
  <propmap comp="icd" prop="target namespace">The <termref def="key-vv">actual value</termref> of the
<code>targetNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the parent <code>schema</code>
element information item.</propmap>
<propmap comp="icd" prop="identity-constraint category">One of <pt>key</pt>, <pt>keyref</pt> or
<pt>unique</pt>, depending on the item.</propmap>
<propmap comp="icd" prop="selector">A restricted XPath expression corresponding to the <termref def="key-vv">actual value</termref> of
the <code>xpath</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> of the <eltref ref="selector"/> element information item among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref></propmap>
<propmap comp="icd" prop="fields">A sequence of XPath expressions, corresponding to the
<termref def="key-vv">actual value</termref>s of the <code>xpath</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>s of the <eltref ref="field"/> element information item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, in order.</propmap>
<propmap comp="icd" prop="referenced key">If the item is a <eltref ref="keyref"/>, the
identity-constraint definition <termref def="src-resolve">resolved</termref> to by the
<termref def="key-vv">actual value</termref> of the <code>refer</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref>, otherwise <termref def="key-null">absent</termref>.</propmap>
<propmap comp="icd" prop="annotations">The annotations corresponding to the <eltref ref="annotation"/> element information item in the
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, and in the <eltref ref="selector"/> and <eltref ref="field"/> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if present, otherwise <termref def="key-null">absent</termref>.</propmap>
</reprcomp></reprdef>
    
    <note role="example">
     <eg xml:space="preserve">&lt;xs:element name="vehicle"&gt;
 &lt;xs:complexType&gt;
  . . .
  &lt;xs:attribute name="plateNumber" type="xs:integer"/&gt;
  &lt;xs:attribute name="state" type="twoLetterCode"/&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;

&lt;xs:element name="state"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   &lt;xs:element name="code" type="twoLetterCode"/&gt;
   &lt;xs:element ref="vehicle" maxOccurs="unbounded"/&gt;
   &lt;xs:element ref="person" maxOccurs="unbounded"/&gt;
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;

 &lt;xs:key name="reg"&gt; &lt;!-- vehicles are keyed by their plate within states --&gt;
  &lt;xs:selector xpath=".//vehicle"/&gt;
  &lt;xs:field xpath="@plateNumber"/&gt;
 &lt;/xs:key&gt;
&lt;/xs:element&gt;

&lt;xs:element name="root"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   . . .
   &lt;xs:element ref="state" maxOccurs="unbounded"/&gt;
   . . .
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;

 &lt;xs:key name="state"&gt; &lt;!-- states are keyed by their code --&gt;
  &lt;xs:selector xpath=".//state"/&gt;
  &lt;xs:field xpath="code"/&gt;
 &lt;/xs:key&gt;

 &lt;xs:keyref name="vehicleState" refer="state"&gt;
  &lt;!-- every vehicle refers to its state --&gt;
  &lt;xs:selector xpath=".//vehicle"/&gt;
  &lt;xs:field xpath="@state"/&gt;
 &lt;/xs:keyref&gt;

 &lt;xs:key name="regKey"&gt; &lt;!-- vehicles are keyed by a pair of state and plate --&gt;
  &lt;xs:selector xpath=".//vehicle"/&gt;
  &lt;xs:field xpath="@state"/&gt;
  &lt;xs:field xpath="@plateNumber"/&gt;
 &lt;/xs:key&gt;

 &lt;xs:keyref name="carRef" refer="regKey"&gt; &lt;!-- people's cars are a reference --&gt;
  &lt;xs:selector xpath=".//car"/&gt;
  &lt;xs:field xpath="@regState"/&gt;
  &lt;xs:field xpath="@regPlate"/&gt;
 &lt;/xs:keyref&gt;

&lt;/xs:element&gt;

&lt;xs:element name="person"&gt;
 &lt;xs:complexType&gt;
  &lt;xs:sequence&gt;
   . . .
   &lt;xs:element name="car"&gt;
    &lt;xs:complexType&gt;
     &lt;xs:attribute name="regState" type="twoLetterCode"/&gt;
     &lt;xs:attribute name="regPlate" type="xs:integer"/&gt;
    &lt;/xs:complexType&gt;
   &lt;/xs:element&gt;
  &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt;
&lt;/xs:element&gt;</eg>
     <p>A <code>state</code> element is defined, which
contains a <code>code</code> child and some <code>vehicle</code> and <code>person</code>
children.  A <code>vehicle</code> in turn has a <code>plateNumber</code> attribute,
which is an integer, and a <code>state</code> attribute.  State's
<code>code</code>s are a key for them within the document.  Vehicle's
<code>plateNumber</code>s are a key for them within states, and
<code>state</code> and
<code>plateNumber</code> is asserted to be a <pt>key</pt> for
<code>vehicle</code> within the document as a whole.  Furthermore, a <code>person</code> element has
an empty <code>car</code> child, with <code>regState</code> and
<code>regPlate</code> attributes, which are then asserted together to refer to
<code>vehicle</code>s via the <code>carRef</code> constraint.  The requirement
that a <code>vehicle</code>'s <code>state</code> match its containing
<code>state</code>'s <code>code</code> is not expressed here.</p>
    </note>
 </div3>
    <div3>
     <head>Constraints on XML Representations of Identity-constraint Definitions</head>
    <constraintnote type="src" id="src-identity-constraint">
   <head>Identity-constraint Definition Representation OK</head>
   <p>In addition to the conditions imposed on <eltref ref="key"/>, <eltref ref="keyref"/> and <eltref ref="unique"/> element
information items by the schema for schemas, the corresponding identity-constraint definition <rfc2119>must</rfc2119> satisfy the conditions set
out in <specref ref="coss-identity-constraint"/>.</p>
  </constraintnote>
    </div3>
    <div3>
     <head>Identity-constraint Definition Validation Rules</head>
 <constraintnote type="cvc" id="cvc-identity-constraint">
  <head>Identity-constraint Satisfied</head>
  <p>For an element information item to be locally <termref def="key-vn">valid</termref> with respect to an identity-constraint
   <olist role="and">
    <item>
     <p>The <propref comp="icd" prop="selector"/>, with the element information item as the
context node, evaluates to a node-set (as defined in
<bibref ref="bib-xpath"/>).  <termdef id="key-tns" term="target node set" role="local">Call this the <term>target node set</term></termdef>.</p>
    </item>
    <item>
     <p>Each node in the <termref def="key-tns">target node set</termref> is
either the context node 
<!--*
* material suppressed here by diff group wd2.silent *
*--><phrase dg="wd2.silent">or an</phrase>
element node among its descendants.</p>
    </item>
    <item>
     <p>For each node in the <termref def="key-tns">target node
set</termref> all of the <propref comp="icd" prop="fields"/>, with
that node as the context node, evaluate to either an empty node-set or
a node-set with exactly one member, which <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">has</phrase> a simple type.
<termdef id="key-ks" term="key-sequence" role="local">Call the
sequence of the type-determined values (as defined in <bibref ref="ref-xsp2"/>) of the <xpropref role="psviAnon">schema normalized
value</xpropref> of the element and/or attribute information items in
those node-sets in order the <term>key-sequence</term> of the
node</termdef>.</p>
    </item>
    <item>
     <p>
   <termdef id="key-qns" term="qualified node set" role="local">Call the subset of the <termref def="key-tns">target node set</termref> for
which all the <propref comp="icd" prop="fields"/> evaluate to a node-set with exactly one
member which is an element or attribute node with a simple type the <term>qualified node set</term></termdef>.
     <olist role="Casetest">
    <item id="c-u">
     <p role="if">the <propref comp="icd" prop="identity-constraint category"/> is <pt>unique</pt></p>
     <p role="then">no two members of the <termref def="key-qns">qualified node
set</termref> have <termref def="key-ks">key-sequences</termref> whose members
are pairwise equal, as defined by <!--*
* material suppressed here by diff group fpwd *
*--><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#equality" dg="fpwd">Equality</xtermref> in <bibref ref="ref-xsp2"/>.</p>
    </item>
      <item id="c-k">
     <p role="if">the <propref comp="icd" prop="identity-constraint category"/> is <pt>key</pt></p>
       <p role="then">
        <olist role="andtest">
         <item>
     <p>The <termref def="key-tns">target node set</termref> and the <termref def="key-qns">qualified node
set</termref> are equal, that is, every member of the <termref def="key-tns">target node set</termref> is also a member of the <termref def="key-qns">qualified node
set</termref> and <emph>vice versa</emph>.</p>
         </item>
    <item>
     <p>No two members of the <termref def="key-qns">qualified node
set</termref> have <termref def="key-ks">key-sequences</termref> whose members
are pairwise equal, as defined by <!--*
* material suppressed here by diff group fpwd *
*--><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#equality" dg="fpwd">Equality</xtermref> in <bibref ref="ref-xsp2"/>.</p>
    </item>
    <item id="c-nlbl">
     <p>No element member of the <termref def="key-ks">key-sequence</termref> of any
member of the <termref def="key-qns">qualified node
set</termref> was assessed as <termref def="key-vn">valid</termref> by reference to an element
declaration whose <propref comp="ed" prop="nillable"/> is <pt>true</pt>.</p>
    </item>
        </olist>
       </p>
    </item>
    <item id="cl-krv">
     <p role="if">the <propref comp="icd" prop="identity-constraint category"/> is <pt>keyref</pt></p>
     <p role="then">for each member of the <termref def="key-qns">qualified node
set</termref> (call this the <local>keyref member</local>), there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a <termref def="key-nt">node table</termref> associated with the
<propref comp="icd" prop="referenced key"/> in the <propref role="psvi" ref="e-id_constraint_table"/>
of the element information item (see <specref ref="sic-key"/>, which <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase>
understood as logically prior to this clause of this constraint, below) and
there <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an entry in that table whose
<termref def="key-ks">key-sequence</termref> is equal to the
<local>keyref member's</local> <termref def="key-ks">key-sequence</termref> member for
member, as defined by <!--*
* material suppressed here by diff group fpwd *
*--><xtermref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#equality" dg="fpwd">Equality</xtermref> in <bibref ref="ref-xsp2"/>.</p>
    </item>
   </olist>
     </p>
    </item>
   </olist>
  </p>
  <note>
   <p>The use of  <xpropref role="psviAnon">schema normalized value</xpropref> in the definition
of <termref def="key-ks">key sequence</termref> above means that
<pt>default</pt> or <pt>fixed</pt> value constraints <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> play a part in <termref def="key-ks">key sequence</termref>s.</p>
  </note>
 </constraintnote>
     <note>
      <p>Because the validation of <pt>keyref</pt> (see <clauseref ref="cl-krv"/>) depends on finding
appropriate entries in a element information item's <termref def="key-nt">node
table</termref>, and <termref def="key-nt">node tables</termref> are assembled
strictly recursively from the node tables of descendants, only element
information items within the sub-tree rooted at the element information item
being <termref def="key-vn">validated</termref> can be referenced successfully.</p>
     </note>
 <note>
  <p>Although this specification defines a <termref def="key-psvi">post-schema-validation infoset</termref>
contribution which would enable schema-aware processors to implement <clauseref ref="c-nlbl"/> above (<specref ref="sic-elt-decl"/>), processors are not required to
provide it.  This clause can be read as if in the absence of this infoset contribution, the
value of the relevant <propref comp="ed" prop="nillable"/> property <rfc2119>must</rfc2119> be available.</p>
 </note>
    </div3>
    <div3>
     <head>Identity-constraint Definition Information Set Contributions</head>
 <constraintnote type="sic" id="sic-key">
  <head>Identity-constraint Table</head>
  <p><termdef id="key-ec" term="eligible identity-constraint" role="local">An
<term>eligible identity-constraint</term> of an element information item is
one such that <clauseref ref="c-u"/> or <clauseref ref="c-k"/> of
<specref ref="cvc-identity-constraint"/> is satisfied with respect to that
item and that constraint, or such that any of the element information
item <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of that item have an <propref role="psvi" ref="e-id_constraint_table"/> property whose value has an entry for
that constraint</termdef>.</p>
  <p><termdef id="key-nt" term="node table" role="local">A <term>node
table</term> is a set of pairs each consisting of a <termref def="key-ks">key-sequence</termref> and an element node</termdef>.</p>
  <p>Whenever an element information item has one or more <termref def="key-ec">eligible identity-constraints</termref>, in the <termref def="key-psvi">post-schema-validation infoset</termref> that
element information item <phrase dg="opt.144">has</phrase><!--*
* material suppressed here by diff group opt.144 *
*--> a property as follows:</p>
  <proplist item="element" role="psvi">
    <propdef id="e-id_constraint_table" name="identity-constraint table">
     one
<local>Identity-constraint Binding</local>
information item for each <termref def="key-ec">eligible identity-constraint</termref>, with
properties as follows:
     <proplist item="Identity-constraint Binding" role="psvi">
      <propdef id="cb-definition" name="definition">The <termref def="key-ec">eligible identity-constraint</termref>.</propdef>
      <propdef id="cb-node_table" name="node table">A <termref def="key-nt">node table</termref> with one entry for every <termref def="key-ks">key-sequence</termref> (call it <local>k</local>) and
node (call it <local>n</local>) such that
   <olist role="ortest">
    <item id="c-kc">
     <p>There is an entry in one of the <termref def="key-nt">node
tables</termref> associated with the <propref role="psvi" ref="cb-definition"/> in an <local>Identity-constraint Binding</local>
information item in at least one of the <propref role="psvi" ref="e-id_constraint_table"/>s of the element information item
<xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref> of the element information item whose <termref def="key-ks">key-sequence</termref> is <local>k</local> and whose node
is <local>n</local>;</p>
    </item>
    <item>
     <p><local>n</local> appears with <termref def="key-ks">key-sequence</termref> <local>k</local> in the <termref def="key-qns">qualified node set</termref> for the <propref role="psvi" ref="cb-definition"/>.</p>
    </item>
   </olist> provided no two entries have the same <termref def="key-ks">key-sequence</termref> but distinct nodes.  Potential
conflicts are resolved by not including any conflicting entries which
would have owed their inclusion to <clauseref ref="c-kc"/> above. Note
that if all the conflicting entries arose under <clauseref ref="c-kc"/> above, this means no entry at all will appear for the
offending <termref def="key-ks">key-sequence</termref>.</propdef>
     </proplist>
    </propdef>
   </proplist>  
    <!--*
* material suppressed here by diff group ep01 *
*-->
  <note>
   <p>The complexity of the above arises from the fact that
<pt>keyref</pt> identity-constraints <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*--> be defined on domains distinct from the
embedded domain of the identity-constraint they reference, or <phrase dg="may">the domains may be</phrase><!--*
* material suppressed here by diff group may *
*--> the
same but self-embedding at some depth.  In either case the <termref def="key-nt">node
table</termref> for the referenced identity-constraint needs to propagate upwards, with
conflict resolution.</p>
   <p>The <local>Identity-constraint Binding</local> information item, unlike
others in this specification, is essentially an internal bookkeeping
mechanism.  It is introduced to support the definition of <specref ref="cvc-identity-constraint"/>
above. Accordingly, conformant processors <rfc2119>may</rfc2119>, but are
<emph>not</emph> required to, expose them via
<propref role="psvi" ref="e-id_constraint_table"/> properties in the
<termref def="key-psvi">post-schema-validation infoset</termref>. In other words, the above constraints <phrase dg="may">may</phrase><!--*
* material suppressed here by diff group may *
*-->
be read as saying <termref def="key-vn">validation</termref> of
identity-constraints proceeds <emph>as if</emph> such infoset items existed. 
</p></note>
 </constraintnote>
    </div3>
    <div3 id="coss-identity-constraint">
     <head>Constraints on Identity-constraint Definition Schema Components</head>
  <p>All identity-constraint definitions (see <specref ref="cIdentity-constraint_Definitions"/>) <rfc2119>must</rfc2119> satisfy the following constraint.</p>
  <constraintnote type="cos" id="c-props-correct">
   <head>Identity-constraint Definition Properties Correct</head>
   <olist role="And">
    <item>
     <p>The values of the properties of an identity-constraint definition <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">are</phrase> as described in
the property tableau in
<specref ref="Identity-constraint_Definition_details"/>, modulo the impact of <specref ref="conformance-missing"/>.</p>
    </item>
    <item>
     <p>If the <propref comp="icd" prop="identity-constraint category"/> is
<pt>keyref</pt>, the cardinality of the <propref comp="icd" prop="fields"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is equal to</phrase> that of the <propref comp="icd" prop="fields"/> of the <propref comp="icd" prop="referenced key"/>.</p>
    </item>
   </olist>
  </constraintnote>
     <constraintnote type="cos" id="c-selector-xpath">
      <head>Selector Value OK</head>
      <olist role="And">
       <item>
      <p>The <propref comp="icd" prop="selector"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a valid XPath
expression, as defined in <bibref ref="bib-xpath"/>.</p>
       </item>
       <item>
        <olist role="Ortest">
         <item>
          <p>It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">conforms</phrase> to the following extended BNF:
        <scrap lang="ebnf" headstyle="show">
         <head>Selector XPath expressions</head>
         <prod id="Selector">
          <lhs>Selector</lhs>
          <rhs><nt def="Path">Path</nt> ( '|' <nt def="Path">Path</nt> )*</rhs>
         </prod>
         <prod id="Path">
          <lhs>Path</lhs>
          <rhs>('.//')? <nt def="Step">Step</nt> ( '/' <nt def="Step">Step</nt> )*</rhs>
         </prod>
         <prod id="Step">
          <lhs>Step</lhs>
          <rhs>'.' | <nt def="NameTest">NameTest</nt></rhs>
         </prod>
         <prod id="NameTest">
          <lhs>NameTest</lhs>
          <rhs><xnt xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> | '*' | <xnt xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml-names/#NT-NCName">NCName</xnt> ':' '*'</rhs>
         </prod>
        </scrap>
        </p>
         </item>
         <item>
          <p>It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an XPath expression involving the <code>child</code> axis whose abbreviated form is
as given above.</p>
         </item>
        </olist>
       </item>
      </olist>
      <p>For readability, whitespace <rfc2119>may</rfc2119> be used in selector XPath expressions even though not
explicitly allowed by the grammar: <nt def="whitespace">whitespace</nt> <rfc2119>may</rfc2119> be freely added within patterns before or after any <nt def="token">token</nt>.
      <scrap lang="ebnf" headstyle="show">
         <head>Lexical productions</head>
         <prod id="token">
          <lhs>token</lhs>
          <rhs>'.' | '/' | '//' | '|' | '@' | <nt def="NameTest">NameTest</nt></rhs>
         </prod>
         <prod id="whitespace">
          <lhs>whitespace</lhs>
          <rhs><xnt xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/REC-xml/#NT-S">S</xnt></rhs>
         </prod>
        </scrap></p>
      <p>
When tokenizing, the longest possible token is always returned.</p>      
     </constraintnote>
     <constraintnote type="cos" id="c-fields-xpaths">
      <head>Fields Value OK</head>
      <olist role="And">
       <item>
      <p>Each member of the <propref comp="icd" prop="fields"/> <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> a valid XPath
expression, as defined in <bibref ref="bib-xpath"/>.</p>
       </item>
       <item>
        <olist role="Ortest">
         <item>
          <p>It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">conforms</phrase> to the extended BNF given
above for <nt def="Selector">Selector</nt>, with the following modification:
        <scrap headstyle="show">
         <head>Path in Field XPath expressions</head>
         <prod id="fPath">
          <lhs>Path</lhs>
          <rhs>('.//')? ( <nt def="Step">Step</nt> '/' )* ( <nt def="Step">Step</nt> | '@' <nt def="NameTest">NameTest</nt> )</rhs>
         </prod>
        </scrap>
           This production differs from the one above in allowing the final
step to match an attribute node.
        </p>
         </item>
         <item>
          <p>It <!--*
* material suppressed here by diff group modals *
*--><phrase dg="modals">is</phrase> an XPath expression involving the <code>child</code> and/or <code>attribute</code> axes whose abbreviated form is
as given above.</p>
         </item>
        </olist>
       </item>
      </olist>
      <p>For readability, whitespace <rfc2119>may</rfc2119> be used in field XPath expressions even though not
explicitly allowed by the grammar: <nt def="whitespace">whitespace</nt> <rfc2119>may</rfc2119> be freely added within patterns before or after any <nt def="token">token</nt>.
      </p>
      <p>When tokenizing, the longest possible token is always returned.</p>
     </constraintnote>
    </div3>
   </div2>
   <div2 id="cNotation_Declarations">
    <head>Notation Declarations</head>
    <p>Notation declarations reconstruct XML<!--*
* material suppressed here by diff group fpwd *
*--> NOTATION declarations.</p>
    <note role="example">
     <eg xml:space="preserve">&lt;xs:notation name="jpeg" public="image/jpeg" system="viewer.exe"&gt;</eg>
     <p>The XML representation of a notation declaration.</p>
    </note>
    <div3 id="Notation_Declaration_details">
     <head>The Notation Declaration Schema Component</head>
    <p>The notation declaration schema component has the following
properties:</p>

  <compdef name="Notation Declaration" abbrev="nd" showAKO="true"/>
    <p>Notation declarations do not participate in <termref def="key-vn">validation</termref> as such.
They are referen