<?xml version="1.0" encoding="utf-8"?><!-- Id: structures.xml,v 1.6.2.125 2006/08/29 06:08:16 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="WD-xmlschema11-1-20060831">
 <header>
  <title>XML Schema 1.1 Part 1: Structures</title>
  <w3c-designation>wd-20060831</w3c-designation>
  <w3c-doctype>W3C Working Draft</w3c-doctype>
  <pubdate>
   <day>31</day>
   <month>August</month>
   <year>2006</year><!--  Id: structures.xml,v 1.6.2.125 2006/08/29 06:08:16 cmsmcq Exp  -->
  </pubdate>
  <publoc> 
   <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060831/">http://www.w3.org/TR/2006/WD-xmlschema11-1-20060831/</loc> 
  </publoc>
  <altlocs><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060831/structures.xml">XML</loc>
<!--*
   <loc href="http://www.w3.org/TR/2006/WD-xmlschema11-1-20060831/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-20060831/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-20060831/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-20060831/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/2006/WD-xmlschema11-1-20060330/">http://www.w3.org/TR/2006/WD-xmlschema11-1-20060330/</loc>
   <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>
    <name>Shudi (Sandy) Gao 高殊镝</name>
    <affiliation>IBM</affiliation>
    <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:sandygao@ca.ibm.com">sandygao@ca.ibm.com</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 31 August 2006.
The major changes since the previous draft are:
<ulist>
<item dg="rq17p">
<p>The rules for checking validity of complex-type restrictions
have been simplified by reformulating the constraint in terms
of local validity:  the set of elements or attributes accepted
by a restriction as locally valid must be a subset of those accepted by its
base type.</p>
</item>
 
<item dg="all-2506-1">
<p>Several of the constraints imposed by version 1.0 of this
specification on <pt>all</pt>-groups have been relaxed:
<ulist><item>
<p>Wildcards are now allowed in <pt>all</pt> groups.</p>
</item>
<item>
<p>The value of <att>maxOccurs</att> may now be greater than 1 on particles
in an <pt>all</pt> group.  The elements which match a particular
particle need not be adjacent in the input.</p>
</item>
</ulist>
</p></item>

<item>
<p>The presentation of the <termref def="key-psvi">post-schema-validation infoset</termref> has been simplified by removing
the suggestion that the <termref def="key-psvi">post-schema-validation infoset</termref> varies from processor to processor.
Instead, the exposition now makes clearer that the body of information 
available in principle after schema-validity assessment is consistent 
across all 
processors; processors may make different subsets of the <termref def="key-psvi">post-schema-validation infoset</termref>
accessible to downstream applications, but when they do so 
the variation reflects the implementors' decisions
about what information to expose, not variation in the information
in the <termref def="key-psvi">post-schema-validation infoset</termref>.</p>
</item>
<item>
<p>Terms have been defined to describe different subsets of the
<termref def="key-psvi">post-schema-validation infoset</termref> which may be exposed by processors.</p>
</item>

<item>
<p>The different levels of conformance have been given shorter
and more convenient names.</p>
</item>
<item>
<p>A checklist has been included listing ways in which conforming 
processors may vary from each other, and terminology has been
provided for some of the more important properties of conforming
processors, in an attempt to make it easier for implementors to
describe concisely which options their processors exercise, and
easier for users to describe what kinds of processor they 
require.</p>
</item>
<item>
<p>The discussion of schema-validity assessment and the invocation
of conforming processors has been revised; additional invocation
patterns have been identified, and names have been given to
the different methods of invoking a processor.</p>
</item>
<item>
<p>When an element cannot be strictly validated because no
element declaration or type definition is available 
for it, fallback to lax validation (validating the element
against the built-in type <pt>anyType</pt>) is now required;
in earlier drafts of this document, fallback to lax validation
was optional.</p>
</item>
<item>
<p>The Unique Particle Attribution constraint has been relaxed.
It is no longer prohibited for a content model to have
element particles and wildcard particles which compete with 
each other; competition is still prohibited between
element particles and between wildcard particles.
The exposition of the constraint has also been revised
for clarity.</p>
</item>
<item>
<p>Wildcards may now be defined which allow names in any
namespace but those in a set of proscribed namespaces.
(In version 1.0 of this specification, only a single
namespace, the target namespace of a schema document,
could be proscribed.)  Also, wildcards can now be written
which match any element in a set of namespaces but
which exclude a particular set of qualified names from
matching the wildcard.</p>
</item>
<item>
<p>A check-clause mechanism has been added.  Complex types
may now include assertions about interrelations among their
attributes and descendants, which must be satisfied in order
for elements to be locally valid against the type. </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>Patent disclosures relevant to this specification may be found on
the Working Group's <loc role="disclosure"
href="http://www.w3.org/2004/01/pp-impl/19482/status">Patent
disclosure page</loc> in conformance with the <loc
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
href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
6 of the W3C Patent Policy</loc>.</p>

*-->
<p>This document was produced by a group operating under the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February
2004 W3C Patent Policy</loc>. W3C maintains a <loc xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential 
Claim(s)</loc> must 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.
This is bug 2822; cf. bug 2846=RQ-142.
Approved 2006-08-04.
</sitem>
<sitem id="rq144-wrap2">Replacement wrapper (after rq144 became
status quo).</sitem>
<sitem id="rq144a">Fixes to broken links caused by diff group rq144.
Not discussed 2005-02-18, not sure what to do.  This should go
together with rq144sc (schema construction variations).
Approved 2006-08-18.
</sitem>
<sitem id="rq144nv">Sub-part of RQ-144: no variation in PSVI.
Approved 2006-08-04.</sitem>
<sitem id="rq144sc">Sub-part of RQ-144: schema construction variations.
Approved 2006-08-18.</sitem>
<sitem id="rq144fb">Sub-part of RQ-144: fallback variation.</sitem>
<sitem id="rq144fl">Sub-part of RQ-144: psvi flavors.</sitem>
<sitem id="rq144si">Sub-part of RQ-144: schema invocation details.</sitem>
<sitem id="rq144cf">Sub-part of RQ-144: conformance clauses.
Approved 2006-08-04.</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="rq144wg">Changes made by WG in RQ-144 during meetings of
4 and 18 August.</sitem>
<sitem id="rq144wgno">'New Orleans' changes requested by WG in RQ-144
and approved in advance by a 'New Orleans' vote,  during meetings of
4 and 18 August.</sitem>
<sitem id="rq144wg2">Changes made by WG in RQ-144 during ftf meetings of
21-23 18 August.</sitem>
<sitem id="rq144-abandoned">Deletions to RQ-144 proposal agreed on by WG 
during ftf meetings of 21-23 18 August.</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").
(2006-07-26: N.B. the opt.144 changes reflect the proposition that
what is in the PSVI is always / must be exposed by a conforming
validator.  The WG seems to have moved firmly to the opposing
view, that all PSVI properties are always present, and an 
implementation does or doesn't expose them.  As a result, the 
opt.144 changes look like an utter disaster.  Do NOT try turning
them on!)</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-all">Introduce simple weakened wildcards, resolving
Bugzilla 3519.  This proved to require more work than had been
expected, because the existing UPA appears not to be an
effective concept.  The group "ww-all" is used as an umbrella
for several smaller changes: ww-LM, ww-p, and ww.</sitem>
 <sitem id="ww-LM">Auxiliary proposal, preparatory setup for ww / 3519.
Introduces the notion that particles denote languages and
introduces the notation L(P) for the language accepted by
particle P.</sitem>
 <sitem id="ww-p">Auxiliary proposal, preparatory setup for ww / 3519.
Introduces the notions of path and competition between particles.
</sitem> 
<sitem id="ww">Introduce simple weakened wildcards.  This group
has the core change, making UPA allow competition between element
declarations and weakened wildcards.
IN ITS CURRENT STATE, IT DEPENDS CRUCIALLY ON GROUPS "ww-LM" AND "ww-p".</sitem>
<sitem id="ww-x">Speculative / experimental text for ww / 3519.
(At the moment, it's used for text which hasn't yet been classified
as ww-LM, ww-p, or ww.)
</sitem>
<sitem id="ww-geniza">Old text for ww / 3519 which I'm afraid to
throw away lest i need it.  (Reduce this to rubble when ww is
accepted or finished.)</sitem>
<sitem id="ww-1">Changes asked for by the WG at the ftf of 2006-08.</sitem>
<sitem id="rq146">Runtime EDC</sitem>
<sitem id="rq146-1">Runtime EDC revision</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.
This was finally incorporated into dg-approved in 2006-03.
</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>
<sitem id="all-2506-1">Partial resolution of bug 2506, relax constraints
on 'all' groups.  Drafted by SG, transcribed here by MSM.</sitem>
<sitem id="all-2506-x">Another proposal for bug 2506:  allow extension of
'all' groups to be 'all' groups.  Drafted by SG as part of his proposal,
but separated here because it's lacks phase-1 consensus.</sitem>
<sitem id="ep17">Editorial proposal to tag all component references 
not currently tagged. 

   attribute (declaration).
   element (declaration).
   complex type (definition).
   attribute use.
   attribute group (definition).
   model group.
   named model group.
 x particle done 2006-07-24.
   wildcards
   identity-constraint (definition)
   notation (declaration)
   annotation
   simple type definition 

</sitem>
<sitem id="ed18-errors">An editorial proposal to remove the one
place where we deviate violently from the rule that behavior of
conforming processors in the face of errors is out of scope.
</sitem>
<sitem id="vm3-0">Preliminary changes for versioning mechanism v-m3:
fallback to declared type.  Editorial changes, no substantive changes
here.</sitem>
<sitem id="vm3-1">Proposal for versioning mechanism v-m3: fallback to
declared type.  Will probalby rely on vm3-0.</sitem>
<sitem id="b2861cc-1">Bug 2861, co-constraints as check clauses,
part / level 1.</sitem>
<sitem id="b2861cc-1a">MSM's modifications to SG's 2861 proposal;
mostly kept separate to make them easier to roll back, but
some changes in ednotes etc. not separated.</sitem>
<sitem id="b2861cc-1b">Chagned made based on WG's feedback from 08/2006
f2f meetings.</sitem>
<sitem id="b2861cc-1g">To support assertions in named (attribute)
groups. Rejected at 08/2006 f2f meeting.</sitem>
<sitem id="b2861cc-1m">To support mixed content in assert/report
elements.</sitem>
<sitem id="b2861cc-1p">To carry assertions in particles.
Rejected at 08/2006 f2f meeting.</sitem>
<sitem id="b2861cc-2">Co-constraints level 2 (use them ourselves).
Not currently present except in a reminder note.</sitem>
<sitem id="b2867-1">Negative wildcards, part 1.</sitem>
<sitem id="b2867-1a">Changes made based on WG's feedback from 08/2006
f2f meeting.</sitem>
<sitem id="b2867-2">Negative wildcards, part 2.</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>
   <!--* <ednote diff="add" dg="b2861cc-1">
     <edtext>The addition of co-constraints to the language appears to exhibit a shift in
      the Working Group's goals for XML Schema 1.1.  The Working Group should check
      to make sure the changes to this description of those goals are acceptable.
     </edtext>
    </ednote> *-->

<p>The Working Group has <!--*
* material suppressed here by diff group b2861cc-1 *
*--><phrase dg="b2861cc-1">three</phrase> 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>

<item dg="b2861cc-1"><p>Provision of support for co-occurrence constraints, that is 
constraints which make the presence of an attribute or element,
or the values allowable for it, depend on the value or presence
of other attributes or elements.</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 dg="b2861cc-1"><p>Support for co-occurrence
constraints (which will certainly involve additions to the XML
transfer syntax, which will not be understood by 1.0
processors)</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 <phrase dg="b2861cc-1b">existing</phrase>
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<phrase dg="b2861cc-1b">,
co-occurrence constraints</phrase> 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 behavio<!--*
* material suppressed here by diff group b2861cc-1 *
*-->r 
    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<phrase dg="b2861cc-1">
    or co-occurrence constraints</phrase>,
    and when they are conformant to version 1.0 (or are made
    conformant by the removal of versioning information), should have
    the same validation behavio<!--*
* material suppressed here by diff group b2861cc-1 *
*-->r 
    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"/>, <phrase dg="b2861cc-1"><bibref ref="bib-xpath2"/>, </phrase>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 <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">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 dg="rq144nv">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 <term>PSVI</term></termdef>. <phrase dg="rq144nv">Conforming processors <rfc2119>may</rfc2119> provide access to <!--*
* material suppressed here by diff group rq144wg *
*--><phrase dg="rq144wg">some or all</phrase> of the PSVI<phrase dg="rq144fl">, as described in
<specref ref="var_psvi"/></phrase>. The mechanisms by which processors provide
<phrase dg="rq144wg">such</phrase> 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
<!--*
* material suppressed here by diff group b2861cc-1 *
*--><phrase dg="b2861cc-1">14</phrase> 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,
 <!--*
* material suppressed here by diff group b2861cc-1 *
*-->are as follows:</p>
<ulist>
<item><p>Attribute group definitions</p></item>
<item><p>Identity-constraint definitions</p></item>
<item><p><phrase dg="b2861cc-1">Assertions</phrase></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' behavio<!--*
* material suppressed here by diff group b2861cc-1 *
*-->r 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 dg="ww-1">Each model group denotes a set of sequences 
of element information items.  Regarding
that set of sequences as a language, the set of sequences recognized
by a group <var>G</var> may be written <var>L</var>(<var>G</var>).
<termdef id="key-accept-g" term="accept">A model group <var>G</var>is said to
<term>accept</term> or <term>recognize</term> the members of
<var>L</var>(<var>G</var>).</termdef>
</p>

     <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>. <phrase dg="ww-LM"><termdef id="key-basic-term" term="basic term">A <term>basic term</term> is an
<compref ref="ed"/> or a <compref ref="w"/>.</termdef> <termdef id="key-basic-particle" term="basic particle">A <term>basic
particle</term> is a <compref ref="p"/> whose <propref comp="p" prop="term"/> is a <termref def="key-basic-term"/>.</termdef></phrase></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 dg="ww-LM">Each content model, indeed each particle,
denotes a set of sequences of element information items.  Regarding
that set of sequences as a language, the set of sequences recognized
by a particle <var>P</var> may be written <var>L</var>(<var>P</var>).
<termdef id="key-accept" term="accept">A particle <var>P</var> is said to
<term>accept</term> or <term>recognize</term> the members of
<var>L</var>(<var>P</var>).</termdef>
</p>
<note dg="ww-LM">
<p>The language accepted by a content model plays a role in determining
whether an element information item is locally valid or not: if the
appropriate content model does not accept the sequence of elements
among its children, then the element information item is not locally
valid.<phrase dg="ww">  (Some additional constraints must also be met: not every
sequence in <var>L</var>(<var>P</var>) is locally valid against <var>P</var>.  See
<specref ref="group-validation"/>.)</phrase></p>
<p>
<!--* 
The local validity of an element is determined in part by whether
its content model accepts the sequence of element information items
among its children.  *-->
No assumption is made, in the definition above,
that the items in the sequence are themselves valid; only the
<xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname">expanded names</xspecref> of the items in the sequence are relevant in
determining whether the sequence is accepted by a particle.
Their validity does affect whether their parent is (recursively)
valid as well as locally valid.</p>
</note>
<p dg="ww-p">If a sequence <var>S</var> is a member of <var>L</var>(<var>P</var>), then it
is necessarily possible to trace a path through the 
<termref def="key-basic-particle">basic particles</termref>
within <var>P</var>, with each item within <var>S</var> corresponding to a matching particle
within <var>P</var>. The sequence of particles within <var>P</var> corresponding to <var>S</var>
is called the <termref def="key-path"/> of <var>S</var> in <var>P</var>.</p>
<note dg="ww-p"><p>This <termref def="key-path"/> has nothing to do
with <bibref ref="bib-xpath"/> or XPath expressions. When there
may otherwise be danger of confusion, the <termref def="key-path"/> described here
may be referred to as the <termref def="key-path">match path</termref> of <var>S</var> in <var>P</var>.
</p></note>

<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<phrase dg="b2867-1">s</phrase><!--*
* material suppressed here by diff group b2867-1a *
*-->
 <!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1">and optionally on</phrase> their local names.</p>
     <p>
For detailed information on wildcards, see <specref ref="Wildcards"/>.</p>
</div4>
</div3>

     <div3 id="Constraint_Summary">
<head><!--*
* material suppressed here by diff group b2861cc-1 *
*--><phrase dg="b2861cc-1">Constraint</phrase> Components</head>
      <div4 id="Identity-constraint_Definition">
<head><phrase dg="b2861cc-1">Identity-constraint Definition</phrase></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>
<note dg="b2861cc-1b">
 <p>
  Identity constraints currently uses XPath 1.0. This may change in future working drafts
  of this specification to use XPath 2.0. Such change will not affect evaluation of
  identity constraints, given the XPath subset it uses.
 </p>
</note>
       </div4>

     <div4 id="Assertion" dg="b2861cc-1">
      <head>Assertion</head>

<p>An assertion is a predicate associated with a type,
which is checked for each instance of the type.  Depending
on their formulation, assertions are either required to be
true of the instance, or required to be false.  If an 
element or attribute information item fails to satisfy an
assertion associated with a given type, then that information
item is not locally <phrase dg="b2861cc-1b"><termref def="key-vn">valid</termref></phrase>
with respect to that type.</p>

      <p>For detailed information on Assertions, see <specref ref="cAssertions"/>.</p>

<note dg="b2861cc-1b">
 <p>
  Assertions are currently only allowed to be specified in complex types.
  It may be deemed useful to also include assertions in named model group
  definitions and/or attribute groups, or even simple types, if proved
  useful.
 </p>
</note>
      
     </div4>
    </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 dg="rq144cf">
<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 <!--*
* material suppressed here by diff group rq144cf *
*--><phrase dg="rq144cf">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 dg="rq144cf"><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 <!--*
* material suppressed here by diff group rq144cf *
*--><phrase dg="rq144cf"><termref def="key-interchange"/></phrase>.</p>
</note>
<p><termdef id="key-fullyConforming" term="Web-aware"><!--*
* material suppressed here by diff group rq144cf *
*--><phrase dg="rq144cf"><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"><!--*
* material suppressed here by diff group rq144cf *
*--><phrase dg="rq144cf">schema-document aware</phrase></termref>, but
which additionally <rfc2119>must</rfc2119> be capable of accessing schema documents
from the World Wide Web <!--*
* material suppressed here by diff group rq144cf *
*--><phrase dg="rq144cf">as described in</phrase>
<specref ref="web-representation"/> and <specref ref="schema-loc"/>.
</termdef>.
</p>
<note diff="nsq-add" dg="rq144wgno">
<p>In version 1.0 of this specification the class of 
<termref def="key-interchange"/> processors was termed
<quote>conformant to the XML Representation of Schemas</quote>.
Similarly, the class of <termref def="key-fullyConforming"/>
processors was called <quote>fully conforming</quote>.</p>
</note>
<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/1999/REC-xml-names-19990114/#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 <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">not defined as optional
is 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>
          <item id="c-ad" dg="rq144si">
           <p>A declaration was stipulated by the processor (see <specref ref="validation_outcome"/>).</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
<!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">has</phrase> 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 *
*--> <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">the
properties</phrase>:</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>

<propdef id="a-type_definition" name="type definition" dg="rq144nv">An <termref def="key-iso">item isomorphic</termref> to
the relevant attribute declaration's <propref comp="ad" prop="type definition"/> component.</propdef>

<propdef id="a-type_definition_type" name="type definition type" dg="rq144nv"> <pt>simple</pt>.</propdef>

<propdef id="a-type_definition_namespace" name="type definition namespace" dg="rq144nv">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" dg="rq144nv"><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" dg="rq144nv">The <propref comp="std" prop="name"/> of the
<termref def="td">type definition</termref>, if <phrase diff="nsq-del" dg="rq144wgno">it</phrase><phrase diff="nsq-add" dg="rq144wgno">the
<propref comp="std" prop="name"/></phrase> is not <termref def="key-null">absent</termref>.  If <phrase diff="nsq-del" dg="rq144wgno">it</phrase><phrase diff="nsq-add" dg="rq144wgno">the
<termref def="td">type definition</termref>'s
<propref comp="std" prop="name"/> property</phrase> is <termref def="key-null">absent</termref>, <phrase diff="nsq-add" dg="rq144wgno">then</phrase>
schema processors <rfc2119>may</rfc2119>, but need
not, provide a value which uniquely identifies this
type definition among those with the same target namespace.</propdef>

     </proplist>

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

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

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

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

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

<note dg="rq144nv">
<p>The
<xpropref role="psviAnon">type definition type</xpropref>,
<xpropref role="psviAnon">type definition namespace</xpropref>,
<xpropref role="psviAnon">type definition name</xpropref>, and
<xpropref role="psviAnon">type definition anonymous</xpropref> properties
are redundant with the 
<xpropref role="psviAnon">type definition</xpropref> property; 
they are defined for the convenience of implementations
which wish to expose those specific properties 
but not the entire type definition.
</p>
</note>


<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 *
*--> <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">four</phrase> 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" id="a-member_type_definition" dg="rq144nv">
an <termref def="key-iso">item isomorphic</termref> to 
the <termref def="a-key-amt"/>.
<!--* that <xtermref
href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of its
<xtermref href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive
membership</xtermref> which actually <termref
def="key-vn">validated</termref> the attribute item's <xpropref
href="http://www.w3.org/TR/xml-infoset/#infoitem.attribute">normalized
value</xpropref>. *--></propdef>

<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 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 ref="std"/> or
a <compref 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"/>, <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"/> 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"/>, 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"/> 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
<!--*
* material suppressed here by diff group rq144fb *
*--><phrase dg="rq144fb"><rfc2119>must</rfc2119></phrase> 
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>

<ednote role="pf" dg="rq144wg2">
<edtext>
In version 1.0 of this specification, the fallback to lax
validation described in the preceding paragraph was optional,
not required.
The XML Schema Working Group solicits input from implementors and
users of this specification as to whether this change is 
desirable and acceptable.
</edtext>
</ednote>
     
<!--* <ednote diff="add" dg="rq144fb">
<edtext>When bug <loc
href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2822">2822</loc>
was discussed by the Working Group in March 2005, there was a
preponderance of opinion in favor of changing the <quote>&may;</quote>
in the definition of lax validation into a <quote>&must;</quote>.
There was also some skepticism.  In discussing this phase-2 proposal,
the WG needs to address this question distinctly.  (Note also that
appendix <specref ref="var_fallback"/> should be dropped if the
change marked here is adopted, and retained only if this change
is dropped.)</edtext>
</ednote> *-->
     <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 id="edisc">
     <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 <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">has the
properties</phrase>:</p>
     <!--*
* material suppressed here by diff group rq144nv *
*-->
       <!--*
* material suppressed here by diff group rq144nv *
*-->

     <!--*
* material suppressed here by diff group rq144nv *
*-->
     <proplist role="psvi" item="element" dg="rq144nv">
      <propdef id="e-declaration" name="element declaration">
       an <termref def="key-iso">item isomorphic</termref> to the declaration component itself
      </propdef>
      <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 *
*--> <!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">the
properties</phrase>:</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>
<propdef id="e-type_definition" name="type definition" dg="rq144nv">An <termref def="key-iso">item isomorphic</termref> to the
<termref def="td">type definition</termref> component
itself.</propdef>
<propdef id="e-type_definition_type" name="type definition type" dg="rq144nv">
<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" dg="rq144nv">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" dg="rq144nv"><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" dg="rq144nv">The <xpropref role="anon">name</xpropref> of the
<termref def="td">type definition</termref>, if <phrase diff="nsq-del" dg="rq144wgno">it</phrase><phrase diff="nsq-add" dg="rq144wgno">the
<propref comp="std" prop="name"/></phrase> is not <termref def="key-null">absent</termref>.  If <phrase diff="nsq-del" dg="rq144wgno">it</phrase><phrase diff="nsq-add" dg="rq144wgno">the
<termref def="td">type definition</termref>'s
<propref comp="std" prop="name"/> property</phrase> is <termref def="key-null">absent</termref>, schema processors <rfc2119>may</rfc2119>, but need
not, provide a value unique to the definition.</propdef>

</proplist>

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

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

<note dg="rq144nv">
<p>The
<xpropref role="psviAnon">type definition type</xpropref>,
<xpropref role="psviAnon">type definition namespace</xpropref>,
<xpropref role="psviAnon">type definition name</xpropref>, and
<xpropref role="psviAnon">type definition anonymous</xpropref> properties
are redundant with the 
<xpropref role="psviAnon">type definition</xpropref> property; 
they are defined for the convenience of implementations
which wish to expose those specific properties 
but not the entire type definition.</p>
</note>

<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
<!--*
* material suppressed here by diff group rq144nv *
*--><phrase dg="rq144nv">four</phrase> additional properties:</p>


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

    <proplist role="psvi" item="element">
<propdef name="member type definition" id="e-member_type_definition" dg="rq144nv">An <termref def="key-iso">item
isomorphic</termref> to the <termref def="key-amt"/>
<!--* that <xtermref
href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-basicmember">basic member</xtermref> of its
<xtermref href="http://www.w3.org/TR/2006/WD-xmlschema11-2-20060217/datatypes.html#dt-transitivemembership">transitive
membership</xtermref> which actually <termref
def="key-vn">validated</termref> the element item's
&i-value;.*-->
</propdef>

     <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>

<p dg="ww-p"><termdef id="key-validly-sub" term="validly substitutable">One
element declaration is <term>validly substitutable</term> for another
if together they satisfy constraint <specref ref="cos-equiv-derived-ok-rec"/>.</termdef> </p>

  <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 dg="b2861cc-1"><p>Constraining <!--*
* material suppressed here by diff group b2861cc-1a *
*-->
elements and attributes <phrase dg="b2861cc-1a">to exist,
not to exist, or to have specified values,</phrase> with <specref ref="Assertion"/>s.</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"/>.
<!--*
* material suppressed here by diff group b2867-1 *
*-->
<!--*
* material suppressed here by diff group b2867-1 *
*-->
See <specref ref="cvc-complex-type"/><phrase dg="b2867-1">, <specref ref="Wildcard_details"/></phrase> and
<!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1"><specref ref="cvc-wildcard-name"/></phrase> 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 dg="b2861cc-1"><propref comp="ctd" prop="assertions"/> constrain 
<!--*
* material suppressed here by diff group b2861cc-1a *
*--> 
elements and attributes
<phrase dg="b2861cc-1a">to exist, not to exist, or to 
have specified values</phrase>.
Though specified as a sequence, the order
among the assertions is not significant during assessment.
See <specref ref="cAssertions"/>.</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>

<!--* <ednote diff="add" dg="b2867-1">
 <edtext>How to make <code>notNamespace</code> on <code>&lt;anyAttribute></code> show
  "list of (anyURI | (##targetNamespace | ##local))"?</edtext>
</ednote> *-->
<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="assertions" dg="b2861cc-1">
 A sequence whose members are <compref name="Assertion" ref="as"/>s drawn from the following
 sources, in order:
 <olist>
  <item>
   <p><!--*
* material suppressed here by diff group b2861cc-1a *
*--><phrase dg="b2861cc-1a">The <propref comp="ctd" prop="assertions"/>
    of the <propref comp="ctd" prop="base type definition"/>.</phrase></p>
  </item>
  <!--*
* material suppressed here by diff group b2861cc-1g *
*-->
  <!--*
* material suppressed here by diff group b2861cc-1g *
*-->
  <item>
   <p><compref name="Assertion" ref="as"/>s corresponding to all the <eltref ref="assert"/> and <eltref ref="report"/>
    element information items among the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">children</xpropref>, if any, in order.
    <!--*
* material suppressed here by diff group b2861cc-1g *
*--></p>
  </item>
 </olist>
 </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 <!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1">its</phrase> <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>
  <!--*
* material suppressed here by diff group all-2506-x *
*-->
 <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" dg="all-2506-x">
 <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>
<!--*
* material suppressed here by diff group all-2506-x *
*-->
</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"><phrase dg="all-2506-x">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>.</phrase><!--*
* material suppressed here by diff group all-2506-x *
*--></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><phrase dg="all-2506-1">
or <pt>simple</pt></phrase></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 dg="all-2506-x">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>
<!--*
* material suppressed here by diff group all-2506-x *
*-->
</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 dg="b2861cc-1">
 <p>If the <propref comp="ctd" prop="base type definition"/> is a complex type definition,
  then the <propref comp="ctd" prop="assertions"/> always contain members of the
 <propref comp="ctd" prop="assertions"/> of the <propref comp="ctd" prop="base type definition"/>,
  no matter which alternatives are chosen in the XML representation,
  <eltref ref="simpleContent"/> or <eltref ref="complexContent"/>,
  <eltref ref="restriction" inside="simpleContent"/> or <eltref ref="extension" inside="simpleContent"/>.
 </p>
</note>
<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>

 <!--*
* material suppressed here by diff group b2867-2 *
*-->
</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>
    <!--*
* material suppressed here by diff group b2867-1 *
*-->
   </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 *-->
       <!--*
* material suppressed here by diff group rq17p *
*-->
       <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>
       <item dg="b2861cc-1">
        <p>The element information item is <termref def="key-vn">valid</termref>
         with respect to each of the <propref comp="ctd" prop="assertions"/> as per <specref ref="cvc-assertion"/>.</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>
          <item dg="b2861cc-1">
           <p>The <propref comp="ctd" prop="assertions"/> of
            the <propref comp="ctd" prop="base type definition"/> is a prefix of
            the <propref comp="ctd" prop="assertions"/> of the complex type definition itself.</p>
          </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 <phrase dg="b2867-1">(</phrase><propref comp="ad" prop="target namespace"/><phrase dg="b2867-1">, <propref comp="ad" prop="name"/>) pair</phrase> 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 <!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1"><specref ref="cvc-wildcard-name"/></phrase>.</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><phrase dg="rq17p"> and the <propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> does not have <propref comp="ct" prop="variety"/> <pt>simple</pt>.</phrase></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>
<!--*
* material suppressed here by diff group rq17p *
*-->
 <item dg="rq17p">
  <p>The <propref comp="ctd" prop="content type"/> of the complex type definition itself
<termref def="pt-actual-restriction">restricts</termref> the <propref comp="ctd" prop="content type"/> of the <propref comp="ctd" prop="base type definition"/> as defined in <specref ref="cos-content-act-restrict"/>.</p>
 </item>
</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.  <!--*
* material suppressed here by diff group rq17p *
*-->
<phrase dg="rq17p">For purposes of checking this constraint, they
are treated as attempts to restrict the empty sequence.</phrase></p>
 <!--* <ednote diff="add" dg="rq17p">
  <edtext>As discussed in the past, this approach allows a very wide range of
unsatisfiable content models to 'restrict' an <pt>empty</pt> model; we don't
<emph>have</emph> to do this.  WG feedback solicited.</edtext>
 </ednote> *-->
</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>
 <item dg="b2861cc-1">
  <p>The <propref comp="ctd" prop="assertions"/> of
   the <propref comp="ctd" prop="base type definition"/> is a prefix of
   the <propref comp="ctd" prop="assertions"/> of the complex type definition itself.</p>
 </item>
</olist>
<!--*
* material suppressed here by diff group rq17p *
*-->
<termdef id="cd-ct-restriction" term="valid restriction" dg="rq17p">
A complex type definition with <propref comp="ctd" prop="derivation method"/> 
<pt>restriction</pt> is a <term>valid restriction</term> of its
<propref comp="ctd" prop="base type definition"/> if and only if the
constraint <specref ref="derivation-ok-restriction"/> is satisfied</termdef>.
</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>
  
  <constraintnote id="cos-content-act-restrict" type="cos" dg="rq17p">
   <head>Content type restricts</head>
   <note>
    <p><specref ref="subsumptionCheckP"/> provides guidance to
implementors on how to implement this constraint.</p>
   </note>
   <p><termdef id="pt-actual-restriction" term="restricts">A
<compref ref="ct"/> <local>RCT</local> (for <quote>restriction</quote>)
<term>restricts</term> another <compref ref="ct"/> <local>BCT</local> (for
<quote>base</quote>) if and only if</termdef>
    <olist role="case">
     <item>
      <p role="if"><local>BCT</local>'s <propref comp="ct" prop="variety"/> is <pt>empty</pt></p>
      <p role="then">either there is no sequence of element information items which is <termref def="loc-locallyValid-seq">locally valid</termref> 
with respect to <local>RCT</local>'s <propref comp="ct" prop="particle"/>, or only the empty sequence is.</p>
     </item>
     <item>
      <p role="otherwise">Using the name <local>R</local> for
<local>RCT</local>'s <propref comp="ct" prop="particle"/> and <local>B</local>
for <local>BCT</local>'s <propref comp="ct" prop="particle"/>,
       <olist role="andtest">
     <item>
      <p>Every sequence of element information items which is 
<termref def="loc-locallyValid-seq">locally valid</termref> 
with respect to <local>R</local> is also <termref def="loc-locallyValid-seq">locally valid</termref> 
with respect to <local>B</local>.</p>
     </item>
     <item>
      <p>For all sequences of element information items <local>ES</local> which are 
<termref def="loc-locallyValid-seq">locally valid</termref> 
with respect to <local>R</local>, for all
        elements <local>E</local> in <local>ES</local>,
       <!--*
* material suppressed here by diff group rq146-1 *
*-->.
            <olist role="ortest" dg="rq146-1">
             <item><p><termref def="loc-TestP">Test[ES,R]</termref> is not defined for <local>E</local>.</p></item>
             <item><olist role="Andtest">
<item><p><termref def="loc-TestP">Test[ES,B]</termref> and <termref def="loc-TestP">Test[ES,R]</termref> are both defined for <local>E</local></p></item>
             <item><p><termref def="loc-TestP">Test[ES,B]</termref>(<local>E</local>) <termref def="loc-testSubP">subsumes</termref> <termref def="loc-TestP">Test[ES,R]</termref>(<local>E</local>).</p></item>
</olist></item>             
            </olist></p>
     </item>
    </olist></p>
     </item>
    </olist>    
   </p>
   <p><termdef role="local" id="loc-locallyValid-seq" term="locally valid">A
sequence of 
element information items is <term>locally valid</term> with respect 
to a <compref ref="p"/> if and only if it satisfies
<specref ref="cvc-particle"/> with respect to that <compref ref="p"/></termdef>.</p>

   <p dg="rq146">When a sequence of an element information items <local>ES</local> is 
<termref def="loc-locallyValid">locally valid</termref>
   with respect to a <compref ref="p"/> <local>P</local> 
there is a (partial) functional mapping from
the element information items in the sequence to tests, where tests
are either <compref ref="ed"/>s, <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-TestP" term="Test">Call this mapping <term>Test[ES,P]</term>.</termdef></p>
   <p><termdef role="local" id="loc-testSubP" 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 <phrase dg="rq146-1"><pt>empty</pt></phrase><!--*
* material suppressed here by diff group rq146-1 *
*-->.</p>
     </item>
     <item>
      <p><local>G</local> is <phrase dg="rq146-1"><termref def="key-urType">the ur-type</termref></phrase><!--*
* material suppressed here by diff group rq146-1 *
*-->
and <local>S</local> is not <phrase dg="rq146-1"><pt>empty</pt></phrase><!--*
* material suppressed here by diff group rq146-1 *
*-->.</p>
     </item>
     <!--*
* material suppressed here by diff group rq146-1 *
*-->
     <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>
  </constraintnote>

<!--* <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> *-->

<!--* <ednote diff="add" dg="rq146-1">
<edtext>For technical reasons, the following inquiry is tagged
as a Note instead of an Editorial Note.  But it is not intended
that this Note should be part of the final text of the spec.</edtext>
</ednote> 
  <note diff="add" dg="rq146-1">
   <p>The above rule makes the following an invalid derivation.
    This example was allowed by 1.0 spec. Is this intended?
<eg xml:space="preserve">&lt;xs:complexType name="base">
 &lt;xs:sequence>
  &lt;any processContents="strict"/>
 &lt;/xs:sequence>
&lt;/xs:complexType>

&lt;xs:complexType name="derived">
 &lt;xs:complexContent>
  &lt;xs:restriction base="base">
   &lt;xs:sequence>
    &lt;element name="e" type="xs:int"/>
   &lt;/xs:sequence>
  &lt;/xs:restriction>
 &lt;/xs:complexContent>
&lt;/xs:complexType></eg>
    The reason it's ruled out is because derived allows <code>&lt;e>123&lt;/e></code>
    while the base doesn't. But if we change the type of the local "e" to
    an abstract type, then all valid instances of derived are also valid instances
    of base, but we still mark it as an invalid derivation. Again, intended?
</p>
<p>[End of pseudo-note.]</p>
</note>
*-->
  <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>

  <!--*
* material suppressed here by diff group b2867-2 *
*-->

<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"><!--*
* material suppressed here by diff group b2867-1 *
*-->
               <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
               <pvlist dg="b2867-1">
                <pvpair comp="nc" prop="variety"><pt>any</pt></pvpair>        
                <pvpair comp="nc" prop="namespaces">The empty set</pvpair>
                <pvpair comp="nc" prop="disallowed names">The empty set</pvpair>
               </pvlist>
              </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"><!--*
* material suppressed here by diff group b2867-1 *
*-->
               <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
               <pvlist dg="b2867-1">
                <pvpair comp="nc" prop="variety"><pt>any</pt></pvpair>        
                <pvpair comp="nc" prop="namespaces">The empty set</pvpair>
                <pvpair comp="nc" prop="disallowed names">The empty set</pvpair>
               </pvlist>
              </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="assertions" dg="b2861cc-1">The empty sequence</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"><!--*
* material suppressed here by diff group b2867-1 *
*-->
        <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
        <pvlist dg="b2867-1">
         <pvpair comp="nc" prop="variety"><pt>any</pt></pvpair>        
         <pvpair comp="nc" prop="namespaces">The empty set</pvpair>
         <pvpair comp="nc" prop="disallowed names">The empty set</pvpair>
        </pvlist>
       </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"><!--*
* material suppressed here by diff group b2867-1 *
*-->
               <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
               <pvlist dg="b2867-1">
                <pvpair comp="nc" prop="variety"><pt>any</pt></pvpair>        
                <pvpair comp="nc" prop="namespaces">The empty set</pvpair>
                <pvpair comp="nc" prop="disallowed names">The empty set</pvpair>
               </pvlist>
              </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="assertions" dg="b2861cc-1">The empty sequence</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"><!--*
* material suppressed here by diff group b2867-1 *
*-->
        <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
        <pvlist dg="b2867-1">
         <pvpair comp="nc" prop="variety"><pt>any</pt></pvpair>        
         <pvpair comp="nc" prop="namespaces">The empty set</pvpair>
         <pvpair comp="nc" prop="disallowed names">The empty set</pvpair>
        </pvlist>
       </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 <!--*
* material suppressed here by diff group b2861cc-1g *
*-->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"/><phrase dg="b2861cc-1g"> and</phrase><!--*
* material suppressed here by diff group b2861cc-1g *
*--> <propref comp="ctd" prop="attribute wildcard"/>
<!--*
* material suppressed here by diff group b2861cc-1g *
*-->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>
<!--*
* material suppressed here by diff group b2861cc-1g *
*-->
     <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.
 <phrase dg="b2861cc-1g">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. </phrase>
<!--* uh, why bother to delete that? *-->
 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>
 <!--*
* material suppressed here by diff group b2861cc-1g *
*-->
<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>
<!--*
* material suppressed here by diff group b2867-1 *
*-->
</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"/><!--*
* material suppressed here by diff group b2861cc-1g *
*-->.
By reference to the name, the entire model group can be incorporated by reference into
 a <propref comp="p" prop="term"/><!--*
* material suppressed here by diff group b2861cc-1g *
*-->.</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<!--*
* material suppressed here by diff group b2861cc-1g *
*-->.</p>
<p><phrase dg="b2861cc-1g"><propref comp="mgd" prop="model group"/> is the <compref ref="mg"/> for which the model group definition provides a name.</phrase></p>
<!--*
* material suppressed here by diff group b2861cc-1g *
*-->
<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.
<phrase dg="b2861cc-1g">It provides for
naming a model group for use by reference in the XML representation of
complex type definitions and model groups. </phrase>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>
<!--*
* material suppressed here by diff group b2861cc-1g *
*-->
<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.<phrase dg="ww-1">
<termdef id="key-contain-dgp" term="directly contains">A model group 
<term>directly contains</term> the particles in the value of its
<propref comp="mg" prop="particles"/> property.</termdef>
<termdef id="key-contain-igx" term="indirectly contains">A model group 
<term>indirectly contains</term> the particles, groups, wildcards, and
element declarations which are <termref def="key-contain-xpx">contained</termref> 
by the particles it
<termref def="key-contain-dgp"/>.</termdef>
<termdef id="key-contain-xgx" term="contains">A model group 
<term>contains</term> the components which it either
<termref def="key-contain-dgp"/>
or <termref def="key-contain-igx"/>.</termdef></phrase>
</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>

<!--*
* material suppressed here by diff group b2861cc-1p *
*-->

<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>

<p dg="ww-LM">In order to define the validation rules for model
groups clearly, it will be useful to define some basic terminology;
this is done in the next two sections, before the validation rules
themselves are formulated.</p>

<div4 id="group-recognition" dg="ww-LM">
<head>Language Recognition by Groups</head>

<!--* <ednote>
<edtext>Need crisper section title.</edtext>
</ednote> *-->

<p dg="ww-LM">Each model group <var>M</var> denotes a language
<var>L</var>(<var>M</var>), whose members are the sequences of element information items
<termref def="key-accept">accepted</termref> by <var>M</var>.</p>

<p dg="ww">Within <var>L</var>(<var>M</var>) a smaller language <var>V</var>(<var>M</var>) can be
identified, which is of particular importance for schema-validity
assessment.  The difference between the two languages is that
<var>V</var>(<var>M</var>) enforces some constraints which are ignored in the definition
of <var>L</var>(<var>M</var>).
Informally <var>L</var>(<var>M</var>) is the set of sequences which are accepted by a model
group if no account is taken of the schema component
constraint <specref ref="cos-nonambig"/> or the related provisions 
in the validation rules which specify how to choose a unique <termref def="key-path"/> 
in a non-deterministic content model. By contrast, <var>V</var>(<var>M</var>) takes
account of those constraints and includes only the sequences which are
<termref def="key-lvip"/> against <var>M</var>.  For all model groups <var>M</var>, <var>V</var>(<var>M</var>) is a
subset of <var>L</var>(<var>M</var>).  <var>L</var>(<var>M</var>) and related concepts are described in this
section; <var>V</var>(<var>M</var>) is described in the next section, <specref ref="group-validation"/>.
</p>

<p dg="ww-p">
<termdef id="key-path" term="path">When a sequence <var>S</var> of element information
items is checked against a model group <var>M</var>, the sequence of 
<!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1"><termref def="key-basic-particle">basic particles</termref></phrase> 
which the items of <var>S</var> match, in order, is a
<term>path</term> of <var>S</var> in <var>M</var>.  For a given <var>S</var> and <var>P</var>, the
path of <var>S</var> in <var>P</var> is not necessarily unique.
Detailed rules for the matching, and thus for the construction of
paths, are given in <specref ref="group-recognition"/> and <specref ref="particle-validation"/>.
</termdef>
Not every sequence has a path in every content model<!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">, but every
sequence accepted by the content model does have a path.
<termdef id="key-complete-path" term="complete path">For
a content model <var>M</var> and a sequence <var>S</var> in <var>L</var>(<var>M</var>), the path
of <var>S</var> in <var>M</var> is a <term>complete path</term>; prefixes of
complete paths which are themselves not complete paths
are <term>incomplete paths</term>.</termdef></phrase>  
<!--* every sequence accepted by the content model, and every prefix
of such a sequence, has a path, as do some other sequences.   *-->
For example, in the content model </p>
<eg xml:space="preserve">   &lt;xsd:sequence&gt;
    &lt;xsd:element name="a"/&gt;
    &lt;xsd:element name="b"/&gt;
    &lt;xsd:element name="c"/&gt;
   &lt;/xsd:sequence&gt;</eg>
<p>the sequences (<code>&lt;a/&gt;&lt;b/&gt;&lt;c/&gt;</code>)
and (<code>&lt;a/&gt;&lt;b/&gt;</code>) have <termref def="key-path">paths</termref><phrase dg="ww-1">
(the first a <termref def="key-complete-path"/> and the second
an <termref def="key-complete-path">incomplete path</termref>)</phrase>,
but the sequences (<code>&lt;a/&gt;&lt;b/&gt;&lt;c/&gt;&lt;d/&gt;</code>) and
(<code>&lt;a/&gt;&lt;x/&gt;</code>) do not<phrase dg="ww-1"> 
have paths</phrase>.</p>
<note dg="ww-1">
<p>It is possible, but unusual, for a content model to
have some paths which are neither complete paths, nor
prefixes of complete paths.  For example, the content model
<eg xml:space="preserve">   &lt;xsd:sequence&gt;
    &lt;xsd:element name="a"/&gt;
    &lt;xsd:element name="b"/&gt;
    &lt;xsd:choice/&gt;
   &lt;/xsd:sequence&gt;</eg>
accepts no sequences because the empty <el>choice</el> recognizes
no input sequences.  But the sequences (<code>&lt;/a&gt;</code>)
and (<code>&lt;/a&gt;&lt;b/&gt;</code>) have paths in the content
model.</p>
</note>
<p dg="ww-LM">The definitions of <var>L</var>(<var>M</var>)<phrase dg="ww-p"> and <termref def="key-path">paths</termref> in <var>M</var></phrase>, when <var>M</var> is a <termref def="key-basic-term"/> or
a <termref def="key-basic-particle"/>, are <!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">given</phrase> in
<specref ref="particle-validation"/>.  The definitions for groups are
given below.
</p>

<!--* <ednote>
<edtext>Actually, the information about &V.M; has in this version
been added to this section, not to the next.  The editors need
to decide, before sending this proposal to the WG, whether (1) to
leave the material on &V.M; for different group types where it is,
and change the sentence in the preceding paragraph, or (2) to
create subsections for Sequences, Choices, and All-Groups in
the next section, analogous to those in this section 9but
talking about &V.M; instead of &L.M;.</edtext>
</ednote> *-->

<div5>
<head>Sequences</head>

<p dg="ww-LM">This section defines <var>L</var>(<var>M</var>)<phrase dg="ww">,</phrase><!--*
* material suppressed here by diff group ww *
*--> the set of
<termref def="key-path">paths</termref> in <var>M</var><phrase dg="ww">, and <var>V</var>(<var>M</var>)</phrase>, if <var>M</var>
is a sequence group.</p>

<p dg="ww-LM">If <var>M</var> is a <compref ref="mg"/>,
and the <propref comp="mg" prop="compositor"/> of <var>M</var> is <pt>sequence</pt>, 
and the <propref comp="mg" prop="particles"/> of <var>M</var> is the sequence <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ...,
<var>P</var><sub><phrase><var>n</var></phrase></sub>, then <var>L</var>(<var>M</var>) is the set of sequences <var>S</var> = <var>S</var><sub>1</sub> + <var>S</var><sub>2</sub> + ... +
<var>S</var><sub><phrase><var>n</var></phrase></sub> (taking <quote>+</quote> as the concatenation operator), where
<var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>P</var><sub><phrase><var>i</var></phrase></sub>) for 0 &lt; <var>i</var> ≤ <var>n</var>.
The sequence of sequences <var>S</var><sub>1</sub>, <var>S</var><sub>2</sub>, ..., <var>S</var><sub><phrase><var>n</var></phrase></sub> is a <termref def="key-partition"/> of
<var>S</var>.
Less formally, when <var>M</var> is a sequence of <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ... <var>P</var><sub><phrase><var>n</var></phrase></sub>, then
<var>L</var>(<var>M</var>) is the set of sequences formed by taking one sequence which is
accepted by <var>P</var><sub>1</sub>, then one accepted by <var>P</var><sub>2</sub>, and so on, up through
<var>P</var><sub><phrase><var>n</var></phrase></sub>, and then concatenating them together in order.</p>

<p dg="ww-LM"><termdef id="key-partition" term="partition">A
<term>partition</term> of a sequence is 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 dg="ww-p">When <var>M</var> is a sequence group
and <var>S</var> is a sequence of input items, the set of <termref def="key-path">paths</termref> of <var>S</var> 
in <var>M</var> is the set of all
paths <var>Q</var> = <var>Q</var><sub>1</sub> + <var>Q</var><sub>2</sub> + ... + <var>Q</var><sub><phrase><var>j</var></phrase></sub>, where<ulist>
<item>
<p><var>j</var> ≤ <var>n</var>, and</p>
</item>
<item>
<p><var>S</var> = <var>S</var><sub>1</sub> + <var>S</var><sub>2</sub> + ... + <var>S</var><sub><phrase><var>j</var></phrase></sub> (i.e. <var>S</var><sub>1</sub>, <var>S</var><sub>2</sub>, ..., <var>S</var><sub><phrase><var>j</var></phrase></sub> is
a <termref def="key-partition"/> of <var>S</var>), and</p>
</item>
<item>
<p><var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>P</var><sub><phrase><var>i</var></phrase></sub>) for 0 &lt; <var>i</var> &lt; <var>j</var>, and</p>
</item>
<item>
<p><var>Q</var><sub><phrase><var>i</var></phrase></sub> is a <termref def="key-path"/> of <var>S</var><sub><phrase><var>i</var></phrase></sub> in <var>P</var><sub><phrase><var>i</var></phrase></sub> for 0 &lt; <var>i</var> ≤ <var>j</var>.</p>
</item>
</ulist>
</p>

<note dg="ww-p">
<p>
By this definition, some sequences which do not satisfy the
entire content model nevertheless have <termref def="key-path">paths</termref> in a content model.
For example, given the content model <var>P</var>
</p>
<eg xml:space="preserve">   &lt;xsd:sequence&gt;
    &lt;xsd:element name="a"/&gt;
    &lt;xsd:element name="b"/&gt;
    &lt;xsd:element name="c"/&gt;
   &lt;/xsd:sequence&gt;</eg>

<p>and an input sequence <var>S</var></p>

<eg xml:space="preserve">&lt;a/&gt;&lt;b/&gt;</eg>
<p>where <var>n</var> = 3, <var>j</var> = 2, then 
<var>S</var><sub>1</sub> is (<code>&lt;a/&gt;</code>),
<var>S</var><sub>2</sub> is (<code>&lt;b/&gt;</code>),
and
<var>S</var> has a <termref def="key-path"/> in <var>P</var>, even though <var>S</var> is not in
<var>L</var>(<var>P</var>).  The <termref def="key-path"/> has two items, first the <compref ref="p"/>
for the <el>a</el> element, then the <compref ref="p"/> for the
<el>b</el> element.</p>
</note>

<p dg="ww">When <var>M</var> is a sequence group,
the set <var>V</var>(<var>M</var>) (the set of sequences 
<termref def="key-lvip"/> against <var>M</var>) is the set of sequences <var>S</var> which
are in <var>L</var>(<var>M</var>) and which have a <termref def="key-vpath"/> in <var>M</var>.
Informally, <var>V</var>(<var>M</var>) contains those sequences which are
accepted by <var>M</var> and for which no element information item
is ever <termref def="key-att-to"/> a <termref def="key-wp"/> if it can, in
context, instead be <termref def="key-att-to"/> an <termref def="key-ep"/>.
There will invariably be a <termref def="key-partition"/> of <var>S</var> whose
members are <termref def="key-lvip"/> against the sub-sequences
of <var>P</var>.
</p>
<note dg="ww">
<p>For sequences with more than one <termref def="key-path"/> in <var>M</var>,
the <termref def="key-att-to">attributions</termref> of
the <termref def="key-vpath"/> are used in validation and for determining
the contents of the <termref def="key-psvi">post-schema-validation infoset</termref>.  For example, if <var>M</var> is
<eg xml:space="preserve">
  &lt;xsd:sequence&gt;
   &lt;xsd:any minOccurs="0"/&gt;
   &lt;xsd:element name="a" minOccurs="0"/&gt;
  &lt;/xsd:sequence&gt;</eg>
then the sequence (<code>&lt;a/&gt;</code>) has two <termref def="key-path">paths</termref>
in <var>M</var>, one containing just the <termref def="key-wp"/> and the other
containing just the <termref def="key-ep"/>.  It is the latter
which is a <termref def="key-vpath"/> and which determines which 
<compref ref="p"/> the item in the input is <termref def="key-att-to"/>.
</p>
</note>
<note dg="ww">
<p>There are model groups for which some members of
<var>L</var>(<var>M</var>) are not in <var>V</var>(<var>M</var>).  For example, if <var>M</var> is
<eg xml:space="preserve">
  &lt;xsd:sequence&gt;
   &lt;xsd:any minOccurs="0"/&gt;
   &lt;xsd:element name="a"/&gt;
  &lt;/xsd:sequence&gt;</eg>
then the sequence (<code>&lt;a/&gt;&lt;a/&gt;</code>) is in <var>L</var>(<var>M</var>), but not
in <var>V</var>(<var>M</var>), because the validation rules require that the first 
<el>a</el> be <termref def="key-att-to"/> the <termref def="key-wp"/>.
In a <termref def="key-vpath"/> the initial <el>a</el> will invariably be
<termref def="key-att-to"/> the <termref def="key-ep"/>, and so no sequence
with an initial <el>a</el> can be <termref def="key-lvip"/> against
this model group.</p>
</note>
</div5>

<div5>
<head>Choices</head>

<p dg="ww-LM">This section defines <var>L</var>(<var>M</var>)<phrase dg="ww">,</phrase><!--*
* material suppressed here by diff group ww *
*--> the set of
<termref def="key-path">paths</termref> in <var>M</var><phrase dg="ww">, and <var>V</var>(<var>M</var>)</phrase>, if <var>M</var>
is a choice group.</p>

<p dg="ww-LM">When the <propref comp="mg" prop="compositor"/> of <var>M</var> is <pt>choice</pt>, and the <propref comp="mg" prop="particles"/> of <var>M</var> is the sequence <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ..., <var>P</var><sub><phrase><var>n</var></phrase></sub>,
then 
<var>L</var>(<var>M</var>) is
<var>L</var>(<var>P</var><sub>1</sub>) ∪ <var>L</var>(<var>P</var><sub>2</sub>) ∪ ... ∪ <var>L</var>(<var>P</var><sub><phrase><var>n</var></phrase></sub>)<phrase dg="ww-p">,
and the set of <termref def="key-path">paths</termref> of <var>S</var> in <var>P</var> is the set
<var>Q</var> = <var>Q</var><sub>1</sub> ∪ <var>Q</var><sub>2</sub> ∪ ... ∪ <var>Q</var><sub><phrase><var>n</var></phrase></sub>, where
<var>Q</var><sub><phrase><var>i</var></phrase></sub> is the set of <termref def="key-path">paths</termref> of <var>S</var> in <var>P</var><sub><phrase><var>i</var></phrase></sub>, for
0 &lt; <var>i</var> ≤ <var>n</var></phrase>.
Less formally, when <var>M</var> is a choice of <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ... <var>P</var><sub><phrase><var>n</var></phrase></sub>, then
<var>L</var>(<var>M</var>) contains any sequence accepted by any of the particles <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ... <var>P</var><sub><phrase><var>n</var></phrase></sub><phrase dg="ww-p">,
and any <termref def="key-path"/> of <var>S</var> in any of the particles <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ... <var>P</var><sub><phrase><var>n</var></phrase></sub>
is a <termref def="key-path"/> of <var>S</var> in <var>P</var></phrase>.
</p>
<!--* <p>For example ...</p> *-->

<p dg="ww">The set <var>V</var>(<var>M</var>) (the set of sequences 
<termref def="key-lvip"/> against <var>M</var>) is the set of sequences <var>S</var> which
are in <var>L</var>(<var>M</var>) and which have a <termref def="key-vpath"/> in <var>M</var>.
In effect, this means that if one of the choices in <var>M</var>
<termref def="key-att-to">attributed</termref> an initial element information item to
a <termref def="key-wp"/>, and another <termref def="key-att-to">attributed</termref> the same
item to an <termref def="key-ep"/>, then the latter choice is used
for validation.</p>
<note dg="ww">
<p>For example, if <var>M</var> is
<eg xml:space="preserve">
  &lt;xsd:choice&gt;
   &lt;xsd:any/&gt;
   &lt;xsd:element name="a"/&gt;
  &lt;/xsd:choice&gt;</eg>
then the <termref def="key-vpath"/> for the sequence (<code>&lt;a/&gt;</code>)
contains just the <termref def="key-ep"/> and it is to the
<termref def="key-ep"/> that the input element will be
<termref def="key-att-to">attributed</termref>; the alternate <termref def="key-path"/>
containing just the <termref def="key-wp"/> is not relevant for
validation as defined in this specification.
</p>
</note>
</div5>

<div5>
<head>All-groups</head>

<p dg="ww-LM">This section defines <var>L</var>(<var>M</var>)<phrase dg="ww">,</phrase><!--*
* material suppressed here by diff group ww *
*--> the set of
<termref def="key-path">paths</termref> in <var>M</var><phrase dg="ww">, and <var>V</var>(<var>M</var>)</phrase>, if <var>M</var>
is an all-group.</p>

<p dg="ww-LM">When the <propref comp="mg" prop="compositor"/> of <var>M</var> is <pt>all</pt>, and the <propref comp="mg" prop="particles"/> of <var>M</var> is the sequence <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ..., <var>P</var><sub><phrase><var>n</var></phrase></sub>,
then 
<var>L</var>(<var>M</var>) is the set of sequences
<var>S</var> = <var>S</var><sub>1</sub> × <var>S</var><sub>2</sub> × ... × <var>S</var><sub><phrase><var>n</var></phrase></sub>
(taking <quote>×</quote> as the interleave operator),
where
for 0 &lt; <var>i</var> ≤ <var>n</var>, <var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>P</var><sub><phrase><var>i</var></phrase></sub>).
The set of sequences
{<var>S</var><sub>1</sub>, <var>S</var><sub>2</sub>, ..., <var>S</var><sub><phrase><var>n</var></phrase></sub>} is a <termref def="key-grouping"/> of <var>S</var>.
<phrase dg="ww-p">The set of <termref def="key-path">paths</termref> of <var>S</var> in <var>P</var> is
the set of all <termref def="key-path">paths</termref>
<var>Q</var> = <var>Q</var><sub>1</sub> × <var>Q</var><sub>2</sub> × ... × <var>Q</var><sub><phrase><var>n</var></phrase></sub>,
where <var>Q</var><sub><phrase><var>i</var></phrase></sub> is a <termref def="key-path"/> of <var>S</var><sub><phrase><var>i</var></phrase></sub> in <var>P</var><sub><phrase><var>i</var></phrase></sub>, 
for 0 &lt; <var>i</var> ≤ <var>n</var>.</phrase>
</p>
<p>
Less formally, when <var>M</var> is an <pt>all</pt>-group of <var>P</var><sub>1</sub>, <var>P</var><sub>2</sub>, ... <var>P</var><sub><phrase><var>n</var></phrase></sub>, then
<var>L</var>(<var>M</var>) is the set of sequences formed by taking one sequence which
is accepted by <var>P</var><sub>1</sub>, 
then one accepted by <var>P</var><sub>2</sub>,
and so on, up through <var>P</var><sub><phrase><var>n</var></phrase></sub>, and then interleaving them
together.  Equivalently, <var>L</var>(<var>M</var>) is the set of sequences <var>S</var>
such that the set {<var>S</var><sub>1</sub>, <var>S</var><sub>2</sub>, ..., <var>S</var><sub><phrase><var>n</var></phrase></sub>} is a 
<termref def="key-grouping"/> of <var>S</var>, and 
for 0 &lt; <var>i</var> ≤ <var>n</var>, <var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>P</var><sub><phrase><var>i</var></phrase></sub>).
</p>

<p dg="ww-LM"><termdef id="key-grouping" term="grouping">A
<term>grouping</term> of a sequence is a set of sub-sequences, some or
all of which may be empty, such that each member of the original
sequence appears once and only once in one of the sub-sequences and
all members of all sub-sequences are in the original
sequence.</termdef> </p>
<!--* <ednote diff="add" dg="ww-LM">
<edtext>Does the interleave operator require more elaborate
definition?</edtext>
</ednote> *-->

<p>For example, given the content model <var>P</var>
<eg xml:space="preserve">  &lt;xsd:all&gt;
   &lt;xsd:element name="a" minOccurs="0" maxOccurs="5"&gt;
   &lt;xsd:element name="b" minOccurs="1" maxOccurs="1"&gt;
   &lt;xsd:element name="c" minOccurs="0" maxOccurs="5"&gt;
   &lt;/xsd:element&gt;
  &lt;/xsd:all&gt;</eg>
and an input sequence <var>S</var> <eg xml:space="preserve">&lt;a/&gt;&lt;b/&gt;&lt;a/&gt;</eg>
where <var>n</var> = 3, then 
<var>S</var><sub>1</sub> is (<code>&lt;a/&gt;&lt;a/&gt;</code>),
<var>S</var><sub>2</sub> is (<code>&lt;b/&gt;</code>)<phrase dg="ww-p">,
and the <termref def="key-path"/> of
<var>S</var> in <var>P</var> is the sequence containing first the <compref ref="p"/>
for the <el>a</el> element, then the <compref ref="p"/> for the
<el>b</el> element, then once more the 
<compref ref="p"/> for the <el>a</el> element.</phrase>
</p>

<p dg="ww">The set <var>V</var>(<var>M</var>) (the set of sequences 
<termref def="key-lvip"/> against <var>M</var>) is the set of sequences <var>S</var> which
are in <var>L</var>(<var>M</var>) and which have a <termref def="key-vpath"/> in <var>M</var>.
In effect, this means that if one of the <compref ref="p" name="Particles"/> in <var>M</var>
<termref def="key-att-to">attributed</termref> an element information item to
a <termref def="key-wp"/>, and a <termref def="key-compete">competing</termref> <compref ref="p"/>
<termref def="key-att-to">attributed</termref> the same item to an <termref def="key-ep"/>, then the
<termref def="key-ep"/> is used for validation.</p>
<note dg="ww">
<p>For example, if <var>M</var> is
<eg xml:space="preserve">
  &lt;xsd:all&gt;
   &lt;xsd:any/&gt;
   &lt;xsd:element name="a"/&gt;
  &lt;/xsd:all&gt;</eg>
then <var>M</var> accepts sequences of length two, containing
one <el>a</el> element and one other element.
</p>
<p>
The other element can be anything at all, including a second
<el>a</el> element. After the first <el>a</el>
the <termref def="key-ep"/> accepts no more elements
and so no longer <termref def="key-compete">competes</termref> with the <termref def="key-wp"/>.
So if the sequence (<code>&lt;a/&gt;&lt;a/&gt;</code>)
is checked against <var>M</var>, in the <termref def="key-vpath"/> the
first <el>a</el> element will be <termref def="key-att-to"/>
the <termref def="key-ep"/> and the second to the 
<termref def="key-wp"/>.
</p>

<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
</note>

<!--*
* material suppressed here by diff group b2867-2 *
*-->

</div5>

<div5 dg="ww-p">
<head>Multiple Paths in Groups</head>

<p>It is possible for a given sequence of element information items
to have multiple <termref def="key-path">paths</termref> in a given model group <var>M</var>; this is
the case, for example, when <var>M</var> is ambiguous, as for example</p>
<eg xml:space="preserve">  &lt;xsd:choice&gt;
   &lt;xsd:sequence&gt;
    &lt;xsd:element ref="my:a" maxOccurs="unbounded"/&gt;
    &lt;xsd:element ref="my:b"/&gt;
   &lt;/xsd:sequence&gt;
   &lt;xsd:sequence&gt;
    &lt;xsd:element ref="my:a"/&gt;
    &lt;xsd:element ref="my:b" maxOccurs="unbounded"/&gt;
   &lt;/xsd:sequence&gt;
  &lt;/xsd:choice&gt;</eg>
<p>which can match the sequence (<code>&lt;a/&gt;&lt;b/&gt;</code>)
in more than one way.
It may also be the case with unambiguous model groups, if
they do not correspond to a <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xml11/#determinism">deterministic</xspecref>
expression (as it is termed in <bibref ref="ref-xml"/>).
<!--* or a <quote>1-unambiguous</quote> expression, as it
is defined by <bibref ref="ABK-DW"/>. *-->
For example,</p> <eg xml:space="preserve">  &lt;xsd:sequence&gt;
   &lt;xsd:element name="a" minOccurs="0"/&gt;
   &lt;xsd:element name="a"/&gt;
  &lt;/xsd:sequence&gt;</eg>

<note>
<p>Because these model groups do not obey the
constraint <specref ref="cos-nonambig"/>, they cannot
appear in a valid schema.</p>
</note>
<!--*
* material suppressed here by diff group ww-1 *
*-->
<!--* <ednote>
<edtext>Add reference to Br&uuml;ggemann-Klein and Wood for
definition of 1-unambiguity.</edtext>
</ednote> *-->


</div5>
</div4>

<div4 id="group-validation" dg="ww-p">
<head><!--*
* material suppressed here by diff group ww *
*--><phrase dg="ww">Principles of Validation against Groups</phrase></head>

<p dg="ww">As noted above, each model group <var>M</var> denotes a
language <var>L</var>(<var>M</var>), whose members are sequences of element information
items.  Each member of <var>L</var>(<var>M</var>) has one or more <termref def="key-path">paths</termref> in <var>M</var>, as do
other sequences of element information items.</p>

<p dg="ww">By imposing conditions on <termref def="key-path">paths</termref> in a model group <var>M</var>
it is possible to identify a set of <termref def="key-vpath">validation-paths</termref> in <var>M</var>,
such that if <var>M</var> is a <!--*
* material suppressed here by diff group ww-1 *
*--> 
model group<phrase dg="ww-1"> which obeys the
<specref ref="cos-nonambig"/> constraint</phrase>, then 
any sequence <var>S</var> has at most one <termref def="key-vpath"/> in <var>M</var>.
The language <var>V</var>(<var>M</var>) can then be defined as the set of
sequences which have <termref def="key-vpath">validation-paths</termref> in <var>M</var>.</p>

<p dg="ww-p"><termdef id="key-compete" term="compete">Two
<compref name="Particles" ref="p"/> <var>P</var><sub>1</sub> and <var>P</var><sub>2</sub> contained in some <compref ref="p"/> <var>P</var>
<term>compete</term> with each other if and only if some sequence <var>S</var>
of element information items has two <termref def="key-path">paths</termref> in <var>P</var> which are
identical except that one path has <var>P</var><sub>1</sub> as its last item and the other
has <var>P</var><sub>2</sub>.</termdef></p>
<p dg="ww-p">For example, in the content model</p>
<eg xml:space="preserve">  &lt;xsd:sequence&gt;
   &lt;xsd:element name="a"/&gt;
   &lt;xsd:choice&gt;
    &lt;xsd:element name="b"/&gt;
    &lt;xsd:any/&gt;
   &lt;/xsd:choice&gt;
  &lt;/xsd:sequence&gt;</eg>
<p>the sequence (<code>&lt;a/&gt;&lt;b/&gt;</code>) has two paths,
one (<var>Q</var><sub>1</sub>) consisting of the <compref ref="p"/> whose <propref comp="p" prop="term"/> is
the declaration for <el>a</el> followed by the 
<compref ref="p"/> whose <propref comp="p" prop="term"/> is
the declaration for <el>b</el>, and
a second (<var>Q</var><sub>2</sub>) consisting of the <compref ref="p"/> whose <propref comp="p" prop="term"/> is
the declaration for <el>a</el> followed by the 
<compref ref="p"/> whose <propref comp="p" prop="term"/> is
the wildcard.  The sequences <var>Q</var><sub>1</sub> and <var>Q</var><sub>2</sub> are 
identical except for their last items, and so the
two <compref name="Particles" ref="p"/> which are the last items of <var>Q</var><sub>1</sub> and 
<var>Q</var><sub>2</sub> are said to <termref def="key-compete"/> with each other.
</p>
<p dg="ww-p">By contrast, in the content model
<eg xml:space="preserve">
  &lt;xsd:choice&gt;
   &lt;xsd:sequence&gt;
    &lt;xsd:element name="a"/&gt;
    &lt;xsd:element name="b"/&gt;
   &lt;/xsd:sequence&gt;
   &lt;xsd:sequence&gt;
    &lt;xsd:element name="c"/&gt;
    &lt;xsd:any/&gt;
   &lt;/xsd:sequence&gt;
  &lt;/xsd:choice&gt;</eg>
the <compref name="Particles" ref="p"/> for <el>b</el> and the 
wildcard do not compete, because there is no
pair of <termref def="key-path">paths</termref> in <var>P</var> which differ only in one 
having the <termref def="key-ep"/> for <el>b</el> and
the other having the <termref def="key-wp"/>.
</p>

<p dg="ww"><termdef id="key-competing-paths" term="competing paths">Two
(or more) <termref def="key-path">paths</termref> of a sequence <var>S</var> in a <compref ref="p"/> <var>P</var>
are <term>competing paths</term> if and only if
they are identical except for their final items, which 
differ.</termdef></p>

<!--*
* material suppressed here by diff group ww-geniza *
*-->

<!--* <ednote diff="add" dg="ww-geniza">
<edtext>Does the notion of prefix of a sequence need
formal definition?</edtext>
</ednote> *-->

<!--*
* material suppressed here by diff group ww-geniza *
*-->

<!--*
* material suppressed here by diff group ww-geniza *
*-->

<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->

<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->

<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->

<p dg="ww-1"><termdef id="key-vpath" term="validation-path">For any sequence <var>S</var> of element
information items and any particle <var>P</var>, a <termref def="key-path"/> of <var>S</var> in <var>P</var>
is a <term>validation-path</term> if and only if for each
prefix of the <termref def="key-path"/> which ends with a <termref def="key-wp"/>, the
corresponding prefix of <var>S</var> has no <termref def="key-competing-paths">competing path</termref> which
ends with an <termref def="key-ep"/>.
</termdef></p>

<note dg="ww">
<p>It is a consequence of the definition of <termref def="key-vpath"/> that for
any content model <var>M</var> which obeys constraint
<specref ref="cos-nonambig"/> and for any sequence <var>S</var> of
element information items, <var>S</var> has at most one
<termref def="key-vpath"/> in <var>M</var>.
</p>
</note>

<p dg="ww"><termdef id="key-lvip" term="locally valid">A sequence <var>S</var> of
element information items is <term>locally valid</term> against
a particle <var>P</var> if and only if 
<var>S</var> has a <termref def="key-vpath"/> in <var>P</var>.  The set of all such 
sequences is written <var>V</var>(<var>P</var>).</termdef></p>

</div4>
<div4>
<head>Validation Rules</head>

<!--*
* material suppressed here by diff group ww-LM *
*-->

<constraintnote type="cvc" id="cvc-model-group" dg="ww-LM">
 <head>Element Sequence Valid</head>

<p>For a sequence <var>S</var> (possibly empty) of element information items to be
locally <termref def="key-vn">valid</termref> with respect to
a model group <var>M</var>, <var>S</var> <rfc2119>must</rfc2119> be in <!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1"><var>V</var>(<var>M</var>)</phrase>.
</p>

<note>
<p>It is possible to define groups whose <propref comp="mg" prop="particles"/> 
is empty.  When a <pt>choice</pt>-group <var>M</var> has an empty
<propref comp="mg" prop="particles"/> property, then
<var>L</var>(<var>M</var>) is the empty set.
When <var>M</var> is a <pt>sequence</pt>- or <pt>all</pt>-group with an empty
<propref comp="mg" prop="particles"/> property, then
<var>L</var>(<var>M</var>) is the set containing the empty (zero-length) sequence.
</p>
</note>
</constraintnote>
<!--* !!! Revise the following note to remove the note of sanctimony
and ignorance. *-->
    <!--*
* material suppressed here by diff group ww-1 *
*-->
</div4>
    </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>
     <!--*
* material suppressed here by diff group all-2506-1 *
*-->
    </olist> 
<!--* 
<phrase diff="add" dg="all-2506-1">It 
&must; appear only as the value of one or both of the following properties:</phrase>
<olist diff="add" dg="all-2506-1">
     <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 &particle0; with <propref comp="p" prop="max occurs"/><code>=1</code>which is <phrase diff="del" dg="ep01">part of a pair which constitutes</phrase><phrase diff="add" 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>
*-->
   </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>

<p dg="ww-p">
<termdef id="key-att-to" term="attributed to">
The <term>attributions</term> of a sequence <var>S</var> of element information items,
when <var>S</var> is checked against a particle <var>P</var>, 
are the <termref def="key-ep">element</termref> or 
<termref def="key-wp">wildcard particles</termref> in <var>P</var> with which the items in <var>S</var> are matched.
It is the sequence of these
<compref name="Particles" ref="p"/> which forms the <termref def="key-path"/> of <var>S</var> in <var>P</var>.
<phrase dg="ww">When <compref ref="p"/> is
non-deterministic, then each element information 
item in <var>S</var> is <term>attributed to</term> to
the <compref ref="p"/> it matches up with in the unique <termref def="key-vpath"/>,
not to any other <compref ref="p"/>.</phrase>
</termdef>
Element information items
are attributed to <termref def="key-ep">element particles</termref> 
only when the element's <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname">expanded name</xspecref> <termref def="key-e-d-match">matches</termref>
the <propref comp="p" prop="term"/> of the <compref ref="p"/>,
and to <termref def="key-wp">wildcard particles</termref> only then the element's
namespace <termref def="key-wc-match">matches</termref> the 
<compref ref="w"/>.  In addition, the <termref def="key-att-to">attribution</termref>
of element information items to <compref ref="p" name="Particles"/> must
respect the structure (sequence, choice,
<propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/>, etc.) of the <compref ref="p"/> 
and of <compref ref="p" name="Particles"/> nested within its <propref comp="p" prop="term"/>.
The rules are given in more detail in 
<specref ref="group-recognition"/> and 
<specref ref="particle-recognition"/>,
and in Validation Rule <specref ref="cvc-accept"/>.
</p>

<p dg="ww-p">
<termdef id="key-ep" term="element particle">
An <term>element particle</term> is a <compref ref="p"/> whose <propref comp="p" prop="term"/> is an <compref ref="ed"/>.
</termdef>
<termdef id="key-wp" term="wildcard particle">
A <term>wildcard particle</term> is a <compref ref="p"/> whose <propref comp="p" prop="term"/> is a <compref ref="w"/>.
</termdef>
</p>



<constraintnote type="cos" id="cos-nonambig">
<head>Unique Particle Attribution</head>
<!--*
* material suppressed here by diff group ww-p *
*-->

<p dg="ww-p">A content model <rfc2119>must not</rfc2119> contain two
<!--*
* material suppressed here by diff group ww *
*--><phrase dg="ww"><termref def="key-ep">element particles</termref></phrase> which <termref def="key-compete"/> with each other<phrase dg="ww">, nor two
<termref def="key-wp">wildcard particles</termref> which <termref def="key-compete"/> with each other</phrase>.</p>



<note dg="ww">
<p>Content models in which an <termref def="key-ep"/> and a <termref def="key-wp"/>
<termref def="key-compete"/> with each other are <emph>not</emph> prohibited.
In such cases, the <compref ref="ed"/> is chosen; 
see <!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">the definitions of
<termref def="key-att-to">attribution</termref>
and <termref def="key-vpath"/></phrase>.
</p>
</note>

<!--* <ednote diff="add" dg="ww">
<edtext>Check cross reference in preceding note to make sure it
goes to the right place.</edtext>
</ednote> *-->

<!--* <p diff="add" dg="ww-x">Unique determination is <emph>not</emph>
compromised for the purposes of this constraint when a given item
might match either a <compref ref="w"/> or an <compref
ref="ed"/>. <specref ref="cvc-particle"/> resolves such choices in
favor of the <compref ref="ed"/>.</p> *-->
<!--*
* material suppressed here by diff group ww-geniza *
*-->

<note>
<p>This constraint reconstructs for XML Schema the equivalent
constraints of <bibref ref="ref-xml"/> and SGML.  <!--*
* material suppressed here by diff group ww-p *
*--><phrase dg="ww-p">See</phrase> 
<specref ref="non-ambig"/> for further
discussion.</p>
<!--* <ednote diff="add" dg="ww-p">
<edtext>What does the following paragraph mean?
<phrase diff="add" dg="ww-1">[Keep it anyway.]</phrase></edtext>
</ednote> *-->
<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>

<!--* <ednote diff="add" dg="ww-p">
<edtext>Is the notion of a content model <quote>containing</quote> a
&particle0; clear enough to count as a primitive notion, or should we
define it?</edtext>
</ednote> *-->

<!--*
* material suppressed here by diff group ww-geniza *
*--><!--* temporary duplicate *-->

<note dg="ww"> 
<p>It is a consequence of <specref ref="cos-nonambig"/>, together with
the definition of <termref def="key-vpath"/>, that any sequence <var>S</var> of element
information items has at most one <termref def="key-vpath"/> in any particle <var>P</var>.
This means in turn that each item in <var>S</var> is attributed to at most one particle in <var>P</var>.
No item can match more than one <compref ref="w"/>
or more than one <compref ref="ed"/> (because no two <termref def="key-wp">wildcard particles</termref>
and no two <termref def="key-ep">element particles</termref> <rfc2119>may</rfc2119> <termref def="key-compete"/>), and if an item matches
both a <termref def="key-wp"/> and an <termref def="key-ep"/>, it is <termref def="key-att-to">attributed</termref> by
the rules for <termref def="key-vpath">validation-paths</termref> to the <termref def="key-ep"/>.</p>
</note>


  <note>
<!--* <ednote diff="add" dg="ww-p">
<edtext>What does the following paragraph mean?</edtext>
</ednote> *-->
    <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 
<!--*
* material suppressed here by diff group ww-p *
*--><phrase dg="ww-p">the
<specref ref="cos-nonambig"/> constraint or the 
<specref ref="cos-element-consistent"/> constraint</phrase>.</p>
   </note>


<!--* <ednote diff="add" dg="ww">
<edtext>For technical reasons, the following inquiry is tagged
as a Note instead of an Editorial Note.  But it is not intended
that this Note should be part of the final text of the spec.</edtext>
</ednote>
<note diff="add" dg="ww">
<p>The definition of <specref ref="cos-nonambig"/> just given
applies not to all sequences in &L.P; but to all sequences
which have &paths; in &P;.  This is necessary to ensure that
the content model
<eg><![CDATA[  <xsd:choice>
   <xsd:element ref="my:a"/>
   <xsd:sequence>
    <xsd:any/>
    <xsd:element ref="my:b"/>>
   </xsd:sequence>
  </xsd:choice>]]></eg>
is not accepted.  (Every sequence in &L.P;, has exactly
one &path; in &P;; if the sequence is of length 2, 
the &path; goes through the 
wildcard; if the sequences is of length 1, it goes
through the reference to <el>my:a</el>.</p>
<p>The Working Group should be certain that it accepts this
choice.</p>
<p>What may not be strictly necessary is the extension of the rule
to cover <emph>all</emph> sequences of
element information items instead of only the prefixes of
sequences in &L.P;.  The consequence of this choice is that
content models like
<eg><![CDATA[  <xsd:choice>
   <xsd:sequence>
    <xsd:element ref="my:a" minOccurs="0"/>
    <xsd:element ref="my:a"/>
    <xsd:choice/>< ! - - *  for empty choice, L(P) = {} * - - >
   </xsd:sequence>
   <xsd:sequence>
    <xsd:element ref="my:b"/>
    <xsd:element ref="my:b"/>
   </xsd:sequence>
  </xsd:choice>]]></eg>
or equivalently 
<eg>((a?, a, &emptyset;) | (b, b))</eg>
are not legal, despite the fact that the 
non-determinism is in a branch of the choice which 
recognizes no sequences at all.</p>
<p>The Working Group should be certain that it accepts this
choice in defining UPA.</p>
<p>Finally, the WG should note that some content models
for which the natural automaton is non-deterministic will
be accepted by this definition of <specref ref="cos-nonambig"/>.
For example:
<eg><![CDATA[  <xsd:choice>
   <xsd:sequence>
    <xsd:choice/>< ! - - * for empty choice, L(P) = {} * - - >
    <xsd:element ref="my:a" minOccurs="0"/>
    <xsd:element ref="my:a"/>
   </xsd:sequence>
   <xsd:sequence>
    <xsd:element ref="my:b"/>
    <xsd:element ref="my:b"/>
   </xsd:sequence>
  </xsd:choice>]]></eg>
or equivalently 
<eg>((&emptyset;, a?, a) | (b, b))</eg>
Because the apparent non-determinism follows a construct
which matches the empty set, it cannot be on the &path;
of any sequence, and so does not violate the constraint.
(For the same reason, it does not violate the <specref ref="cos-nonambig"/> constraint
as specified in XSD 1.0, either.)</p>
<p>The Working Group should be certain that it 
accepts this fact.</p>
<p>Alternative methods of defining the constraint are possible:
we could define a mapping from content models to automata
and define the constraint with reference to the standard
automaton.  This would require a good deal of infrastructure;
it would also require us to introduce the notion of
marking and unmarking the content model.
We could also define the constraint in terms of derivatives;
again, marking and unmarking would be required.</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>
<p dg="ww-p">When an element is validated against a complex type, 
its sequence of child elements is checked against the content model of
the complex type and the children are <termref def="key-att-to"/> to
<compref name="Particles" ref="p"/> of the content model.
The attribution of items to <compref name="Particles" ref="p"/>
partially determines the calculation of the items' 
<termref def="key-dd">context-determined 
declarations</termref>:
When an element information item is <termref def="key-att-to"/> an
<termref def="key-ep"/>, that <compref ref="p"/>'s <compref ref="ed"/>,
or an <compref ref="ed"/> <termref def="key-validly-sub"/> for it,
becomes
the item's <termref def="key-dd">context-determined 
declaration</termref>; when the item is <termref def="key-att-to"/> a
<termref def="key-wp"/>, the <termref def="key-dd">context-determined 
declaration</termref> depends on the variety of the wildcard.
</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>
<p dg="ww-1">
<termdef id="key-contain-dpt" term="directly contains">A particle
<term>directly contains</term> the component which is the value of its
<propref comp="p" prop="term"/> property.</termdef>
<termdef id="key-contain-ipx" term="indirectly contains">A particle 
<term>indirectly contains</term> the particles, groups, wildcards, and
element declarations which are contained by the value of its
<propref comp="p" prop="term"/> property.</termdef>
<termdef id="key-contain-xpx" term="contains">A particle 
<term>contains</term> the components which it either
<termref def="key-contain-dpt"/>
or <termref def="key-contain-ipx"/>.</termdef>
</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>
<div4 id="particle-validation" dg="ww-LM">
<head>Principles of Validation against Particles</head>
<!--* 
<div4 id="particle-recognition" diff="add" dg="ww-x">
<head>Languages Recognized by Particles, Paths in Particles</head>
*-->
<p>Every particle <var>P</var> <termref def="key-accept">recognizes</termref> some language <var>L</var>(<var>P</var>).
<phrase dg="ww-1">When <propref comp="p" prop="min occurs"/> and <propref comp="p" prop="max occurs"/> of <var>P</var> are
both 1, <var>L</var>(<var>P</var>) is the language of <var>P</var>'s <propref comp="p" prop="term"/>.  The
following section (<specref ref="particle-recognition"/>)
describes how more complicated counts are handled.</phrase></p>
<div5 id="particle-recognition">
<head>Language Recognition for Repetitions</head>
<p>When <propref comp="p" prop="min occurs"/> of <var>P</var> = <propref comp="p" prop="max occurs"/> of <var>P</var> = <var>n</var>, 
and <var>T</var> is the <propref comp="p" prop="term"/> of <var>P</var>, 
then <var>L</var>(<var>P</var>) is the set  of sequences <var>S</var> = <var>S</var><sub>1</sub><!--*
* material suppressed here by diff group ww-1 *
*--> + <var>S</var><sub>2</sub> + ... + <var>S</var><sub><phrase><var>n</var></phrase></sub><!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">such that <var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>T</var>) for 0 &lt; <var>i</var> ≤ <var>n</var>.</phrase>
<phrase dg="ww-1">Less formally: <var>L</var>(<var>P</var>) is </phrase>
the
set of sequences which have <termref def="key-partition">partitions</termref> into <var>n</var> sub-sequences
<!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">for which each of the <var>n</var> subsequences
is in the language accepted by the <propref comp="p" prop="term"/> of <var>P</var></phrase>.
</p>
<!--*
<p>When &p.min; = &j; and &p.max; is <pt>unbounded</pt>,
and &P1; is the &p.term; of &P;, 
then &L.P; is the set  of sequences &S; = &S1;, + &S2; + ... + &Sn;, i.e. the
set of sequences which have &partitions; into &n; sub-sequences
such that &n; &ge; &j;
and &Si; is in &P1; for 0 &lt; &i; &le; &n;.</p>
*-->
<p>When <propref comp="p" prop="min occurs"/> = <var>j</var> and <propref comp="p" prop="max occurs"/> = <var>k</var>,
and <var>T</var> is the <propref comp="p" prop="term"/> of <var>P</var>, 
then <var>L</var>(<var>P</var>) is the set  of sequences <var>S</var> = <var>S</var><sub>1</sub>, + <var>S</var><sub>2</sub> + ... + <var>S</var><sub><phrase><var>n</var></phrase></sub>, i.e. the
set of sequences which have <termref def="key-partition">partitions</termref> into <var>n</var> sub-sequences
such that <var>n</var> ≥ <var>j</var> and <var>n</var> ≤ <var>k</var> (or <var>k</var> is <pt>unbounded</pt>)
and <var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>T</var>) for 0 &lt; <var>i</var> ≤ <var>n</var>.</p>
<p>When <propref comp="p" prop="min occurs"/> = 0, then <var>L</var>(<var>P</var>) also includes the empty sequence.</p>
<p dg="ww-p">If (1) <compref ref="p"/> <var>P</var> has
<propref comp="p" prop="min occurs"/> = <var>j</var>, <propref comp="p" prop="max occurs"/> = <var>k</var>, and <propref comp="p" prop="term"/> = <var>T</var>, 
and (2) <var>S</var> is a sequence of element information items
such that <var>S</var> = <var>S</var><sub>1</sub> + <var>S</var><sub>2</sub> + ... + <var>S</var><sub><phrase><var>n</var></phrase></sub> (i.e. <var>S</var><sub>1</sub>, <var>S</var><sub>2</sub>, ..., <var>S</var><sub><phrase><var>n</var></phrase></sub> is
a <termref def="key-partition"/> of <var>S</var>), 
and (3) <var>n</var> ≤ <var>k</var> (or <var>k</var> is <pt>unbounded</pt>), 
and (4) <var>S</var><sub><phrase><var>i</var></phrase></sub> is in <var>L</var>(<var>T</var>) for 0 &lt; <var>i</var> &lt; <var>n</var>, 
then:
<ulist>
<item><p>If <var>T</var> is a model group, 
then the set of <termref def="key-path">paths</termref> of <var>S</var> in <var>P</var> is the set of all <termref def="key-path">paths</termref> <var>Q</var> such that
<var>Q</var> = <var>Q</var><sub>1</sub> + <var>Q</var><sub>2</sub> + ... + <var>Q</var><sub><phrase><var>n</var></phrase></sub>, where
<var>Q</var><sub><phrase><var>i</var></phrase></sub> is a <termref def="key-path"/> of <var>S</var><sub><phrase><var>i</var></phrase></sub> in <var>T</var> for 0 &lt; <var>i</var> ≤ <var>n</var>.
(For the definition of <termref def="key-path">paths</termref> in model groups,
see <specref ref="group-recognition"/>.)
</p></item>
<item>
<p>
If <var>T</var> is a <termref def="key-basic-term"/>, then the (sole) <termref def="key-path"/> of <var>S</var> in <var>P</var>
is a sequence of <var>n</var> occurrences of <var>P</var><!--*
* material suppressed here by diff group ww-1 *
*--><phrase dg="ww-1">.</phrase>
</p>
</item>
</ulist>
<note><p>
Informally:  the path of an input sequence <var>S</var> in a 
particle <var>P</var> may go through the <termref def="key-basic-particle">basic particles</termref> in
<var>P</var> as many times as is allowed by the <propref comp="p" prop="max occurs"/> of <var>P</var>.
If the path goes through <var>P</var> more than once, each
time before the last one must correspond to a sequence
accepted by the <propref comp="p" prop="term"/> of <var>P</var>; because the last 
iteration<phrase dg="ww-1"> in the path</phrase>
may not be complete, it need not be accepted by the
<propref comp="p" prop="term"/>.</p></note>
</p>
</div5>
<div5>
<head>Validation of Basic Terms</head>
<p>When the <propref comp="p" prop="term"/> of a <compref ref="p"/> <var>P</var> is an <compref ref="ed"/> <var>D</var>,
then <var>L</var>(<var>P</var>) is the set of all sequences of length 1 whose sole member
is an element information item which <termref def="key-e-d-match">matches</termref> <var>D</var>.
<termdef id="key-e-d-match" term="match">An element information item <var>E</var>
<term>matches</term> an <compref ref="ed"/> <var>D</var> if and only if:
<ulist>
<item>
<p>either the expanded name of <var>E</var> <termref def="key-en-match">matches</termref> the
<propref comp="ed" prop="name"/> and <propref comp="ed" prop="target namespace"/> 
of <var>D</var>,</p>
</item>
<item>
<p>or the expanded name of <var>E</var> resolves to an element
declaration <var>D</var><sub>2</sub> which is substitutable for <var>D</var>.</p>
</item>
</ulist>
</termdef>
</p>
<p><termdef id="key-en-match" term="match">An 
<xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname">expanded name</xspecref> <var>E</var> <term>matches</term> an
<termref def="gloss-NCName">NCName</termref> <var>N</var> and
a namespace name <var>NS</var> if and only if all of the following
are true:
<ulist>
<item>
<p>The local name of <var>E</var> is identical to <var>N</var>.</p>
</item>
<item>
<p>Either the namespace name of <var>E</var> is identical to <var>NS</var>,
or else <var>E</var> has no namespace name (<var>E</var> is an unqualified
name) and <var>NS</var> is <termref def="key-null">absent</termref>.</p>
</item>
</ulist>
</termdef></p>
<!--* <ednote>
<edtext>There is probably a better location for this definition
of matching between an expanded name and an NCName, namespace-name
pair.</edtext>
</ednote> *-->
<p>When the <propref comp="p" prop="term"/> of a <compref ref="p"/> <var>P</var> is a <compref ref="w"/> <var>W</var>,
then <var>L</var>(<var>P</var>) is the set of all sequences of length 1 whose sole member
is an element information item <var>E</var> which <termref def="key-e-d-match">matches</termref> <var>W</var>.
<termdef id="key-wc-match" term="match">An element information item <var>E</var>
<term>matches</term> a <compref ref="w"/> <var>W</var> 
(or a <termref def="key-wp"/> whose <propref comp="p" prop="term"/> is <var>W</var>)
if and only if <var>W</var> allows the <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">namespace
name</xpropref> of <var>E</var>, as defined in the validation rule
<specref ref="cvc-wildcard-namespace"/>.
</termdef>
</p>
<p><termdef id="key-ns-match" term="match">Two namespace
names <var>N</var><sub>1</sub> and <var>N</var><sub>2</sub> are said to <term>match</term> 
if and only if they are identical or both are <termref def="key-null">absent</termref>.
</termdef></p>
<p>For principles of validation when the <propref comp="p" prop="term"/> is a model group
instead of a <termref def="key-basic-particle"/>, see
<specref ref="group-recognition"/><phrase dg="ww"> and
<specref ref="group-validation"/></phrase>.</p>
</div5>
</div4>

<div4>
<head>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>
<!--*
* material suppressed here by diff group rq146-1 *
*-->
<!--*
* material suppressed here by diff group rq146-1 *
*-->
<!--*
* material suppressed here by diff group rq146-1 *
*-->
</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>
<phrase dg="ww-p">In this case, each element information item
in the sequence is <termref def="key-att-to">attributed to</termref>
the particle.</phrase></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>),
<!--*
* material suppressed here by diff group rq17p *
*-->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>), <!--*
* material suppressed here by diff group rq17p *
*-->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 <termref def="key-validly-sub"/> for the
<!--* check preceding line; I think entification of 'validly
    * substitutable' is part of ww-p, not in status quo.
    *-->
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>
<p dg="ww-p">In this case the element information item is 
<termref def="key-att-to">attributed to</termref> the particle.</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>
<phrase dg="ww-p">In this case, the element information items
in each sub-sequence are <termref def="key-att-to">attributed to</termref>
<compref name="Particles" ref="p"/> within the model group which is the <propref comp="p" prop="term"/>,
as described in <specref ref="group-recognition"/>.</phrase></p>
</item>
</olist>

<!--* 
 <p diff="add" dg="ww-x">Although <specref ref="cos-nonambig"/> means that the
in-principle non-determinism of this formulation will rarely result in any
non-determinism in practice, it does not rule out it out entirely. 
When non-determinism <emph>does</emph> arise, it is always because a particular
element information item may be accepted by either a
<compref ref="w"/> or an <compref ref="ed"/>.  In such situations
implementations <rfc2119>MUST</rfc2119> favor the <compref ref="ed"/>, both in
terms of providing the <termref def="key-dd">context-determined
declaration</termref> for the element information item, and in terms of
choosing alternative paths through a content model.</p>
*-->

<!--* <ednote diff="add" dg="ww">
<edtext>Does following note still make sense?</edtext>
</ednote> *-->
<note dg="ww"><p>The rule just given does not require that the
content model be deterministic.  In practice, however, 
most <!--* although not all *-->
non-determinism in content models is ruled out by the schema
component constraint <specref ref="cos-nonambig"/>.
Non-determinism can occur despite that constraint for
several reasons.
In some such cases, 
some particular element information item may be accepted by either a
<compref ref="w"/> or an <compref ref="ed"/>.  In such situations,
the validation process defined in this specification matches the
element information item against the <compref ref="ed"/>, both in
identifying the <compref ref="ed"/> as the item's 
<termref def="key-dd">context-determined declaration</termref>, 
and in choosing alternative paths through a content model.
Other cases of non-determinism involve nested particles each of
which has <propref comp="p" prop="max occurs"/> greater than 1,
where the input sequence can be partitioned in multiple ways.
In those cases, there is no fixed rule for eliminating the
non-determinism.</p></note>

<note>
<p><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 <!--*
* material suppressed here by diff group b2867-1 *
*-->is
<emph>not</emph> validatable by a wildcard which accepts the head's
<phrase dg="b2867-1">(</phrase>namespace<phrase dg="b2867-1">, name) pair</phrase> 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>
</div4>
    </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>
   <!--*
* material suppressed here by diff group rq17p *
*-->
   <!--*
* material suppressed here by diff group rq17p *
*-->
     
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
  <!--*
* material suppressed here by diff group rq17p *
*-->
 <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<phrase dg="b2867-1">s</phrase><!--*
* material suppressed here by diff group b2867-1a *
*-->
<!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1">and optionally on</phrase> their local name<phrase dg="b2867-1">s</phrase>.</p>
<!--*
* material suppressed here by diff group b2867-1 *
*-->
<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"<phrase dg="b2867-1">
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        notQName="xsl:comment xsl:fallback"</phrase>/&gt;

&lt;xs:any <!--*
* material suppressed here by diff group b2867-1 *
*--><phrase dg="b2867-1">notN</phrase>amespace="##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><!--*
* material suppressed here by diff group b2867-1 *
*--></p>
</item>
<item>
<p><!--*
* material suppressed here by diff group b2867-1 *
*--></p>
</item>
<item>
<p><phrase dg="b2867-1">(<propref comp="nc" prop="variety"/> <pt>not</pt> and
 <propref comp="nc" prop="namespaces"/> a set whose members are either namespace names or
 <termref def="key-null">absent</termref>) have any namespace other than the specified namespaces
 and/or, if <termref def="key-null">absent</termref> is included in the set, are namespace-qualified;</phrase></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>
<item>
<p><phrase dg="b2867-1">(<propref comp="nc" prop="disallowed names"/> is not empty)
have any (namespace name, local name) other than the specified names.</phrase></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>
   <!--* <ednote diff="add" dg="b2867-1">
    <edtext>For technical reasons, the editorial production system does not mark the change
     to <code>namespace</code> attribute and the addition of <code>notNamespace</code> and
     <code>notQName</code> attributes.</edtext>
   </ednote> *-->
   <!--* <ednote diff="add" dg="b2867-1">
    <edtext>How to make notNamespace show "list of (anyURI | (##targetNamespace | ##local))"?</edtext>
   </ednote> *-->
   <!--* <ednote diff="add" dg="b2867-1">
    <edtext>
    The component model doesn't allow <propref comp="nc" prop="variety"/> <pt>not</pt> and <propref comp="nc" prop="namespaces"/> an empty set.
     But the transfer syntax below allows <code>notNamespace=""</code>. Are we concerned about such "inconsistency"?</edtext>
   </ednote> *-->
    <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"><!--*
* material suppressed here by diff group b2867-1 *
*--><!--*
* material suppressed here by diff group b2867-1 *
*-->
 <phrase dg="b2867-1">A <compref ref="nc"/> with the following properties:</phrase>
 <pvlist dg="b2867-1">
  <pvpair comp="nc" prop="variety">
   <olist role="caseval">
    <item>
     <p role="if">the <code>namespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present</p>
     <p role="then">
      <olist role="caseval">
       <item>
        <p role="if">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> is <code>"##any"</code></p>
        <p role="then"><pt>any</pt>;</p>
       </item>
       <item>
        <p role="if">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> is <code>"##other"</code></p>
        <p role="then"><pt>not</pt>;</p>
       </item>
       <item>
        <p role="otherwise"><pt>enumeration</pt>;</p>
       </item>
      </olist>
     </p>
    </item>
    <item>
     <p role="if">the <code>notNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present</p>
     <p role="then">
      <phrase dg="b2867-1a"><pt>not</pt>;</phrase>
      <!--*
* material suppressed here by diff group b2867-1a *
*-->
     </p>
    </item>
    <item>
     <p role="otherwise">(neither <code>namespace</code> nor <code>notNamespace</code> is present) <pt>any</pt>.</p>
    </item>
   </olist>
  </pvpair>        
  <pvpair comp="nc" prop="namespaces">
   <olist role="caseval">
    <item>
     <p role="if">neither <code>namespace</code> nor <code>notNamespace</code> is present</p>
     <p role="then">the empty set;</p>
    </item>
    <item>
     <p role="if">the <code>namespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present and its <termref def="key-vv">actual value</termref> is <code>"##any"</code></p>
     <p role="then">the empty set;</p>
    </item>
    <item>
     <p role="if">the <code>namespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> is present and its <termref def="key-vv">actual value</termref> is <code>"##other"</code></p>
     <p role="then">a set consisting <termref def="key-null"/> and, if the <code>targetNamespace</code> [attribute]
      of the <eltref ref="schema"/> ancestor element information item is present, its <termref def="key-vv">actual value</termref>;</p>
    </item>
    <item>
     <p role="otherwise">a set whose members are namespace names corresponding to
      the space-delimited substrings of the <termref def="key-vv">actual value</termref> of the <code>namespace</code>
      or <code>notNamespace</code> <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> (whichever is present), 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"/>;</p>
       </item>
       <item>
        <p>if one such substring is <code>##local</code>, the corresponding member is <termref def="key-null"/>.</p>
       </item>
      </olist>
     </p>
    </item>
   </olist>
  </pvpair>
  <pvpair comp="nc" prop="disallowed names">
   A set whose members are <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> values
   corresponding to the space-delimited substrings of the <termref def="key-vv">actual value</termref> of the <code>notQName</code>
   <xpropref href="http://www.w3.org/TR/xml-infoset/#infoitem.element">attribute</xpropref> if present, otherwise the empty set.
  </pvpair>
 </pvlist>
</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"/> ele