<?xml version='1.0'?>
<?xml-stylesheet type='text/xsl' href='scdspec.xsl'?>
<!DOCTYPE spec PUBLIC
     "-//W3C//DTD Specification V2.2//EN"
     "xmlspec.dtd"
[
   <!ENTITY % versionEntities SYSTEM "versionInfo.ent">
   %versionEntities; <!-- get path and date entities -->

   <!ENTITY doc.date "&draft.day; &draft.month; &draft.year;">
   <!ENTITY w3c.doc.date "&draft.day;-&draft.month;-&draft.year;">
   <!ENTITY iso.doc.date "&draft.YY;&draft.MM;&draft.DD;">

   <!ENTITY % x.local.ednote.class "|var">
   <!ENTITY % x.local.emph.class "|code|var">
   <!ENTITY % local.common.att "rel  CDATA  #IMPLIED">
   <!ENTITY % local.eg.pcd.mix "|ulist|code"> 
   <!ENTITY % local.tech.pcd.mix "|var"> 

   <!ENTITY expanded-name 
      '<xspecref href="http://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname">expanded name</xspecref>' >
   <!ENTITY expanded-names 
      '<xspecref href="http://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname">expanded names</xspecref>' >
]>
<!--     "http://www.w3.org/XML/1998/06/xmlspec-v22.dtd" -->
<spec w3c-doctype="wd">
 <header>
   <title diff="chg">W3C XML Schema Definition Language (XSD): Component Designators</title>
   <w3c-designation>&WD-SCDS;-&iso.doc.date;</w3c-designation>
   <w3c-doctype>W3C Working Draft</w3c-doctype>
    <pubdate>
      <day>&draft.day;</day>
      <month>&draft.month;</month>
      <year>&draft.year;</year>
    </pubdate>
   <publoc>
     <loc href="&SCDS.base;/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">&SCDS.base;/</loc>
   </publoc>
   <altlocs>
    <loc href="scds.xml">XML</loc>
   </altlocs>
   <latestloc>
     <loc href="http://www.w3.org/TR/xmlschema-ref/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema-ref/</loc>
   </latestloc>
   <prevlocs>
     <loc href="http://www.w3.org/TR/2005/WD-xmlschema-ref-20050329/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2005/WD-xmlschema-ref-20050329/</loc>
     <loc href="http://www.w3.org/TR/2004/WD-xmlschema-ref-20040716/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2004/WD-xmlschema-ref-20040716/</loc>
     <loc href="http://www.w3.org/TR/2004/WD-xmlschema-ref-20040309/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2004/WD-xmlschema-ref-20040309/</loc>
     <loc href="http://www.w3.org/TR/2003/WD-xmlschema-ref-20030109/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2003/WD-xmlschema-ref-20030109/</loc>
   </prevlocs>
   <authlist>
    <author>
     <name>Mary Holstege</name>
     <affiliation>Mark Logic Corporation</affiliation>
    </author>
    <author>
     <name>Asir S. Vedamuthu</name>
     <affiliation>webMethods (until May 2005)</affiliation>
    </author>
   </authlist>

   <abstract>
<p>XML Schema: Component Designators defines a scheme for identifying XML
Schema components as specified by
<loc href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML Schema Part 1: Structures</loc> and
<loc href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML Schema Part 2: Datatypes</loc>.
</p>
   </abstract>
   <status diff="chg">
    <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 href="http://www.w3.org/TR/">W3C technical reports index</loc> at
      http://www.w3.org/TR/.</emph></p>

<p>This document is a Working Draft for review by members of the public and by
members and other Working Groups of the World Wide Web Consortium. 
It has been 
produced by the <loc href="http://www.w3.org/XML/Schema"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace" xlink:actuate="onRequest">W3C XML Schema Working
Group</loc> (WG) as part of the <loc href="http://www.w3.org/XML/Activity" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace" xlink:actuate="onRequest">XML Activity</loc>.
It incorporates all Working Group decisions through 2008-07-25.
It has been reviewed by the Working Group and the Working Group has agreed to
publication as a Working Draft. The Working Group expects about a month of
additional refinement and review before producing a Last Call Working Draft 
in substantially the same form.
</p>
   <p>
    Comments on this document should be made in
    W3C's public installation of Bugzilla, specifying "XML Schema" as the
    product. Instructions can be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/2006/01/public-bugzilla">http://www.w3.org/XML/2006/01/public-bugzilla</loc>. If access to
    Bugzilla is not feasible, please send your comments to the W3C XML
    Schema comments mailing list, <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>).
    Each Bugzilla entry and email message should contain only one
    comment.</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>The following changes were made since the last public Working Draft:</p>
<ulist diff="add">
<item><p>Support for XML Schema 1.1 components has been added.</p></item>
<item><p>A proposal for schema component property accessors has been added.</p></item>
<item><p>The handling of default namespaces and namespace bindings has been
clarified (issues 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2661" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2661</loc>, 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2662" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2662</loc>).</p></item>
<item><p>Numeric predicates have been clarified to reflect the intention that
they may be dropped when they are redundant, not just because the value happens
to be 1 (Issue 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3677" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3677</loc>).</p></item>
<item><p>The definition of // has been modified slightly so that, for
example, the path <code>//foo</code> can refer to the global element declaration
named <code>foo</code> and not just to element declarations subordinate to some
type (
Issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3684" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3684</loc>).</p></item>
<item><p>Examples have been provided showing the use of schema component
paths with namespace URIs (related to 
issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2659" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2659</loc>).</p></item>
<item><p>The status of relative or incomplete schema component paths has been
clarified (related to issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2659" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2659</loc>).</p></item>
<item><p>Two small errors in the EBNF were fixed (issues 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3681" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3681</loc>, 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3682" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3682</loc>).</p></item>
<item><p>References to RFC2396 and RFC2396bis were updated to RFC3986
(issues 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2658" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2658</loc>, 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2659" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2659</loc>).</p></item>
<item><p>The wording in the conformance section has been clarified; a section
on extensibility has been added (
issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=2660" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#2660</loc>).</p></item>
<item><p>The document has been reorganized to take an axis-based approach. In
addition, an appendix organized by axis rather than component type has been
added (issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3685" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3685</loc>).</p></item>
<item><p>Non-canonical axes have been added for attribute uses and particles
(issue 
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3678" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3678</loc>).</p></item>
<item><p>Path abbreviations have been clarified (issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3684" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#3684</loc>).</p></item>
<item><p>The name of the element:: axis has been changed to
schemaElement:: and the name of the attribute:: axis has been changed to 
schemaAttribute:: (issue
<loc href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=5330" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">#5330</loc>).</p></item>
<item><p>Missing content type traversals have been added.</p></item>
<item><p>Made many small editorial fixes have been made.</p></item>
</ulist>
<ulist diff="del">
<item><p>The syntax has been changed to use a style more similar to
that of XPath <bibref ref="xpath"/>; individual steps use an axis specifier and
a node test 
rather than just a node test. The path model was changed accordingly, to take into
account an axis, and the syntax for some non-default traversals was changed to
avoid ambiguities. As another consequence of these changes, the literal '0' was introduced
to denote anonymous components.</p>
</item> 
<item><p>A fixed namespace prefix was mandated for canonical schema component paths.</p></item>
<item><p>General wildcarding of steps was added. To make the syntax more parallel to that of XPath, 
'*' now means 'element::*', and the syntax for annotations has become
'annotation::*'. </p>
</item>
<item><p>To make the syntax more parallel with respect to both general wildcarding
and the axis model, the syntax for facets is now of the form
'facets:minInclusive' and the syntax for model groups is now of the form
'model::choice'.</p>
</item>
<item><p>The '//' abbreviation has been restricted to default axes. The
description of this abbreviation has been folded into the section on elided
steps.</p></item>
<item><p>'~name' has been added as a short form for 'type::name'.</p></item>
</ulist>
<!--
<p>
This document was produced under the 
<loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest">5 February 2004 W3C
Patent Policy</loc>. The Working Group maintains a 
<loc href="http://www.w3.org/2002/11/xml-schema-IPR-statements.html" 
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest" rel="disclosure">
public list of patent disclosures</loc> 
relevant to this document;
that page also includes instructions for disclosing [and excluding] a
patent. 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"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
xlink:show="replace" xlink:actuate="onRequest" rel="disclosure">section
6 of the W3C Patent Policy</loc>. 
</p>
-->
   <p>This document was produced by a group operating under the <loc
     href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February
     2004 W3C Patent Policy</loc>. W3C maintains a <loc
     href="http://www.w3.org/2004/01/pp-impl/19482/status">public list of
     any patent disclosures</loc> made in connection with the deliverables
    of the group; that page also includes instructions for disclosing a
    patent. An individual who has actual knowledge of a patent which the
    individual believes contains <loc
     href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</loc> must disclose the information in accordance
     with <loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the W3C Patent Policy</loc>.
   </p>
   </status>
   <langusage>
     <language id="en">English</language>
   </langusage>
	<revisiondesc>
	  <p>Last Modified: $Date: 2008/09/09 18:00:42 $</p>
   </revisiondesc>
 </header>
 <body>
  <div1 id="section-introduction">
    <head>Introduction (Non-Normative)</head>
<p>This document defines a system for designating XML Schema components. Part 1
of the W3C XML Schema 
<phrase diff="add">Definition Language (XSD)</phrase> recommendation 
<bibref ref="xsd1"/> defines these 
schema components. 
<xspecref diff="chg" href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#concepts-data-model">Section 2.2</xspecref>
lays out the inventory of schema components into
three classes:
</p>
<ulist>
<item><p>Primary components: simple and complex type definitions, attribute
declarations, and element declarations</p></item>
<item><p>Secondary components: attribute and model group definitions,
identity-constraint definitions, and notation declarations</p></item>
<item><p>"Helper" components: annotations, model groups, particles, wildcards, and
attribute uses</p></item>
</ulist>
<p>In addition there is a master schema component, the schema component
representing the schema as a whole. <phrase diff="add">This component will be
referred to as the schema description component in this specification.</phrase>
</p>
<p>Finally, there are schema components for the facets defined in Part 2 of the
W3C XML Schema <phrase diff="add">Definition Language (XSD)</phrase>
recommendation <bibref ref="xsd2"/>:</p> 
<ulist>
<item><p><xspecref diff="chg" href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#rf-fund-facets">Fundamental Facets</xspecref>: ordered, bounded, cardinality, numeric</p></item>
<item><p><xspecref diff="chg" href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#rf-facets">Constraining Facets</xspecref>: whiteSpace, minInclusive, maxInclusive, minExclusive,
    maxExclusive, totalDigits, fractionDigits, length, minLength, maxLength,
    pattern, enumeration
</p></item>
</ulist>
<p diff="add">Version 1.1 of the W3C XML Schema Definition Language (XSD)
recommendation  
<bibref ref="xsd11_1"/><bibref ref="xsd11_2"/> adds additional components and
makes modifications to existing components, as well as introducing the notion
of &quot;property records&quot; to capture more complex structured values.
</p>

<p>At first blush, a QName (prefix:localname) may seem sufficient to the
task of designating any schema component. 
This is <phrase diff="chg">not the case</phrase> for various
reasons:
</p>
<olist>
<item><p>A QName is only meaningful in the context of particular namespace
bindings so that the QName can be resolved to a particular 
<phrase diff="chg">&expanded-name;</phrase>, i.e. a {namespace name, local name}
pair. 
</p></item>
<item><p>The same <phrase diff="chg">&expanded-name;</phrase> can be used in a particular schema to refer to an
element declaration, an attribute declaration, a complex type or
simple type definition, a model group definition, an attribute group
definition, an identity constraint definition, and a notation declaration.
</p></item>
<item><p>Locally scoped element and attribute declarations cannot 
<phrase diff="add">necessarily</phrase> be uniquely
named by an <phrase diff="chg">&expanded-name;</phrase>.
</p></item>
<item><p>Anonymous type definitions have no 
<phrase diff="chg">&expanded-name;</phrase>, or they have an 
<phrase diff="chg">&expanded-name;</phrase> that 
<phrase diff="chg">may vary with</phrase> the
particular schema processor interpreting the schema.
</p></item>
<item><p>Certain schema components (annotation,
particle, wildcard) are <phrase diff="chg">invariably</phrase> subordinate to
some other schema component, and 
have no name of their own.</p></item>
<item><p>Certain schema components (attribute use and model group)
are subordinate to some other schema component, and any name they might be
construed to have is a reference to some other schema component (attribute
declaration and model group definition, respectively).
</p></item>
<item><p>The schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add">
description</phrase> schema component has no name at all.</p></item> 
<item diff="del"><p>The redefinition schema composition feature creates the
situation where 
there are two variants of the 'same' schema component, both with the same name,
one of which is derived from the other. If it is necessary to be able to name
the base component, the same name cannot be used for both.</p></item>
</olist>

<p>A key technical challenge to obtaining a useful
system of naming XML Schema components is to address these issues or decide
that certain cases need not be addressed. In particular:
</p>
<olist>
<item><p>Designators must either include full <phrase diff="chg">&expanded-names;</phrase>, or define
namespace bindings.</p></item>
<item><p>Designators must distinguish named components in
different symbol spaces from one another.</p></item>
<item><p>Designators must provide a means of distinguishing locally scoped
element and attribute declarations with the same name.</p></item>
<item><p>Designators must provide for any designatable unnamed components, such
as anonymous type definitions, wildcards, and the
schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add">
description</phrase> 
component.</p></item>
<item><p>Designators must function in the face of redefinitions.</p></item>
</olist>

<p>The schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> schema component may represent the amalgamation of
several distinct schema documents, or none at all. It may be associated with
any number of target namespaces, including none at all. It may have been
obtained for a particular schema assessment episode by de-referencing URIs given
in schemaLocation attributes, or by an association with the target namespace or
by some other application-specific means. In short, there are substantial
technical challenges to defining a reliable designator for the
schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase>, particularly if that designator is expected to serve as a
starting point for the other components encompassed by that schema.
</p>
<p>This specification divides the problem of constructing schema component
designators into two parts: defining a designator for an assembled schema, and
defining a designator for a particular schema component or schema components,
understood relative to a designated schema. <phrase diff="add">The first task
is discussed in <specref ref="section-scds"/>, although this specification does
not define a specific rule for how to construct a single URI for an assembled
schema. The second task is addressed in detail 
in <specref ref="section-path"/>. </phrase> 
</p>
  </div1>
  <div1 id="section-goals">
    <head>Goals and Use Cases (Non-Normative)</head>
    <div2 id="section-requirements">
      <head>Requirements</head>
<glist>
<gitem>
<label>Basic Functionality</label>
<def>
<olist>
  <item><p diff="chg">
  Each component should have at least one unambiguous designator
  that designates that component and no other.  However, certain
  abbreviation and wildcarding constructs may designate collections
  of components.
  </p></item>
  <item><p>It should be possible to designate any schema component within a
  schema. However, some exceptions will be made for certain of the helper
  components.
  </p></item>
  <item><p>Designators should provide (or assure) a URI for the unique identification of a schema.
  </p></item>
  <item><p>If there is more than one designator for a construct, there should be
  exactly one canonical form of the designator.</p></item>
  <item><p diff="add">Designators should be usable for either the XML Schema
  1.0 or the XML Schema 1.1 component model
  </p></item>
</olist>
</def>
</gitem>
<gitem>
<label>Properties of the Designator</label>
<def>
<olist>
  <item><p>Designators should be human-readable.</p></item>
  <item><p>Given a designator, it should be possible to get the <phrase diff="chg">&expanded-name;</phrase> for the
  designated component, if one exists for that component.
  </p></item>
  <item><p>It should be possible to <phrase diff="del">algorithmically and
  consistently</phrase>
   generate
  the canonical designator for each component 
  <phrase diff="add">algorithmically and consistently</phrase>, 
  either against an assembled
  schema or as the schema is assembled.</p></item>
  <item><p>Designators should be parsable with compositional semantics (or, in
other words, they should have <emph>expressive notation</emph>).</p></item>
  <item><p>There should be a formal specification of what constitutes a legal designator.</p></item>
</olist>
</def>
</gitem>
<gitem>
<label>Compatibility</label>
<def>
<olist>
  <item><p>Designators should be URI references.</p></item>
  <item><p>Designators should work well in a RDDL environment.</p></item>
</olist>
</def>
</gitem>
<gitem>
<label>Non-goals</label>
<def>
<olist>
  <item diff="del"><p diff="del">It is not a requirement to designate particle components as distinct
  from terms.</p>
  </item>
  <item><p>It is not a requirement to tie schema component validity to
  namespace validity.</p></item>
  <item><p>It is not a requirement that it be possible to
construct designators to refer to arbitrary schema components without any
knowledge of schema internals.</p></item>
  <item><p>It is not a requirement to be able to tell, from a schema component
designator for an element declaration, whether instances of that element
declaration must appear in document instances with qualified or unqualified
names.</p></item>
  <item><p>It is not a requirement <phrase diff="add">that it be
  possible</phrase> to uniquely assign schema
  component designators 
  (element, attribute, and type designators) to information
  items in a document instance given only a set of schema component
  designators.
  </p></item>
</olist>
</def>
</gitem>
</glist>
    </div2>
    <div2 id="section-usecases">
      <head>Use Cases</head>

<glist>
<gitem><label>Type references</label>
<def>
<p>In general Schema Component Designators can be used to provide references to
arbitrary types, whether they are named global types or local or anonymous
types. These use cases all benefit from being able to refer to any type
declaration.</p>
<ulist>
  <item><p>Describing the type of an expression, where the type might be an
  anonymous or local type and a QName is therefore inadequate.
  There are a number of examples
  where this could be valuable in type-aware languages that operate on
  schema-validated XML:
  </p>
  <ulist>
  <item><p>Naming the type of something that has been selected.
  </p></item>
  <item><p>For use wherever types are named, for example to specify a type in
  a query expression.</p></item>
  <item><p>Enabling <phrase diff="add">interfaces like those described
  in</phrase> <phrase diff="chg"><bibref ref="dom3"/> 
  </phrase> to expose anonymous types.</p></item>
  </ulist>
  </item>
  <item><p>Identifying types for casting, specifically wrt anonymous
  and local types.</p></item>
  <item><p>Identifying types for function signatures.
  </p></item>
</ulist>
</def>
</gitem>
<gitem><label>Element declaration references</label>
<def>
<p>These use cases benefit from being able to refer to any element declaration.
</p>
<ulist>
  <item diff="del"><p>Naming an element declaration which is matched by an arbitrary
  expression. e.g. Given XPath /one/two/foo, naming that it only matches local
  element 'foo'.</p></item>
  <item diff="add"><p>Referring to a local element declaration, with or without
  knowledge of the names of the scoping types and elements.
  </p></item>
</ulist>
</def>
</gitem>
<gitem><label>Stand-off schema annotation</label>
<def>
<p>Schema component designators can be used to refer to specific parts of a
schema to provide an out-of-band annotation capability, for commentary, error
reporting, or the association of layered semantics with schema components.
</p>
<ulist>
  <item><p>Writing error messages. There are two classes of error messages in
view: errors in an instance and errors in the schema. For example, if an
instance has a quantity which violates the constraints of a particular type,
such as a range constraint, it is valuable for the error message to be able to
name and refer to the specific type whose constraints were violated, even if
that is <phrase diff="add">the anonymous type of</phrase> a local element
<phrase diff="add">declaration</phrase><phrase diff="del">with an anonymous
types</phrase>. An example of a schema 
error would be that one type is not a valid restriction of another type.
This use case benefits from being able to name and refer to type, element, and
attribute declarations, as well as element and attribute uses, groups, and
possibly facets and particles. It is unclear whether being able to
<phrase diff="chg">refer separately</phrase>
to particles versus groups is important. Being able to 
<phrase diff="chg">refer separately</phrase>
to attribute and element uses versus attribute and element declarations may be
important.
</p></item>
  <item><p>Schema documentation. The transfer syntax for W3C XML Schema allows
  for documentation to be attached to components in-line. In many cases it may
  be preferable to keep the documentation separate from the active definitions,
  to save bandwidth, to provide for alternative documentation for different
  communities, and so on. Being able to refer to any schema component that can
  support an annotation (all but annotation itself) supports this use case.
  </p></item>
  <item><p>Commentary on schemas, such as best practices documents, reviews and
  comparisons of particular schemas, and so on.
  </p></item>
  <item><p>Associating an additional layer of semantics with schema
  components, for example, providing information to programming language or
  application environments to identify code to execute. For example, certain
  XML data binding frameworks today reference complex types and elements using
  their own path syntax for the purpose.
</p></item>
</ulist>
</def>
</gitem>
<gitem><label>Miscellaneous text-based uses within schema-based tools</label>
<def>
<p>Having a simple textual way to refer to the abstract components of a schema
enables certain kinds of text-based schema-related processing.</p>
<ulist>
  <item><p>A tool that creates interlinked HTML pages describing a schema.</p></item>
  <item><p>String-based tests of type equivalence. Such tests can be used for
  comparing serialized PSVIs to provide for interoperable tests of type
  equivalence and processor comparisons.
  </p></item>
  <item><p>String-based comparisons of processors generally, making it
  possible, for example, to ask and
  answer the question &quot;Did two validations of the same document on
  different machines use the same type for a given element?&quot;
   </p></item>
      <item><p>input/output</p></item>
      <item><p>user reports</p></item>
      <item><p>glue/interfaces<phrase diff="del"> among</phrase></p></item>
</ulist>
</def>
</gitem>
<gitem><label>Other</label>
<def>
<ulist>
  <item><p>Simple selection queries, such as &quot;the type that is the base
  type of X&quot; without knowledge of its name.</p></item>
  <item><p>Creation or initial drafting of a new schema or schema document by
  selecting components from existing schema.
  </p></item>
  <item diff="del"><p>RDF assertions about types, etc.</p></item>
  <item diff="add"><p>Using <phrase diff="chg">XSD</phrase> simple types as the
  datatype of RDF literals.</p></item> 
  <item diff="add"><p>Describing <phrase diff="chg">XSD</phrase> Components
  within RDF, including 
  the use of <phrase diff="chg">XSD</phrase> simple types as RDF
  classes.</p></item> 
  <item><p>
Formal description requires unique identifier for each declaration and
definition component used within the context of the validation episode.
  </p></item>
  <item><p>Enumerating dependencies among schema components. For example, where
  one complex type restricts another, the local elements in one depend on the
  local elements of the other.</p></item>
</ulist>
</def>
</gitem>
</glist>
    </div2>
  </div1>
  <div1 id="section-scds">
     <head>Schema Component Designators</head>

<p>Schema component designators rely on a layered model of schema
component reference. Schema component paths designate components in the context
of a particular schema assembly <phrase diff="add">and depend on a namespace
binding context</phrase>. 
<phrase diff="chg">Full blown schema designators consist of two parts: a URI
without a fragment identifier part, which identifies the schema, and a
fragment identifier which encapsulates a schema component path to designate a
set of components in the context of that schema.
</phrase>
<phrase diff="add">Schema component paths may be used in contexts other than
schema component designators, given appropriate specification of the namespace
binding context and the target schema.  
</phrase></p>
<p>This section describes schema component designators as a whole. The details
of schema component paths are described in <specref ref="section-path"/>.</p>
<p><termdef id="key-sd" term="schema designator">A <term>schema
designator</term> is a single URI for a resource representing an
assembled schema.</termdef>
</p>
<p>Many possible conventions for obtaining a single URI to refer to a schema
are possible.
In the simplest case, where there is one root schema document, the URI of
that document suffices. In other cases a schema may have been assembled from
multiple schema documents, or from components obtained via other
representations, and some
representation of that collection or of the assembled results will be required.
</p>
<p>We expect that it will be
highly desirable for the community to evolve one convention for referring
to an assembled schema to
ensure consistency of global schema component designators. This specification
declines to specify what that one way should be.
</p>
<note><p>
<phrase diff="add">Like any resource, the schema denoted by a URI may be
represented in a variety of forms, with different media types.  When a URI is
dereferenced, the form and resolution of any fragment identifier depend (as
specified by <bibref ref="rfc3986"/>) on the media type of the representation
obtained.</phrase>
The representation of a resource obtained by dereferencing a schema URI
must <phrase diff="add">therefore</phrase> allow for the fragment identifier
syntax defined here <phrase diff="add">in order for schema component
designators to successfully resolve to components</phrase>. 
<phrase diff="add">Whatever representation of a schema is used, 
the media type should allow for the fragment identifier syntax defined here.
This will be true for any XML representation of the schema, since the XPointer
framework <bibref ref="xptrframework"/> is defined for all XML media
types. Other media types must explicitly specify a compatible fragment
identifier syntax.
</phrase>
<phrase diff="del">
The representation of the resource either needs to be an XML encoding to fit with
the XPointer framework 
<phrase diff="add"><bibref ref="xptrframework"/></phrase>, or its definition
needs to explicitly entail a compatible fragment identifier syntax.
</phrase>
</p></note>
<p>The schema component reference core defines reference to a schema component
in the context of an assembled XML Schema. <specref ref="section-path"/>
defines this
relationship between an assemblage of schema components and component paths.
Schema assembly is described in
<xspecref href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#composition">Section
4 of XML Schema Part 1: Structures</xspecref>.
</p>
<p>For the purposes of component paths, a 
missing component 
<phrase diff="add">(see <xspecref
href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#conformance-missing">
Section 5.3 of XML Schema Part 1: Structures</xspecref>)</phrase>
cannot be used to
construct a valid path; nor can a schema component be successfully referenced
through a path that references a missing component.
</p>

<p><termdef id="key-scd" term="absolute schema component designator">An
<term>absolute schema component designator</term> <phrase diff="add">identifies
a particular schema component; it</phrase>
consists of two parts: a designator
for the assembled schema (a <termref def="key-sd">schema designator</termref>), and a designator for a
particular schema component or schema components relative (a <termref def="key-relative-scd">relative
schema component designator</termref>) to that assembled schema.</termdef>
</p>
<p>Syntactically, the first part is a URI <phrase diff="add">without a fragment
identifier</phrase>, and the second part
is an XPointer fragment identifier. An absolute schema component designator
therefore is a URI reference.
<phrase diff="add">For example: 
http://example.org/schemas/po.xsd#xscd(/type::purchaseOrderType)
</phrase>
</p>
<p diff="add">
Note that a schema component designator may contain Unicode characters 
that are not allowed in URIs. Any such characters must be encoded and escaped
to obtain a URI suitable for retrieval, if retrieval is required.
</p>
<p><termdef id="key-relative-scd" term="relative schema component
    designator"><phrase diff="chg">A</phrase>
    <term>relative schema component designator</term> 
    <phrase diff="add">identifies a particular schema component relative to
    some current assembled schema; it</phrase>
    is <phrase diff="add">expressed as</phrase> an <xspecref
    href="http://www.w3.org/TR/xptr-framework/#scheme">XPointer scheme</xspecref>
    <code> xscd()</code> that uses a <termref def="key-scp">schema component path</termref>
    as the <xspecref
    href="http://www.w3.org/TR/xptr-framework/#NT-SchemeData">scheme data</xspecref>.</termdef>  This
    XPointer scheme may be used in combination with the
    <xspecref href="http://www.w3.org/TR/xptr-xmlns/#NT-XmlnsSchemeData"><phrase>XPointer
    <code>xmlns()</code> scheme</phrase></xspecref>
    <phrase diff="add"><bibref ref="xptrxmlns"/></phrase>.
    It <phrase diff="del">must not be</phrase><phrase diff="add">is not
    designed to be</phrase> used in
    combination with other XPointer schemes.
 The construction and syntax of schema component paths are described in
    <specref ref="section-path"/>.
 </p>
<div2 id="section-scd-syntax">
      <head>Schema Component Designator Syntax</head>
<scrap lang="ebnf">
<head>EBNF</head>

<prod id="NT-SchemaComponentDesignator" ><!--num="1">-->
    <lhs>SchemaComponentDesignator</lhs>
    <rhs><nt def="NT-AbsoluteSchemaComponentDesignator">AbsoluteSchemaComponentDesignator</nt> |
        <nt def="NT-RelativeSchemaComponentDesignator">
            RelativeSchemaComponentDesignator</nt></rhs>
</prod>

<prod id="NT-AbsoluteSchemaComponentDesignator" ><!--num="2">-->
    <lhs>AbsoluteSchemaComponentDesignator</lhs>
    <rhs><nt def="NT-SchemaDesignator">SchemaDesignator</nt> '#'
        <nt def="NT-RelativeSchemaComponentDesignator">
            RelativeSchemaComponentDesignator</nt></rhs>
</prod>

<prod id="NT-SchemaDesignator" ><!--num="3">-->
    <lhs>SchemaDesignator</lhs>
    <rhs><xnt href="http://www.ietf.org/rfc/rfc3986.txt">URI</xnt></rhs>
</prod>

<prod id="NT-RelativeSchemaComponentDesignator" ><!--num="3">-->
   <lhs>RelativeSchemaComponentDesignator</lhs>
   <rhs><nt def="NT-XmlnsPointerPart">XmlnsPointerPart</nt>*
        <nt def="NT-XscdPointerPart">XscdPointerPart</nt>
   </rhs>
</prod>

<prod id="NT-XmlnsPointerPart" ><!--num="4">-->
    <lhs>XmlnsPointerPart</lhs>
    <rhs>
    'xmlns' '(' <xnt href="http://www.w3.org/TR/xptr-xmlns/#NT-XmlnsSchemeData">XmlnsSchemeData</xnt> ')'
    </rhs>
</prod>

<prod id="NT-XscdPointerPart" ><!--num="5">-->
   <lhs>XscdPointerPart</lhs>
   <rhs>'xscd' '(' <nt def="NT-SchemaComponentPath">SchemaComponentPath</nt> ')'
   </rhs>
</prod>
</scrap>
    </div2>

<div2 id="section-canonical">
    <head>Canonical Schema Component Designators</head>
<p><termdef id="key-canonical-scd" term="canonical schema component designator">
A <term>canonical schema component designator</term>
is an absolute schema component designator that is a URI
that has been normalized according to the rules given in
<phrase diff="del">
 the 
<loc href="http://gbiv.com/protocols/uri/rev-2002/rfc2396bis.html" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">update to RFC2396</loc>
</phrase>
<phrase diff="add">RFC 3986<bibref ref="rfc3986"/></phrase>
and where the relative schema component designator consists of an <code>xmlns</code>
XPointer pointer part (if required) followed
by a <termref def="key-canonicalized-xscd"><phrase>canonicalized <code>xscd</code> XPointer pointer part</phrase></termref>.
</termdef></p>
<p>
<termdef id="key-canonicalized-xscd" term="canonicalized xscd XPointer pointer part">
A <term><phrase>canonicalized <code>xscd</code> XPointer pointer part</phrase></term> is
  an <code>xscd</code> XPointer pointer part <phrase diff="chg">whose</phrase>
  pointer data is a canonical schema 
component path. 
</termdef>
</p>
</div2>
<div2 id="section-equality">
    <head>Equality of Schema Component Designators</head>
<p>Many use cases for schema component designators call for them to be compared
for equality. A simple string comparison 
<phrase diff="del">cannot be used</phrase>
<phrase diff="add">may fail to correctly recognize equivalent
designators</phrase> 
with this scheme
because namespace prefixes may vary. However, comparison is still
straightforward. 
</p>
<p><termdef id="key-equal-scd" term="schema component designators are equal">Two
<term>schema component designators are equal</term> if they are absolute
and their URIs are equal or if they are relative to the
same schema, and their <termref def="key-equal-path">schema component paths are
equal</termref>.</termdef>
</p>
</div2>
  </div1>

<div1 id="section-path">
<head>Schema Component Paths</head>
<p>An assembled schema forms a <phrase diff="add">rooted</phrase> graph of
schema components <phrase diff="add">and property records</phrase>, where
certain schema component <phrase diff="add">and property record</phrase>
properties contain other schema components <phrase diff="add">and property
records</phrase> as their 
values (or part of their values). <phrase diff="add">The graph arcs are
directed and 
labelled. The graph may have cycles in it.</phrase>
Schema component paths can be regarded as being
constructed step-by-step by traversing the schema component properties,
starting at the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> schema component. Within this graph there may
be more than one path to a particular schema component. 
This section describes
<phrase diff="del">the general procedure for traversing the graph and
constructing paths</phrase>
<phrase diff="add">how paths are interpreted</phrase>, and then
defines which <phrase diff="chg">paths are</phrase> the canonical 
one<phrase diff="add">s</phrase>. 
</p>
<p>For the purposes of schema component paths, presume the
existence of an {identity constraint definitions} property of
the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component whose value is the union of all identity
constraint components in the assembled schema.
<phrase diff="del">Future revisions of the XML Schema specification may define
this property.</phrase> 
<phrase diff="add">The XML Schema 1.1 specification defines
this property.</phrase> 
</p>

<p diff="del"><termdef id="old-key-scp" term="schema component path">A
<term>schema component path</term> <phrase diff="add">identifies a particular
schema component in the context of an assembled schema; it</phrase> is a series
of <termref def="old-key-scp-step">[step]</termref> pieces, each of which
corresponds to a particular schema 
component along the path from the schema-as-a-whole schema component.</termdef>
Each step has a concrete syntactic representation, which is
described in <specref ref="section-path-syntax"/>.
</p>
<p diff="del">
<termdef id="old-key-scp-step" term="step">A <term>[step]</term> 
<phrase diff="chg">identifies</phrase> a schema
component along the path from the schema-as-a-whole schema component. Each [step] has a possibly empty [target namespace], a possibly
empty [name], and possible empty [predicate], a [schema component
kind], and an [axis].</termdef> The values for these properties are defined for
specific schema components, below, but in general
the [target namespace] will have the same value as the {target
namespace} property of the schema component and the [name] will have the value
as the {name} property of the schema component. The value of [schema component
kind] is a label for the kind of schema component involved and the value of 
[axis] is a label for the component property leading to the component. The
[predicate] is 
used to select schema components that have no name to distinguish them
or where the name does not suffice to distinguish them, such as instances of
element declarations within a term.
</p>
    <div2 id="section-path-traversal">
      <head>Schema Component Graph Traversal</head>

<p>An assembled schema consists of a graph of schema components. 
<phrase diff="add">Schema property records and helper components are included
in the graph, but a schema component path never refers to them.  Traversal
in the graph passes <emph>through</emph> property records.
</phrase>
<phrase diff="del">The following
schema component properties have as their values (or a part of their values)
other schema components, thus creating the links in the graph which may be
traversed to construct a schema component path.
</phrase>
<phrase diff="add">A schema component property that has other schema
components as its value
or as part of its value creates links in the graph which may be traversed 
through one of the defined axes to construct a schema component path.
</phrase>
</p>
<p diff="del">Traversal through the schema component graph occurs through any
of the 
properties by taking a member of one of these lists as the basis for the next
<phrase diff="chg">step</phrase>:
</p>
<slist diff="del">
   <sitem>{type definitions}</sitem>
   <sitem>{attribute declarations}</sitem>
   <sitem>{element declarations}</sitem>
   <sitem>{attribute group definitions}</sitem>
   <sitem>{model group definitions}</sitem>
   <sitem>{notation declarations}</sitem>
   <sitem>{identity constraint definitions}</sitem>
   <sitem>{facets}</sitem>
   <sitem>{fundamental facets}</sitem>
   <sitem>{member type definitions}</sitem>
   <sitem>{attribute uses}</sitem>
   <sitem><phrase diff="add">{particles} (particle axis)</phrase></sitem>
   <sitem><phrase diff="add">{substitution group affiliations}</phrase></sitem>
   <sitem><phrase diff="add">{assertions}</phrase></sitem>
   <sitem><phrase diff="add">{alternatives}</phrase></sitem>
   <sitem><phrase diff="add">{annotations} (1.1 only)</phrase></sitem>
</slist>
<p diff="del">Traversal through the schema component graph occurs through any
of the 
following properties by taking that schema component as
the basis for the next <phrase diff="chg">step</phrase>.</p>
<slist diff="del">
   <sitem>{type definition}</sitem>
   <sitem>{item type definition}</sitem>
   <sitem>{attribute wildcard}</sitem>
   <sitem>{model group}</sitem>
   <sitem>{attribute declaration}</sitem>
   <sitem>{term}</sitem>
   <sitem>{base type definition}</sitem>
   <sitem>{primitive type definition}</sitem>
   <sitem>{substitution group affiliation}</sitem>
   <sitem>{referenced key}</sitem>
   <sitem><phrase diff="add">{parent}</phrase></sitem>
   <sitem><phrase diff="add">{simple type definition}</phrase></sitem>
   <sitem><phrase diff="add">{wildcard}</phrase></sitem>
</slist>
<p diff="del"><phrase diff="add">Traversal through the schema component graph
occurs through any 
of the following properties by taking one of that property record's properties
as the basis for the next step.</phrase></p>
<slist diff="del">
   <sitem diff="add">{type table}</sitem>
   <sitem diff="add">{scope}</sitem>
   <sitem diff="add">{context}</sitem>
   <sitem diff="add">{content type}</sitem>
   <sitem diff="add">{open content}</sitem>
</slist>
<p diff="del">Traversal through the schema component graph occurs to the
following 
properties, but in a somewhat special way, as referring to a collection of
annotations as a group 
<phrase diff="add">in the 1.0 component model</phrase>,
rather than to an individual annotation component. 
This is because 
<phrase diff="chg">there are no component properties that can
be used to</phrase> distinguish between individual annotations
<phrase diff="add">in the 1.0 component model</phrase>.
</p>
<slist diff="del">
   <sitem>{annotations}</sitem>
   <sitem>{annotation}</sitem>
</slist>
<p diff="del">Traversal through the schema component graph occurs through the
following 
properties, but in different ways depending on what kind of value it has:
</p>
<slist diff="del">
   <sitem>{content type}</sitem>
   <sitem>{scope}</sitem>
   <sitem><phrase diff="add">{value}</phrase></sitem>
</slist>
<p diff="del">Traversal will proceed through the particle of the {content type}
property 
if a content model is present, or through the {content type} property directly
if it is a simple type definition. Traversal will proceed through the {scope}
property unless it has the value &quot;global&quot;.  
<phrase diff="add">Traversal will proceed 
through the {value} property if it is a sequence of assertion components
(otherwise not).</phrase>
</p>
<p><termdef id="key-arc" term="arc">A traversal from one component to another
takes place across some particular component property. This property is 
the <term><phrase diff="chg">arc</phrase></term> of traversal.
</termdef></p>
<p><termdef id="key-default-arc" term="default arc">A <term>default
<phrase diff="chg">arc</phrase></term> is a privileged 
<phrase diff="chg">arc</phrase> of traversal.
</termdef>
The default <phrase diff="chg">arcs</phrase> are:
</p>
<slist>
<sitem>{type definition}</sitem>
<sitem>{content type}</sitem>
<sitem><phrase diff="add">{particle}</phrase></sitem>
<sitem><phrase diff="add">{simple type definition}</phrase></sitem>
<sitem>{attribute declaration}</sitem>
<sitem>{attribute uses}</sitem>
<sitem>{model group}</sitem>
<sitem>{particles}</sitem>
<sitem>{term}</sitem>
<sitem>{element declarations}</sitem>
<sitem>{facets}</sitem>
</slist>
<p diff="add"><specref ref="properties"/> includes a summary of which 
<phrase diff="chg">arcs</phrase> act
as defaults and when.</p>
    </div2>
  <div2 id="section-path-syntax">
  <head>Schema Component Path Syntax</head>
<p diff="del">In general the syntax of a step of the schema component path has the
following form: </p>
<eg diff="del" role="syntax"><phrase><var>[schema component kind | axis]</var><code>::[</code><var>ns-prefix</var><code>:</code>]<var>[name]</var><code>[</code><var>[predicate]</var><code>]</code></phrase>
</eg>
<p diff="del">where <var>ns-prefix</var> is bound to the [target namespace]
of the component<phrase diff="add"> and will be absent (along with the colon)
if there is no target 
namespace</phrase>. In the context of schema component designators the
namespace prefixes will be bound via the <code>xmlns</code> XPointer scheme; in
the context of an XML document the namespace prefixes will be bound in the
conventional way (using the [in-scope namespaces] property of the
element information item); other host languages <phrase diff="add">and some XML
applications</phrase> will define their own namespace binding rules. 
</p>
<p diff="del">Non-default axes may use the axis name instead of the schema
component kind, 
in order to disambiguate the traversal.</p>
<p diff="del">
The syntax provides various abbreviations as defined below.
</p>
<p diff="del">Each kind of step accepts a wildcarding construct, which uses the
special literal <code>*</code> instead of the name and has the form:
</p>
<eg role="syntax" diff="del"><phrase><var>[schema component kind | axis]</var><code>::*</code> </phrase>
</eg>
<p diff="del">A wildcarded step has the properties:</p>
<table diff="del" border="0" cellspacing="5" summary="Wildcarded Step Designator Model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top">*</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top">See
various component steps</td></tr>
<tr><td valign="top">[axis]</td><td valign="top">See various component steps</td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>
<p diff="del">Such a step refers to the set of all successor components of the
given 
kind. Implementations will have to exercise care to properly handle
circularities in the component graph in determining the set of components
matched by a path. 
</p>
<p diff="del">A step involving an anonymous component uses the name <code>0</code>:
</p>
<eg diff="del" role="syntax"><phrase><var>[schema component kind]</var><code>::0</code></phrase>
</eg>
<p diff="del">This name cannot have any conflict with any possible named component, as
<code>0</code> is not a valid name start character.</p>
<p diff="del">Steps in the path are separated by a slash:</p>
<eg role="syntax" diff="del"><phrase><code>/</code></phrase></eg>
<p diff="del">except in the case of the schema-as-a-whole component, which is represented
by a bare slash already, so no additional separator is necessary.</p>

      <div3 diff="del" id="old-schema-component">
        <head>Schema-as-a-whole Component</head>
<p>The [step] for the schema-as-a-whole schema component has the
properties:</p>
<table border="0" cellspacing="5" summary="Schema-as-a-whole Designator Model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top"></td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>schema</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code></code></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax"><phrase><code>/</code></phrase></eg>
      </div3>
      <div3 diff="del" id="old-attr-decl-component">
        <head>Attribute Declaration</head>
<p>The [step] for an attribute declaration schema component has
the properties:</p>

<table border="0" cellspacing="5" summary="Attribute declaration designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>attribute</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>attribute</code>&#xA0;<code>declaration</code>
<phrase diff="add">or <code>context</code></phrase>
</td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p diff="add">If [axis] is <code>context</code> then <code><phrase>context::<var>prefix:name</var></phrase></code></p></item>
<item><p><phrase diff="add">Otherwise</phrase> <phrase diff="chg"><code><phrase>schemaAttribute::<var>prefix:name</var></phrase></code></phrase> or <code><phrase>@<var>prefix:name</var></phrase></code></p></item>
</ulist>
</eg>
      </div3>
      <div3 diff="del" id="old-elt-decl-component">
        <head>Element Declaration</head>

<p>The [step] for an element declaration schema component has
the properties:</p>

<table border="0" cellspacing="5" summary="Element declaration designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><phrase diff="chg"><code>schemaElement</code></phrase></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>element</code>&#xA0;<code>declaration</code>, <code>term</code>, <code>substitution</code>&#xA0;<code>group</code>&#xA0;<code>affiliation</code>,
<phrase diff="add">or <code>context</code></phrase>
</td></tr> 
<tr><td valign="top">[predicate]</td><td valign="top">None if the [axis] is
<code>substitution</code>&#xA0;<code>group</code>&#xA0;<code>affiliation</code>
<phrase diff="add">or <code>context</code></phrase>
or if the {scope} is
<code>global</code>. Otherwise, the pair
<code>{position,&#xA0;<var>n</var>}</code> where <code><var>n</var></code> is
the position of the element declaration among other element declarations with
the same {target namespace} and {name} property values among the {particles} in
the superordinate model group.</td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p>If [axis] is
<code>substitution</code>&#xA0;<code>group</code>&#xA0;<code>affiliation</code> 
then 
<code>substitutionGroup::<var>prefix:name</var></code></p></item>
<item><p diff="add">If [axis] is <code>context</code> then <code>context::<var>prefix:name</var></code></p></item>
<item><p>Otherwise
<phrase diff="chg"><code>schemaElement::<var>prefix:name</var>[<var>n</var>]</code></phrase> or
<code><var>prefix:name</var>[<var>n</var>]</code> where
the <code>[<var>n</var>]</code> will be absent if the {scope} of
the element declaration is <code>global</code> and may be absent if 
<phrase diff="add">there is only one element declaration with the given {target
namespace} and {name} property among the {particles}
of the superordinate model group. In this case</phrase>
the value of
<code><var>n</var></code> 
<phrase diff="del">is</phrase><phrase diff="add">would be</phrase> 1.</p></item>
</ulist>
</eg>
      </div3>
      <div3 diff="del" id="old-simple-type-def-component">
        <head>Simple Type Definition</head>

<p>The [step] for a simple type definition schema component has
the properties:</p>

<table border="0" cellspacing="5" summary="Simple type definition designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>simpleType</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>type</code>&#xA0;<code>definition</code>,
<code>base</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>,
<code>member</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>, 
<code>item</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>, 
<code>primitive</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>, 
<phrase diff="add"><code>content</code>&#xA0;<code>type</code>,
<code>simple&#xA0;type&#xA0;definition</code>,
<code>scope</code>, or <code>context</code></phrase>
</td></tr>
<tr><td valign="top">[predicate]</td>
<td valign="top">
If the [axis] is <code>member</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>, the pair
{position,&#xA0;<var>n</var>} where <code><var>n</var></code> is the
position of this simple type definition among 
<phrase diff="chg">the current component's</phrase> 
{member type definitions}.
Otherwise, none.</td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p>If [axis] is <code>base</code>&#xA0;<code>type</code>&#xA0;<code>definition</code> then
<code>baseType::<var>prefix:name</var></code></p>
</item>
<item><p>If [axis] is <code>primitive</code>&#xA0;<code>type</code>&#xA0;<code>definition</code> then
<code>primitiveType::<var>prefix:name</var></code></p>
</item>
<item><p>If [axis] is <code>member</code>&#xA0;<code>type</code>&#xA0;<code>definition</code> then
<code>memberType::<var>prefix:name</var>[<var>n</var>]</code></p>
</item>
<item><p>If [axis] is <code>item</code>&#xA0;<code>type</code>&#xA0;<code>definition</code> then
<code>itemType::<var>prefix:name</var></code></p>
</item>
<item><p diff="add">If [axis] is <code>scope</code> then
<code>scope::<var>prefix:name</var></code></p>
</item>
<item><p diff="add">If [axis] is <code>context</code> then
<code>context::<var>prefix:name</var></code></p>
</item>
<item><p>Otherwise
<code>type::<var>prefix:name</var></code> or <code>~<var>prefix:name</var></code>
</p></item>
</ulist>
<phrase><code><var>prefix:name</var></code> will be <code>0</code> for anonymous types. 
The <code>[<var>n</var>]</code> may be absent if 
<phrase diff="add">there is only one member type among the simple type
definitions's {member type definitions}. In this case</phrase>
the value of <code><var>n</var></code> <phrase diff="del">is</phrase>
<phrase diff="del">would be</phrase> 1.
</phrase>
</eg>
      </div3>
      <div3 diff="del" id="old-complex-type-def-component">
        <head>Complex Type Definition</head>


<p>The [step] for a complex type definition schema component has
the properties:</p>

<table border="0" cellspacing="5" summary="Complex type definition designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>complexType</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>type</code>&#xA0;<code>definition</code>,
<phrase diff="del"><code>content</code>&#xA0;<code>type</code>,</phrase> <code>base</code>&#xA0;<code>type</code>&#xA0;<code>definition</code>, 
<code>scope</code>,
<phrase diff="add">or <code>context</code></phrase>
</td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p>If [axis] is <code>scope</code> then
<code>scope::<var>prefix:name</var></code></p>
</item>
<item><p diff="add">If [axis] is <code>context</code> then <code>context::<var>prefix:name</var></code></p></item>
<item><p>If [axis] is <code>base</code>&#xA0;<code>type</code>&#xA0;<code>definition</code> then
<code>baseType::<var>prefix:name</var></code></p>
</item>
<item><p>Otherwise
<code>type::<var>prefix:name</var></code> or <code>~<var>prefix:name</var></code></p>
</item>
</ulist>
<phrase><code><var>prefix:name</var></code> will be <code>0</code> for
anonymous types.</phrase>
</eg>
      </div3>
      <div3 diff="del" id="old-attr-group-def-component">
        <head>Attribute Group Definition</head>


<p>The [step] for an attribute group definition schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Attribute group definition
designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>attributeGroup</code></td></tr>
<tr><td valign="top">[axis]</td><td
valign="top"><code>attribute</code>&#xA0;<code>group</code>&#xA0;<code>definition</code>
<phrase diff="add">or <code>scope</code></phrase></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p diff="add">If [axis] is <code>scope</code> then <code>scope::<var>prefix::name</var></code></p></item>
<item><p><phrase diff="add">Otherwise</phrase> <code>attributeGroup::<var>prefix:name</var></code></p></item>
</ulist>
</eg>
      </div3>
      <div3 diff="del" id="old-model-group-def-component">
        <head>Model Group Definition</head>

<p>The [step] for a model group definition schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Model group definition designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>group</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>model</code>&#xA0;<code>group</code>&#xA0;<code>definition</code>
<phrase diff="add">or <code>scope</code></phrase>
</td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p diff="add">If [axis] is <code>scope</code> then <code>scope::<var>prefix:name</var></code></p></item>
<item><p><phrase diff="add">Otherwise</phrase> <code>group::<var>prefix:name</var></code></p></item>
</ulist>
</eg>
      </div3>
      <div3 diff="del" id="old-identity-constraint-def-component">
        <head>Identity-constraint definition</head>


<p>The [step] for an identity-constraint definition schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Identity-constraint definition designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>identityConstraint</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>identity</code>&#xA0;<code>constraint</code>&#xA0;<code>definition</code> or <code>referenced</code>&#xA0;<code>key</code></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax">
<ulist>
<item><p>If [axis] is <code>referenced key</code> then
<code>key::<var>prefix:name</var></code></p>
</item>
<item><p>Otherwise <code>identityConstraint::<var>prefix:name</var></code></p></item>
</ulist>
</eg>
      </div3>
      <div3 diff="del" id="old-notation-decl-component">
        <head>Notation declaration</head>

<p>The [step] for a notation declaration schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Notation declaration designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top">Value of {target namespace}</td></tr>
<tr><td valign="top">[name]</td><td valign="top">Value of {name}</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>notation</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>notation</code>&#xA0;<code>declaration</code></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax"><code>notation::<var>prefix:name</var></code></eg>
      </div3>
      <div3 diff="del" id="old-annotation-component">
        <head>Annotations</head>

<p>Annotation components are referenced as a collection. If the [step]
derives from an {annotations} property, the collection is the collection of all
the annotations given in that property. If the [step] derives from an
{annotation} property, the collection is the collection with just that
annotation in it.
</p>
<p>The [step] for an annotation schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Annotation designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top">*</td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>annotations</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>annotation</code></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top">
</td></tr>
</tbody>
</table>

<eg role="syntax"><code>annotation::*</code></eg>

<p>Annotations cannot be individually addressed: they can only be accessed
through wildcarding. Annotation components therefore do not have individually
distinguishable canonical schema component paths or designators.
</p>
      </div3>
      <div3 diff="del" id="old-model-group-component">
        <head>Model Group</head>

<p>The [step] for a model group schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Model group designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top"></td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top">The value of the {compositor} property,
one of <code>sequence</code>, <code>choice</code>, or <code>all</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>model</code>&#xA0;<code>group</code> or
<code>term</code></td></tr>
<tr><td valign="top">[predicate]</td>
<td valign="top">The pair <code>{position,&#xA0;<var>n</var>}</code> where
<code><var>n</var></code> is the position of the model group with respect to other model
groups among {particles} with the same {compositor} property value if this
model group is one particle of a superordinate
model group.</td></tr>
</tbody>
</table>

<eg role="syntax">
<code>model::sequence[<var>n</var>]</code>
or <code>model::choice[<var>n</var>]</code>
or <code>model::all[<var>n</var>]</code>
where the <code>[<var>n</var>]</code> may be absent if 
<phrase diff="add">there is only one model group with the same {compositor}
property among the {particles} of the superordinate model group.  In this 
case </phrase>
the value of
<code><var>n</var></code> <phrase diff="del">is</phrase><phrase
diff="add">would be</phrase> 1<phrase diff="del"> (as it always is for the
<code>all</code> compositor)</phrase>.</eg> 
      </div3>
      <div3 diff="del" id="old-particle-component">
        <head>Particle</head>
<p>Particle schema components are skipped over in the traversal through the
graph, do not contribute a step, and have no reflection in the path syntax.
</p>
      </div3>
      <div3 diff="del" id="old-wildcard-component">
        <head>Wildcard</head>

<p>The [step] for a wildcard schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Wildcard designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top"></td></tr>
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top">If the wildcard is the {term} of some
particle, then <code>any</code>, otherwise <code>anyAttribute</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>term</code><phrase
diff="add"> or <code>attribute wildcard</code></phrase></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top">If the [schema&#xA0;component&#xA0;kind] is <code>any</code>,
the pair <code>{position,&#xA0;<var>n</var>}</code> where
<code><var>n</var></code> is the position of the wildcard with respect to other wildcards
among {particles} of the superordinate model group.
</td></tr>
</tbody>
</table>

<eg role="syntax"><code>any::*[<var>n</var>]</code>
or <code>anyAttribute::*</code>
where the <code>[<var>n</var>]</code> may be absent if 
<phrase diff="add">there is only one wildcard among the {particles} of the
superordinate model group.  In this case</phrase>
the value of
<code><var>n</var></code> <phrase diff="del">is</phrase><phrase diff="add">would be</phrase> 1.</eg>
      </div3>
      <div3 diff="del" id="old-attr-use-component">
        <head>Attribute Use</head>

<p>Attribute use schema components are skipped over in the traversal through the graph, do not contribute
a step, and have no reflection in the path syntax.
</p>
      </div3>
      <div3 diff="del" id="old-facet-components">
        <head>Facets</head>
<p>The [step] for a facet schema
component has the properties:</p>

<table border="0" cellspacing="5" summary="Facet designator model">
<tbody>
<tr><td valign="top">[target&#xA0;namespace]</td><td valign="top"></td></tr>
<tr><td valign="top">[name]</td><td valign="top">The facet name, one of
<code>whiteSpace</code>, <code>minInclusive</code>,
<code>maxInclusive</code>, <code>minExclusive</code>,
<code>maxExclusive</code>, <code>totalDigits</code>,
<code>fractionDigits</code>, <code>length</code>, <code>minLength</code>,
<code>maxLength</code>, <code>pattern</code>, <code>enumeration</code>,
<phrase diff="add"><code>minScale</code>, <code>maxScale</code></phrase>
<code>ordered</code>, <code>bounded</code>, <code>cardinality</code>,
or <code>numeric</code></td></tr> 
<tr><td valign="top">[schema&#xA0;component&#xA0;kind]</td><td valign="top"><code>facet</code></td></tr>
<tr><td valign="top">[axis]</td><td valign="top"><code>facet</code> or
<code>fundamental</code>&#xA0;<code>facet</code></td></tr>
<tr><td valign="top">[predicate]</td><td valign="top"></td></tr>
</tbody>
</table>

<eg role="syntax"><code>facet::<var>name</var></code></eg>
      </div3>
      <div3 id="section-path-ebnf">
        <head>EBNF for Schema Component Path Syntax</head>
<scrap lang="ebnf">
<head id="ebnf">Path EBNF</head>
<prod id="NT-SchemaComponentPath" diff="chg" ><!--num="6">-->
   <lhs>SchemaComponentPath</lhs>
   <rhs>( <nt def="NT-SchemaStep">SchemaStep</nt> | 
          <nt def="NT-StepSeparator">StepSepator</nt>
          <nt def="NT-RelativeSchemaComponentPath">RelativeSchemaComponentPath</nt> ) <nt def="NT-ExtensionAccessor">ExtensionAccessor</nt>
   </rhs>
</prod>

<prod id="NT-SchemaStep" ><!--num="7">-->
   <lhs>SchemaStep</lhs>
   <rhs>'/'</rhs>
</prod>

<prod id="NT-RelativeSchemaComponentPath" ><!--num="8">-->
   <lhs>RelativeSchemaComponentPath</lhs>
   <rhs><nt def="NT-Step">Step</nt> |
        <nt def="NT-Step">Step</nt> 
        <nt def="NT-StepSeparator">StepSeparator</nt>
        <nt def="NT-RelativeSchemaComponentPath">RelativeSchemaComponentPath</nt>
   </rhs>
</prod>

<prod id="NT-StepSeparator" diff="chg" ><!--num="9">-->
   <lhs>StepSeparator</lhs>
   <rhs>'/' | 
        <nt def="NT-ComponentAxisSeparator">ComponentAxisSeparator</nt>
    </rhs>
</prod>

<prod id="NT-ComponentAxisSeparator" diff="add" ><!--num="10">-->
   <lhs>ComponentAxisSeparator</lhs>
   <rhs>'//'</rhs>
</prod>

<prod id="NT-Step" diff="chg" ><!--num="11">-->
   <lhs>Step</lhs>
   <rhs><nt def="NT-Axis">Axis</nt> 
        <nt def="NT-NameTest">NameTest</nt> 
        <nt def="NT-Predicate">Predicate</nt>? |
        <nt def="NT-AbbrevStep">AbbrevStep</nt> 
   </rhs>
</prod>

<prod id="NT-AbbrevStep" diff="add" ><!--num="12">-->
   <lhs>AbbrevStep</lhs>
   <rhs><nt def="NT-AbbrevAttributeStep">AbbrevAttributeStep</nt> |
        <nt def="NT-AbbrevElementStep">AbbrevElementStep</nt> |
        <nt def="NT-AbbrevTypeStep">AbbrevTypeStep</nt> |
        <nt def="NT-AbbrevCurrentComponentStep">AbbrevCurrentComponentStep</nt> |
   </rhs>
</prod>

<prod id="NT-AbbrevAttributeStep" diff="add" ><!--num="13">-->
   <lhs>AbbrevAttributeStep</lhs>
   <rhs>'@' <nt def="NT-NameTest">NameTest</nt> 
        <nt def="NT-Predicate">Predicate</nt>?
   </rhs>
</prod>

<prod id="NT-AbbrevElementStep" diff="add" ><!--num="14">-->
   <lhs>AbbrevElementStep</lhs>
   <rhs><nt def="NT-NameTest">NameTest</nt> 
        <nt def="NT-Predicate">Predicate</nt>? 
   </rhs>
</prod>

<prod id="NT-AbbrevTypeStep" diff="add" ><!--num="15">-->
   <lhs>AbbrevTypeStep</lhs>
   <rhs>'~' <nt def="NT-NameTest">NameTest</nt> 
        <nt def="NT-Predicate">Predicate</nt>?
   </rhs>
</prod>

<prod id="NT-AbbrevCurrentComponentStep" diff="add" ><!--num="16">-->
   <lhs>AbbrevCurrentComponentStep</lhs>
   <rhs>'.' <nt def="NT-Predicate">Predicate</nt>?</rhs>
</prod>

<prod id="NT-Axis" diff="add" ><!--num="17">-->
   <lhs>Axis</lhs>
   <rhs>
      'schemaAttribute'&#xA0;'::' | 'schemaElement'&#xA0;'::' | 
      'type'&#xA0;'::' |
      'attributeGroup'&#xA0;'::' | 'group'&#xA0;'::' |
      'identityConstraint'&#xA0;'::' |
      'assertion'&#xA0;'::' | 'alternative'&#xA0;'::' |
      'notation'&#xA0;'::' |
      'model'&#xA0;'::' |
      'anyAttribute'&#xA0;'::' | 'any'&#xA0;'::' |
      'facet'&#xA0;'::' |
      'scope'&#xA0;'::' | 'context'&#xA0;'::' |
      'substitutionGroup'&#xA0;'::' |
      'baseType'&#xA0;'::' | 'itemType'&#xA0;'::' | 'memberType'&#xA0;'::' | 'primitiveType'&#xA0;'::' | 
      'key'&#xA0;'::' |
      'annotation'&#xA0;'::' |
      'component'&#xA0;'::' | 'currentComponent'&#xA0;'::' |
      'attributeUse'&#xA0;'::' | 'particle'&#xA0;'::' |
      <nt def="NT-ExtensionAxis">ExtensionAxis</nt>
   </rhs>
</prod>


<prod id="NT-NameTest" diff="add" ><!--num="18">-->
   <lhs>NameTest</lhs>
   <rhs><xnt href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> |
   <nt def="NT-WildcardNameTest">WildcardNameTest</nt> | '0' 
   </rhs>
</prod>

<prod id="NT-WildcardNameTest" diff="add" ><!--num="19">-->
   <lhs>WildcardNameTest</lhs>
   <rhs>'*'</rhs>
</prod>

<prod id="NT-ExtensionAccessor" ><!--num="20">-->
   <lhs>ExtensionAccessor</lhs>
   <rhs><xnt href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> '(' ')'</rhs>
</prod>

<prod id="NT-ExtensionAxis" ><!--num="21">-->
   <lhs>ExtensionAxis</lhs>
   <rhs><xnt href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> '::'</rhs>
</prod>

<prod id="NT-NameOrWildcard" diff="del" ><!--num="100">-->
   <lhs>NameOrWildcard</lhs>
   <rhs><xnt href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> | '*'</rhs>
</prod>

<prod id="NT-NameWildcardOrAnonymous" diff="del" ><!--num="101">-->
   <lhs>NameWildcardOrAnonymous</lhs>
   <rhs><xnt href="http://www.w3.org/TR/REC-xml-names/#NT-QName">QName</xnt> | '*' | '0'</rhs>
</prod>

<prod id="NT-AttributeStep" diff="del" ><!--num="102">-->
   <lhs>AttributeStep</lhs>
   <rhs><nt def="NT-AttributeFullform">AttributeFullform</nt> |
       <nt def="NT-AttributeShortform">AttributeShortform</nt></rhs>
</prod>
<prod id="NT-AttributeFullform" diff="del" ><!--num="103">-->
   <lhs>AttributeFullform</lhs>
   <rhs>'schemaAttribute' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-AttributeShortform" diff="del" ><!--num="103">-->
   <lhs>AttributeShortform</lhs>
   <rhs>'@' <nt def="NT-NameOrWildcard">NameOrWildcard</nt>
   </rhs>
</prod>
<prod id="NT-ElementStep" diff="del" ><!--num="104">-->
   <lhs>ElementStep</lhs>
   <rhs> ( ( <nt def="NT-ElementFullform">ElementFullform</nt> |
       <nt def="NT-ElementShortform">ElementShortform</nt> )
       <nt def="NT-Predicate">Predicate</nt>? ) |
       <nt def="NT-SubstitutionGroupAxis">SubstitutionGroupAxis</nt></rhs>
</prod>
<prod id="NT-ElementFullform" diff="del" ><!--num="105">-->
   <lhs>ElementFullform</lhs>
   <rhs>'schemaElement' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-ElementShortform" diff="del" ><!--num="106">-->
   <lhs>ElementShortform</lhs>
   <rhs><nt def="NT-NameOrWildcard">NameOrWildcard</nt>
   </rhs>
</prod>
<prod id="NT-SubstitutionGroupAxis_old" diff="del" ><!--num="107">-->
   <lhs>SubstitutionGroupAxis</lhs>
   <rhs>'substitutionGroup' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-SimpleTypeStep" diff="del" ><!--num="108">-->
   <lhs>SimpleTypeStep</lhs>
   <rhs><nt def="NT-TypeDefinitionAxis">TypeDefinitionAxis</nt> |
        <nt def="NT-BaseTypeAxis">BaseTypeAxis</nt> |
        <nt def="NT-PrimitiveTypeAxis">PrimitiveTypeAxis</nt> |
        <nt def="NT-ItemTypeAxis">ItemTypeAxis</nt> |
        <nt def="NT-MemberTypeAxis">MemberTypeAxis</nt>
   </rhs>
</prod>
<prod id="NT-TypeDefinitionAxis" diff="del" ><!--num="109">-->
   <lhs>TypeDefinitionAxis</lhs>
   <rhs><nt def="NT-TypeDefinitionAxisFullform">TypeDefinitionAxisFullform</nt> |
        <nt def="NT-TypeDefinitionAxisShortform">TypeDefinitionAxisShortform</nt>
   </rhs>
</prod>
<prod id="NT-TypeDefinitionAxisFullform" diff="del" ><!--num="110">-->
   <lhs>TypeDefinitionAxisFullform</lhs>
   <rhs>'type' '::' <nt def="NT-NameWildcardOrAnonymous">NameWildcardOrAnonymous</nt> </rhs>
</prod>
<prod id="NT-TypeDefinitionAxisShortform" diff="del" ><!--num="111">-->
   <lhs>TypeDefinitionAxisShortform</lhs>
   <rhs>'~' <nt def="NT-NameWildcardOrAnonymous">NameWildcardOrAnonymous</nt> </rhs>
</prod>
<prod id="NT-BaseTypeAxis_old" diff="del" ><!--num="112">-->
   <lhs>BaseTypeAxis</lhs>
   <rhs>'baseType' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-PrimitiveTypeAxis_old" diff="del" ><!--num="113">-->
   <lhs>PrimitiveTypeAxis</lhs>
   <rhs>'primitiveType' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-ItemTypeAxis_old" diff="del" ><!--num="114">-->
   <lhs>ItemTypeAxis</lhs>
   <rhs>'itemType' '::' <nt def="NT-NameWildcardOrAnonymous">NameWildcardOrAnonymous</nt> </rhs>
</prod>
<prod id="NT-MemberTypeAxis_old" diff="del" ><!--num="115">-->
   <lhs>MemberTypeAxis</lhs>
   <rhs>'memberType' '::' <nt def="NT-NameWildcardOrAnonymous">NameWildcardOrAnonymous</nt> 
        <nt def="NT-Predicate">Predicate</nt>?
   </rhs>
</prod>
<prod id="NT-ComplexTypeStep" diff="del" ><!--num="116">-->
   <lhs>ComplexTypeStep</lhs>
   <rhs><nt def="NT-TypeDefinitionAxis">TypeDefinitionAxis</nt> |
        <nt def="NT-BaseTypeAxis">BaseTypeAxis</nt> |
        <nt def="NT-ScopeAxis">ScopeAxis</nt>         
   </rhs>
</prod>
<prod id="NT-ScopeAxis_old" diff="del" ><!--num="117">-->
   <lhs>ScopeAxis</lhs>
   <rhs>'scope' '::' <nt def="NT-NameWildcardOrAnonymous">NameWildcardOrAnonymous</nt> </rhs>
</prod>
<prod id="NT-AttributeGroupStep" diff="del" ><!--num="118">-->
   <lhs>AttributeGroupStep</lhs>
   <rhs>'attributeGroup' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-GroupStep" diff="del" ><!--num="119">-->
   <lhs>GroupStep</lhs>
   <rhs>'group' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-IdentityConstraintStep" diff="del" ><!--num="120">-->
   <lhs>IdentityConstraintStep</lhs>
   <rhs><nt def="NT-IdentityConstraintAxis">IdentityConstraintAxis</nt> |
        <nt def="NT-ReferencedKeyAxis">ReferencedKeyAxis</nt> 
   </rhs>
</prod>
<prod id="NT-IdentityConstraintAxis_old" diff="del" ><!--num="121">-->
   <lhs>IdentityConstraintAxis</lhs>
   <rhs>'identityConstraint' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-ReferencedKeyAxis" diff="del" ><!--num="122">-->
   <lhs>ReferencedKeyAxis</lhs>
   <rhs>'key' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-NotationStep" diff="del" ><!--num="123">-->
   <lhs>NotationStep</lhs>
   <rhs>'notation' '::' <nt def="NT-NameOrWildcard">NameOrWildcard</nt> </rhs>
</prod>
<prod id="NT-AnnotationsStep" diff="del" ><!--num="124">-->
   <lhs>AnnotationsStep</lhs>
   <rhs>'annotation' '::' '*' </rhs>
</prod>
<prod id="NT-ModelGroupStep" diff="del" ><!--num="125">-->
    <lhs>ModelGroupStep</lhs>
    <rhs>'model' '::' ('sequence' | 'choice' | 'all' | '*') <nt def="NT-Predicate">Predicate</nt>?</rhs>
</prod>
<prod id="NT-WildcardStep" diff="del" ><!--num="126">-->
   <lhs>WildcardStep</lhs>
   <rhs> ( 'any' '::' '*' <nt def="NT-Predicate">Predicate</nt>? ) | ('anyAttribute' '::' '*')
        </rhs>
</prod>
<prod id="NT-FacetStep" diff="del" ><!--num="127">-->
   <lhs>FacetStep</lhs>
   <rhs>'facet' '::' ( <nt def="NT-FacetName">FacetName</nt> | '*' )</rhs>
</prod>
<prod id="NT-FacetName" diff="del" ><!--num="128">-->
   <lhs>FacetName</lhs>
   <rhs>'ordered' | 'bounded' | 'numeric' | 'cardinality' |
   'whiteSpace' | 'minInclusive' | 'maxInclusive' | 'minExclusive' |
   'maxExclusive' | 'totalDigits' | 'fractionDigits' | 'length' | 'minLength' |
   'maxLength' | 'pattern' | 'enumeration' | 'minScale' | 'maxScale'
   </rhs>
</prod>
<prod id="NT-Predicate" ><!--num="22">--><lhs>Predicate</lhs>
    <rhs>'[' [0-9]+ ']'</rhs>
 </prod>
</scrap>
<note><p>The EBNF above defines a syntax for invoking an accessor after the
last step of the path and for using extension axes.  This syntax is included for
extensibility. A specification that wishes to make use of these extensions must
define the detailed syntax and semantics 
(see <specref ref="section-conformance"/>).
</p></note>
      </div3>
      <div3 id="section-path-examples">
         <head>Examples of Schema Component Paths (Non-Normative)</head>
<p>The following examples assume the namespace prefixes have been properly
bound.</p>

<p>A schema component path referring to the type (either simple or complex)
whose local name is <code>title</code> and which is in the namespace denoted by
the prefix <code>my</code>:</p>
<eg>/type::my:title</eg>
<p>A schema component path referring to the globally declared element whose
local name is <code>title</code> and which is in the namespace denoted by the
prefix <code>my</code>:</p>
<eg>/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:title</eg>
<p>A schema component path referring to the globally declared attribute whose
local name is <code>title</code> and which is in the namespace denoted by the
prefix <code>my</code>:</p>
<eg>/<phrase diff="add">schema</phrase><phrase diff="chg">A</phrase>ttribute::my:title</eg>
<p>A schema component path referring to the globally declared attribute group
whose local name is <code>title</code> and which is in the namespace denoted by
the prefix <code>my</code>:</p>
<eg>/attributeGroup::my:title</eg>
<p>A schema component path referring to the pattern facet of the globally
declared simple type whose local name is <code>title</code> which is in the
namespace denoted by <code>my</code>:
</p>
<eg>/type::my:title/facet::pattern</eg>
<p>Given this schema fragment for a schema whose target namespace is denoted by
the prefix <code>my</code>:</p>
<eg xml:space="preserve">
&lt;xs:complexType name="articleType">
   &lt;xs:sequence>
      &lt;xs:element ref="my:section"/>
      &lt;xs:element name="appendix" type="my:sectionType"/>
   &lt;/xs:sequence>
&lt;/xs:complexType>

&lt;xs:element name="chapter">
   &lt;xs:complexType>
      &lt;xs:sequence>
         &lt;xs:element ref="my:title" minOccurs="0" maxOccurs="unbounded"/>
         &lt;xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
      &lt;/xs:sequence>
      &lt;xs:attribute name="name" type="xs:string"/>
      &lt;xs:anyAttribute namespace="##other" use="optional"/>
   &lt;/xs:complexType>
&lt;/xs:element>
</eg>
<p>The following schema component path refers to the first element of the named
complex type:</p>
<eg>/type::my:articleType/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:section</eg>
<p>And the following schema component path refers to the second:</p>
<eg>/type::my:articleType/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:appendix</eg>
<p>A schema component path referring to the (anonymous) complex type of the
globally defined element:</p>
<eg>/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:chapter/type::0</eg>
<p>A schema component path that refers to the wildcard in the globally defined
element:</p>
<eg>/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:chapter/type::0/model::sequence/any::*</eg>
<p>A schema component path that refers to the attribute of the globally defined
element:</p>
<eg>/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:chapter/type::0/<phrase diff="add">schema</phrase><phrase diff="chg">A</phrase>ttribute::name</eg>
      </div3>
<div3 diff="del" id="old-abbreviations">
 <head>Path Abbreviations</head>

<p><termdef id="old-key-intermediate-step" term="intermediate step">
An <term>intermediate step</term>
is a [step] piece that is neither the first step nor
the last step in a schema component path.</termdef> 
<termdef id="old-key-head-steps" term="head steps"><term>Head steps</term> are a
series of steps in a schema component path, begin<phrase diff="add">ning</phrase>
with the first step and end<phrase diff="add">ing</phrase> with any step that
is not the last step in a schema component path.</termdef></p>

  <p>The following three types of intermediate step sequences are optional in
  the schema component path syntax:</p>
  <olist>
  <item><p>An intermediate step that corresponds to a complex type component
  that was reached via a default axis.</p>
  </item>
  <item><p>A series of intermediate steps corresponding to model group
  components<phrase diff="add">, that is, <code>model::sequence</code>,
  <code>model::choice</code>, <code>model::all</code>, or <code>model::*</code>
  steps</phrase>. This series begins and ends with a model group step and
  contains all the consecutive model group steps to the end of the series.</p>
  </item> 
  <item><p>A combination of the above two intermediate step sequences in that order.</p></item>
  </olist>
<p>The syntax <code>//</code> or <code>component::*</code> can be used to
abbreviate head steps or a sequence of intermediate steps in a schema component
path, provided that all those steps corrrespond to default axes
<phrase diff="add">, or to abbreviate the first head step for any axis on the
schema-as-a-whole component</phrase>. <phrase diff="add">Only the
very first head step from the schema-as-a-whole component may be elided for
non-default axes; only steps corresponding to default axes are candidates for
elision otherwise.</phrase>
</p>

<p>Paths with elided steps or <code>//</code> separators will designate sets of
components: the set of all components that can be reached by such a path.
Implementations constructing such sets will need to take care to correctly
handle circularity in the component graph.
</p>


  <div4 id="old-examples-abbreviations">
  <head>Examples of Abbreviations and Optional Intermediate Steps (Non-Normative)</head>
<p diff="add">The following examples assume that the namespace prefixes
<code>r</code> and <code>ipo</code> are appropriately bound.</p>

<p>Here is a path that designates an attribute declaration whose local name is
<code>period</code> <phrase diff="add">in the namespace denoted by
<code>r</code></phrase> in an anonymous complex type:
</p>
<eg>/r:purchaseReport/type::0/@period</eg>
<p>Omitting its optional
  intermediate step sequence, this path reduces to:</p>
<eg>/r:purchaseReport/@period</eg>

<p>Here is a path that designates an attribute declaration whose local name is
<code>name</code> <phrase diff="add">in the namespace denoted by
<code>ipo</code></phrase>
in a globally defined type:
</p>
<eg>/type::ipo:USAddress/model::sequence/model::sequence[1]/name</eg>
<p>Omitting its optional intermediate step sequence, this path reduces
to:</p>
<eg>/type::ipo:USAddress/name</eg>

<p>This path designates an element declaration whose local name is
<code>regions</code> 
<phrase diff="add">in the namespace denoted by
<code>r</code></phrase>
in an anonymous complex type:
</p>
<eg>/r:purchaseReport/type::0/model::sequence/r:regions</eg>
<p>Omitting its optional intermediate step sequence, this path reduces to:</p>
<eg>/r:purchaseReport/r:regions</eg>

<p diff="chg">This path
designates global or local element declarations whose local
name is <code>quantity</code> in the namespace denoted by <code>r</code>:</p> 
<eg>//r:quantity</eg> 

<p diff="chg">This path designates global or local element declarations whose
local name is <code>quantity</code> in the namespace denoted
by <code>r</code>, where these declarations 
are in the subgraph represented by the global complex type component whose
local name is <code>Items</code> in the namespace denoted by
<code>r</code>:
</p>
<eg>/~r:Items//r:quantity</eg>

<p diff="chg">This path designates global or local attribute 
declarations whose local name is <code>partNum</code> in the
namespace denoted by <code>r</code>
where these declarations are in the subgraph represented by the global complex
type component whose 
local name is <code>Items</code>
in the namespace denoted by <code>r</code>:</p> 
<eg>/~r:Items//@partNum</eg>

<p diff="add">This extended example works against the following schema
  fragment for a schema with no target namespace:
</p> 
<eg diff="add" xml:space="preserve">
&lt;xs:element name="example" type="aType"/>

&lt;xs:complexType name="aType">
   &lt;xs:sequence>
      &lt;xs:element name="foo"/>
      &lt;xs:group ref="aGroup"/>
   &lt;/xs:sequence>
&lt;/xs:complexType>

&lt;xs:group name="aGroup">
   &lt;xs:sequence>
      &lt;xs:element name="bar">
         &lt;xs:complexType>
           &lt;xs:sequence>
              &lt;xs:element ref="foo"/>
              &lt;xs:element ref="a"/>
           &lt;/xs:sequence>
         &lt;/xs:complexType>
      &lt;/xs:element>
   &lt;/xs:sequence>
&lt;/xs:group>

&lt;xs:element name="foo"/>
</eg>
<p diff="add">
Which paths may be elided to <code>//foo</code>?
</p>
<table diff="add" border="0" cellspacing="5" summary="//foo">
<thead>
<tr><th>Unelided path</th><th>Elidable to <code>//foo</code>?</th></tr>
</thead>
<tbody>
<tr><td><code>/group::aGroup/model::sequence/bar/~0/model::sequence/foo</code></td>
<td>No: <code>bar</code> is not an elidable step</td>
</tr>
<tr><td><code>/~aType/model::sequence/foo</code></td>
<td>Yes</td>
</tr>
<tr><td><code>/~aType/model::sequence/model::sequence/bar/~0/foo</code></td>
<td>No: <code>bar</code> is not an elidable step</td>
</tr>
<tr><td><code>/root/~aType/model::sequence/foo</code></td>
<td>Yes</td>
</tr>
<tr><td><code>/root/~aType/model::sequence/model::sequence/bar/~0/foo</code></td>
<td>No: <code>bar</code> is not an elidable step</td>
</tr>
</tbody>
</table>
  </div4>
</div3>
  </div2>
    <div2 id="section-path-interpret" diff="add">
    <head>Interpretation of Schema Component Paths</head>
<p diff="chg"><termdef id="key-scp" term="schema component path">A
<term>schema component path</term> selects a sequence of
schema components in the context of an assembled schema; it is a series
of <termref def="key-scp-step">steps</termref> separated by 
'<code>/</code>' or '<code>//</code>'.  Complete schema component paths always
start with either '<code>/</code>' or '<code>//</code>'. 
</termdef>
</p>
<p diff="chg">
<termdef id="key-scp-step" term="step">A <term>step</term> 
consists of a <termref def="key-scp-axis">schema component
axis</termref> and a <termref def="key-scp-nametest">schema component name
test</termref> and 
an optional <termref def="key-scp-pospred">positional predicate</termref>.
It selects a sequence of schema components that are linked to a
source component through an arc that matches the axis, pass the name test,
and are selected by the positional predicate, if any.
</termdef>
Schema component axes are described in <specref ref="section-axis"/>.
</p>
<p>In general the syntax of a step of the schema component path has the
following form:
</p>
<eg role="syntax">
<phrase><code><phrase><var>axis</var>::<var>nametest</var>[<var>predicate</var>]</phrase></code></phrase>
</eg>
<p>The predicate is optional and there are abbreviated forms for some steps.</p>

<p><termdef id="key-scp-nametest" term="schema component name test">A 
<term>schema component name
test</term> is a condition on name of the components selected by the schema
component path step.</termdef> A schema component name test 
either gives a localname, possibly with a namespace prefix, or consists of a
just the wildcard character ('<code>*</code>'), or just the character zero
('<code>0</code>').
</p> 
<eg role="syntax"><phrase><code><phrase><var>prefix</var>:<var>localname</var></phrase></code>
or <code><phrase><var>localname</var></phrase></code></phrase>
</eg>
<p>A schema component name test of this form is true if the QName formed from
the namespace name and local name specified in the the schema component name
test is equal to the value of the component-name() accessor of the schema
component. For more information on namespace binding for QName interpretation
see <specref ref="section-namespaces"/>.</p> 
<eg role="syntax">
<phrase><code>0</code></phrase>
</eg>
<p>A schema component name test of this form is true
for anonymous type definitions.  An anonymous type definition's
component-name() accessor returns &quot;0&quot;.
This name cannot have any conflict with any possible named component, as 0 is
not a valid name start character.
</p>
<eg role="syntax">
<phrase><code>*</code></phrase>
</eg>
<p>A schema component name test of this form is true for all linked components
matching the given axis.</p>

<p><termdef id="key-scp-pospred" term="schema component positional predicate"> 
A <term>schema component positional predicate</term> is a condition on the 
relative position of the component in the sequence of matching components from
the schema component path step.</termdef> A schema component position predicate
is true if the position of the target component in the sequence of
components selected by the axis and name test is equal  
to the positive integer given in the predicate.
</p>
<eg role="syntax"><phrase><code><phrase><var>n</var></phrase></code></phrase></eg>

<p>
A path consisting of just '<code>/</code>' selects the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase>
component. 
</p>
<p>
A path of the form <code><phrase>/<var>S1</var></phrase></code> selects 
components linked to the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component in accordance with the
step <code><phrase><var>S1</var></phrase></code>.
</p>
<p>
A path of the form <code><phrase><var>S1</var>/<var>S2</var></phrase></code> is interpreted 
by gathering the sequence of source components and then selecting any 
schema component that is linked to one of the source components in accordance
with the step <code><phrase><var>S2</var></phrase></code>.  The sequence of source components
consists of the sequence of components selected by <code><phrase><var>S1</var></phrase></code>
followed by the components selected by the elided-component
axis on those components.
</p>
<p>
A path of the form <code><phrase><var>S1</var>//<var>S2</var></phrase></code> is also
interpreted by gathering the sequence of source components and then selecting
any schema component that is linked to one of the source components in
accordance with the step <code><phrase><var>S2</var></phrase></code>.  In this case the
sequence of source components consists of the sequence of components selected
by <code><phrase><var>S1</var></phrase></code> followed by the application of 
the component axis on members of that sequence.
</p>
<p>A path of the form <code><phrase><var>S1</var></phrase></code> selects all schema components
linked to the initial source component in accordance with the step
<code><phrase><var>S1</var></phrase></code>. 
</p>
<p>Implementations will have to exercise care to
properly handle circularities in the component graph in determining the set of
components matched by a path.
</p>
<div3 diff="add" id="section-incomplete-paths">
<head>Incomplete Schema Component Paths</head>
<p>Incomplete schema component paths may be constructed starting at
some specific source component following the construction rules given here.
Such paths will not start with a leading slash. Correct interpretation of
such incomplete (relative) paths depends on the initial source component.
External specifications sanctioning relative schema component paths must
therefore define the initial source component to use to interpret the schema
component path.  In this specification, &quot;schema component path&quot;
always refers to a complete schema component path starting at the root
schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component, unless explicitly stated otherwise. 
</p>
<p>To emphasize the incompleteness of such paths, the current component step
syntax may be used (<code>.</code>) for the head step. For example, if
the initial source component is a complex type, the following paths are
equivalent and
designate the element declaration with the QName <code>my:section</code>
within the sequence model group of that type:
</p>
<eg>model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:section</eg>
<eg>./model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::my:section</eg>
</div3>
<div3 diff="add" id="section-namespaces">
<head>Namespaces</head>
<p>Schema component paths use QNames to refer to schema components.
Interpretation of these QNames therefore depends on namespace bindings.
When schema component paths are used in the context of schema component
designators (<specref ref="section-scds"/>), the <code>xmlns()</code> XPointer
scheme defines those namespace bindings.  In the context of an XML document the
namespace prefixes will be bound in the conventional way (using the [in-scope
namespaces] property of the element information item). Other host languages and
some XML applications will define their own namespace binding rules. 
While the <code>xmlns()</code> scheme does not provide for defining a
default namespace, other mechanisms may do so.  In such contexts, schema
component paths allow and apply the default namespace.
</p>
<p>Note also that the <code>form</code> (and <code>elementFormDefault</code>
and <code>attributeFormDefault</code>) values apply as well. Since, for example,
a local attribute declaration component with the form <code>unqualified</code>
will have an empty <code>{target namespace}</code>, the QName for that
declaration will have no prefix.
</p> 
<p>For example, consider the path:</p>
<eg>//quantity</eg> 
<p>This path
designates global or local element declarations whose local
name is <code>quantity</code> and which are either in no
namespace, are local elements whose form is <code>unqualified</code>,
or are in the default namespace (assuming there is a such a namespace
binding).</p> 

<p>For types, form is not relevant.</p>
<eg>/~Items//quantity</eg>
<p>This path designates global or local element declarations whose local name
is <code>quantity</code>, where these declarations
are in the subgraph represented by the global complex type component whose
local name is <code>Items</code>.  As in the previous
example, the element declaration may either be in schema with no target
namespace, in the default namespace, or a local element declaration with the
form <code>unqualified</code>. The complex type <code>Items</code> must be in 
the default namespace or in a schema with no target namespace.
</p>

<p>This path designates global or local attribute 
declarations whose local name is <code>partNum</code> where these declarations
are in the subgraph represented by the global complex type component whose
local name is <code>Items</code>.  Again, the complex type is either in the
default namespace or in a schema with no target namespace, and the attribute
declaration must be global attributes in a schema with no target namespace, in
the default namespace, or be local declarations with the form
<code>unqualified</code>. 
</p> 
<eg>/~Items//@partNum</eg>
</div3>
</div2>
<div2 id="section-axis" diff="add">
<head>Schema Component Path Axes</head>
<p>
<termdef id="key-scp-axis" term="axis">A schema component path <term>axis</term>
contains specific components linked to the
current context component through certain kinds of arcs.
Unless otherwise indicated, an axis applied to
a component that has no arc of the required kind designates no components.
</termdef>
</p>
<div3 id="section-axis-currentComponent">
<head>The currentComponent Axis</head>
<p><termdef id="axis-currentComponent" term="currentComponent axis">The
<term><phrase><code>currentComponent</code></phrase></term> axis contains the current component.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-CurrentComponentAxis" ><!--num="23">--><lhs>CurrentComponentAxis</lhs><rhs>'currentComponent' '::</rhs></prod>
<prodrecap ref="NT-AbbrevCurrentComponentStep"/>
</scrap>
</div3>

<div3 id="section-axis-annotation">
<head>The annotation Axis</head>
<p><termdef id="axis-annotation" term="annotation axis">The
<term><phrase><code>annotation</code></phrase></term> axis contains annotation 
components linked to the current component through {annotation} or
{annotations} arcs, which are the components returned
by the annotations() accessor.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-AnnotationAxis" ><!--num="24">--><lhs>AnnotationAxis</lhs><rhs>'annotation' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-schemaAttribute">
<head>The schemaAttribute Axis</head>
<p><termdef id="axis-schemaAttribute" term="schemaAttribute axis">The 
<term><phrase><code>schemaAttribute</code></phrase></term> axis contains attribute
declaration components linked to the current component through
{attribute&#xA0;declaration} or {attribute&#xA0;declarations} arcs,
which are those components returned by the component-linked() accessor whose
component-kind() is equal to &quot;attribute-declaration&quot;.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-SchemaAttributeAxis" ><!--num="25">--><lhs>SchemaAttributeAxis</lhs><rhs>'schemaAttribute' '::'</rhs></prod>
<prodrecap ref="NT-AbbrevAttributeStep"/>
</scrap>
</div3>

<div3 id="section-axis-schemaElement">
<head>The schemaElement Axis</head>
<p><termdef id="axis-schemaElement" term="schemaElement axis">The
<term><phrase><code>schemaElement</code></phrase></term> axis contains element 
declaration components linked to the current component through
{element&#xA0;declarations}, {term}, {particle},
{particles}, or {content type}, which are the components returned by the
term() accessor whose component-kind() is equal to
&quot;element-declaration&quot;, together with {element declarations}.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-SchemaElementAxis" ><!--num="26">--><lhs>SchemaElementAxis</lhs><rhs>'schemaElement' '::'</rhs></prod>
<prodrecap ref="NT-AbbrevElementStep"/>
</scrap>
</div3>

<div3 id="section-axis-type">
<head>The type Axis</head>
<p><termdef id="axis-type" term="type axis">The <term><phrase><code>type</code></phrase></term>
axis contains simple type definition 
and complex type definition components linked to the current component through
{type&#xA0;definition}, {type&#xA0;definitions}, {content&#xA0;type},
or {simple&#xA0;type&#xA0;definition} arcs, which are the components 
returned by the component-children() accessor whose 
component-kind() is equal to either
&quot;complex-type-definition&quot; or 
&quot;simple-type-definition&quot;.</termdef>
</p>
<scrap>
<head/>
<prod id="NT-TypeAxis" ><!--num="27">--><lhs>TypeAxis</lhs><rhs>'type' '::'</rhs></prod>
<prodrecap ref="NT-AbbrevTypeStep"/>
</scrap>
</div3>

<div3 id="section-axis-agroup">
<head>The attributeGroup Axis</head>
<p><termdef id="axis-attributeGroup" term="attributeGroup axis">The
<term><phrase><code>attributeGroup</code></phrase></term> axis contains  
attribute group definition components linked to the current component through
{attribute&#xA0;group&#xA0;definitions} arcs, which are those components
returned by the component-linked() accessor whose component-kind() is equal to
&quot;attribute-group-definition&quot;.</termdef> 
</p>
<scrap>
<head/>
<prod id="NT-AttributeGroupAxis" ><!--num="28">--><lhs>AttributeGroupAxis</lhs><rhs>'attributeGroup' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-groupdef">
<head>The group Axis</head>
<p><termdef id="axis-group" term="group axis">The
<term><phrase><code>group</code></phrase></term> axis contains  
model group definition components linked to the current component through
{model&#xA0;group&#xA0;definitions} arcs, which are those components returned
by the component-linked() accessor whose component-kind() is equal to
&quot;model-group-definition&quot;. 
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-GroupAxis" ><!--num="29">--><lhs>GroupAxis</lhs><rhs>'group' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-idc">
<head>The identityConstraint Axis</head>
<p><termdef id="axis-identityConstraint" term="identityConstraint axis">The
<term><phrase><code>identityConstraint</code></phrase></term> axis contains 
identity constraint definition components linked to the current component
through {identity&#xA0;constraint&#xA0;definitions} arcs, which are those
components returned by the component-linked() accessor whose component-kind()
is equal to &quot;identity-constraint-definition&quot;.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-IdentityConstraintAxis" ><!--num="30">--><lhs>IdentityConstraintAxis</lhs><rhs>'identityConstraint' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-assertion">
<head>The assertion Axis</head>
<p><termdef id="axis-assertion" term="assertion axis">The
<term><phrase><code>assertion</code></phrase></term> axis contains 
assertion components linked to the current component
through {assertions}, {value}, or {facets} arcs, which are those components
returned by the assertions() accessor.</termdef>
</p>
<scrap>
<head/>
<prod id="NT-AssertionAxis" ><!--num="31">--><lhs>AssertionAxis</lhs><rhs>'assertion' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-alternative">
<head>The alternative Axis</head>
<p><termdef id="axis-alternatives" term="alternative-axis">The 
<term><phrase><code>alternative</code></phrase></term> axis
contains 
type alternative components linked to the current component
through {alternatives}, {default type definition}, or {type&#xA0;table} arcs,
which are those components 
returned by the component-linked() accessor whose component-kind() is
equal to &quot;type-alternative&quot;. 
</termdef>
</p>
<note><p>The {default type definition} of the type alternatives table of an
element declaration is actually a type alternative component and will be
selected by the alternative axis. </p></note>
<scrap>
<head/>
<prod id="NT-AlternativeAxis" ><!--num="32">--><lhs>AlternativeAxis</lhs><rhs>'alternative' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-notation">
<head>The notation Axis</head>
<p><termdef id="axis-notation" term="notation axis">The
<term><phrase><code>notation</code></phrase></term> axis contains 
notation declaration components linked to the current component
through {notation&#xA0;declarations}
arcs, which are the components returned by the component-linked() accessor
whose component-kind() is equal to &quot;notation-declaration&quot;.</termdef>
</p>
<scrap>
<head/>
<prod id="NT-NotationAxis" ><!--num="33">--><lhs>NotationAxis</lhs><rhs>'notation' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-model">
<head>The model Axis</head>
<p><termdef id="axis-model" term="model axis">The
<term><phrase><code>model</code></phrase></term> axis contains 
model group components linked to the current component
through {model&#xA0;group}, {term}, {particle}, {particles}, or {content type}
arcs, which are the components returned by the term() accessor
whose component-kind() is equal to &quot;model-group&quot;.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-ModelAxis" ><!--num="34">--><lhs>ModelAxis</lhs><rhs>'model' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-anyAttribute">
<head>The anyAttribute Axis</head>
<p><termdef id="axis-anyAttribute" term="anyAttribute axis">The
<term><phrase><code>anyAttribute</code></phrase></term> axis contains 
wildcard components linked to the current component
through {attribute&#xA0;wildcard} arcs.</termdef>
</p>
<scrap>
<head/>
<prod id="NT-AnyAttributeAxis" ><!--num="35">--><lhs>AnyAttributeAxis</lhs><rhs>'anyAttribute' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-any">
<head>The any Axis</head>
<p><termdef id="axis-any" term="any axis">The <term><phrase><code>any</code></phrase></term>
axis contains 
wildcard components linked to the current component
through {wildcard}, {term}, {particle}, {particles}, {content type}, or
{open content} arcs, which is the components returned by the
term() accessor whose component-kind() is equal to
&quot;wildcard&quot;. </termdef>
</p>
<scrap>
<head/>
<prod id="NT-AnyAxis" ><!--num="36">--><lhs>AnyAxis</lhs><rhs>'any' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-facet">
<head>The facet Axis</head>
<p><termdef id="axis-facet" term="facet axis">The
<term><phrase><code>facet</code></phrase></term> axis contains
facet components linked to the current component
through {facets} or {fundamental facets} arcs, which is the components returned
by component-linked() whose component-kind() is equal
to &quot;facet&quot;. 
</termdef></p>
<scrap>
<head/>
<prod id="NT-FacetAxis" ><!--num="37">--><lhs>FacetAxis</lhs><rhs>'facet' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-scope">
<head>The scope Axis</head>
<p><termdef id="axis-scope" term="scope axis">The
<term><phrase><code>scope</code></phrase></term> axis contains 
complex type definition, attribute group definition, or
model group definition components linked to the current component
through {scope} and {parent} arcs, which are the components returned from 
the component-scope() accessor.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-ScopeAxis" ><!--num="38">--><lhs>ScopeAxis</lhs><rhs>'scope' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-context">
<head>The context Axis</head>
<p><termdef id="axis-context" term="context axis">The
<term><phrase><code>context</code></phrase></term> axis contains 
complex type definition, attribute declaration, or
element declaration components linked to the current component
through {context} arcs.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-ContextAxis" ><!--num="39">--><lhs>ContextAxis</lhs><rhs>'context' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-substitutionGroup">
<head>The substitutionGroup Axis</head>
<p><termdef id="axis-substitutionGroup" term="substitutionGroup axis">The 
<term><phrase><code>substitutionGroup</code></phrase></term> axis contains
element declaration components linked to the current component
through {substitution group affiliation} and {substitution group affiliations} 
arcs.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-SubstitutionGroupAxis" ><!--num="40">--><lhs>SubstitutionGroupAxis</lhs><rhs>'substitutionGroup' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-baseType">
<head>The baseType Axis</head>
<p><termdef id="axis-baseType" term="baseType axis">The 
<term><phrase><code>baseType</code></phrase></term> axis contains
simple type definition and complex type definition components linked to the
current component through {base type definition} arcs.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-BaseTypeAxis" ><!--num="41">--><lhs>BaseTypeAxis</lhs><rhs>'baseType' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-itemType">
<head>The itemType Axis</head>
<p><termdef id="axis-itemType" term="itemType axis">The
<term><phrase><code>itemType</code></phrase></term> axis contains
simple type definition components linked to the
current component through {item type definition} arcs.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-ItemTypeAxis" ><!--num="42">--><lhs>ItemTypeAxis</lhs><rhs>'itemType' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-memberType">
<head>The memberType Axis</head>
<p><termdef id="axis-memberType" term="memberType axis">The 
<term><phrase><code>memberType</code></phrase></term> axis contains
simple type definition components linked to the
current component through {member type definitions} 
arcs. </termdef>
</p>
<scrap>
<head/>
<prod id="NT-MemberTypeAxis" ><!--num="43">--><lhs>MemberTypeAxis</lhs><rhs>'memberType' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-primitiveType">
<head>The primitiveType Axis</head>
<p><termdef id="axis-primitiveType" term="primitiveType axis">The 
<term><phrase><code>primitiveType</code></phrase></term> axis contains
simple type definition components linked to the
current component through {primitive type definition} 
arcs.</termdef></p>
<scrap>
<head/>
<prod id="NT-PrimitiveTypeAxis" ><!--num="44">--><lhs>PrimitiveTypeAxis</lhs><rhs>'primitiveType' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-referencedKey">
<head>The key Axis</head>
<p><termdef id="axis-key" term="key axis">The <term><phrase><code>key</code></phrase></term>
axis contains
identity constraint definition components linked to the
current component through {referenced key} 
arcs.</termdef>
</p>
<scrap>
<head/>
<prod id="NT-KeyAxis" ><!--num="45">--><lhs>KeyAxis</lhs><rhs>'key' '::'</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-attributeUse">
<head>The attributeUse Axis</head>
<p><termdef id="axis-attributeUse" term="attributeUse axis">The
<term><phrase><code>attributeUse</code></phrase></term> axis contains attribute use components
linked to the current component through {attribute uses}.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-AttributeUseAxis" ><!--num="46">--><lhs>AttributeUseAxis</lhs><rhs>'attributeUse' '::</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-particle">
<head>The particle Axis</head>
<p><termdef id="axis-particle" term="particle axis">The
<term><phrase><code>particle</code></phrase></term> axis contains particle components
linked to the current component through {particles}.
</termdef>
</p>
<scrap>
<head/>
<prod id="NT-ParticleAxis" ><!--num="47">--><lhs>ParticleAxis</lhs><rhs>'particle' '::</rhs></prod>
</scrap>
</div3>

<div3 id="section-axis-component">
<head>The component Axis</head>
<p><termdef id="axis-component" term="component axis">The
<term><phrase><code>component</code></phrase></term> axis contains the transitive closure of
schema 
components that are either linked to the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component or that
are linked to current component through default arcs.  That is, it contains 
the transitive
closure of the component-children() accessor, as well as
component-linked() 
accessor if the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> is the current component.
</termdef></p>
<scrap>
<head/>
<prod id="NT-ComponentAxis" ><!--num="48">--><lhs>ComponentAxis</lhs><rhs>'component' '::'</rhs></prod>
<prodrecap ref="NT-ComponentAxisSeparator"/>
</scrap>
</div3>

<div3 id="section-axis-elided-component">
<head>The elided-component Axis</head>
<p><termdef id="axis-elided-component" term="elided-component axis">The 
<term><phrase><code>elided-component</code></phrase></term> axis contains complex type
definitions 
linked to the current component through the {type definition} arc and the
transitive closure of all model group components linked to the current
component. That is, it contains the transitive closure of components returned
from the term() accessor whose component-kind() is equal to
&quot;model-group&quot;, as well as components linked to the current component
through the {type definition} arc.
</termdef>
</p>
<p>There is no syntax for this axis: it is used to define the semantics of
certain paths.</p>
</div3>
</div2>
<div2 id="section-accessors" diff="add">
<head>Accessors</head>
<p>A set of accessors is defined on schema components.  For consistency, each
accessor is defined for every kind of schema component,
although several accessors return a constant empty value on some kinds of
schema components.</p>
<p>Where accessors return sequences, the order of components
accessed on one arc is as defined by the schema component model.  Components
accessed through default arcs precede components accessed through non-default
arcs.  Components are otherwise ordered as if arcs were accessed in the
following order: 
</p>
<ulist>
<item><p>{type definitions}</p></item>
<item><p>{type definition}</p></item>
<item><p>{base type definition}</p></item>
<item><p>{item type definition}</p></item>
<item><p>{member type definitions}</p></item>
<item><p>{primitive type definition}</p></item>
<item><p>{type table}</p></item>
<item><p>{alternatives}</p></item>
<item><p>{default type definition}</p></item>
<item><p>{simple type definition}</p></item>
<item><p>{element declarations}</p></item>
<item><p>{substitution group affiliations}</p></item>
<item><p>{substitution group affiliation}</p></item>
<item><p>{attribute declarations}</p></item>
<item><p>{attribute declaration}</p></item>
<item><p>{model group definitions}</p></item>
<item><p>{attribute group definitions}</p></item>
<item><p>{scope}</p></item>
<item><p>{parent}</p></item>
<item><p>{context}</p></item>
<item><p>{content type}</p></item>
<item><p>{particles}</p></item>
<item><p>{particle}</p></item>
<item><p>{term}</p></item>
<item><p>{model group}</p></item>
<item><p>{attribute uses}</p></item>
<item><p>{open content}</p></item>
<item><p>{wildcard}</p></item>
<item><p>{attribute wildcard}</p></item>
<item><p>{identity constraint definitions}</p></item>
<item><p>{referenced key}</p></item>
<item><p>{assertions}</p></item>
<item><p>{notation declarations}</p></item>
<item><p>{facets}</p></item>
<item><p>{fundamental facets}</p></item>
<item><p>{annotation}</p></item>
<item><p>{annotations}</p></item>
</ulist>
<div3 id="accessor-component-kind">
<head>component-kind Accessor</head>
<p>The component-kind accessor returns a string identifying the kind of the
schema component. </p>

<table border="0" cellspacing="5" summary="component-kind accessor details">
<thead><tr><th align="left">Component</th><th align="left">Result of component-kind()</th></tr></thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">&quot;attribute-declaration&quot;</td></tr>
<tr><td valign="top">Element Declaration</td><td valign="top">&quot;element-declaration&quot;</td></tr>
<tr><td valign="top">Complex Type Definition</td><td valign="top">&quot;complex-type-definition&quot;</td></tr>
<tr><td valign="top">Attribute Use</td><td valign="top">&quot;attribute-use&quot;</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">&quot;attribute-group-definition&quot;</td></tr>
<tr><td valign="top">Model Group Definition</td><td valign="top">&quot;model-group-definition&quot;</td></tr>
<tr><td valign="top">Model Group</td><td valign="top">&quot;model-group&quot;</td></tr>
<tr><td valign="top">Particle</td><td valign="top">&quot;particle&quot;</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">&quot;wildcard&quot;</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td valign="top">&quot;identity-constraint-definition&quot;</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">&quot;type-alternative&quot;</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">&quot;assertion&quot;</td></tr>
<tr><td valign="top">Notation Declaration</td><td valign="top">&quot;notation-declaration&quot;</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">&quot;annotation&quot;</td></tr>
<tr><td valign="top">Schema</td><td valign="top">&quot;schema&quot;</td></tr>
<tr><td valign="top">Simple Type Definition</td><td valign="top">&quot;simple-type-definition&quot;</td></tr>
<tr><td valign="top">Constraining Facet</td><td valign="top">&quot;facet&quot;</td></tr>
<tr><td valign="top">Fundamental Facet</td><td valign="top">&quot;facet&quot;</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-component-name">
<head>component-name Accessor</head>
<p>The component-name accessor returns zero or one xs:QName values giving the
name of the component.</p>
<table border="0" cellspacing="5" summary="component-name accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of component-name()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">the xs:QName formed
from the {name} and {target namespace} properties</td></tr>
<tr><td valign="top">Element Declaration</td><td valign="top">the xs:QName formed
from the {name} and {target namespace} properties</td></tr>
<tr><td valign="top">Complex Type Definition</td><td valign="top">the xs:QName
formed from the {name} and {target namespace} properties; &quot;0&quot;, if
{name} is absent</td></tr> 
<tr><td valign="top">Attribute Use</td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute Group Definition</td><td valign="top">the xs:QName
formed from the {name} and {target namespace} properties</td></tr>
<tr><td valign="top">Model Group Definition</td><td valign="top">the xs:QName formed
from the {name} and {target namespace} properties</td></tr>
<tr><td valign="top">Model Group</td><td valign="top">the xs:QName formed from
an empty namespace name and the value of the component-variety() accessor as
the local name</td></tr>
<tr><td valign="top">Particle</td><td valign="top">empty</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">empty</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td valign="top">the xs:QName
formed from the {name} and {target namespace} properties</td></tr> 
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">empty</td></tr>
<tr><td valign="top">Simple Type Definition</td><td valign="top">the xs:QName formed
from the {name} and {target namespace} properties; &quot;0&quot;, if {name} is
absent 
</td></tr>
<tr><td valign="top">Constraining Facet</td><td valign="top">the xs:QName
formed with an empty namespace name and the value of the component-variety()
accessor as the local name</td></tr>
<tr><td valign="top">Fundamental Facet</td><td valign="top">the xs:QName formed
with an empty namespace name and the value of the component-variety() accessor
as the local name</td></tr>
</tbody>
</table>
</div3>
<div3 id="accessor-component-variety">
<head>component-variety Accessor</head>
<p>The component-variety accessor returns zero or one strings identifying the
specific variety of that component kind.
</p>
<table border="0" cellspacing="5" summary="component-variety accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of component-variety()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">
"global"
if {scope} is "global" or if the value of the
{variety} property of {scope} is "global" (1.1); 
"local" otherwise</td></tr>
<tr><td valign="top">Element Declaration </td><td valign="top">"global"
if {scope} is "global" or if the value of the {variety} property of {scope} is
"global" (1.1); 
"local" otherwise</td></tr>
<tr><td valign="top">Complex Type Definition</td><td valign="top">the value of
the {variety} property of the {content type} (1.1). Under the XML Schema 1.0
component model, there is no such property; instead returns "empty"
if the {content type} property has the value "empty",
"simple" if the {content type} property has a simple type declaration
as its value, "element-only" or "mixed" if the {content type} has a pair as a
value and that string is a member of the pair</td></tr> 
<tr><td valign="top">Attribute Use </td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute Group Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model Group Definition </td><td valign="top">empty</td></tr>
<tr><td valign="top">Model Group </td><td valign="top">the value of the
{compositor} property, one of "sequence", "choice", and "all"</td></tr>
<tr><td valign="top">Particle</td><td valign="top">empty</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">the value of the 
{process contents} property, one of "strict", "lax", and "skip"
</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition </td><td valign="top">the value
of the {identity-constraint category} property, one of "key",
"keyref", and "unique"</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">empty</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation Declaration </td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation </td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">empty</td></tr>
<tr><td valign="top">Simple Type Definition</td><td valign="top">the value of the
{variety} property, one of "atomic", "union", and "list"</td></tr>
<tr><td valign="top">Constraining Facet</td><td valign="top">the facet variety,
e.g. &quot;minLength&quot; for the minLength facet, and so on</td></tr>
<tr><td valign="top">Fundamental Facet</td><td valign="top">the facet variety,
e.g. &quot;numeric&quot; for the numeric facet, and so on</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-component-children">
<head>component-children Accessor</head>
<p>The component-children accessor returns a sequence of schema components
consisting of all the components immediately accessible through default axes,
skipping minor components that produce no steps in the schema component path.
</p>

<table border="0" cellspacing="5" summary="component-children accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of component-children()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">the value of {type definition}</td></tr>
<tr><td valign="top">Element Declaration </td><td valign="top">the value of {type definition}</td></tr>
<tr><td valign="top">Complex Type Definition</td><td valign="top">
the value of {attribute uses} and;
if the value of the component-variety() accessor is "empty" then empty,
if the value of the component-variety() accessor is "simple" then the value of
{simple type definition} (1.1) or the value of {content type} (1.0); 
otherwise the value of the term() accessor
</td></tr>
<tr><td valign="top">Attribute Use </td><td valign="top">the value of {attribute declaration}</td></tr>
<tr><td valign="top">Attribute Group Definition</td><td valign="top">the 
value {attribute declaration} for each Attribute Use in {attribute uses}
</td></tr>
<tr><td valign="top">Model Group Definition </td><td valign="top">the value of
{model group}</td></tr>
<tr><td valign="top">Model Group </td><td valign="top">the value of
the {term} of each Particle in {particles}</td></tr>
<tr><td valign="top">Particle</td><td valign="top">the value of {term}</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">empty</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition </td><td valign="top">empty</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">the value of {type definition}</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation Declaration </td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation </td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">the value of {element declarations}</td></tr>
<tr><td valign="top">Simple Type Definition</td><td valign="top">the value of {facets}</td></tr>
<tr><td valign="top">Constraining Facet</td><td valign="top">empty</td></tr>
<tr><td valign="top">Fundamental Facet</td><td valign="top">empty</td></tr>
</tbody>
</table>
</div3>
<div3 id="accessor-component-linked">
<head>component-linked Accessor</head>
<p>The component-linked accessor returns a sequence of schema components
immediately accessible using any axis, skipping minor components that produce
no steps in the schema component path.
</p>

<table border="0" cellspacing="5" summary="component-linked accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of component-linked()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute&#xA0;Declaration</td><td valign="top">
the value of the component-children() and annotations() accessors, 
together with the {scope} (1.0) or the {parent} of {scope} (1.1) 
</td></tr>
<tr><td valign="top">Element&#xA0;Declaration</td><td valign="top">
the value of the component-children() and annotations() accessors,
together with the value of {scope} and {substitution group affiliation} 
(1.0) or the value of {substitution group affiliations}, the value of the
{parent} of {scope}, 
the value of the {alternatives} and {default type definition} of {type table}
(1.1), along with the value of {identity constraint definitions}
</td></tr>
<tr><td valign="top">Complex&#xA0;Type&#xA0;Definition</td><td valign="top">
the value of component-children() and annotations() accessors,
together with the value of {base type definition}, {context}, 
{attribute wildcard}, and {assertions} and the value of {wildcard} of 
{open content} of {content type}
</td></tr>
<tr><td valign="top">Attribute&#xA0;Use</td><td valign="top">
the value of the component-children() and annotations() accessors
</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">the 
value of the component-children() and annotations() accessors,
as well as the value of {attribute wildcard}
</td></tr>
<tr><td valign="top">Model&#xA0;Group&#xA0;Definition </td><td valign="top">
the value of the component-children() and annotations() accessors
</td></tr>
<tr><td valign="top">Model&#xA0;Group</td><td valign="top">the value of
the component-children() and annotations() accessors</td></tr>
<tr><td valign="top">Particle</td><td valign="top">the value of the
component-children() accessor</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">the value of the
annotations() accessor</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition </td><td
valign="top">the value of the annotations() accessor, together with the value
of {referenced key}</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">the value of
the component-childrenl() and annotations() accessors</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">the value of the
annotations() accessor</td></tr>
<tr><td valign="top">Notation&#xA0;Declaration</td><td valign="top">the value of
the annotations() accessor</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">
the value of the component-children() and annotations() accessors, as well as
the value of {type definitions}, {attribute declarations}, {attribute group
definitions}, {model group definitions}, {notation declarations}, and
{identity-constraint definitions}</td></tr>
<tr><td valign="top">Simple Type Definition</td><td valign="top">the value of
the component-children() and annotations() accessors, together with the value
of {context}, {base type definition}, {fundamental facets}, {primitive type
definition}, {item type definition}, and {member type definitions}</td></tr>
<tr><td valign="top">Constraining Facet</td><td valign="top">the value of the
annotations() accessor, together with the value of {value} in the case that the
facet is the &quot;assertions&quot; facet</td></tr>
<tr><td valign="top">Fundamental Facet</td><td valign="top">empty</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-term">
<head>term Accessor</head>
<p>The term accessor returns term components linked through the
{model group} or {term} arcs, possibly via {particle}, {particles}, or {content
type} arcs.</p> 

<table border="0" cellspacing="5" summary="term accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of term()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Element&#xA0;Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Complex&#xA0;Type&#xA0;Definition</td><td valign="top">
the value of {term} of {particle} of {content type} (1.1) or the value of
{term} of {content type} (1.0), 
together with the value of {wildcard} of 
{open content} of {content type}
</td></tr>
<tr><td valign="top">Attribute&#xA0;Use</td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model&#xA0;Group&#xA0;Definition</td><td valign="top">value of {model group}</td></tr>
<tr><td valign="top">Model&#xA0;Group</td><td valign="top">empty</td></tr>
<tr><td valign="top">Particle</td><td valign="top">the value of {term}</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">empty</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">empty</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation&#xA0;Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">empty</td></tr>
<tr><td valign="top">Simple&#xA0;Type&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Constraining&#xA0;Facet</td><td valign="top">empty</td></tr>
<tr><td valign="top">Fundamental&#xA0;Facet</td><td valign="top">empty</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-component-scope">
<head>component-scope Accessor</head>
<p>The component-scope accessor returns components linked through the
{scope} possibly via {parent} arcs.</p> 

<table border="0" cellspacing="5" summary="component-scope accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of component-context()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">
if component-variety() is &quot;global&quot; then empty; otherwise
the value of {parent} of {scope} (1.1) or the value of {scope} (1.0)
</td></tr>
<tr><td valign="top">Element&#xA0;Declaration</td><td valign="top">
if component-variety() is &quot;global&quot; then empty; otherwise
the value of {parent} of {scope} (1.1) or the value of {scope} (1.0)
</td></tr>
<tr><td valign="top">Complex&#xA0;Type&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute&#xA0;Use</td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model&#xA0;Group&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model&#xA0;Group</td><td valign="top">empty</td></tr>
<tr><td valign="top">Particle</td><td valign="top">empty</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">empty</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">empty</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation&#xA0;Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">empty</td></tr>
<tr><td valign="top">Simple&#xA0;Type&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Constraining&#xA0;Facet</td><td valign="top">empty</td></tr>
<tr><td valign="top">Fundamental&#xA0;Facet</td><td valign="top">empty</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-assertions">
<head>assertions Accessor</head>
<p>The assertions accessor returns assertions components linked through the
{assertions} or {value} arcs. The assertions
accessor is always empty for the 1.0 schema component model.</p> 

<table border="0" cellspacing="5" summary="assertions accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of assertions()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Element&#xA0;Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Complex&#xA0;Type&#xA0;Definition</td><td valign="top">the value of {assertions}</td></tr>
<tr><td valign="top">Attribute&#xA0;Use</td><td valign="top">empty</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model&#xA0;Group&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Model&#xA0;Group</td><td valign="top">empty</td></tr>
<tr><td valign="top">Particle</td><td valign="top">empty</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">empty</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">empty</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">empty</td></tr>
<tr><td valign="top">Notation&#xA0;Declaration</td><td valign="top">empty</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">empty</td></tr>
<tr><td valign="top">Simple&#xA0;Type&#xA0;Definition</td><td valign="top">empty</td></tr>
<tr><td valign="top">Constraining&#xA0;Facet</td><td valign="top">empty</td></tr>
<tr><td valign="top">Fundamental&#xA0;Facet</td><td valign="top">empty unless
the facet name is &quot;assertions&quot;; the value of {value} otherwise</td></tr>
</tbody>
</table>
</div3>

<div3 id="accessor-annotations">
<head>annotations Accessor</head>
<p>The annotations accessor returns annotations components linked through the
{annotation} or {annotations} arc.
</p>

<table border="0" cellspacing="5" summary="annotations accessor details">
<thead>
<tr><th align="left" valign="top">Component</th><th align="left" valign="top">Result of annotations()</th></tr>
</thead>
<tbody>
<tr><td valign="top">Attribute Declaration</td><td valign="top">the value of
{annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Element&#xA0;Declaration</td><td valign="top">the value of
{annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Complex&#xA0;Type&#xA0;Definition</td><td valign="top">
the value of {annotations}
</td></tr>
<tr><td valign="top">Attribute&#xA0;Use</td><td valign="top">the value of
{annotations}</td></tr>
<tr><td valign="top">Attribute&#xA0;Group&#xA0;Definition</td><td valign="top">the value of {annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Model&#xA0;Group&#xA0;Definition</td><td valign="top">the
value of {annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Model&#xA0;Group</td><td valign="top">the value of
{annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Particle</td><td valign="top">the value of {annotations}</td></tr>
<tr><td valign="top">Wildcard</td><td valign="top">the value of {annotation}
(1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Identity&#x2011;Constraint&#xA0;Definition</td><td
valign="top">the value of {annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Type&#xA0;Alternative</td><td valign="top">the value of {annotations}</td></tr>
<tr><td valign="top">Assertion</td><td valign="top">the value of {annotations}</td></tr>
<tr><td valign="top">Notation&#xA0;Declaration</td><td valign="top">the value
of {annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Annotation</td><td valign="top">empty</td></tr>
<tr><td valign="top">Schema</td><td valign="top">the value of {annotations}</td></tr>
<tr><td valign="top">Simple&#xA0;Type&#xA0;Definition</td><td valign="top">the
value of {annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Constraining&#xA0;Facet</td><td valign="top">the value of
{annotation} (1.0) or {annotations} (1.1)</td></tr>
<tr><td valign="top">Fundamental&#xA0;Facet</td><td valign="top">empty</td></tr>
</tbody>
</table>
</div3>
</div2>

<div2 id="section-canonical-path">
      <head>Canonical Schema Component Paths</head>
<p><termdef id="key-canonical-schema-component-path" term="canonical schema
component path">The <term><phrase>canonical schema
component path</phrase></term> of a component is a distinguished valid component path
that uniquely identifies that particular component, that has as few steps as
possible, and that can be deterministically constructed <phrase
diff="add">starting from the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component, and that contains no
extension axes or accessors</phrase>.
</termdef></p>
<p>The remainder of this section consists of a constructive definition of
canonical schema component paths: a path produced by this construction will be
the canonical one.</p>
<p><termdef id="key-current-component" term="current schema component">The
    <term><phrase>current schema component</phrase></term> is a schema component for which
    there is a valid canonical path through the schema component graph.</termdef></p>

<p><termdef id="key-target-component" term="target schema component">The
    <term><phrase>target schema component</phrase></term> is a schema component linked to the
    current schema component via one of the schema component properties
    defined previously.</termdef></p>

<p><termdef id="key-component-relationship" term="component relationship">The
    <term><phrase>component relationship</phrase></term> is the name of the schema component
    property on the current schema component which references the target schema
    component.
</termdef></p>

<p><termdef id="key-ancestor-set" term="ancestor set">The
    <term><phrase>ancestor set</phrase></term> of the target schema component is the set of schema
    components on the valid canonical path to the current schema component
    together with the current schema component.</termdef></p>
<p><termdef id="key-base-type-set" term="base type set">
The <term><phrase>base type set</phrase></term> of a schema component is the set
consisting of the {base type definition} of that schema component and
the {base type definition} of every member of the set.
</termdef></p>
<p>Constructively,  this set can be computed by adding the
{base type definition} to the set, and iterating on that type component, until
you see a component whose {target namespace} property is
"http://www.w3.org/2001/XMLSchema" and whose {name} property is
"anyType".
</p>
<p><termdef id="key-extended-base-type-set" term="extended base type set">The <term><phrase>extended base type
set</phrase></term> of a schema component is
the set consisting of the {base type definition} of that schema component if
its {derivation} method is "extension" and the {base type definition} of
every member of the set whose {derivation} method is "extension".
</termdef>
</p>

<p><termdef id="key-base-facet-set" term="base facet set">The <term><phrase>base facet set</phrase></term> of a schema
component is the set consisting of all members of the {facets} property of
members of the base type set of that schema component.</termdef>
</p>
<p><termdef id="key-same-facet" term="same (facets)">Two facets are <term><phrase>the same</phrase></term> if they
are the same kind of component (e.g. both are length facets) and their {value}
properties have identical values.</termdef></p>
<p><termdef id="key-base-attribute-use-set" term="base attribute use set">The <term><phrase>base attribute use
set</phrase></term> of a schema component is the set consisting of all members of the
{attribute uses} property of members of the base type set of that schema
component.</termdef>
</p>
<p><termdef id="key-same-attr-uses" term="same (attribute uses)">Two attribute uses are <term><phrase>the
same</phrase></term> if the {name} and {target namespace} of their {attribute
declaration} properties are equal. </termdef>
</p>
<p>(Note that this is not equality which requires checking the {type definition}
as well. However, the rules for component consistency will ensure that
checking the {name} and {target namespace} suffices for our purposes here.)
</p>

<p><termdef id="key-particle-set" term="particle set">The <term><phrase>particle set</phrase></term> of a schema
component is the set consisting
of the {content type} of that schema component with the members of the
{particles} property of the {term} of any member of the set.</termdef>
</p>

<p><termdef id="key-base-particle-set" term="base particle set">The <term><phrase>base particle set</phrase></term> of a
schema component is the union of all particle sets of all the members of the
extended base type set of that schema component.</termdef>
</p>

<p><termdef id="key-same-particle" term="same (particles)">Two particles are <term><phrase>the same</phrase></term> if
the implementation reports them as the same.</termdef> Informally,
implementations will report particles that are "inherited" from base types as
"the same" as the corresponding particle in the base type. Future revisions of
the XML Schema recommendation will specify more precisely the conditions under
which particles should be regarded as "the same".
</p>

<p>Traversal where the current schema component
    is the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase>
component to any target schema component
    is always permitted in the construction of a
canonical path. If the current schema component is not the schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase>
schema component, then traversal from the current schema component
to the target schema component is forbidden in the construction of a canonical
path if any of the following conditions is met:</p>
<olist>
<item><p>the target schema component is an identity constraint definition</p></item>
<item><p>the target schema component is a simple or complex type
definition whose {name} property is not absent</p></item>
<item><p>the target schema component is an element or attribute declaration
whose {scope} property is <code>global</code></p></item>
<item><p>the target schema component has a {scope} property whose value is a
schema component and that schema component is not a member of the
ancestor set of the target schema component</p></item>
<item><p>the component relationship is {scope},
{substitution group affiliation}, 
{primitive type definition}, or {referenced key}</p></item>
<item><p>the component relationship is {base type definition}
and target schema component's {name} property is not absent</p></item>
<item><p>the target schema component is a facet and there exists some facet in
its base facet set of the target schema component that is the same as the
facet</p></item>
<item><p>the current schema component is a complex type, the target schema
component is the {attribute declaration} of an attribute use component and there
exists some attribute use in the base attribute use set of the current
schema component that is the same as the attribute use whose {attribute
declaration} is the target schema component</p></item>
<item><p>the target schema component is the {term} of a particle and there
exists some particle in the base particle set of the current schema component
that  is the same as the target schema component</p></item>
</olist>

<p>Informally, the first two conditions ensure that the canonical path to
an identity constraint or a named type is the one that flows directly from the
schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase> component, the third condition ensures that the canonical
path to element and attribute declarations is likewise the global one (if there
is one), the fourth
condition accounts for element and attribute declarations stemming from named
model groups and attribute groups, the fifth and sixth ensure that the
canonical path doesn't follow &quot;backwards&quot; paths (while accounting for
redefined types), and the final three
conditions ensure the canonical path to &quot;inherited&quot; components goes
through their component of origin.</p>

<p diff="add">Because the 1.0 component model provides no reliable
ordering of annotations, selection of a specific annotation using a numerical
predicate is forbidden in canonical paths against a 1.0 schema.  For 1.1
schemas, an individual annotation component is selected using a numerical
predicate.</p>

<p>In general, it is not possible to obtain the canonical path for a
schema component without access to the schema component graph. In particular,
canonicalizing some non-canonical path, or determining whether a schema
component path is canonical cannot be performed without such access.
</p>
<p>For example, consider the path
<phrase diff="chg"><code>/type::x:foo/schemaElement::x:bar</code></phrase>.
</p>
<p>For this schema fragment, this represents a canonical path to the local
element <code>bar</code>:</p>
<eg xml:space="preserve">
&lt;complexType name="foo">
  &lt;sequence>
     &lt;element name="bar" type="x:barType"/>
  &lt;/sequence>
&lt;/complexType>
</eg>
<p diff="chg">But for the following schema fragment,
the same path
represents a non-canonical path. The 
canonical path would instead be <code>/group::x:barGroup/schemaElement::x:bar</code>.
</p>
<eg xml:space="preserve">
&lt;group name="barGroup">
  &lt;sequence>
     &lt;element name="bar" type="x:barType"/>
  &lt;/sequence>
&lt;/group>
&lt;complexType name="foo">
  &lt;sequence>
    &lt;group ref="x:barGroup"/>
  &lt;/sequence>
&lt;/complexType>
</eg>

      <div3 id="section-canonical-syntax">
        <head>Canonical Syntax</head>
        <p>The concrete syntax allows certain abbreviations, such as
        eliding the positional predicate <phrase diff="chg">where it is
        unnecessary to distinguish components</phrase>, 
        <phrase diff="add">wildcarded schema component name tests
        (<code>*</code>), and abbreviated steps
        (e.g. <code>@name</code>)</phrase> 
        <phrase diff="del">eliding  
        optional intermediate steps, abbreviations <code>//</code>
        and <code>*</code>, and using short
        forms for element and attribute declarations and for type definitions
        accessed through default axes</phrase>.
        Canonical path syntax forbids all these abbreviations. In addition, the
        canonical path syntax fixes the namespace prefix, if any, to
        <code>p</code>. Since at most one namespace can be involved in a
        canonical schema component path, one prefix suffices. 
        <phrase diff="add">Finally, use of the current component, component, and
        elided-component axes are disallowed in the canonical path
        syntax, and the use of the particle and attributeUse axes are
        disallowed except in the last step of the path.</phrase> 
        </p>
      </div3>
    </div2>
<div2 id="section-equality-path">
      <head>Equality of Schema Component Paths</head>
<p><termdef id="key-equal-path" term="schema component paths are equal" >Two <term><phrase>schema component paths are
equal</phrase></term> if they have the same number of
steps, and each step in one path is equal to the corresponding
step in the other. Steps are equal if <phrase diff="add">they have the same
axis, name test (namespace and local name, or wildcard), and predicate.
</phrase><phrase diff="del">all of their
properties have the same value</phrase>.</termdef>
</p>
<p>Note: This definition of equality neither relies on the notion of 'the same
component' nor defines component equivalence. A schema component may have
multiple schema component paths. Although these schema component paths address
'the same component', they are not equal. It is true, however, that two
canonical paths to the same component will be equal.</p>
    </div2>
</div1>
 <div1 id="section-conformance">
    <head>Conformance</head>
<div2 id="scp-conformance">
<head>Schema Component Path Conformance</head>
<p>Schema component paths may be used by other specifications.
For such usage, this specification does not define any criteria
for conformance and relies on other specifications to specify
criteria for conformance of implementations.
</p>
<p diff="add">Such specifications must define:
</p>
<ulist diff="add">
<item><p>How the target schema is identified.</p></item>
<item><p>How namespace binding applies to schema component paths, in particular
how or whether the default namespace applies.</p></item>
<item><p>Whether only canonical schema component paths are
permitted.</p></item>
<item><p>Whether only complete schema component paths are permitted.</p></item>
<item><p>If incomplete schema component paths are permitted, how the initial
source component is determined.</p></item>
<item><p>Whether any extension axes are defined, together with their syntax
and semantics.</p></item> 
<item><p>Whether any extension accessors are defined, together with their
syntax and semantics.</p></item>
</ulist>
</div2>

<div2 id="scds-conformance">
<head>Schema Component Designator Conformance</head>
<p diff="add">
This specification normatively depends on the XPointer Framework 
<phrase diff="add"><bibref ref="xptrframework"/></phrase>.
</p>
<p>Conforming XPointer processors claiming to support the
<code>xscd()</code> scheme must <phrase diff="del">conform to the behavior
</phrase>
<phrase diff="add">identify schema components as</phrase>
defined in this specification and
<phrase diff="add">conform to the</phrase> XPointer <code>xmlns()</code> scheme
specification. 
</p>
</div2>
<div2 diff="add">
<head>Extensibility</head>
<p>Schema component paths and designators navigate the XML Schema component
model and are wholly dependent on that model to define the set of allowable
axes and referenced components.  Therefore, as the schema component model
changes, this specification may add additional axes, mapping rules, and
accessors as required to support those changes. 
The EBNF defines syntax for extension accessors after the last step in a path
and for extension axes.  
</p>
</div2>
  </div1>
  <div1 id="section-example">
      <head>Example<phrase diff="add">s</phrase> (Non-Normative)</head>

<div2 id="section-primer-example">
   <head>Extended Primer Example</head>
<p>This section walks through an example XML Schema Document from the XML
Schema Part 0: Primer<phrase diff="add"><bibref ref="xsd0"/></phrase> and
  enumerates the abbreviated and canonical schema component designators for schema components.</p>

<p>All schema constructs in this section are considered to be in the following
  schema document and its URI is <code>schema-URI</code>:</p>

<eg xml:space="preserve">
&lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
&lt;!-- elided... see below ... --&gt;
&lt;/xsd:schema>
</eg>

<p diff="add">Since this schema has no target namespace, no namespace
  binding is required and there is no <code>xmlns()</code> pointer part for any
  of the schema component designators for this schema.</p>

<p>The canonical schema component designator for this schema<phrase diff="del">-as-a-whole</phrase><phrase diff="add"> description</phrase>
component is <code>schema-URI#xscd(/)</code>.</p>

<eg xml:space="preserve">
&lt;xsd:annotation>
 &lt;xsd:documentation xml:lang="en">
  Purchase order schema for Example.com.
  Copyright 2000 Example.com. All rights reserved.
 &lt;/xsd:documentation>
&lt;/xsd:annotation>
</eg>

<p>The canonical schema component designator for this annotation schema component
  is <code>schema-URI#xscd(/annotation::*)</code>.</p>

<p>The following is a global element declaration:</p>

<eg xml:space="preserve">
&lt;xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
</eg>

<p>The abbreviated schema component designator for this element declaration component
  is <code>schema-URI#xscd(/purchaseOrder)</code> and the canonical is
  <phrase diff="chg"><code>schema-URI#xscd(/schemaElement::purchaseOrder)</code></phrase>.</p>

<p>The following is another global element declaration, </p>
<eg xml:space="preserve">
 &lt;xsd:element name="comment" type="xsd:string"/>
</eg>

<p>The abbreviated schema component designator for this element declaration
  component is <code>schema-URI#xscd(/comment)</code> and the canonical is
  <phrase diff="chg"><code>schema-URI#xscd(/schemaElement::comment)</code></phrase>.</p>

<p>This following is a global complex type definition component:</p>

<eg xml:space="preserve">
&lt;xsd:complexType name="PurchaseOrderType">
 &lt;xsd:sequence>
  &lt;xsd:element name="shipTo" type="USAddress"/>
  &lt;xsd:element name="billTo" type="USAddress"/>
  &lt;xsd:element ref="comment" minOccurs="0"/>
  &lt;xsd:element name="items"  type="Items"/>
 &lt;/xsd:sequence>
 &lt;xsd:attribute name="orderDate" type="xsd:date"/>
&lt;/xsd:complexType>
</eg>

<p>The abbreviated schema component designator for this complex type definition
  and its element and attribute declaration components are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/~purchaseOrderType)
schema-URI#xscd(/~purchaseOrderType/shipTo)
schema-URI#xscd(/~purchaseOrderType/billTo)
schema-URI#xscd(/comment)
schema-URI#xscd(/~purchaseOrderType/items)
schema-URI#xscd(/~purchaseOrderType/@orderDate)
</eg>

<p>The canonical schema component designator for this complex type definition and
  its element and attribute declaration components are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/type::purchaseOrderType)
schema-URI#xscd(/type::purchaseOrderType/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::shipTo)
schema-URI#xscd(/type::purchaseOrderType/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::billTo)
schema-URI#xscd(/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::comment)
schema-URI#xscd(/type::purchaseOrderType/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::items)
schema-URI#xscd(/type::purchaseOrderType/<phrase diff="add">schema</phrase><phrase diff="chg">A</phrase>ttribute::orderDate)
</eg>

<p>The following is another global complex type definition component:</p>

<eg xml:space="preserve">
&lt;xsd:complexType name="USAddress">
 &lt;xsd:sequence>
  &lt;xsd:element name="name"   type="xsd:string"/>
  &lt;xsd:element name="street" type="xsd:string"/>
  &lt;xsd:element name="city"   type="xsd:string"/>
  &lt;xsd:element name="state"  type="xsd:string"/>
  &lt;xsd:element name="zip"    type="xsd:decimal"/>
 &lt;/xsd:sequence>
 &lt;xsd:attribute name="country" type="xsd:NMTOKEN"
     fixed="US"/>
&lt;/xsd:complexType>
</eg>

<p>The abbreviated schema component designator for this complex type definition
  and its element and attribute declaration components are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/~USAddress)
schema-URI#xscd(/~USAddress/name)
schema-URI#xscd(/~USAddress/street)
schema-URI#xscd(/~USAddress/city)
schema-URI#xscd(/~USAddress/state)
schema-URI#xscd(/~USAddress/zip)
schema-URI#xscd(/~USAddress/@country)
</eg>

<p>The canonical schema component designator for this complex type definition and its
  element and attribute declaration components are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/type::USAddress)
schema-URI#xscd(/type::USAddress/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::name)
schema-URI#xscd(/type::USAddress/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::street)
schema-URI#xscd(/type::USAddress/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::city)
schema-URI#xscd(/type::USAddress/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::state)
schema-URI#xscd(/type::USAddress/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::zip)
schema-URI#xscd(/type::USAddress/<phrase diff="add">schema</phrase><phrase diff="chg">A</phrase>ttribute::country)
</eg>

<p>The following is a global complex type definition with anonymous complex type and
  simple type definition components:</p>

<eg xml:space="preserve">
&lt;xsd:complexType name="Items">
 &lt;xsd:sequence>
  &lt;xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
   &lt;xsd:complexType>
    &lt;xsd:sequence>
     &lt;xsd:element name="productName" type="xsd:string"/>
     &lt;xsd:element name="quantity">
      &lt;xsd:simpleType>
       &lt;xsd:restriction base="xsd:positiveInteger">
        &lt;xsd:maxExclusive value="100"/>
       &lt;/xsd:restriction>
      &lt;/xsd:simpleType>
     &lt;/xsd:element>
     &lt;xsd:element name="USPrice"  type="xsd:decimal"/>
     &lt;xsd:element ref="comment"   minOccurs="0"/>
     &lt;xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
    &lt;/xsd:sequence>
    &lt;xsd:attribute name="partNum" type="SKU" use="required"/>
   &lt;/xsd:complexType>
  &lt;/xsd:element>
 &lt;/xsd:sequence>
&lt;/xsd:complexType>
</eg>

<p>The abbreviated schema component designator for this complex type definition
  and its element and attribute declaration, simple type definition, and facet
  components are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/~Items)
schema-URI#xscd(/~Items/item)
schema-URI#xscd(/~Items/item/~0))
schema-URI#xscd(/~Items/item/productName)
schema-URI#xscd(/~Items/item/quantity)
schema-URI#xscd(/~Items/item/quantity/~0)
schema-URI#xscd(/~Items/item/quantity/~0/facet::maxExclusive)
schema-URI#xscd(/~Items/item/USPrice)
schema-URI#xscd(/comment)
schema-URI#xscd(/~Items/item/shipDate)
schema-URI#xscd(/~Items/item/@partNum)
</eg>

<p>The canonical schema component designator for this complex type definition and its
element and attribute declaration, simple type definition, and facet
components are <phrase diff="add">(paths broken across lines for
readability)</phrase>:</p> 

<eg xml:space="preserve">
schema-URI#xscd(/type::Items)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::productName)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::quantity)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::quantity/type::0)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::quantity/type::0/
     facet::maxExclusive)
schema-URI#xscd(/type::Items/model::sequence/<phrase
diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::USPrice)
schema-URI#xscd(/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::comment)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::shipDate)
schema-URI#xscd(/type::Items/model::sequence/<phrase diff="add">schema</phrase><phrase diff="chg">E</phrase>lement::item/type::0/
     <phrase diff="add">schema</phrase><phrase diff="chg">A</phrase>ttribute::partNum)
</eg>

<p>The following is a global simple type definition component:</p>

<eg xml:space="preserve" role="simpleType">
&lt;!-- Stock Keeping Unit, a code for identifying products -->
&lt;xsd:simpleType name="SKU">
 &lt;xsd:restriction base="xsd:string">
  &lt;xsd:pattern value="\d{3}-[A-Z]{2}"/>
 &lt;/xsd:restriction>
&lt;/xsd:simpleType>
</eg>

<p>The canonical schema component designator for this simple type definition
  and its facet component are:</p>

<eg xml:space="preserve">
schema-URI#xscd(/type::SKU)
schema-URI#xscd(/type::SKU/facet::pattern)
</eg>
</div2>
<div2 id="section-example-more" diff="add">
<head>Additional Examples</head>
<p diff="add">The schema for the examples in the previous section had no
target namespace. If we change the schema so that the target namespace is
<code>&quot;http://example.com/schema/po&quot;</code>, then the schema
component designators need to take namespace bindings into account.
</p>
<p diff="add">For example, the abbreviated schema component designator for the
complex type definition <code>USAddress</code> and its element and attribute
declaration components are:</p>

<eg xml:space="preserve">
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/p:name)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/p:street)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/p:city)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/p:state)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/p:zip)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/~p:USAddress/@country)
</eg>
<p>Note that since the <code>attributeFormDefault</code> for the
schema is <code>unqualified</code> (the default value), no namespace prefix is
used with the <code>country</code> attribute.</p>
<p>The canonical schema component designator for this complex type
definition and its element and attribute declaration components are (paths
broken across lines for readability):</p>

<eg xml:space="preserve">
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    model::sequence/schemaElement::p:name)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    model::sequence/schemaElement::p:street)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    model::sequence/schemaElement::p:city)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    model::sequence/schemaElement::p:state)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    model::sequence/schemaElement::p:zip)
schema-URI#xmlns(p=http://example.com/schema/po)xscd(/type::p:USAddress/
    schemaAttribute::country)
</eg>
<p>Schema component paths may also be used in other contexts that
provide namespace binding contexts.  For example, an XML representation may
apply normal namespace binding rules to apply to embedded schema component
paths:
</p>
<eg xml:space="preserve"><![CDATA[
<xsx:ui xmlns:err="http://example.com/extension/ui" 
        xmlns:p="http://example.com/schema/po">
  <xsx:component>
     <xsx:path>/~p:USAddress/p:state</xsx:path>
     <xsx:prompt>State</xsx:prompt>
     <xsx:display>selector</xsx:display>
     <xsx:choices>http://example.com/state-menu.xml</xsx:choices>
     <xsx:tab>Address</xsx:tab>
  </xsx:component>
</xsx:ui>
]]></eg>
<p>Another possible means of binding namespaces is to use the namespace URI as
the schema designator with the convention that it is the default namespace.
This could be useful combined with the use of just the schema component paths
in the fragment identifier to obtain terse identifiers for global schema types
in single-namespace schemas:
</p>
<eg>
http://www.w3.org/2001/XMLSchema#/~gMonth
</eg>
<note><p>This specification does not define such a fragment identifier scheme
for namespace documents.  Neither does it rule out such a usage.
</p></note>
</div2>
<div2 diff="add" id="section-examples-abbreviations">
  <head>Examples with component and elided-component Axes (Non-Normative)</head>
<p diff="add">The following examples assume that the namespace prefixes
<code>r</code> and <code>ipo</code> are appropriately bound.</p>

<p>Here is a path that designates an attribute declaration whose local name is
<code>period</code> <phrase diff="add">in the namespace denoted by
<code>r</code></phrase> in an anonymous complex type:
</p>
<eg>/r:purchaseReport/type::0/@period</eg>
<p><phrase diff="del">Omitting its optional 
intermediate step sequence</phrase><phrase diff="add">Using the
elided-component axis to select the attribute 
declaration directly from the element declaration</phrase>, this path reduces to:
</p>
<eg>/r:purchaseReport/@period</eg>

<p>Here is a path that designates an 
<phrase diff="del">attribute</phrase><phrase diff="add">element</phrase>
declaration whose local name is 
<code>name</code> <phrase diff="add">in the namespace denoted by
<code>ipo</code></phrase>
in a globally defined type:
</p>
<eg>/type::ipo:USAddress/model::sequence/model::sequence[1]/name</eg>
<p><phrase diff="del">Omitting its optional intermediate step
sequence</phrase>
<phrase diff="add">Using the elided-component axis to select the element
declaration directly from the complex type definition</phrase>,
this path reduces to:</p>
<eg>/type::ipo:USAddress/name</eg>

<p>This path designates an element declaration whose local name is
<code>regions</code> 
<phrase diff="add">in the namespace denoted by
<code>r</code></phrase>
in an anonymous complex type:
</p>
<eg>/r:purchaseReport/type::0/model::sequence/r:regions</eg>
<p><phrase diff="del">Omitting its optional intermediate step
sequence</phrase><phrase diff="add">Using the elided-component axis to select
the element declaration r:regions directly from the element declaration
r:purchaseReport</phrase>, this path reduces to:</p>  
<eg>/r:purchaseReport/r:regions</eg>

<p diff="chg">This path
designates global or local element declarations whose local
name is <code>quantity</code> in the namespace denoted by <code>r</code>:</p> 
<eg>//r:quantity</eg> 

<p diff="chg">This path designates global or local element declarations whose
local name is <code>quantity</code> in the namespace denoted
by <code>r</code>, where these declarations 
are in the subgraph represented by the global complex type component whose
local name is <code>Items</code> in the namespace denoted by
<code>r</code>:
</p>
<eg>/~r:Items//r:quantity</eg>

<p diff="chg">This path designates global or local attribute 
declarations whose local name is <code>partNum</code> in the
namespace denoted by <code>r</code>
where these declarations are in the subgraph represented by the global complex
type component whose 
local name is <code>Items</code>
in the namespace denoted by <code>r</code>:</p> 
<eg>/~r:Items//@partNum</eg>

<p diff="add">This extended example works against the following schema
  fragment for a schema with no target namespace:
</p> 
<eg diff="add" xml:space="preserve">
&lt;xs:element name="example" type="aType"/>

&lt;xs:complexType name="aType">
   &lt;xs:sequence>
      &lt;xs:element name="foo"/>
      &lt;xs:group ref="aGroup"/>
   &lt;/xs:sequence>
&lt;/xs:complexType>

&lt;xs:group name="aGroup">
   &lt;xs:sequence>
      &lt;xs:element name="bar">
         &lt;xs:complexType>
           &lt;xs:sequence>
              &lt;xs:element ref="foo"/>
              &lt;xs:element ref="a"/>
           &lt;/xs:sequence>
         &lt;/xs:complexType>
      &lt;/xs:element>
   &lt;/xs:sequence>
&lt;/xs:group>

&lt;xs:element name="foo"/>
</eg>
<p diff="add">
Which of the following paths can be shortened to <code>//foo</code> using the
component and elided-component axes?
</p>
<table diff="add" border="0" cellspacing="5" summary="//foo">
<thead>
<tr><th>Path</th><th>Shortened to <code>//foo</code>?</th></tr>
</thead>
<tbody>
<tr><td><code>/group::aGroup/model::sequence/bar/~0/model::sequence/foo</code></td>
<td>No</td>
</tr>
<tr><td><code>/~aType/model::sequence/foo</code></td>
<td>Yes</td>
</tr>
<tr><td><code>/~aType/model::sequence/model::sequence/bar/~0/foo</code></td>
<td>No</td>
</tr>
<tr><td><code>/root/~aType/model::sequence/foo</code></td>
<td>Yes</td>
</tr>
<tr><td><code>/root/~aType/model::sequence/model::sequence/bar/~0/foo</code></td>
<td>No</td>
</tr>
</tbody>
</table>
<p>The &quot;no&quot; answers are all because <code>bar</code> is not selected
by either the component axis or the elided-component axis and must therefore
appear in the path.</p>
</div2>
</div1>

 </body>
 <back>
<div1 id="properties">
<head>Schema Component Properties (Non-Normative)</head>
<p>Schema component paths rely on the schema component graph implicit in
the assembled collection of schema components and their properties. The
following table details which properties are used for defining schema component
paths, and whether they are used to define links in the graph
(traversed) or just referenced for some other purpose. Traversals marked with a
star (*) are the default axis of traversal. 
</p>
<table border="2" rules="rows" cellspacing="5" cellpadding="5" summary="Use of Schema Component Properties">
<thead>
<tr><th>Component <phrase diff="add">or Property Record</phrase></th><th>Property</th><th>Use</th></tr>
</thead>
<tbody>
<tr><th rowspan="8">Attribute Declaration</th></tr>
<tr><td>{type definition}</td><td>traversed *</td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td>{scope}</td><td>traversed</td></tr>
<tr><td>{value constraint}</td><td>none</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3"><phrase diff="add">Scope Property Record</phrase></th></tr>
<tr><td><phrase diff="add">{variety}</phrase></td><td><phrase diff="add">referenced</phrase></td></tr>
<tr><td><phrase diff="add">{parent}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="16">Element Declaration</th></tr>
<tr><td>{type definition}</td><td>traversed *</td></tr>
<tr><td>{identity-constraint definitions}</td><td>traversed</td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td><phrase diff="add">{type table}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td>{scope}</td><td>traversed</td></tr>
<tr><td>{value constraint}</td><td>none</td></tr>
<tr><td>{nillable}</td><td>none</td></tr>
<tr><td>{substitution group affiliation}</td><td>traversed</td></tr>
<tr><td><phrase diff="add">{substitution group affiliations}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td>{substitution group exclusions}</td><td>none</td></tr>
<tr><td>{disallowed substitutions}</td><td>none</td></tr>
<tr><td>{abstract}</td><td>none</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3"><phrase diff="add">Type Table Property Record</phrase></th></tr>
<tr><td><phrase diff="add">{alternatives}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td><phrase diff="add">{default type definition}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="14">Complex Type Definition</th></tr>
<tr><td>{base type definition}</td><td>traversed</td></tr>
<tr><td>{attribute uses}</td><td>traversed</td></tr>
<tr><td>{attribute wildcard}</td><td>traversed</td></tr>
<tr><td>{content type}</td><td>traversed *</td></tr>
<tr><td>{annotations}</td><td>traversed (special)</td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td><phrase diff="add">{context}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td>{derivation method}</td><td>none</td></tr>
<tr><td>{final}</td><td>none</td></tr>
<tr><td>{abstract}</td><td>none</td></tr>
<tr><td>{prohibited substitutions}</td><td>none</td></tr>
<tr><td><phrase diff="add">{assertions}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="5"><phrase diff="add">Content Type Property Record</phrase></th></tr>
<tr><td><phrase diff="add">{variety}</phrase></td><td><phrase diff="add">referenced</phrase></td></tr>
<tr><td><phrase diff="add">{particle}</phrase></td><td><phrase diff="add">traversed *</phrase></td></tr>
<tr><td><phrase diff="add">{simple type definition}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td><phrase diff="add">{open content}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="3"><phrase diff="add">Open Content Property Record</phrase></th></tr>
<tr><td><phrase diff="add">{mode}</phrase></td><td><phrase diff="add">none</phrase></td></tr>
<tr><td><phrase diff="add">{wildcard}</phrase></td><td><phrase diff="add">traversed *</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="5">Attribute Use</th></tr>
<tr><td>{attribute declaration}</td><td>traversed *</td></tr>
<tr><td>{value constraint}</td><td>none</td></tr>
<tr><td>{required}</td><td>none</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="7">Attribute Group Definition</th></tr>
<tr><td>{attribute uses}</td><td>traversed *</td></tr>
<tr><td>{attribute wildcard}</td><td>traversed</td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
</tbody>
<tbody>
<tr><th rowspan="6">Model Group Definition</th></tr>
<tr><td>{model group}</td><td>traversed *</td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
</tbody>
<tbody>
<tr><th rowspan="5">Model Group</th></tr>
<tr><td>{particles}</td><td>traversed *</td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{compositor}</td><td>referenced</td></tr>
</tbody>
<tbody>
<tr><th rowspan="5">Particle</th></tr>
<tr><td>{term}</td><td>traversed *</td></tr>
<tr><td>{min occurs}</td><td>none</td></tr>
<tr><td>{max occurs}</td><td>none</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="5">Wildcard</th></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{namespace constraint}</td><td>none</td></tr>
<tr><td>{process contents}</td><td>none</td></tr>
</tbody>
<tbody>
<tr><th rowspan="9">Identity-constraint Definition</th></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td>{identity-constraint category}</td><td>none</td></tr>
<tr><td>{selector}</td><td>none</td></tr>
<tr><td>{fields}</td><td>none</td></tr>
<tr><td>{referenced key}</td><td>traversed</td></tr>
</tbody>
<tbody>
<tr><th rowspan="4"><phrase diff="add">Type Alternative</phrase></th></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td><phrase diff="add">{test}</phrase></td><td><phrase diff="add">none</phrase></td></tr>
<tr><td><phrase diff="add">{type definition}</phrase></td><td><phrase diff="add">traversed *</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="3"><phrase diff="add">Assertion</phrase></th></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td><phrase diff="add">{test}</phrase></td><td><phrase diff="add">none</phrase></td></tr>
</tbody>
<tbody>
<tr><th rowspan="7">Notation Declaration</th></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td>{public identifier}</td><td>none</td></tr>
<tr><td>{system identifier}</td><td>none</td></tr>
</tbody>
<tbody>
<tr><th rowspan="4">Annotation</th></tr>
<tr><td>{application information}</td><td>none</td></tr>
<tr><td>{user information}</td><td>none</td></tr>
<tr><td>{attributes}</td><td>none</td></tr>
</tbody>
<tbody>
<tr><th rowspan="9">Schema</th></tr>
<tr><td>{type definitions}</td><td>traversed</td></tr>
<tr><td>{attribute declarations}</td><td>traversed</td></tr>
<tr><td>{element declarations}</td><td>traversed *</td></tr>
<tr><td>{attribute group definitions}</td><td>traversed</td></tr>
<tr><td>{model group definitions}</td><td>traversed</td></tr>
<tr><td>{notation declarations}</td><td>traversed</td></tr>
<tr><td>{identity constraint definitions}</td><td>traversed</td></tr>
<tr><td>{annotations}</td><td>traversed (special)</td></tr>
</tbody>
<tbody>
<tr><th rowspan="14">Simple Type Definition</th></tr>
<tr><td>{base type definition}</td><td>traversed</td></tr>
<tr><td>{facets}</td><td>traversed *</td></tr>
<tr><td>{fundamental facets}</td><td>traversed</td></tr>
<tr><td>{item type definition}</td><td>traversed</td></tr>
<tr><td>{member type definitions}</td><td>traversed</td></tr>
<tr><td><phrase diff="add">{context}</phrase></td><td><phrase diff="add">traversed</phrase></td></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{name}</td><td>referenced</td></tr>
<tr><td>{target namespace}</td><td>referenced</td></tr>
<tr><td>{variety}</td><td>referenced</td></tr>
<tr><td>{final}</td><td>none</td></tr>
<tr><td>{primitive type definition}</td><td>traversed</td></tr>
</tbody>
<tbody>
<tr><th rowspan="5">Facets</th></tr>
<tr><td>{annotation}</td><td>traversed (special)</td></tr>
<tr><td><phrase diff="add">{annotations}</phrase></td><td><phrase diff="add">traversed (special)</phrase></td></tr>
<tr><td>{value}</td><td><phrase diff="del">none</phrase><phrase diff="add">traversed * (assertions only)</phrase></td></tr>
<tr><td>{fixed}</td><td>none</td></tr>
</tbody>
</table>
</div1>

<div1 id="axis-summary" diff="add">
<head>Summary of Component Axes (Non-Normative)</head>

<p>The following table details all the axes, the source and target component
kinds, a brief syntax summary, and indicates whether the axis is a default one.
</p>
<!-- XYZZY: missing annotations on attribute use/particle pending open issue -->
<table border="2" rules="rows" cellspacing="5" cellpadding="5" summary="Summary of Component Axes">
<thead>
<tr><th>Axis</th><th>Source Component</th><th>Target Component</th><th>Syntax</th><th>Default?</th></tr>
</thead>
<tbody>
<tr><th rowspan="2">(root)</th></tr>
<tr><td>N/A</td><td>Schema</td><td>/</td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="11">annotations</th></tr>
<tr><td>Attribute Declaration</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Attribute Group Definition</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Element Declaration</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Facet</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Model Group Definition</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Notation Declaration</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Schema</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Simple Type Definition</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
<tr><td>Wildcard</td><td>Annotation</td><td><code>annotation::*</code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3">attribute declarations</th></tr>
<tr><td>Attribute Use</td><td>Attribute Declaration</td><td><code><phrase>schemaAttribute::<var>qname</var></phrase></code></td><td>yes</td></tr>
<tr><td>Schema</td><td>Attribute Declaration</td><td><code><phrase>schemaAttribute::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">attribute group definitions</th></tr>
<tr><td>Schema</td><td>Attribute Group Definition</td><td><code><phrase>attributeGroup::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3">attribute uses</th></tr>
<tr><td>Complex Type Definition</td><td>Attribute Use</td><td>N/A</td><td>no</td></tr>
<tr><td>Attribute Group Definition</td><td>Attribute Use</td><td>N/A</td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3">attribute wildcard</th></tr>
<tr><td>Complex Type Definition</td><td>Attribute Wildcard</td><td><code>anyAttribute::*</code></td><td>no</td></tr>
<tr><td>Attribute Group Definition</td><td>Attribute Wildcard</td><td><code>anyAttribute::*</code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="4">base type definition</th></tr>
<tr><td rowspan="2">Complex Type Definition</td><td>Simple Type Definition</td><td><code><phrase>baseType::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>baseType::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Simple Type Definition</td><td>Simple Type Definition</td><td><code><phrase>baseType::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">content type</th></tr>
<tr><td>Complex Type Definition</td><td>Complex Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">element declarations</th></tr>
<tr><td>Schema</td><td>Element Declaration</td><td><code><phrase>schemaElement::<var>qname</var></phrase></code></td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">facets</th></tr>
<tr><td>Simple Type Definition</td><td>Facet</td><td><code><phrase>facet::<var>name</var></phrase></code></td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">fundamental facets</th></tr>
<tr><td>Simple Type Definition</td><td>Fundamental Facet</td><td><code><phrase>facet::<var>name</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3">identity constraint definitions</th></tr>
<tr><td>Element Declaration</td><td>Identity-constraint Definition</td><td><code><phrase>identityConstraint::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Schema</td><td>Identity-constraint Definition</td><td><code><phrase>identityConstraint::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">item type definition</th></tr>
<tr><td>Simple Type Definition</td><td>Simple Type Definition</td><td><code><phrase>itemType::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">member type definitions</th></tr>
<tr><td>Simple Type Definition</td><td>Simple Type Definition</td><td><code><phrase>memberType::<var>qname</var></phrase></code>[n]</td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">model group</th></tr>
<tr><td>Model Group Definition</td><td>Model Group</td><td><code><phrase>model::<var>compositor</var>[<var>n</var>]</phrase></code></td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">model group definitions</th></tr>
<tr><td>Schema</td><td>Model Group Definition</td><td><code><phrase>group::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">notation declarations</th></tr>
<tr><td>Schema</td><td>Notation Declaration</td><td><code><phrase>notation::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">particles</th></tr>
<tr><td>Model Group</td><td>Particle</td><td>N/A</td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">primitive type definition</th></tr>
<tr><td>Simple Type Definition</td><td>Simple Type Definition</td><td><code><phrase>primitivetype::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">referenced key</th></tr>
<tr><td>Identity-constraint Definition</td><td>Identity-constraint Definition</td><td><code><phrase>key::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="7">scope</th></tr>
<tr><td rowspan="3">Attribute Declaration</td><td>Simple Type Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Attribute Group Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td rowspan="3">Element Declaration</td><td>Simple Type Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Model Group Definition</td><td><code><phrase>scope::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="7">context</th></tr>
<tr><td rowspan="2">Complex Type Definition</td><td>Element Declaration</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td rowspan="4">Simple Type Definition</td><td>Element Declaration</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Attribute Declaration</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Simple Type Definition</td><td><code><phrase>context::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">substitution group affiliation</th></tr>
<tr><td>Element Declaration</td><td>Element Declaration</td><td><code><phrase>substitutionGroup::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="4">term</th></tr>
<tr><td rowspan="3">Particle</td><td>Element Declaration</td><td><code><phrase>schemaElement::<var>qname</var>[<var>n</var>]</phrase></code></td><td>yes</td></tr>
<tr><td>Model Group</td><td><code><phrase>model::compositor[<var>n</var>]</phrase></code></td><td>yes</td></tr>
<tr><td>Wildcard</td><td><code><phrase>any::*[<var>n</var>]</phrase></code></td><td>yes</td></tr>
</tbody>
<tbody>
<tr><th rowspan="7">type definitions</th></tr>
<tr><td rowspan="2">Attribute Declaration</td><td>Simple Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>yes</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>yes</td></tr>
<tr><td rowspan="2">Element Declaration</td><td>Simple Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>yes</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>yes</td></tr>
<tr><td rowspan="2">Schema</td><td>Simple Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>no</td></tr>
<tr><td>Complex Type Definition</td><td><code><phrase>type::<var>qname</var></phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="3">assertions</th></tr>
<tr><td>Complex Type Definition</td><td>Assertion</td><td><code><phrase>assertion::*[<var>n</var>]</phrase></code></td><td>no</td></tr>
<tr><td>Facet</td><td>Assertion</td><td><code><phrase>assertion::*[<var>n</var>]</phrase></code></td><td>no</td></tr>
</tbody>
<tbody>
<tr><th rowspan="2">alternatives</th></tr>
<tr><td>Element Declaration</td><td>Type Alternative</td><td><code><phrase>alternative::*[<var>n</var>]</phrase></code></td><td>no</td></tr>
</tbody>
</table>
</div1>

<div1 id="normative-glossary">
<head>Glossary (Non-Normative)</head>
<p>The listing below is for the benefit of readers of a printed version of this document:
  it collects together all the definitions which appear in the document above.</p>
<ednote role="glossary">
<edtext>An XSL macro is used to
collect definitions from throughout the spec and gather them here for easy
reference. Should talk to Henry for details.</edtext>
</ednote>

</div1>

  <div1 id="references">
  <head>References</head>
<div2>
<head>Normative References</head>
<blist>
<bibl id="rfc3986" key="RFC 3986" diff="add">
<emph><loc href="http://www.ietf.org/rfc/rfc3986.txt">Uniform Resource
Identifier (URI): Generic Syntax</loc></emph>, T. Berners-Lee,  R. Fielding,
and L. Masinter.  The Internet Society, January 2005.  This version is 
available at 
<loc
href="http://www.ietf.org/rfc/rfc3986.txt"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.ietf.org/rfc/rfc3986.txt</loc>.
</bibl>
<bibl id="rfc2396" key="RFC 2396" diff="del"> 
Tim Berners-Lee et al, <emph>RFC 2396:
Uniform Resource Identifiers</emph>, Internet Engineering Task Force,
1995, available at
<loc href="http://www.ietf.org/rfc/rfc2396.txt"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.ietf.org/rfc/rfc2396.txt</loc>
with an update available at
<loc href="http://gbiv.com/protocols/uri/rev-2002/rfc2396bis.html"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://gbiv.com/protocols/uri/rev-2002/rfc2396bis.html</loc>.
</bibl>
<bibl id="xsd2" key="XSD2" diff="chg">
<emph><loc href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/">XML Schema Part 2: Datatypes Second Edition</loc></emph>,  Paul V. Biron and
Ashok Malhotra, Editors. 
World Wide Web Consortium, 28 October 2004. This version is available at 
<loc
href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/</loc>.
The latest version is available at
<loc
href="http://www.w3.org/TR/xmlschema-2/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema-2/</loc>.
</bibl>

<bibl id="xml" key="XML" diff="del"> 
<emph><loc href="http://www.w3.org/TR/2006/REC-xml-20060816">Extensible Markup
Language (XML) 1.0 (Fourth Edition)</loc></emph>
Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, and Fran&#231;ois Yergeau,
Editores.  World Wide Web Consortium, 16 August 2006. This version is available
at 
<loc href="http://www.w3.org/TR/2006/REC-xml-20060816"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2006/REC-xml-20060816</loc>.
The latest version is available at
<loc href="http://www.w3.org/TR/REC-xml/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/REC-xml/</loc>.
</bibl>

<bibl id="xptrxmlns" key="XPTR XMLNS" diff="chg">
<emph><loc href="http://www.w3.org/TR/2003/REC-xptr-xmlns-20030325/">XPointer xmlns() Scheme</loc></emph>, Steven J. DeRose, Ron Daniel Jr., Eve
Maler, Jonathan Marsh, Editors. World Wide Web Consortium, 25 March 2003.
This version is available at
<loc href="http://www.w3.org/TR/2003/REC-xptr-xmlns-20030325/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2003/REC-xptr-xmlns-20030325/</loc>.
The latest version is available at
<loc href="http://www.w3.org/TR/xptr-xmlns/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xptr-xmlns/</loc>.
</bibl>
<bibl id="xsd11_1" key="XSD11_1" diff="add"> 
<emph><loc href="http://www.w3.org/TR/2008/WD-xmlschema11-1-20080620/">XML
Schema Definition Language (XSD) 1.1  Part 1: Structures</loc></emph>, Shundi
Gao, C. M. Sperberg-McQueen, Henry S. Thompson, Editors. 
World Wide Web Consortium, 20 June 2008. This
version is available at 
<loc href="http://www.w3.org/TR/2008/WD-xmlschema11-1-20080620/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2008/WD-xmlschema11-1-20080620/</loc>.
The latest version is available at
<loc
href="http://www.w3.org/TR/xmlschema11-1/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema11-1/</loc>.
</bibl>

<bibl id="xptrframework" key="XPTR" diff="chg">
<emph><loc href="http://www.w3.org/TR/2003/REC-xptr-framework-20030325/">XPointer
Framework</loc></emph> Paul Grosso, Eve Maler, 
Jonathan Marsh, Norman Walsh, Editors. World Wide Web
Consortium, 25 March 2003.
The current version is available at
<loc href="http://www.w3.org/TR/2003/REC-xptr-framework-20030325/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2003/REC-xptr-framework-20030325/</loc>
The latest version is available at
<loc href="http://www.w3.org/TR/xptr-framework/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xptr-framework/</loc>.
</bibl>

<bibl id="xsd11_2" key="XSD11_2" diff="add">
<emph><loc href="http://www.w3.org/TR/2008/WD-xmlschema11-2-20080620/">XML
Schema Definition Language (XSD) 1.1 Part 2: Datatypes</loc></emph>,  
David Peterson, Shundi Gao, Ashok Malhotra, C. M. Sperberg-McQueen, and Henry
S. Thompson, Editors. 
World Wide Web Consortium, 20 June 2008. This version is available at 
<loc
href="http://www.w3.org/TR/2008/WD-xmlschema11-2-20080620/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2008/WD-xmlschema11-2-20080620/</loc>. 
The latest version is available at
<loc
href="http://www.w3.org/TR/xmlschema11-2/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema11-2/</loc>.
</bibl>

<bibl id="xsd1" key="XSD1" diff="chg"> 
<emph><loc href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/">XML Schema Part 1: Structures (Second
Edition)</loc></emph>, Henry S. Thompson, David Beech, Murray Maloney and
Noah Mendelsohn, Editors. World Wide Web Consortium, 28 October 2004. This
version is available at 
<loc href="http://www.w3.org/TR/xmlschema-1/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema-1/</loc>.
The latest version is available at
<loc href="http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/</loc>
</bibl>
</blist>
</div2>
<div2>
<head>Non-normative Informational References</head>
<blist>
<bibl id="xpath" key="XPath" diff="del"> 
<emph><loc href="http://www.w3.org/TR/1999/REC-xpath-19991116">XML path language (XPath) Version 1.0</loc></emph>,
James Clark and Steve DeRose, Editors.
World Wide Web Consortium, 16 November 1999.
This version is available at 
<loc href="http://www.w3.org/TR/1999/REC-xpath-19991116"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/1999/REC-xpath-19991116</loc>.
The latest version is available at 
<loc href="http://www.w3.org/TR/xpath"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/xpath</loc>.
</bibl>
<bibl id="xsd0" key="XSD0" diff="chg"> 
<emph><loc href="http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/">XML Schema Part 0: Primer (Second
Edition)</loc></emph>, David C. Fallside, Editor. World Wide Web Consortium, 28 October 2004. This
version is available at 
<loc href="http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/</loc>.
The latest version is available at
<loc href="http://www.w3.org/TR/xmlschema-0/" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/xmlschema-0/</loc>.
</bibl>
<bibl id="dom3" key="DOM3" diff="add">
<emph><loc href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/">
Document Object
Model (DOM) Level 3 Core Specification, Version 1.0</loc></emph>,
Arnaud Le Hors, et al, Editors. World Wide Web
Consortium, 7 April 2004. This version is available at
<loc href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
</loc>.
The latest version is available at
<loc href="http://www.w3.org/TR/DOM-Level-3-Core/"
xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
xlink:show="replace"
xlink:actuate="onRequest">http://www.w3.org/TR/DOM-Level-3-Core/
</loc>.
</bibl>
</blist>
</div2>
  </div1>
 </back>
</spec>
