Another abandoned server code base... this is kind of an ancestor of taskrambler.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

11317 lines
320 KiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<!-- $Id: Overview.html,v 1.1 2001/09/25 16:10:12 dom Exp $ -->
<head>
<title>XML Schema: Formal Description</title>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<style TYPE="text/css">CODE {
FONT-SIZE: 100%; FONT-FAMILY: monospace
}
PRE {
BORDER-RIGHT: medium none; PADDING-RIGHT: 0.3cm; BORDER-TOP: medium none; PADDING-LEFT: 0.3cm; FONT-SIZE: 92%; PADDING-BOTTOM: 0px; MARGIN: 1em 1cm; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none; WHITE-SPACE: pre
}
SPAN.rn {
FONT-WEIGHT: bold; FONT-VARIANT: small-caps
}
span.ednote {FONT-WEIGHT: bold; COLOR: #FF0000}
HR.rule {
TEXT-ALIGN: center
}
P.rulename {
FONT-WEIGHT: bold; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 5%; TEXT-ALIGN: left; FONT-VARIANT: small-caps
}
P.antecedent {
MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt; TEXT-ALIGN: center
}
DIV.antecedent {
MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt
}
P.consequent {
MARGIN-TOP: 0pt; TEXT-ALIGN: center
}
</style>
<link HREF="http://www.w3.org/StyleSheets/TR/W3C-WD" TYPE="text/css" REL="stylesheet">
<!--<link rel="stylesheet" type="text/css" href="http://www.w3.org/StyleSheets/TR/W3C-WD">-->
<meta CONTENT="Microsoft FrontPage 5.0" NAME="GENERATOR">
</head>
<body>
<div CLASS="head">
<p><a HREF="http://www.w3.org/"><img src="http://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width="72"></a> </p>
<h1>XML Schema: Formal Description</h1>
<h2>W3C Working Draft, 25 September 2001 </h2>
<dl>
<dt>This version: </dt>
<dd><a HREF="http://www.w3.org/TR/2001/WD-xmlschema-formal-20010925/">http://www.w3.org/TR/2001/WD-xmlschema-formal-20010925/</a>
</dd>
<dt>Latest version: </dt>
<dd><a HREF="http://www.w3.org/TR/xmlschema-formal/">http://www.w3.org/TR/xmlschema-formal/</a>
</dd>
<dt>Previous version:</dt>
<dd><a HREF="http://www.w3.org/TR/2001/WD-xmlschema-formal-20010320/">http://www.w3.org/TR/2001/WD-xmlschema-formal-20010320/</a>
</dd>
<dt>Editors: </dt>
<dd>Allen Brown (Microsoft) <a HREF="mailto:allenbr@microsoft.com">allenbr@microsoft.com</a><br>
Matthew Fuchs (Commerce One) <a HREF="mailto:matthew.fuchs@commerceone.com">matthew.fuchs@commerceone.com</a>
<br>
Jonathan Robie (Software AG) <a HREF="mailto:jonathan.robie@SoftwareAG-USA.com">jonathan.robie@SoftwareAG-USA.com</a>
<br>
Philip Wadler (Avaya) <a HREF="mailto:wadler@avaya.com">wadler@avaya.com</a> </dd>
</dl>
<p CLASS="copyright"><a
HREF="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Copyright">Copyright</a>
©2001 <a HREF="http://www.w3.org/"><ABBR TITLE="World Wide Web Consortium">W3C</ABBR></a><sup>®</sup> (<a
HREF="http://www.lcs.mit.edu/"><ABBR TITLE="Massachusetts Institute of Technology">MIT</ABBR></a>, <a HREF="http://www.inria.fr/"><ABBR LANG="fr" TITLE="Institut National de Recherche en Informatique et Automatique">INRIA</ABBR></a>, <a
HREF="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a
HREF="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Legal_Disclaimer">liability</a>,
<a HREF="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#W3C_Trademarks">trademark</a>,
<a HREF="http://www.w3.org/Consortium/Legal/copyright-documents-19990405">document use</a>
and <a HREF="http://www.w3.org/Consortium/Legal/copyright-software-19980720">software
licensing</a> rules apply.</p>
</div>
<hr>
<h2><a name="Abstract">Abstract</a></h2>
<p>XML Schema: Formal Description is a formal description of XML types and validity as
specified by <a HREF="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schema Part
1: Structures</a>.</p>
<h2><a NAME="status">Status of this document</a></h2>
<p>This is a W3C Working Draft for review by members of the W3C and other interested
parties in the general public. </p>
<p>It has been reviewed by the XML Schema Working Group and the Working Group has agreed
to its publication. Note that not that all sections of the draft represent the current
consensus of the WG. Different sections of the specification may well command different
levels of consensus in the WG. Public comments on this draft will be instrumental in the
WG's deliberations. </p>
<p>Please review and send comments to <a HREF="mailto:www-xml-schema-comments@w3.org">www-xml-schema-comments@w3.org</a>
(<a HREF="http://lists.w3.org/Archives/Public/www-xml-schema-comments/">archive</a>).</p>
<p>This specification of the formal description of XML Schema is a working draft of the
XML Schema Working Group and has been adopted by the working group as the formalization of
the XML Schema Definition Language, in fulfillment of its commitment to provide such a
formalization at the conclusion of the Candidate Recommendation phase for XML Schema. This
material is current with the Proposed Recommendation draft but not perfectly aligned with
it. In the foreseeable future, work on this document will focus on improving the alignment
with the normative parts of XML Schema and resolving the issues on the current issues list
(<a HREF="http://www.w3.org/2001/03/xmlschema-fd-issues.html">http://www.w3.org/2001/03/xmlschema-fd-issues.html</a>).
</p>
<p>As with all working drafts, the reader is advised that all the material within is
subject to change. The reader is advised that material found here may change drastically
from draft to draft. In particular, future versions will incorporate some or all of the
XML Schema Part 2: Datatypes specification, the key/keyref facility, and a bidirectional
mapping between the XML Schema component model and the corresponding part of this
formalization. Parts of this specification, such as the normalization of names, may
eventually find a broader use. However the reader should be advised that these features
will probably undergo revision before the working group warrants them for such uses.</p>
<p>The Schema Working Group expects this work to be of use to other Working Groups within
the W3C as well as to others building tools and systems hoping to leverage XML Schemas.</p>
<p>A list of current W3C working drafts can be found at <a HREF="http://www.w3.org/TR/">http://www.w3.org/TR/</a>.
They may be updated, replaced, or obsoleted by other documents at any time. It is
inappropriate to use W3C Working Drafts as reference material or to cite them as other
than &quot;work in progress&quot;.</p>
<h2><a name="TOC">Table of contents</a></h2>
<p>1 <a HREF="#section-introduction">Introduction</a></p>
<p>2 <a HREF="#section-overview">Overview</a> <br>
&nbsp;&nbsp;2.1 <a HREF="#section-overview-normalization">Normalization</a> <br>
&nbsp;&nbsp;2.2 <a HREF="#section-overview-components">Components</a> <br>
&nbsp;&nbsp;2.3 <a HREF="#section-overview-documents">Documents and Forests</a></p>
<p>3 <a HREF="#section-structures">Structures</a> <br>
&nbsp;&nbsp;3.1 <a HREF="#section-structures-names">Names</a> <br>
&nbsp;&nbsp;3.2 <a HREF="#section-structures-namesets">Wildcards</a> <br>
&nbsp;&nbsp;3.3 <a HREF="#section-structures-datatypes">Atomic datatypes</a> <br>
&nbsp;&nbsp;3.4 <a HREF="#section-structures-groups">Content groups</a> <br>
&nbsp;&nbsp;3.5 <a HREF="#section-structures-components">Components</a> <br>
&nbsp;&nbsp;3.6 <a HREF="#section-structures-constraints">Constraints</a> <br>
&nbsp;&nbsp;3.7 <a HREF="#section-structures-documents">Ordered Forests</a> <br>
&nbsp;&nbsp;3.8 <a HREF="#section-structures-inferences">Inference rules</a></p>
<p>4 <a HREF="#section-normalization">Normalization</a></p>
<p>5 <a HREF="#section-refinement">Derivation</a> <br>
&nbsp;&nbsp;5.1 <a HREF="#section-refinement-base">Base chain</a> <br>
&nbsp;&nbsp;5.2 <a HREF="#section-refinement-extension">Extension</a> <br>
&nbsp;&nbsp;5.3 <a HREF="#section-refinement-restriction">Restriction</a> <br>
&nbsp;&nbsp;5.4 <a HREF="#section-refinement-constraints">Constraints</a></p>
<p>6 <a HREF="#section-validation">Validation</a> <br>
&nbsp;&nbsp;6.1 <a HREF="#section-validation-content">Content validation</a> <br>
&nbsp;&nbsp;6.2 <a HREF="#section-refinement-ids">ID/IDREF validation</a></p>
<p>7 <a HREF="#section-xsdl">XML Schema to Formalization Mapping</a> <br>
&nbsp;&nbsp;7.1 <a HREF="#section-xsdl-conversions">Conversions for content model
particles</a> <br>
&nbsp;&nbsp;7.2 <a HREF="#section-xsdl-correspondances">Correspondences from XML Schema to
sorts</a></p>
<p>8 <a HREF="#section-index">Index of notations</a></p>
<p>Appendix A <a HREF="#tighter-grammar">Auxiliary Grammar </a></p>
<p>Appendix B <a HREF="#appendix-A">Infidelities in the current formalization of XML
Schema</a></p>
<p>Appendix C <a HREF="#bibliography">Bibliography</a></p>
<hr>
<h2><a NAME="section-introduction">1</a>&nbsp;&nbsp;Introduction</h2>
<p>This formalization is a formal, declarative system for describing and naming XML Schema
information, specifying XML instance type information, and validating instances against
schemas. The goals of the formalization are to:
<ul>
<li>Provide a semantic framework for software systems that use the W3C XML Schema
specification, such as the W3C XML Query Algebra. </li>
<li>Specify names for <em>all</em> components of an XML Schema, so that they can be uniquely
identified by URIs. Such unique identifiers may be useful to XML Query, RDF, and topic
maps, among others. </li>
<li>Formally define validation at a declarative level. </li>
<li>Define the mapping from the current XML Schema syntax onto the structures described
here, as well as the mapping between the XML Schema component mode and our component
model. </li>
</ul>
<p>Many potential applications of XML Schema may benefit from the definition of a formal
model. We have focused on the material in Part I (Structures), as this is the most
complex.</p>
<p>A basic understanding of first-order predicate logic, which is part of most computer
science curricula, is adequate to understand this document. Where other notations are
used, they are explained before use. Though the mathematical notation used in this
formalization may be somewhat daunting for those not accustomed to formalisms, it should
be possible to prepare a prose description directly from this formalism, which may be more
approachable than a description based on an <em>ad hoc</em> understanding of XML
Schema&nbsp;[<a NAME="CITExsd1" HREF="#xsd1">11</a>,<a NAME="CITExsd2" HREF="#xsd2">3</a>].</p>
<p>The approach followed here follows the best practices currently used in the programming
languages community, although somewhat adapted for XML.&nbsp; The hallmark of this
approach is the use of context free grammars to provide syntactic checking and the use of
inference rules to provide the semantics associated with each piece of syntax.&nbsp; This
means there is, essentially, one inference rule per context free grammar production.
&nbsp; This set of inference rules is not intended to be in any way minimal, but it is
helpful from both a pedagogical and implementation standpoint - for each syntactic
construct it is straightforward to identify its underlying semantics.</p>
<p>The remainder of this document is organized as follows.
<ul>
<li>Section&nbsp;<a HREF="#section-overview">2</a> gives an overview of the formalism. </li>
<li>Section&nbsp;<a HREF="#section-structures">3</a> defines the basic structures used in
the formalization including names, groups, and components. </li>
<li>Section&nbsp;<a HREF="#section-normalization">4</a> describes normalization. </li>
<li>Section&nbsp;<a HREF="#section-refinement">5</a> describes refinement. </li>
<li>Section&nbsp;<a HREF="#section-validation">6</a> describes validation. </li>
<li>Section&nbsp;<a HREF="#section-xsdl">7</a> describes the mapping from the XML Schema
concrete syntax into our structures. (A mapping from XML Schema components to these
components will appear in a later draft.) </li>
<li>Section&nbsp;<a HREF="#section-index">8</a> indexes the notations used. </li>
<li>Appendix&nbsp;<a HREF="#appendix-A">B</a> lists lacunae in the current articulation of
the formalism relative to XML Schema </li>
</ul>
<h2><a NAME="section-overview">2</a>&nbsp;&nbsp;Overview</h2>
<p>This section uses a running example to introduce our representation of a schema, which
uses a mathematical notation that is easier to manipulate formally than the XML syntax of
Schema. This formalism divides a schema into a set of components, where each component can
match against a particular fragment of XML in an instance.&nbsp; Particular attention will
be given to the use of <em>normalization</em> to provide a unique name for each component
of a schema.</p>
<p>Here is a sample schema written in W3C XML Schema syntax.&nbsp;</p>
<pre>&lt;xsd:schema targetNamespace = &quot;http://www.example.com/baz.xsd&quot;
&nbsp;&nbsp;&nbsp; xmlns = &quot;http://www.example.com/baz.xsd&quot;
&nbsp;&nbsp;&nbsp; xmlns:xsd = &quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
&nbsp; &lt;xsd:element name=&quot;a&quot; type=&quot;t&quot;/&gt;
&nbsp; &lt;xsd:simpleType name=&quot;b&quot;&gt;
&nbsp;&nbsp;&nbsp; &lt;xsd:list itemType=&quot;xsd:integer&quot;/&gt;
&nbsp; &lt;/xsd:simpleType&gt;
&nbsp; &lt;xsd:complexType name=&quot;t&quot;&gt;
&nbsp;&nbsp;&nbsp; &lt;xsd:attribute name=&quot;b&quot; type=&quot;xsd:string&quot;/&gt;
&nbsp;&nbsp;&nbsp; &lt;xsd:attribute name=&quot;c&quot; type=&quot;b&quot; use=&quot;optional&quot;/&gt;
&nbsp; &lt;/xsd:complexType&gt;
&nbsp; &lt;xsd:complexType name=&quot;u&quot;&gt;
&nbsp;&nbsp;&nbsp; &lt;xsd:complexContent&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:extension base=&quot;t&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:choice&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:element name=&quot;d&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:complexType&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:sequence&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:element name=&quot;a&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; type=&quot;xsd:string&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; minOccurs=&quot;1&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; maxOccurs=&quot;unbounded&quot;/&gt;
</pre>
<pre> &lt;/xsd:sequence&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsd:complexType&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsd:element&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsd:element name=&quot;e&quot; type=&quot;xsd:string&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsd:choice&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsd:extension&gt;
&nbsp;&nbsp;&nbsp; &lt;/xsd:complexContent&gt;
&nbsp; &lt;/xsd:complexType&gt;
&lt;/xsd:schema&gt;
</pre>
<p>And here is an XML document which matches the above schema</p>
<pre>&lt;baz:a xmlns:baz=&quot;http://www.example.com/baz.xsd&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
&nbsp;&nbsp;&nbsp; xsi:type=&quot;baz:u&quot;
&nbsp;&nbsp;&nbsp; b=&quot;zero&quot;
&nbsp;&nbsp;&nbsp; c=&quot;1 2&quot;&gt;
&nbsp; &lt;d&gt;
&nbsp;&nbsp;&nbsp; &lt;a&gt;three&lt;/a&gt;
&nbsp;&nbsp;&nbsp; &lt;a&gt;four&lt;/a&gt;
&nbsp; &lt;/d&gt;
&lt;/baz:a&gt;
</pre>
<h3><a NAME="section-overview-normalization">2.1</a>&nbsp;&nbsp;Normalization</h3>
<p>We use a normalized form of a schema, which assigns a unique universal name to each
component of a schema, and &quot;flattens&quot; the structure. (A component is anything
which may be defined or declared: an element, an attribute, a simple type, a complex type,
a group, an attribute group, or an identity constraint.)</p>
<p>Here are the normalized (universal) names of the components in our sample schema. For
each name, we list two forms: the long form is the name proper, while the short form is an
abbreviated version we use in examples to improve readability.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">long form</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short form</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#+element::a</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>+a</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#type::s</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>s</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#type::t</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>t</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#-type::t/attribute::b</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<tt>@t/b</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#-type::t/attribute::c</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<tt>@t/c</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#type::u</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>u</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#-type::u/element::d</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>u/d</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#type::u/element::d/type::*</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <tt>u/d/ *</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#-type::u/element::d/type::*/element::a</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<tt>u/d/ */a</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#-type::u/element::e</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<tt>u/e</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>The normalized names reflect the nesting structure of the original schema. Note that
the nesting of declarations in W3C XML Schema also determines their scope. In the
representation of a Schema, the names of nested components are constructed by appending
their schema names to the normalized names of their parents; if a component is anonymous,
it is given the name <tt>*</tt>. The syntax of names is chosen to be similar to
XPath&nbsp;[<a NAME="CITExpath" HREF="#xpath">5</a>,<a NAME="CITExslt" HREF="#xslt">12</a>],
but unlike XPath, <tt>*</tt> does not function as a wildcard in normalized names.</p>
<p>These normalized names clearly distinguish local names from global names. Where
previously it might be possible to confuse the global <tt>a</tt> element with the local <tt>a</tt>
element, now these are given distinct names, <tt>a</tt> and <tt>u/d/*/a</tt> respectively.
The latter indicates that the global type <tt>u</tt> contains a local element <tt>d</tt>
which contain an anonymous type <tt>*</tt> which contains a local element <tt>a</tt>. Each
attribute or element contains at most one anonymous type, so using the name <tt>*</tt> for
such types leads to no confusion.&nbsp; In order to reflect the
attribute form and element form attributes from XSDL, these names also reflect whether an
element is to be qualified or not by a &quot;-&quot; or a &quot;+&quot; immediately
following the # in the name.&nbsp; A &quot;+&quot; indicates the name is to be qualified.
&nbsp; By default, only top-level elements (such as the &quot;a&quot;) are qualified.
&nbsp; However, for example, if the declaration of the &quot;b&quot; attribute of type
&quot;t&quot; had been:</p>
<p>&lt;xsd:attribute name=&quot;b&quot; type=&quot;xsd:string&quot;
formDefault=&quot;qualified&quot;/&gt;</p>
<p>then its normalized name would have been:</p>
<p><tt>http://www.example.com/baz.xsd#+type::t/attribute::b</tt></p>
<p>NOTE:&nbsp; The normalized names described in this document exist
only for the purposes described herein.&nbsp; There is a separate effort underway by the
Schema WG to generalize these names so they will be suitable for a variety of other uses.
&nbsp; When that effort is complete, this document will adopt that syntax.</p>
<h3><a NAME="section-overview-components">2.2</a>&nbsp;&nbsp;Components</h3>
<p>Next, we show how components are represented in this notation. Each component is one of
six sorts: element, attribute, simple type, complex type, attribute group, or model group.
Regardless of sort, each component is represented uniformly as a constructor (one of <tt>attribute</tt>,
<tt>element</tt>, <tt>simpleType</tt>, <tt>complexType</tt>, <tt>attributeGroup</tt>, <tt>modelGroup</tt>,
or <tt>identityConstraint</tt>) of a record with six fields:
<dl COMPACT="COMPACT">
<dt><b><tt>name</tt></b> </dt>
<dd>is the name of the component; </dd>
<dt><b><tt>base</tt></b> </dt>
<dd>is the name of the base component of the structure; </dd>
<dt><b><tt>derivation</tt></b> </dt>
<dd>specifies how the component is derived from the base,<br>
it is one of <tt>restriction</tt> or <tt>extension</tt>; </dd>
<dt><b><tt>refinement</tt></b> </dt>
<dd>is the set of permitted derivations from this component as base,<br>
it is a subset of {<tt>restriction</tt>, <tt>extension</tt>}; </dd>
<dt><b><tt>abstract</tt></b> </dt>
<dd>is a boolean, representing whether this type is abstract; </dd>
<dt><b><tt>content</tt></b> </dt>
<dd>is the content of the component, describing the instance information which can match
this component, following the context free grammar below. </dd>
</dl>
<p>Note that all seven sorts have a very consistent structure consisting of six
properties, which have the same interpretation regardless of the sort.</p>
<h4><a NAME="section-overview-components-content">2.2.1</a>&nbsp;&nbsp;Component content</h4>
<p>The formalism uses standard regular expression notation&nbsp;[<a NAME="CITEcs"
HREF="#cs">2</a>] for component content. &nbsp; Component content corresponds roughly to a
union of both model groups and attributes groups.&nbsp; In what follows, g stands for a
content group (as does g<sub>1</sub>, g<sub>2</sub>, and so on). The constructors for
groups include the following:
<dl>
<dt><b>e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>empty sequence </dd>
<dt><b>Ø&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>empty choice </dd>
<dt><b>g<sub>1</sub>,g<sub>2&nbsp;&nbsp;&nbsp;&nbsp;</sub></b> </dt>
<dd>sequence, g<sub>1</sub> followed by g<sub>2</sub> </dd>
<dt><b>g<sub>1</sub> | g<sub>2&nbsp;&nbsp;&nbsp;&nbsp;</sub></b> </dt>
<dd>choice, g<sub>1</sub> or g<sub>2</sub> </dd>
<dt><b>g<sub>1</sub> &amp; g<sub>2&nbsp;&nbsp;</sub></b> </dt>
<dd>all, g<sub>1</sub> and g<sub>2</sub> in either order </dd>
<dt><b>g{m,n}</b> </dt>
<dd>repetition, g repeated between minimum m and maximum n times&nbsp;&nbsp; (m is a natural
number, n is a natural number or 8) </dd>
<dt><b>mixed(g)&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>mixed content in group g </dd>
<dt><b>@w[g]&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>attribute, with name in nameset w and content in group g </dd>
<dt><b>w[g]&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>element, with name in nameset w and content in group g </dd>
<dt><b>p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>atomic datatype (such as <tt>xsi:string</tt> or <tt>xsi:integer</tt>) </dd>
<dt><b>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> </dt>
<dd>component name&nbsp; </dd>
</dl>
<p>EDITOR'S NOTE: The grammar above does not distinguish between the precedence of the
various connectors (&quot;|&quot;, &quot;&amp;&quot;, and &quot;,&quot;). This will not be
a concern as in our examples we will always parenthesize appropriately. Rather than
significantly expanding the grammar, we will provide a full grammar with parentheses in an
appendix in a future version.</p>
<p>A nameset corresponds to a set of names.&nbsp; A nameset may be a
single element or attribute name, a substitution group, or the equivalent of an XSDL
wildcard.&nbsp; The syntax for defining a nameset will be given later.</p>
<p><span class='ednote'>Need to explain what a nameset is.</span></p>
<p>Here is an example of a model group in our notation, which
corresponds to an <tt>a</tt> element with content of type <tt>u</tt> in our running
example</p>
<pre>+a[
&nbsp;&nbsp;&nbsp; (-@t/b[xsi:string] &amp; -@t/c[xsi:integer{0,8}]{0,1}),
&nbsp;&nbsp;&nbsp; (-u/d[u/d/*/a[xsi:string]{1,8}] | -u/d/*/e[xsi:string])
]
</pre>
<p>Note that the group constructors are used uniformly in several contexts. Repetition
(g{m,n}) is used for lists of atomic datatypes, to indicate whether an attribute is
optional, and for elements. Similarly, all (g<sub>1</sub> &amp; g<sub>2</sub>) is used for
attributes and for elements.</p>
<h4><a NAME="section-overview-components-examples">2.2.2</a> Example Schema Components</h4>
<p>Here are the components of the normalized schema represented in this notation</p>
<pre>element(
&nbsp; name = +a,
&nbsp; base = xsi:UrElement,
&nbsp; derivation = restriction,
&nbsp; refinement = {restriction,extension},
&nbsp; abstract = false,
&nbsp; content = a[t]
)
</pre>
<pre>simpleType(
&nbsp; name = s,
&nbsp; base = xsi:UrSimpleType,
&nbsp; derivation = restriction,
&nbsp; refinement = {restriction},
&nbsp; abstract = false,
&nbsp; content = xsi:integer{0,8}
)
</pre>
<pre>complexType(
&nbsp; name = t,
&nbsp; base = xsi:UrType,
&nbsp; derivation = restriction,
&nbsp; refinement = {restriction,extension},
&nbsp; abstract = false,
&nbsp; content = @t/b &amp; @t/c
)
</pre>
<pre>attribute(
&nbsp; name = -@t/b,
&nbsp; base = xsi:UrAttribute,
&nbsp; derivation = restriction,
&nbsp; refinement = {restriction},
&nbsp; abstract = false,
&nbsp; content = @t/b[xsi:string]
)
</pre>
<pre>attribute(
&nbsp; name = -@t/c,
&nbsp; base = xsi:UrAttribute,
&nbsp; derivation = restriction,
&nbsp; derivation = {restricition},
&nbsp; abstract = false,
&nbsp; content = @t/c[s]{0,1}
)
</pre>
<pre>complexType(
&nbsp; name = u,
&nbsp; base = t,
&nbsp; derivation = extension,
&nbsp; refinement = {restriction,extension},
&nbsp; abstract = false,
&nbsp; content = (-@t/b &amp; @t/c),
&nbsp; (u/d | u/e)
)
</pre>
<pre>element(
&nbsp; name = u/d,
&nbsp; base = xsi:UrElement,
&nbsp; derivation = restriction,
&nbsp; refinement = {},
&nbsp; abstract = false,
&nbsp; content = u/d[u/d/*]
)
</pre>
<pre>complexType(
&nbsp; name = u/d/*,
&nbsp; base = xsi:UrType,
&nbsp; derivation = restriction,
&nbsp; refinement = {},
&nbsp; abstract = false,
&nbsp; content = u/d/*{0,8}
)
</pre>
<pre>element(
&nbsp; name = -u/d/*/a,
&nbsp; base = xsi:UrElement,
&nbsp; derivation = restriction,
&nbsp; refinement = {},
&nbsp; abstract = false,
&nbsp; content = u/d/*/a[xsi:string]
)
</pre>
<pre>element(
&nbsp; name = -u/e,
&nbsp; base = xsi:UrElement,
&nbsp; derivation = restriction,
&nbsp; refinement = {},
&nbsp; abstract = false,
&nbsp; content = -u/e[xsi:string]
)
</pre>
<p>Note that we do not nest declarations to express their scope. The scope of a
declaration is reflected in its normalized name.</p>
<h3><a NAME="section-overview-documents">2.3</a>&nbsp;&nbsp;Documents and Forests</h3>
<p><span class='ednote'>It is not clear to me from our discussions whether this
notation will stay. There's some suggestion that we need a notation that
borders on the verbosity of the underlying XML.</span></p>
<p>There is also a compact notation for representing XML, both before and after
normalization. This notation is not intended in any way to be used as a replacement for
traditional XML syntax.&nbsp; Having a more compact, but equally expressive, equivalent
notation will aid significantly in the exposition below (in particular it keeps the
inference rules to a reasonable size).&nbsp; Here is the original document in this
notation:</p>
<pre>a[
&nbsp; @xsi:type[&quot;u&quot;],
&nbsp; @b[&quot;zero&quot;],
&nbsp; @c[1,2],
&nbsp; d[
&nbsp;&nbsp;&nbsp; a[&quot;three&quot;],
&nbsp;&nbsp;&nbsp; a[&quot;four&quot;]
&nbsp;&nbsp;&nbsp; ]
&nbsp; ]
</pre>
<p>Note that attributes and elements are represented uniformly, as are sequences of
attributes, sequences of elements, and lists of atomic datatypes. Note also that from this
perspective a document is just a element without a parent. Therefore we will drop the term
&quot;document&quot; and simply use the term <em>element</em>. The term &quot;this
document&quot; will continue to refer to the document you are reading.</p>
<p><strike>Here is the normalized element:</strike></p>
<pre><strike>a[
&nbsp; @xsi:type[&quot;u&quot;],
&nbsp; @t/b[&quot;zero&quot;],
&nbsp; @t/c[1,2],
&nbsp; u/d[
&nbsp;&nbsp;&nbsp; u/d/*/a[&quot;three&quot;],
&nbsp;&nbsp;&nbsp; u/d/*/a[&quot;four&quot;]
&nbsp;&nbsp;&nbsp; ]
&nbsp; ] </strike>
</pre>
<p>Given an input document such as this, validation can both
establish the validity of the document and assert which types, elements, and attributes
were used.&nbsp; This can be conveyed textually by writing the document using normalized
names.</p>
<p>Finally, here is the normalized element with type information added</p>
<pre>a[
&nbsp; u <em>types</em> @t/b[xsi:string <em>types</em> &quot;zero&quot;],
&nbsp; @t/c[s <em>types</em> 1,2],
&nbsp; u/d[
&nbsp;&nbsp;&nbsp; u/d/* <em>types</em> u/d/*/a[xsi:string <em>types</em> &quot;three&quot;],
&nbsp;&nbsp;&nbsp; u/d/*/a[xsi:string <em>types</em> &quot;four&quot;]
&nbsp;&nbsp;&nbsp; ]
&nbsp; ]
</pre>
<p>Unlike the <tt>xsi:type</tt> convention, this notation allows one to uniformly express
information about element and attribute types. The type of an element or attribute is
indicated by writing <tt>x[t <em>types</em> d]</tt> where x is an attribute or element
name, t is a type name, and d is the content of the attribute or element.</p>
<p>We will use the term <em>forest</em> or <em>ordered forest</em> when referring to lists
of attributes and elements, as in the content of a element. For example, while the above
is an element its content: </p>
<pre>&nbsp; u <em>types</em> @t/b[xsi:string <em>types</em> &quot;zero&quot;],
&nbsp; @t/c[s <em>types</em> 1,2],
&nbsp; u/d[
&nbsp;&nbsp;&nbsp; u/d/* <em>types</em> u/d/*/a[xsi:string <em>types</em> &quot;three&quot;],
&nbsp;&nbsp;&nbsp; u/d/*/a[xsi:string <em>types</em> &quot;four&quot;]
&nbsp;&nbsp;&nbsp; ]
</pre>
<p>is an ordered forest. Note that a single element is itself an ordered forest. </p>
<h2><a name="section-forest-grammars">2.4</a>&nbsp; Forest Grammars</h2>
<p>The content of the components described above takes advantage of
derivation and namesets to provide a compact description of the actual allowed content of
an element in an instance.&nbsp; This can be viewed as an <em>intentional</em> description
of a regular expression.&nbsp; However, we can also provide the full <em>extensional</em>
description of the regular expression, given a finite set of components.&nbsp; Doing so
allows us to describe validation in terms of a more primitive model and would allow XML
Schema to evolve without needing to change the core of the formalism -- as XML Schema
evolves, the mapping from the intensional descriptions contained by the components to the
extensional descriptions may change, but a formalism built around the extensional versions
remains stable.</p>
<p>As an example of this conversion, we will unroll the content of
the &quot;a&quot; element from our sample schema.&nbsp; Note that &quot;a&quot; has
declared type &quot;t&quot;, and &quot;t&quot; has one subtype, &quot;u&quot;. &nbsp;
Therefore the contents of an &quot;a&quot; are either the contents of &quot;t&quot;, with
an optional xsi:type attribute, or the contents of &quot;u&quot; with an obligatory
xsi:type attribute with value &quot;u&quot;:</p>
<p>a[(xsi:type=&quot;t&quot;? &amp; @t/b &amp; @t/c) |
((xsi:type=&quot;u&quot; &amp; @t/b &amp; @t/c), (u/d | u/e))]</p>
<p>A validator can validate against this extended regular expression
and map back to the components by way of the value of xsi:type.&nbsp; At this lowest
level, xsi:type functions as an implied attribute, but takes on added signficance once we
map from this level back into the level of schema.&nbsp; It should also be noted that this
expression does not follow the single attribution and unambiguity constraints of DTDs or
Schema.&nbsp; Those constraints are applied at the component level.</p>
<p>Another aspect of this translation is to treat element names in
regular expressions as namesets containing the names of the elements in the substitution
group of the base element.&nbsp; For example, suppose there were an element
&quot;foo&quot; whose content was just an &quot;a&quot; element, and that there also
existed an element &quot;f&quot; in the substitution group of &quot;a&quot;.&nbsp; The the
content of the &quot;foo&quot; component would be:</p>
<p>foo[a]</p>
<p>and the full regular expression would expand to:</p>
<p>foo[(a | f)].</p>
<p><span class='ednote'>2.n Description of general forest grammars and general
description of how the component grammars can be converted into full forest grammars.
Convert some extended type to a full grammar. </span></p>
<h2><a NAME="section-structures">3</a>&nbsp;&nbsp;Structures</h2>
<p>This section defines the structures used in this formalism: names, namesets, atomic
datatypes, model groups, components, and forests.</p>
<h3><a NAME="section-structures-names">3.1</a>&nbsp;&nbsp;Names</h3>
<p><span class='ednote'>It is not clear how much of this needs to remain here now
that NUNs are moving out. Perhaps we stick with this, as why make changes that will
just be rendered irrelevant?</span></p>
<p><span class='ednote'>The other significant issue here, is that we don't take
into account the 208 prefixing issues. However, to
be complete, we need to do so. The least disturbing way I can find to do so is to
include them in the names - so that a name also specifies if it matches a qualified or
unqualified element/attribute (keeps it out of the components).</span></p>
<p>A <em>namespace</em> is a URI reference, and a <em>local name</em> is an NCName, as in
the Namespace recommendation. We let i range over namespaces and the
&quot;non-namespace&quot; (where items not in a namespace reside) and j range over local
names.&nbsp; In order to cover the case of naming components that are not in a namespace,
i may be empty.&nbsp; Using these names we can create unique identifiers for the
components of a schema.&nbsp; These names are for the abstract components of the schema
and ultimately are not dependent on the XML Schema transfer syntax or any configuration of
files the schema may be stored in.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">namespace</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; i</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">URI &nbsp;reference | &nbsp;&nbsp; e</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">local name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; j</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">:=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">NCName</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>A <em>symbol space</em> is one of the six symbol spaces in XML Schema. We let ss range
over symbol spaces.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">symbol space</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ss</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>element</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attribute</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>type</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attributeGroup</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>modelGroup</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>notation</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>A <em>symbol name</em> consists of a symbol space paired with a local name or with <tt>*</tt>
(the latter names an anonymous component). A <em>name</em> consists of a URI reference
followed by a sequence of one or more symbol names. We let sn range over symbol names, and
x range over names.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">symbol name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sn</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ss::j</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; symbol space ss, local name j</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ss::*</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; symbol space ss, anonymous name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; x</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">i#sn<sub>1</sub>/&hellip;/sn<sub>n</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; namespace i, symbol names sn<sub>1</sub>,&hellip;,sn<sub>
n</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>Here n = 1 is the <em>scope length</em> of the name.</p>
<p>An example of a name is:</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>http://www.example.com/baz.xsd#type::u/element::d/type::*/element::a</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>The scope length of this name is 4.</p>
<p>In this document we've found it convenient to use a short form of names.&nbsp; Symbol
names in the attribute symbol space are written <tt>@j</tt>, all other symbol names are
written j (or <tt>*</tt> for the oxymoronic anonymous names) - in our examples we've ensured our local
names are unique across all symbol spaces. The URI reference may be dropped when it is
obvious from context. For example, the short form of the name above is <tt>u/d/*/a</tt>.
Additional examples of names and short forms appear in Section&nbsp;<a
HREF="#section-overview-normalization">2.1</a>.</p>
<p>Before normalization, all names in a forest have scope length equal to one. It is
helpful to define functions to extract the namespace from a name, and to extract the
symbol space and local name of the last symbol name. We define <tt>namespace(x) = i</tt>, <tt>symbol(x)
= ss</tt>, and <tt>local(x) = j</tt> when <tt>x = i#sn<sub>1</sub>/&hellip;/sn<sub>n</sub></tt>
and <tt>sn<sub>n</sub> = ss::j</tt>.</p>
<p>We also introduce several subclasses of names. An <em>attribute name</em> is the name
of an attribute component, and similarly for <em>element</em>, <em>simple type</em>, and <em>complex
type names</em>. We let a, e, s, k range over attribute, element, simple type, and complex
type names.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; a</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">element name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; e</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">simple type name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; s</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">complex type name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; k</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>A <em>type name</em> is a simple or complex type name. We let t range over type names.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">type name</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; t</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">s</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; simple type name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">k</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; complex type name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>The class of a name must be consistent with its symbol space.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>symbol(a)</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attribute</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>symbol(e)</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>element</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>symbol(t)</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>type</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<h3><a NAME="section-structures-namesets">3.2</a>&nbsp;&nbsp;Namesets</h3>
<p><span class='ednote'>Generalization of wildcards and substitution groups -
note that x1 UNION x2 is the same thing as putting x2 in the substitution group of x1. All leaves in regex's are now namesets.</span></p>
<p>A nameset denotes a set of qualified names. The form <tt>*:*</tt> denotes any name in
any namespace (note this is a namespace name, not a prefix), <tt>i:*</tt> denotes any name
in namespace i, and the form<tt> x</tt> denotes the single name <tt>x</tt>. Namesets may be combined
by union or difference. Namesets constructed in this way have the functionality of <i>wildcards</i>.
We let w range over wildcard items, and w range over wildcards.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">nameset</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; w</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>*:*</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; any namespace, any local name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>i:*</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; namespace i, any local name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>x</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; full name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">w<sub>1</sub><tt>UNION</tt> w<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all names in w<sub>1</sub> or in w<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">w<sub>1</sub><tt>DIFFERENCE</tt> w<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all names in w<sub>1</sub> and not
in w<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td></td>
<td ALIGN="right"></td>
<td align="center"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>w%strict</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; a nameset with strict processing</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>w%lax</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; a nameset with lax processing</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>w%skip</tt></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; a nameset with skip processing</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>For example, the nameset <tt>*:* DIFFERENCE(baz:* UNION xsi:string)%strict</tt> denotes
any name in any namespace, except for names in namespace <tt>baz</tt>, and the local name <tt>string</tt>
in namespace <tt>xsi</tt>. Since it will be convenient to write wildcards with minimal
parentheses, we will assume the precedence <tt>UNION &gt; DIFFERENCE &gt; %</tt>.</p>
<h3><a NAME="section-structures-datatypes">3.3</a>&nbsp;&nbsp;Atomic datatypes</h3>
<p><span class='ednote'>This part will require significant work. I'd like
to treat a simple type as a union over facets - treating the value space as a facet,
rather than something intrisic to some simple type. It makes unions just disjunctive
normal forms of facets.</span></p>
<p>We take as given the <em>atomic datatypes</em> from XML Schema Part 2. We let p range
over atomic datatypes, and c range over constants of such datatypes.</p>
<p>Typically, an atomic datatype is either a primitive datatype, or is derived from
another atomic datatype by specifying a set of facets. Note lists of atomic datatypes are
specified using repetition while unions are specified using alternation, as defined below.</p>
<p>An example of an atomic datatype is <tt>xsi:string</tt>, and a constant of that
datatype is <tt>&quot;zero&quot;</tt>.</p>
<h3><a NAME="section-structures-groups">3.4</a>&nbsp;&nbsp;Content groups</h3>
<p>Let g range over content groups.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">group</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">Ø</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty choice</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g<sub>1</sub> , g<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence, g<sub>1</sub> followed by
g<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g<sub>1</sub> | g<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; choice, g<sub>1</sub> or g<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g<sub>1</sub> &amp; g<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all, g<sub>1</sub> and g<sub>2</sub>
in either order</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g{m,n}</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; repetition of g between m and n
times</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">@w[g]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute with name
in w and content in
g</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">w[g]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; element with name
in w and content in g</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">mixed(g)</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; mixed content in group g</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">p</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; atomic datatype</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; component name</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">minimum</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; m</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; natural number</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">maximum</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; n</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">m</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; natural number</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">8</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; unbounded</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>An example of a group appears in Section&nbsp;<a
HREF="#section-overview-components-content">2.2.1</a>.</p>
<p>The empty sequence matches only the empty forest; it is an identity for sequence and
all. The empty choice matches no forest; it is an identity for choice.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e,g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g ,e</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">Ø|g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g |e</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e&amp;g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">g &amp;e</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>For use with repetitions, we extend arithmetic to include 8 in the obvious way. For any
n we have n + 8 = 8+ n = 8 and n = 8 is always true, and 8 &lt; n is always false.</p>
<h3><a NAME="section-structures-components">3.5</a>&nbsp;&nbsp;Components</h3>
<p>A <em>sort</em> is one of the six sorts of component in XML Schema. We let srt range
over sorts.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">sort</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; srt</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attribute</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>element</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>simpleType</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>complexType</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attributeGroup</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>modelGroup</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>identityConstraint</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>(Shortcoming: we make no further use of <tt>attributeGroup</tt> or <tt>modelGroup</tt>
in this document.)</p>
<p>A <em>derivation</em> specifies how a component is derived from its base. We let der
range over derivations, and ders range over sets of derivations.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">derivation</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; der</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>extension</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>refinement</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">derivation set</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ders</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">{der<sub>1</sub>,&hellip;,der<sub> l</sub>}</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>We let b range over booleans.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">boolean</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; b</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>true</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>false</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>A <em>component</em> is a record consisting of a constructor (srt) with six fields.
<dl COMPACT="COMPACT">
<dt><b><tt>name</tt></b> </dt>
<dd>is the name of the component (x); </dd>
<dt><b><tt>base</tt></b> </dt>
<dd>is the name of the base component of the structure (x); </dd>
<dt><b><tt>derivation</tt></b> </dt>
<dd>specifies how the component is derived from the base (der); </dd>
<dt><b><tt>refinement</tt></b> </dt>
<dd>is the set of permitted derivations from this component as base (ders); </dd>
<dt><b><tt>abstract</tt></b> </dt>
<dd>is a boolean, representing whether this type is abstract (b); </dd>
<dt><b><tt>content</tt></b> </dt>
<dd>is the content of the structure, a model group (g). </dd>
</dl>
<p>We let cmp range over components.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">component</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; cmp</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>srt( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>x</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>x</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>g</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>Examples of components appear in Section&nbsp;<a
HREF="#section-overview-components-examples">2.2.2</a>.</p>
<p>This general model of components is far looser than the is strictly allowed by XSDL.
While this is not a problem because the creation of components is strongly controlled by
the languages they are generated from (currently either an XSDL Schema or a set of XSDL
components as described in Structures[<a href="#xsd1">11</a>]), a &quot;tighter&quot;
grammar, more closely corresponding to what is accepted by XSDL, is found in appendix A.</p>
<!-- TOP -->
<!-- BOTTOM -->
<p>For a given schema, we assume a fixed <em>dereferencing map</em> that takes names to
the corresponding components. We write <tt>deref(x) = cmp</tt> if name <tt>x</tt>
corresponds to component <tt>cmp</tt>.</p>
<p>The dereferencing map must map attribute names to attribute components, and similarly
for elements, simple types, and complex types.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>deref(a).sort</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attribute</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>deref(e).sort</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>element</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>deref(s).sort</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>simpleType</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>deref(k).sort</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>complexType</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<h3><a NAME="section-structures-constraints">3.6</a>&nbsp;&nbsp;Constraints</h3>
<p>Recall that the group constructs are used uniformly in several contexts. Repetition (<tt>g{m,n}</tt>)
is used for lists of atomic datatypes, to indicate whether an attribute is optional, and
for elements. Similarly, all (<tt>g<sub>1</sub> &amp; g<sub>2</sub></tt>) is used for
attributes and for elements. The advantage of this approach is that the semantics of
groups is uniform, and need be given only once. Thus, for instance, how repetition acts is
defined once, not separately for attributes and elements.</p>
<p>The group grammar is rather more accommodating than that implicit in XML schemas. It
permits attributes to have complex local type definitions, multiple occurrences of the
declaration of a given attribute name, and the mentioning of an attribute anywhere in the
defintion of a group. As we do not generally translate our group grammars back into XML
schemas, this permissiveness is of little consequence. We can, nonetheless, define various
sub-grammars of the group grammar to constrain matters in so as to be consistent with the
XML schemas specification.</p>
<p>However, it is helpful to define additional syntactic categories that specify various
subsets of groups. These syntactic classes are then used to constrain the content of
components, for instance, to indicate that the content of an element component should be
an element, and that the content of a type component should consist of attributes followed
by elements.</p>
<p>An <em>attribute group</em> contains only attribute names, combined using the all
connector (&amp;). An <em>element group</em> contains no attribute names. (Shortcoming:
all groups in element groups should be further constrained as in Schema Part 1, Section
5.7, All Group Limited.)</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute group</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ag</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ag<sub>1</sub> &amp; ag<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">@w</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute nameset</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">element group</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; eg</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">Ø</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty choice</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">eg<sub>1</sub> ,eg<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">eg<sub>1</sub> |eg<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; choice</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">eg<sub>1</sub> &amp;eg<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">eg{m,n}</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; repetition</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">w</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; nameset</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>Given the above, we can specify the allowed contents of the four sort of component as
follows. An <em>attribute content</em> is either an attribute or an optional attribute,
where the content is a simple type name. An <em>element content</em> is an element where
the content is a type name. A <em>simple type content</em> is an atomic datatype or a list
of atomic datatype. A <em>complex type content</em> is an attribute group followed by
either a simple type content or an element group.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ac</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[s]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[s]{ 0,1}</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; optional attribute</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">element content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ec</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e[t]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; element</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">union content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; uc</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">p</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; simple type</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">uc | uc</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; union of simple types</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">simple content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sc</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">uc</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; union content</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">uc{m,n}</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; list of a union content</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">complex content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; kc</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ag ,sc</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attributes follwed by simple content</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ag ,eg</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attributes followed by elements</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ag,mixed( eg)</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; mixed content</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>The content of each sort of component corresponds to the syntax above. That is, the
content of an attribute component is always an attribute content ac; the content of an
element component is always an element content ec; the content of a simple type component
is always a simple content sc; and the content of a complex type component is always a
complex content kc. Further, for an attribute or element component the name of the
component is the same as the name of the attribute or element in its content.</p>
<p>It is easy to confirm that the example components in Section&nbsp;<a
HREF="#section-overview-components-examples">2.2.2</a> satisfy these constraints.</p>
<h3><a NAME="section-structures-documents">3.7</a>&nbsp;&nbsp;Ordered Forests</h3>
<p>A <em>forest</em> is a sequence of items, where each item is either an atomic datatype,
or an attribute (with a list of items of a single atomic datatype as content), or an element (with a forest as
content). We let d range over forests.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">ordered forest</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; d</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty forest</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">d<sub>1</sub>,d<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">c</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; constant of atomic datatype</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[d]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute, with name a and content d</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e[d]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; element, with name e and content d</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>Examples of forests appear in Section&nbsp;<a HREF="#section-overview-documents">2.3</a>.</p>
<p>A <em>typed forest</em> is an ordered forest with added type information for each
element and attribute. We let td range over typed ordered forests.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">typed ordered forest</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; td</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty forest</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">td<sub>1</sub>,td<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">c</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; constant of atomic datatype</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[s <em>types</em> td]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute, with simple type name s</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e[t <em>types</em> td]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; element, with type name t</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p><span class='ednote'>Add a section describing any additional rules for the
full forest grammars.</span></p>
<h3><a NAME="section-structures-inferences">3.8</a>&nbsp;&nbsp;Inference rules</h3>
<p>Operations such as normalization and matching are described with an inference rule
notation. Originally developed by logicians&nbsp;[<a NAME="CITEinf1" HREF="#inf1">15</a>,<a
NAME="CITEinf2" HREF="#inf2">16</a>,<a NAME="CITEfrege" HREF="#frege">7</a>], this
notation is now widely used for describing type systems and semantics of programming
languages&nbsp;[<a NAME="CITElang" HREF="#lang">10</a>]. In this notation, when all
judgements above the line hold, then the judgement below the line holds as well. Here is
an example of a rule used later on. We write <tt>d <em>in</em> g</tt> if forest d matches
group g.&nbsp;</p>
<p CLASS="rulename">Sequence:</p>
<p CLASS="antecedent">d<sub>1</sub> <!-- &#8712; --><em>in</em> g<sub>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</sub>
d<sub>2</sub> <em>in</em> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> ,d<sub>2</sub> <em>in</em> g<sub>1</sub>, g<sub>2</sub></p>
<p>The rule says that if both d<sub>1</sub> <em>in</em> g<sub>1</sub> and d<sub>2</sub> <em>in</em>
g<sub>2</sub> hold, then d<sub>1</sub> ,d<sub>2</sub> <em>in</em> g<sub>1</sub> , g<sub>2</sub>
holds as well. For instance, take d<sub>1</sub> = a[1], d<sub>2</sub> =
b[&quot;two&quot;], g<sub>1</sub> = a[xsi:integer], and g<sub>2</sub> = b[xsi:string].
Then since both</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[1] <em>in</em> a[xsi:integer ]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
b[&quot;two&quot;] <em>in</em> b[xsi:string ]</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>hold, we may conclude that</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">a[1] ,b[&quot;two&quot;] <em>in</em> a[xsi:integer ]
,b[xsi: string]</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>holds.</p>
<h2><a NAME="section-normalization">4</a>&nbsp;&nbsp;Normalization</h2>
<p><span class='ednote'>This section needs to be drastically revised, as
normalization will need to occur as part of validation. Therefore the inference
rules are certainly misplaced.</span></p>
<p>Normalization of a forest replaces each name by the corresponding normalized name, and
adds type information to the forest. Normalization is performed with respect to a given
schema; in our formalism the schema is determined by the dereferencing map, <tt>deref()</tt>.
Section&nbsp;<a HREF="#section-overview-documents">2.3</a> gives an example of a document
before and after normalization.</p>
<p>Prior to normalization, all names in the forest have exactly one symbol name. We build
normalized names by extending a name with an additional symbol name. Let <tt>x<sub>1</sub></tt>
and <tt>x<sub>2</sub></tt> be two names, with <tt>namespace(x<sub>1</sub>) = namespace(x<sub>2</sub>)</tt>,
and where the second forest has only one symbol name. We write <tt>x<sub>1</sub> |&gt; x<sub>2</sub></tt>
for the operation that extends <tt>x<sub>1</sub></tt> by adding the symbol name of <tt>x<sub>2</sub></tt>,
defined as follows.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">i#sn<sub>1</sub>/&hellip;/sn<sub>l</sub> |&gt; i#sn</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">i#sn<sub>1</sub>/&hellip;/sn<sub>l</sub>/sn</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>On the other hand, if x<sub>1</sub> and x<sub>2</sub> are from different namespaces (<tt>namespace(x<sub>1</sub>
) = i</tt>, <tt>namespace(x<sub>2</sub>) = j</tt> and <tt>i ? j</tt>), then <tt>x<sub>1</sub>
|&gt; x<sub>2</sub></tt> is defined as:</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">i#sn<sub>1</sub>/&hellip;/sn<sub>l</sub>&nbsp; |&gt; j#sn</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">j#sn</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>Finally, for each sort there is a root type (<tt>AnyType</tt>, <tt>AnyElement</tt>,
etc.) These are fixed points, i.e.,</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">x&nbsp; |&gt; <tt>AnyElement</tt></td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>AnyElement</tt>.</td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>(Since these constants will eventually be defined in a fixed namespace, this is really
subsumed by the previous rule.)</p>
<p>We write <tt>x |- a ?a'</tt> and <tt>x |- e ?e'</tt> to indicate that in the context
specified by name x that attribute name a normalizes to a' or that element name e
normalizes to e'. To normalize an attribute or element we extend the context (if the
extended name is in the domain of <tt>deref()</tt>; these are the `extend' rules), or use
the element name directly (otherwise; these are the `reset' rules). We write <tt>x <em>in</em>
dom(deref())</tt> and <tt>x <em>notin</em> dom(deref())</tt> to indicate whether or not x is in
the domain of the dereferencing map; that is, whether or not <tt>deref(x)</tt> is defined.
If <tt>x<sub>1</sub></tt> and <tt>x<sub>2</sub></tt> are in different namespaces, then <tt>x<sub>1</sub>
|&gt; x<sub>2</sub></tt> is undefined, and we say <tt>x <em>notin</em> deref()</tt> holds.</p>
<p CLASS="rulename">Extend Attribute Transitive:</p>
<p CLASS="antecedent">y&nbsp; |&gt; a <em>in</em> dom(deref()) <br>
x &lt;: y</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- a&nbsp; ? y&nbsp; |&gt; a</p>
<p ALIGN="left">If the attribute name does not appear for the current type, check for that
name among supertypes.</p>
<!-- Rule -->
<p CLASS="rulename">Extend Element Transitive:</p>
<p CLASS="antecedent">y&nbsp; |&gt; e <em>in</em> dom(deref()) <br>
x &lt;: y</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- e&nbsp; ? y &nbsp; |&gt; e</p>
<p ALIGN="left">If the element name does not appear for the current type, check for that
name among supertypes.</p>
<p ALIGN="left">&nbsp;</p>
<p CLASS="rulename">Extend Attribute Base:</p>
<p CLASS="antecedent">a <em>in</em> dom(deref())</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- a&nbsp; ? a</p>
<p ALIGN="left">An attribute name can be normalized if it corresponds to a known name.</p>
<p CLASS="rulename">Extend Element Base:</p>
<p CLASS="antecedent">e <em>in</em> dom(deref())</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- e&nbsp; ? e</p>
<p ALIGN="left">An attribute name can be normalized if it corresponds to a known name.</p>
<p ALIGN="left">EDITORS NOTE:&nbsp; These inference rules will need to be revisited with
regards to the typing of wildcards, and inclusion of model and attribute groups.</p>
<p>We write <tt>x |- d ?dt</tt> to indicate that in the context specified by name x that
forest d normalizes to typed forest td. We write <tt>@xsi:type <em>notin</em> d</tt> if d
does not contain an <tt>xsi:type</tt> attribute. Note that the type names in <tt>xsi:type</tt>
attributes always refer to global types and need not be normalized.</p>
<!-- Rule -->
<p CLASS="rulename">Constant:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- c&nbsp; ? c'<br>
</p>
<!-- Rule -->
<p CLASS="rulename">Empty Document:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- e&nbsp; ? e</p>
<!-- Rule -->
<p CLASS="rulename">Sequence:</p>
<p CLASS="antecedent">x |- d<sub>1</sub> ? td<sub>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</sub>
x
|- d<sub>2</sub> ? td<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- d<sub>1</sub>,d<sub>1</sub> ? td<sub>1</sub> , td<sub>2</sub></p>
<!-- Rule -->
<p CLASS="rulename">Attribute:</p>
<p CLASS="antecedent">x |- a ? a'<br>
<tt>deref(a').content = a'[s] or deref(a').content = a'[s]{0,1}<br>
s</tt> |- d ? td</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- a[d]&nbsp; ? a'[s <em>types</em> td]</p>
<!-- Rule -->
<p CLASS="rulename">Untyped Element:</p>
<p CLASS="antecedent">x |- e ? e'<br>
@xsi:type <em>notin</em> d<br>
deref(e').content = e'[t]<br>
t |- d ? td </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- e[d]&nbsp; ? e'[t <em>types</em> td]</p>
<!-- Rule -->
<p CLASS="rulename">Typed Element:</p>
<p CLASS="antecedent">x |- e ? e'<br>
<tt>deref(e').content = e'[t]<br>
</tt>t &lt;: t'<tt> <br>
t</tt> |- d ? td</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- e[@xsi:type[t], d]&nbsp; ? e'[t <em>types</em> td]</p>
<p>The (<span CLASS="rn">Typed Element</span>) rule uses the relation x&nbsp; &lt; :x',
which is defined Section&nbsp;<a HREF="#section-refinement-base">5.1</a>.</p>
<h2><a NAME="section-refinement">5</a>&nbsp;&nbsp;Derivation</h2>
<h3><a NAME="section-refinement-base">5.1</a>&nbsp;&nbsp;Base chain</h3>
<p>We write <tt>x &lt;: :x'</tt> if starting from the component with name x one can reach
the component with name x' by successively following base links.</p>
<!-- Rule -->
<p CLASS="rulename">Reflexive:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x &lt;: x</p>
<!-- Rule -->
<p CLASS="rulename">Transitive:</p>
<p CLASS="antecedent"><br>
x &lt;: x'&nbsp;&nbsp;&nbsp; x' &lt;: x''</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x &lt;: x''</p>
<!-- Rule -->
<p CLASS="rulename">Base:</p>
<p CLASS="antecedent"><br>
deref(x).base = x'</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x &lt;: x'</p>
<h3><a NAME="section-refinement-extension">5.2</a>&nbsp;&nbsp;Extension</h3>
<p>We write <tt>g&nbsp; &lt;:<sub>ext </sub>g'</tt> if group g is derived from group g' by
adding attributes and elements. It is specified using attribute groups ag and element
groups ag as defined in Section&nbsp;<a HREF="#section-structures-constraints">3.6</a>.</p>
<!--
Rule -->
<p CLASS="rulename">Extend:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">(ag &amp; ag') , eg , eg'&nbsp; &lt; :<sub>ext </sub>&nbsp;ag , eg</p>
<p ALIGN="center">&nbsp;</p>
<h3><a NAME="section-refinement-restriction">5.3</a>&nbsp;&nbsp;Restriction</h3>
<p>We write <tt>g &lt; :<sub>res</sub> g'</tt> if the instances of group g are a subset of
the instances of group g'. That is, <tt>g &lt;:<sub>res</sub> g'</tt> if for every forest
d such that <tt>d in g</tt> it is also the case that <tt>d <em>in</em> g'</tt>.</p>
<h3><a NAME="section-refinement-constraints">5.4</a>&nbsp;&nbsp;Constraints</h3>
<p>A schema must satisfy certain constraints on derivation to be well-formed. Define <tt>x&nbsp;
&lt;:<sub>der</sub> x'</tt> to be <tt>x&nbsp; &lt;:<sub>res</sub> x'</tt> if <tt>der =
restriction</tt> and <tt>x&nbsp; &lt;:<sub>ext</sub> x'</tt> if <tt>der = extension</tt>.
We write <tt>|- x</tt> to indicate that the component with name x is well-formed with
respect to derivation. (N.B. This use of turnstile differs from that in normalization.
One of us [ALB] suggests that the normalization turnstile should be replaced
with <tt>|~</tt>.)</p>
<!-- Rule -->
<p CLASS="rulename">Refinement:</p>
<p CLASS="antecedent">x' = deref(x).base<br>
der = deref(x').derivation<br>
deref(x).content &lt; :<sub>der</sub> deref(x').content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">|- x</p>
<h2><a NAME="section-validation">6</a>&nbsp;&nbsp;Validation</h2>
<h3><a name="section-mapping-components">6.1</a>&nbsp;&nbsp;Mapping component models to regular tree grammars</h3>
<p>We have already introduced a linear representation of an ordered (typed)
forest. Content models are, in effect, grammars for such forests. Indeed,
content models can be converted to regular tree grammars [ref]. We call the
result of this conversion the <i>tree closure</i> of the content model.&nbsp;
This conversion process, roughly speaking,</p>
<ul>
<li>replaces component names with the regular closures of their content models</li>
<li>replaces an individual element (component) name&nbsp; with a choice of all
the element names from the same substitution group as the original element</li>
<li>replaces an individual type (component) name with the a choice of all the
type names consisting of the original type names and all the subtypes thereof</li>
<li>replaces wild cards with a choice of element names (we assume name sets to
be finite)</li>
<li>replaces a mixed content model with an interleaving og (atomic) string
datatypes with the <i>unmixed </i>constituents of the original contnet model</li>
</ul>
<p>From the tree closure we can construct by well known methods [ref] a regular
tree automaton. Validation is then a question of whether a forest of the kind
defined earlier is accepted by the automaton constructed from the tree closure.
We contrast this &quot;compiled&quot; version of validation with its &quot;interpreted&quot;
alternative. In the latter case we would deconstruct forests and content groups
in parallel, demonstrating that each constituent of the forest had a
corresponding constituent in the content group. As for compiled validation, the
terminal symbols of the tree grammar are, in fact, arbitrary strings,
constrained only by the atomic datatypes of which they are declared to be
instances: strings, dates, integers, <i>etc. </i>Of course, all of these lexical
forms have corresponding regular expression definitions are just special cases
of regular tree grammars. For the primitive atomic datatype p we will assume
that &pi;(p) yields the regular tree grammar for that
type and that a is the generic</p>
<p>Let tk range over tree closures.</p>
<table WIDTH="100%" BORDER="0">
<tr>
<td><table ALIGN="center" width="542">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center" width="6"></td>
<td NOWRAP="NOWRAP" align="center" width="516"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">tree closure</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; tk</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty sequence</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">Ø</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; empty choice</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">tk<sub>1</sub> , tk<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence,
tk<sub>1</sub> followed by tk<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">tk<sub>1</sub> | tk<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; choice, tk<sub>1</sub>
or tk<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">tk<sub>1</sub> &amp; tk<sub>2</sub></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all, tk<sub>1</sub>
and tk<sub>2</sub> in either order</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">tk{m,n}</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; repetition of
tk between m and n
times</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">@a[tk]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute
with name a and content in tk</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">e[tk]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; element
with name e and content in tk</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&pi;(p)</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; regular
tree grammar for a primitive atomic datatype</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">minimum</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; m</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; natural number</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">maximum</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; n</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">m</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; natural number</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">8</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; unbounded</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td ALIGN="right">&nbsp;</td>
<td align="center">&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center" width="6"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</table>
<p>We see that (syntactically) a tree closure is a kind of content group. It is
natural then to think of the relation ship between a content group and its tree
closure as simply another kind of reduction relationship on content groups,
hence we write it as &lt; :<i><sub>tk</sub></i>. &lt; :<sub><i>tk</i></sub> is
preserved by rewriting content models using any of the matching rules of section
<a href="#section-structures-groups">3.4</a></p>
<p>&nbsp;</p>
<!-- Rule -->
<p CLASS="rulename">empty sequence:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e &lt; :<i><sub>tk</sub></i> e</p>
<!-- Rule -->
<p CLASS="rulename">empty choice:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">Ø &lt; :<i><sub>tk</sub></i> Ø</p>
<p CLASS="rulename">nonempty Sequence:</p>
<p CLASS="antecedent">tk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub>g<sub>1</sub>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk<sub>2</sub>&nbsp; &lt; :<sub>tk</sub> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk<sub>1</sub> , tk<sub>2</sub>&nbsp; &lt; :<i><sub>tk</sub></i>
g<sub>1</sub> , g<sub>2</sub></p>
<p CLASS="rulename">nonempty choice:</p>
<p CLASS="antecedent">tk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub>g<sub>1</sub>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk<sub>2</sub>&nbsp; &lt; :<sub>tk</sub> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk<sub>1</sub> | tk<sub>2</sub>&nbsp; &lt; :<i><sub>tk</sub></i>
g<sub>1</sub> | g<sub>2</sub></p>
<p CLASS="rulename">Ordered alternative:</p>
<p CLASS="antecedent">tk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub>g<sub>1</sub>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk<sub>2</sub>&nbsp; &lt; :<sub>tk</sub> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk<sub>1</sub> &amp; tk<sub>2</sub>&nbsp; &lt; :<i><sub>tk</sub></i>
g<sub>1</sub> &amp; g<sub>2</sub></p>
<p CLASS="rulename">Group repetition:</p>
<p CLASS="antecedent">tk &lt; :<i><sub>tk</sub></i> g<sub>&nbsp;</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk{m,n}&nbsp; &lt; :<i><sub>tk</sub></i> g{m,n}</p>
<p CLASS="rulename">attribute nameset:</p>
<p CLASS="antecedent">tk &lt; :<i><sub>tk</sub></i> ag&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
w = w' UNION {a}&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk' &lt; :<i><sub>tk</sub></i>
w'[tk]</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">@a[tk] | tk' &lt; :<i><sub>tk</sub></i> @w[ag]</p>
<p CLASS="rulename">element nameset:</p>
<p CLASS="antecedent">tk &lt; :<i><sub>tk</sub></i> eg&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
w = w' UNION {e}&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk' &lt; :<i><sub>tk</sub></i>
w'[tk]</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[tk] | tk' &lt; :<i><sub>tk</sub></i> w[eg]</p>
<p CLASS="rulename">mixed content:</p>
<p CLASS="antecedent">tk<sub>1</sub>&nbsp; &lt; :<sub>tk </sub>mixed(eg<sub>1</sub>)&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk<sub>2</sub>&nbsp; &lt; :<sub>tk</sub> mixed(eg<sub>2</sub>)<sub>&nbsp;</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent"><tt>xsd:string</tt>{0,1} , tk<sub>1</sub>
, <tt>xsd:string</tt>{0,1} , tk<sub>2</sub> ,
<tt>xsd:string</tt>{0,1}&nbsp; &lt; :<i><sub>tk</sub></i>
mixed(eg<sub>1</sub>,eg<sub>2</sub>)</p>
<p><span class='ednote'>A fine point : What is the status of a string
followed by a string in a mixed content model? It is presumed here that it's
still just a string not a sequence of strings.</span></p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">Model group component:</p>
<p CLASS="antecedent">deref(x)..content&nbsp; =&nbsp; eg&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk&nbsp; &lt; :<sub>tk</sub> eg&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
modelGroup</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">Attribute group component:</p>
<p CLASS="antecedent">deref(x)..content&nbsp; =&nbsp; ag&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk&nbsp; &lt; :<sub>tk</sub> ag&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
attributeGroup</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">Element component:</p>
<p CLASS="antecedent">deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk&nbsp; &lt; :<sub>tk</sub> w[tk']&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk'&nbsp; &lt;
:<sub>tk</sub> c</p>
<p CLASS="antecedent">w = {y s.t.&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> y &lt;: x&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
deref(y).abstract = <tt>false</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
y.srt = element}</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk&nbsp; &lt; :<i><sub>tk</sub></i> x</p>
<!-- Rule -->
<p CLASS="rulename">attribute component:</p>
<p CLASS="antecedent">deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
tk&nbsp; &lt; :<sub>tk</sub> c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt = group</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">@x[tk] &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">unsubtyped concrete complex Type component:</p>
<p CLASS="antecedent">deref(x).content =
<tt>false</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk&nbsp; &lt;
:<sub>tk</sub> c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
<tt>complexType</tt></p>
<p CLASS="antecedent">There is no y s.t.&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> y &lt;:
x&nbsp;</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">unsubtyped abstract complex Type component:</p>
<p CLASS="antecedent">deref(x).content != abstract&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk&nbsp; &lt;
:<sub>tk</sub> c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
<tt>complexType</tt></p>
<p CLASS="antecedent">There is no y s.t.&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> y &lt;:
x</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">Ø &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">subtyped concrete complex Type component:</p>
<p CLASS="antecedent">y<sub>1</sub> ... y<sub>m</sub> are the immediate subtypes
of x by extension</p>
<p CLASS="antecedent">z<sub>1</sub> ... z<sub>n</sub> are the immediate subtypes
of x by restriction</p>
<p CLASS="antecedent">&nbsp;tk&nbsp; &lt; :<sub>tk</sub> deref(x)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
x.srt = <tt>complexType</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> deref(x).abstract
= <tt>false</tt></p>
<p CLASS="antecedent">&nbsp;sk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(y<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>sk<sub>m</sub>&nbsp;
&lt; :<sub>tk</sub> deref(y<sub>m</sub>)..content</p>
<p CLASS="antecedent">rk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(z<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>rk<sub>n</sub>&nbsp;
&lt; :<sub>tk</sub> deref(z<sub>n</sub>)..content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk | (tk , (( sk<sub>1</sub> | ... | sk<sub>m</sub> ) | ( rk<sub>1</sub>
| ... | rk<sub>n</sub> ))) &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">subtyped abstract complex Type component:</p>
<p CLASS="antecedent">y<sub>1</sub> ... y<sub>m</sub> are the immediate subtypes
of x by extension</p>
<p CLASS="antecedent">z<sub>1</sub> ... z<sub>n</sub> are the immediate subtypes
of x by restriction</p>
<p CLASS="antecedent">&nbsp;tk&nbsp; &lt; :<sub>tk</sub> deref(x)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
x.srt = <tt>complexType</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> deref(x).abstract
= <tt>true</tt></p>
<p CLASS="antecedent">&nbsp;sk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(y<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>sk<sub>m</sub>&nbsp;
&lt; :<sub>tk</sub> deref(y<sub>m</sub>)..content</p>
<p CLASS="antecedent">rk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(z<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>rk<sub>n</sub>&nbsp;
&lt; :<sub>tk</sub> deref(z<sub>n</sub>)..content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk , (( sk<sub>1</sub> | ... | sk<sub>m</sub> ) | ( rk<sub>1</sub>
| ... | rk<sub>n</sub> )) &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">unsubtyped concrete simple Type component:</p>
<p CLASS="antecedent">deref(x).content =
<tt>false</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk&nbsp; &lt;
:<sub>tk</sub> c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
<tt>simpleType</tt></p>
<p CLASS="antecedent">There is no y s.t.&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> y &lt;:
x&nbsp;</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">tk &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">unsubtyped abstract simple Type component:</p>
<p CLASS="antecedent">deref(x).content != abstract&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
deref(x)..content&nbsp; =&nbsp; c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> tk&nbsp; &lt;
:<sub>tk</sub> c&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> x.srt =
<tt>simpleType</tt></p>
<p CLASS="antecedent">There is no y s.t.&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> y &lt;:
x</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">Ø &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">subtyped concrete simple Type component:</p>
<p CLASS="antecedent">z<sub>1</sub> ... z<sub>n</sub> are the immediate subtypes
of x by restriction</p>
<p CLASS="antecedent">&nbsp;tk&nbsp; &lt; :<sub>tk</sub> deref(x)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
x.srt = <tt>complexType</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> deref(x).abstract
= <tt>false</tt></p>
<p CLASS="antecedent">rk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(z<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>rk<sub>n</sub>&nbsp;
&lt; :<sub>tk</sub> deref(z<sub>n</sub>)..content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">&nbsp;tk |&nbsp; rk<sub>1</sub>
| ... | rk<sub>n</sub>&nbsp; &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="consequent">&nbsp;</p>
<p CLASS="rulename">subtyped abstract simple Type component:</p>
<p CLASS="antecedent">z<sub>1</sub> ... z<sub>n</sub> are the immediate subtypes
of x by restriction</p>
<p CLASS="antecedent">&nbsp;tk&nbsp; &lt; :<sub>tk</sub> deref(x)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
x.srt = <tt>complexType</tt>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub> deref(x).abstract
= <tt>true</tt></p>
<p CLASS="antecedent">rk<sub>1</sub>&nbsp; &lt; :<sub>tk</sub> deref(z<sub>1</sub>)..content &nbsp;<sub>&nbsp;&nbsp;&nbsp;...</sub> &nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>rk<sub>n</sub>&nbsp;
&lt; :<sub>tk</sub> deref(z<sub>n</sub>)..content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">rk<sub>1</sub>
| ... | rk<sub>n</sub> &lt; :<i><sub>tk</sub></i> x</p>
<p CLASS="rulename">Primitive Atomic datatype:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">&pi;(p) &lt; :<i><sub>tk</sub></i> p</p>
<h3><a NAME="section-validation-content">6.2</a>&nbsp;&nbsp;Content validation by
inference rules</h3>
<p><span class='ednote'>This section is largely made obsolete by the
previous section. Some of the rules above depend on element and type
reducibility defined in this section. In some future iteration of this document
we elide the irrelevant rules.</span></p>
<p>We write <tt>c <em>in</em><sub>p</sub> p</tt> if constant c matches atomic datatype p.
We do not specify this relation further, but simply assume it is as defined in XML Schema
Part&nbsp;2.</p>
<p>We write <tt>x <em>in</em><sub>w</sub> w</tt> and <tt>e <em>in</em><sub>w</sub> w</tt>
if name x belongs to nameset <em>w</em>. We write <tt>e <em>notin</em><sub>w</sub> w</tt>
if it is not the case that x <em>in</em><sub>w</sub> w. </p>
<p CLASS="rulename">Any Namespace:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x <em>in</em><sub>w</sub>*:*</p>
<p CLASS="rulename">Given Namespace:</p>
<p CLASS="antecedent">namespace(x) = i</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x <em>in</em><sub>w</sub> i:*</p>
<p CLASS="rulename">Singleton Namespace:</p>
<p CLASS="antecedent">deref(x) <: deref(i#j) </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x <em>in</em><sub>w</sub> i#j</p>
<p CLASS="rulename">Wildcard Union 1:</p>
<p CLASS="antecedent">x <em>in</em><sub>W</sub> w<sub>1</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x <em>in</em><sub>W</sub> w<sub>1</sub> UNION w<sub>2</sub></p>
<p CLASS="rulename">Wildcard Union 2:</p>
<p CLASS="antecedent">x <em>in</em><sub>W</sub> w<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x <em>in</em><sub>W</sub> w<sub>1</sub> UNION w<sub>2</sub></p>
<p CLASS="rulename">Wildcard Difference:</p>
<p CLASS="antecedent">x <em>in</em><sub>W</sub> w<sub>1&nbsp;&nbsp;&nbsp;</sub> e <em>notin</em><sub>W</sub>
w<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e <em>in</em><sub>W</sub> w<sub>1</sub> DIFFERENCE w<sub>2</sub></p>
<p>We write <tt>d |?<sub>unmix</sub> d'</tt> (read ``d unmixes to d''') if d is a sequence
of elements and characters and d' is the same sequence with all character data removed.
This is used for processing mixed content.</p>
<p CLASS="rulename">Unmix Empty:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e&nbsp; |?<sub>unmix</sub> e</p>
<p CLASS="rulename">Unmix Sequence:</p>
<p CLASS="antecedent">d<sub>1</sub>&nbsp; |?<sub>unmix</sub>d'<sub>1</sub>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
d<sub>2</sub>&nbsp; |?<sub>unmix</sub> d'<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> , d<sub>2</sub>&nbsp; |?<sub>unmix</sub> d'<sub>1</sub>
, d'<sub>2</sub></p>
<p CLASS="rulename">Unmix Element:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[d]&nbsp; |?<sub>unmix</sub> e[d']</p>
<p CLASS="rulename">Unmix Character Data:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">c&nbsp; |?<sub>unmix</sub> e</p>
<p>We write <tt><em>d</em> |?<sub>inter</sub> <em>d</em>'<em>;d''</em></tt> (read &quot;<em>d</em>
interleaves <em>d'</em> and <em>d''</em> &quot;) if some interleaving of <em>d'</em> and <em>d''</em>
yields <em>d</em>.&nbsp; This relates one sequence to many pairs of sequences.&nbsp; This
is used for processing <tt><em>g<sub>1</sub></em> &amp;<em>g<sub>2</sub>.</em></tt></p>
<!-- Rule -->
<p CLASS="rulename">Interleave Empty:</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e&nbsp; |?<sub>inter</sub> e;e</p>
<!-- Rule -->
<p CLASS="rulename">Interleave Sequence:</p>
<p CLASS="antecedent">d<sub>1</sub>&nbsp; |?<sub>inter</sub>d'<sub>1</sub>;d&quot;<sub>1&nbsp;
&nbsp;&nbsp;&nbsp;</sub> d<sub>2</sub>&nbsp; |?<sub>inter</sub> d'<sub>2</sub>;d&quot;<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> , d<sub>2</sub>&nbsp; |?<sub>inter</sub> d'<sub>1</sub>
, d'<sub>2</sub> ;d&quot;<sub>1</sub>,d&quot;<sub>2</sub></p>
<!-- Rule -->
<p CLASS="rulename">Interleave Item 1:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; |?<sub>inter</sub> d;e</p>
<!-- Rule -->
<p CLASS="rulename">Interleave Item 2:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; |?<sub>inter</sub> e;d</p>
<p>We write <tt>d <em>in</em> g</tt> if forest d matches group g.</p>
<p CLASS="rulename">Empty:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e&nbsp; <em>in</em> e</p>
<p CLASS="rulename">Sequence:</p>
<p CLASS="antecedent">d<sub>1</sub>&nbsp; <em>in</em> g<sub>1</sub>&nbsp;<sub>&nbsp;&nbsp;&nbsp;</sub>
d<sub>2</sub>&nbsp; <em>in</em> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> , d<sub>2</sub>&nbsp; <em>in</em> g<sub>1</sub> , g<sub>2</sub></p>
<p CLASS="rulename">Choice 1:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> g<sub>1</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; <em>in</em> g<sub>1</sub> | g<sub>2</sub></p>
<p CLASS="rulename">Choice 2:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; <em>in</em> g<sub>1</sub> | g<sub>2</sub></p>
<p CLASS="rulename">Interleave:</p>
<p CLASS="antecedent">d |?<sub>inter</sub> d'<sub>1</sub>;d&quot;<sub>2</sub> &nbsp;&nbsp;
d<sub>1</sub> <em>in</em> g<sub>1&nbsp;&nbsp;&nbsp;</sub> d<sub>2</sub> <em>in</em> g<sub>2</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d <em>in</em> g<sub>1</sub> &amp; g<sub>2</sub></p>
<p CLASS="rulename">Repetition 1:</p>
<p CLASS="antecedent">d<sub>1</sub> <em>in</em> g<sub>&nbsp;&nbsp;&nbsp;</sub> d<sub>2</sub>
<em>in</em> g{m,n}</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> ,d<sub>2</sub>&nbsp; <em>in</em> g{m +1,n+1}</p>
<p CLASS="rulename">Repetition 2:</p>
<p CLASS="antecedent">d<sub>1</sub> <em>in</em> g<sub>&nbsp;&nbsp;&nbsp;</sub> d<sub>2</sub>
<em>in</em> g{0,n}</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d<sub>1</sub> ,d<sub>2</sub>&nbsp; <em>in</em> g{0,n+1}</p>
<p CLASS="rulename">Repetition 3:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e&nbsp; <em>in</em> g{0,n}</p>
<p CLASS="rulename">Attribute:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> g &nbsp;&nbsp;&nbsp;a <em>in</em><sub>w</sub>w
&nbsp;&nbsp;&nbsp;deref(a).content=g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">a[d]&nbsp; <em>in</em> @w</p>
<p CLASS="rulename">Element:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> g&nbsp;&nbsp;&nbsp;e <em>in</em><sub>w</sub>w
&nbsp;&nbsp;&nbsp;deref(e).content=g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[d]&nbsp; <em>in</em> w</p>
<p CLASS="rulename">Attribute Skip:</p>
<p CLASS="antecedent">a <em>in</em><sub>w</sub>w</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">a[d]&nbsp; <em>in</em> @w%skip</p>
<p CLASS="rulename">Element Skip:</p>
<p CLASS="antecedent">e <em>in</em><sub>w</sub>w</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[d]&nbsp; <em>in</em> w%skip</p>
<p CLASS="rulename">Mixed Group:</p>
<p CLASS="antecedent">d&nbsp; |?<sub>unmix</sub> d'&nbsp; d'&nbsp; <em>in</em> g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; <em>in</em> mixed(g}</p>
<p CLASS="rulename">Typed Attribute:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> s</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[s <em>types</em> d]&nbsp; <em>in</em> e[s]</p>
<p CLASS="rulename">Typed Element:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> t&nbsp;&nbsp;&nbsp; t &lt;: t'</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e[t <em>types</em> d]&nbsp; <em>in</em> e[t']</p>
<p CLASS="rulename">Atomic Datatype:</p>
<p CLASS="antecedent">c <em>in</em><sub>p</sub> p</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">c&nbsp; <em>in</em> p</p>
<p CLASS="rulename">Element Refinement:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> e&nbsp;&nbsp;&nbsp; e &lt;: e'</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; <em>in</em> e'</p>
<p CLASS="rulename">Component Name:</p>
<p CLASS="antecedent">d&nbsp; <em>in</em> g&nbsp;&nbsp;&nbsp; g = deref(x).content</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">d&nbsp; <em>in</em> x</p>
<p>The (<span CLASS="rn">Typed Element</span>) and (<span CLASS="rn">Element Derivation</span>)
rules use the relation x&nbsp; &lt; :x', which is defined in Section&nbsp;<a
HREF="#section-refinement-base">5.1</a>. The check that t&nbsp; &lt; :t' in the (<span
CLASS="rn">Typed Element</span>) rule is redundant, as it is also performed during
normalization.</p>
<p>When processing a normalized document with types, the (<span CLASS="rn"> Attribute</span>)
and (<span CLASS="rn">Element</span>) rules are not required, the (<span CLASS="rn">Typed
Attribute</span>) and (<span CLASS="rn"> Typed Element</span>) rules are used instead.
However, we will write td <em>in</em> g whenever |- d ?td and d <em>in</em> g.</p>
<h3><a NAME="section-refinement-ids">6.3</a>&nbsp;&nbsp;ID/IDREF validation</h3>
<p><span class='ednote'>Append section on identity constraints.</span></p>
<p>We write <tt>nc <em>in</em> IDREFs(td)</tt> if nmtoken constant nc appears as the
content of an attribute or element of type IDREF with typed forest td. We write <tt>nc <em>in</em>
IDs(td)</tt> if nmtoken constant nc appears as the content of an attribute or element of
type ID somewhere with typed forest td. We write <tt>nc <em>in</em> ! IDs(td)</tt> if
nmtoken constant nc appears exactly once as the content of an attribute or element of type
ID somewhere with typed forest td. We write <tt>nc <em>in</em> IDs!(td)</tt> if <tt>nc <em>in</em>!
IDs(td)</tt>. We write <tt>td&nbsp;OK</tt> if typed forest td is valid with respect to ID
and IDREF, that is, if no ID is defined twice, and every IDREF has a corresponding ID.</p>
<p CLASS="antecedent">IDREFs(d) ? IDREFs(td)&nbsp;&nbsp;&nbsp; IDs(td) ? IDs!(tc)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">td OK</p>
<p>A value nc counts as a reference whenever there is an element or attribute of type <tt>IDREF</tt>
in an instance having nc as its value:</p>
<p CLASS="rulename">A-Refs:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDREFs(a[IDREF <em>types</em> nc])</p>
<p CLASS="rulename">E-Refs:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDREFs(e[IDREF <em>types</em> nc])</p>
<p>A value nc counts as a referenece whenever there is an element among whose children nc
counts as a referenece:</p>
<p CLASS="rulename">Child-Refs:</p>
<p CLASS="antecedent">nc <em>in</em> IDREFs(td')</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDREFs(e[t' <em>types</em> td'])</p>
<p>A value nc counts as a reference among a sequence of instances whenever it counts as a
reference among a subsequence of those instances:</p>
<p CLASS="rulename">Subref 1:</p>
<p CLASS="antecedent">nc <em>in</em> IDREFs(td<sub>1</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDREFs(e[td<sub>1</sub> , td<sub>2</sub>])</p>
<p CLASS="rulename">Subref 2:</p>
<p CLASS="antecedent">nc <em>in</em> IDREFs(td<sub>2</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDREFs(e[td<sub>1</sub> , td<sub>2</sub>])</p>
<p>The notation <em>in</em>!&nbsp;&nbsp; indicates that a structure of a given shape
occurs uniquely within another. An instance td satisfies the id-uniqueness criterion
whenever any NCNAME that is among the <tt>ID</tt>s of td is also among its uniquely
occurring <tt>ID</tt>s:</p>
<p CLASS="rulename">Not-ID:</p>
<p CLASS="antecedent">nc <em>notin</em> IDs(td)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td) ? nc <em>in</em>!&nbsp; IDs(td)</p>
<p CLASS="rulename">ID:</p>
<p CLASS="antecedent">nc <em>in</em>! IDs(td)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td) ? nc <em>in</em>!&nbsp; IDs(td)</p>
<p>A value nc counts as an ``id'' whenever there is an element or attribute of type <tt>ID</tt>
in an instance having nc as its value::</p>
<p CLASS="rulename">A-ID:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em>! IDs(a[ID <em>types</em> nc])</p>
<p CLASS="rulename">E-ID:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em>! IDs(e[ID <em>types</em> nc])</p>
<p>A value nc counts as an ``id'' among a sequence of instances whenever it counts as an
``id'' among a subsequence of those instances, and does <em>not</em> count as an ``id''
among the remaining subsequence of those instances:</p>
<p CLASS="rulename">ID 1:</p>
<p CLASS="antecedent">nc <em>in</em> IDs(td<sub>1</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td<sub>1</sub> , td<sub>2</sub>)</p>
<p CLASS="rulename">ID 2:</p>
<p CLASS="antecedent">nc <em>in</em> IDs(td<sub>2</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td<sub>1</sub> , td<sub>2</sub>)</p>
<p>A value nc counts as a unique ``id'' among a sequence of instances whenever it counts
as an ``id'' among a subsequence of those instances, and does <em>not</em> count as an
``id''among the remaining subsequence of those instances:</p>
<p CLASS="rulename">UN-ID 1:</p>
<p CLASS="antecedent">nc <em>in</em>! IDs(td<sub>1</sub>)&nbsp;&nbsp;&nbsp; nc <em>notin</em>
IDs(td<sub>2</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em>! IDs(td<sub>1</sub> , td<sub>2</sub>)</p>
<p CLASS="rulename">UN-ID 2:</p>
<p CLASS="antecedent">nc <em>in</em>! IDs(td<sub>2</sub>)&nbsp;&nbsp;&nbsp; nc <em>notin</em>
IDs(td<sub>1</sub>)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td<sub>1</sub> , td<sub>2</sub>)</p>
<p>Lastly, we have the following obvious relationship between occurrence in <tt>IDs</tt>
and unique occurrence in <tt>IDs</tt>:</p>
<p CLASS="rulename">InnIDs-InIDs:</p>
<p CLASS="antecedent">nc <em>in</em>! IDs(td)</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">nc <em>in</em> IDs(td)</p>
<h2><a NAME="section-xsdl">7</a>&nbsp;&nbsp;XML Schema to Formalization Mapping</h2>
<p>EDITOR'S NOTE:&nbsp; Future versions of this document will contain a mapping from the
XML Schema components described in [<a HREF="#xsd1">11</a>] to sorts.&nbsp; Both XML
Schema and models make a distinction between the underlying model (components in the case
of XML Schema, sorts in the current case) and the surface syntax (the set of valid <tt>&lt;schema&gt;</tt>
elements accepted for either).&nbsp; In both cases, the underlying model is considered
more significant.</p>
<p>This section will describe the mapping from XML Schema instance syntax to sorts. This
requires performing two mutually recursive activities:
<ul>
<li>converting from XML Schema surface syntax into a set of sorts </li>
<li>for each sort, building its contents (note that component contents do not nest, the
content of one component contains only references to other components). </li>
</ul>
<p>To do so, we also introduce two new relations:
<ul>
<li>d -? g (eg writes as g) takes the xsdl syntax represented by eg and returns a content
description fragment, valid according to the grammar production rules enumerated
previously. Generally, f is the name (or names, if eg is a sequence) of the sort
corresponding to eg. </li>
<li>e[d] =? cmp (e corresponds to cmp) takes an xsdl structure definition, such as a
complexType definition, and maps it into an sort, such as a <tt>complex</tt>. </li>
</ul>
<p>In any language of the complexity of XML Schema, there are both syntactic constraints
expressible directly in the syntax of the language, and semantic constraints which further
limit allowed expressions. In the following we enumerate those fragments of XML Schema
which correspond to semantically valid expressions. While this could be done by
enumerating all such sequences, that would include enumerating all the different cases of
optionality and order - a daunting task. Instead, we reuse the grammars for content models
developed above to specify fragments of XML and then pattern match against portions of
this. The goal is to cover all fragments of XML Schema which are semantically coherent -
other fragments may be syntactically valid, but not correspond to useable constructs. In
each of the inference rules, the left hand side will be a string in this grammar. Strings
in <tt>bold</tt> match strings in the XML instance. Strings in italics pattern match as
variables to be used in the inference rule. As these represent fragments of schemas valid
against the Schema for Schemas, we assume they have been validated and all default/fixed
values for attributes are present. The only particular addition to this is to consider
``*'' as the default value for the name attribute of a nested complexType.</p>
<p>The following fragment gives an example:</p>
<p><tt>anElem[@attr1[val1], @attr2[val2], nest[eg], ev]</tt></p>
<p>Here we have:
<ul>
<li>An element with GI <tt>anElem</tt> with a required attribute named <tt>attr1</tt> whose
value is assigned to the variable val1, and a second attribute named <tt>attr2</tt> whose
value is assigned to the variable val2. </li>
<li>Within <tt>anElem</tt> another element named <tt>nest</tt> whose contents is assigned to
the variable eg. </li>
<li>And finally, another nested element whose value is assigned to the variable ev. </li>
</ul>
<p>Note that we provide a sequence for the attributes. This is purely for the convenience
of the reader - in an actual instance these would appear in any order.</p>
<p>We also make the following additions to the grammar specified up to this point:</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute model</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; am</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute[ag , eg]*</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; attribute defintion</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">content model root</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; cm</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">sequence[ag , eg]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; sequence group</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">all[ag , eg]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; all group</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">choice[ag , eg]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; choice group</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">simple content</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; st</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">simple[ag , eg]</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; simple type defintion</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<p>This formalism extends derivation to cover all sorts. Therefore, every kind of sort has
a base sort from which all user-defined sorts must, ultimately, be derived. Of these, only
two, for complex and simple types, are currently available from XML Schema. For the time
being, the rest (such as for elements and attributes) are restricted to sorts and are not
available to users.</p>
<h3><a NAME="section-xsdl-conversions">7.1</a>&nbsp;&nbsp;Conversions for content model
particles</h3>
<p CLASS="rulename">Write All:</p>
<p CLASS="antecedent">x |- ev<sub>1</sub> -? e<sub>1<br>
...<br>
</sub>x |- ev<sub>n</sub> -? e<sub>n</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- all[ev<sub>1</sub>...ev<sub>n</sub>] -? (e<sub>1</sub>&amp;...&amp;e<sub>n</sub>)</p>
<p>If there is an idall element with content ev<sub>1</sub>,...,ev<sub>n</sub> and each ev<sub>i</sub>
converts to e<sub>i</sub> in the context of x, then the element converts to <tt>(e<sub>1</sub>,...,e<sub>n</sub>)</tt>.</p>
<p CLASS="rulename">Write Sequence:</p>
<p CLASS="antecedent">x |- ev<sub>1</sub> -? e<sub>1<br>
...<br>
</sub>x |- ev<sub>n</sub> -? e<sub>n</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- sequence[@minOccurs[m] , @maxOccurs[k], ev<sub>1</sub>...ev<sub>n</sub>]
-? (e<sub>1</sub>&amp;...&amp;e<sub>n</sub>){m.k}</p>
<p CLASS="rulename">Write Choice:</p>
<p CLASS="antecedent">x |- ev<sub>1</sub> -? e<sub>1<br>
...<br>
</sub>x |- ev<sub>n</sub> -? e<sub>n</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- choice[@minOccurs[m] , @maxOccurs[k], ev<sub>1</sub>...ev<sub>n</sub>]
-? (e<sub>1</sub>|...|e<sub>n</sub>){m.k}</p>
<p>For a <tt>sequence</tt> or <tt>choice</tt> with <tt>minOccurs</tt> or <tt>maxOccurs</tt>,
where one or the other has a value other than 1, that <tt>sequence</tt> or <tt>choice</tt>
converts to a representation with min and max values indicated at the end.</p>
<p CLASS="rulename">Write Model Ref:</p>
<p CLASS="antecedent">g = deref(x |&gt; n).content </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- group[@ref[n]] -? g</p>
<p>A reference to a <tt>group</tt> writes as the contents of the corresponding group sort.
</p>
<p CLASS="rulename">Write AttGroup Ref:</p>
<p CLASS="antecedent">g = deref(x |&gt; n).content </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- attributeGroup[@ref[n]] -? g</p>
<p>A reference to an <tt>attributeGroup</tt> writes as the contents of the corresponding
group sort. </p>
<p CLASS="rulename">Write Complex:</p>
<p CLASS="antecedent">x |- complexType[t] =? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- complexType[t]&nbsp; -? c.name</p>
<p>If a <tt>complexType</tt> corresponds to some sort, c, then it writes as the name of
that sort.</p>
<p CLASS="rulename">Write Attribute:</p>
<p CLASS="antecedent">x |- attribute[@name[s] , ag , eg] =? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- attribute[@name[s] , ag , eg] -? c.name</p>
<p>If an <tt>attribute</tt> corresponds to some sort, c, then it writes as the name of
that sort.</p>
<p CLASS="rulename">Write Attribute Ref:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- attribute[@ref[s] , ag ,&nbsp; ev<sub>1</sub>,...,ev<sub>n</sub>]
? deref(x |&gt; s).name</p>
<p>If an <tt>attribute</tt> (in a content model) refers to some other <tt>attribute</tt>,
c, then it writes as the name of the sort corresponding to that attribute.</p>
<p CLASS="rulename">Write Element Ref 1:</p>
<p CLASS="antecedent">x |- element[@name[s] , ag , eg] =? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- element[@name[s] , ag , eg] -? c.name</p>
<p>If an <tt>element</tt> corresponds to some sort, then it writes as the name of that
sort.</p>
<p CLASS="rulename">Write Occurs:</p>
<p CLASS="antecedent">x |- element[ag , eg] -? y</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- element[@minOccurs[m] , @maxOccurs[k] , ag , eg] -? y{m, k}</p>
<p>If an <tt>element</tt> has <tt>minOccurs</tt> or <tt>maxOccurs</tt> attributes, one of
which has a value other than 1, and the <tt>element</tt> without the attributes writes as
y, then the <tt>element</tt> with the attributes writes as y{m, n}, where m and n are the
values of the attributes.</p>
<p CLASS="rulename">Write Element Ref 2:</p>
<p CLASS="antecedent"><br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- element[@ref[s] , ag ,&nbsp; eg] -? deref( x |&gt; s).name</p>
<p>If an <tt>element</tt> (in a content model) refers to some other <tt>element</tt>, c,
then it writes as the name of the sort corresponding to that attribute.</p>
<h3><a NAME="section-xsdl-correspondances">7.2</a>&nbsp;&nbsp;Correspondences from XML
Schema to sorts</h3>
<p CLASS="rulename">Valid Schema Doc:</p>
<p CLASS="antecedent">x|- e<sub>1</sub>=?srt<sub>1</sub> <br>
...<br>
x|- e<sub>k</sub> =? srt<sub>k</sub></p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">|- schema[@targetNamespace[x], e<sub>1</sub>, ..., e<sub>k</sub>]</p>
<p ALIGN="left">A schema element is accepted if all of its children convert to components
in the context of its targetNamespace.</p>
<p CLASS="rulename">Map Complex A:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
y |-&nbsp; cm -? elems&nbsp;&nbsp;&nbsp; y |-&nbsp; am -? atts</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- complexType[@abstract[a] , @final[f] , @block[b] ,<br>
@mixed[m] , @name[n] , cm , am]<br>
=? complex(name = y, base = xsi:AnyType,<br>
derivation = restriction,<br>
refinement = if (f == ##all) then {restriction, extension} else f,<br>
abstract&nbsp; = a<br>
content = (atts, if (m == true) then mixed(elems) else elems))</p>
<p>Given a complex type which is not a derivation, we determine its name and convert its
attribute and content definitions into component content (within the context of the name).
We then use these to create a complex sort for the complex type.</p>
<p CLASS="rulename">Map Restriction 1:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
z = deref(x |&gt; p)<br>
x.content = (am<sub>2</sub> ,cm<sub>2</sub>)<br>
y |-&nbsp; cm -? cont y |-&nbsp; am -? atts</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- complexType[@abstract[a] , @final[f] , @block[b] ,<br>
@mixed[m] , @name[n] ,&nbsp;<br>
complexContent[restriction[@base[p],cm , am]]<br>
=? complex(name = y, base = x.name,<br>
derivation = restriction,<br>
refinement = if (f == ##all) then {restriction, extension} else f,<br>
abstract&nbsp; = a<br>
content = (((am<sub>2</sub> - attrs), attrs), if (m == true) then mixed(cont) else cont))</p>
<p>If a complex type is a restriction of another type, then we proceed as above, except we
retrieve the contents of the super type and the set of attributes of the derived type is a
combination of its own and those of the parent. In this case, am<sub>2</sub> - attrs
represents the attributes defined in am<sub>2</sub> less any attributes in attrs with the
same name. (Note, this definition may require more work.)</p>
<p CLASS="rulename">Map Complex Extension:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
z = deref( x |&gt; p)<br>
x.content = (am<sub>2</sub> ,cm<sub>2</sub>)<br>
y |-&nbsp; cm -? cont y &nbsp; |-&nbsp; am -? atts</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- complexType[@abstract[a] , @final[f] , @block[b] ,<br>
@mixed[m] , @name[n] ,&nbsp;<br>
complexContent[extension[@base[p],cm , am]]<br>
=? complex(name = y, base = z.name,<br>
derivation = extension,<br>
refinement = if (f == ##all) then {restriction, extension} else f,<br>
abstract&nbsp; = a<br>
content = (((am<sub>2</sub> - attrs), attrs), if (m == true) then mixed(cm<sub>2</sub>,
cont) else cm<sub>2</sub> , cont))</p>
<p>If the complex type is an extension of the complex type, then we retrieve the contents
of the super type. The attributes of the derived type is the union of its attributes and
those of the supertype. Its content model is a sequence consisting of the content model of
the supertype followed by that of the subtype declaration.</p>
<p CLASS="rulename">Map Restriction 2:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
z = deref( x |&gt; p)<br>
x.content = (st<sub>2</sub> ,am<sub>2</sub>)<br>
y |- st -? simp&nbsp;&nbsp;&nbsp; y |- am -? attrs</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- complexType[@abstract[a] , @final[f , @block[b] ,<br>
@mixed[m] , @name[n] ,&nbsp;<br>
simpleContent[restriction[@base[p],st , am]]<br>
=? complex(name = y, base = z.name,<br>
derivation = extension,<br>
refinement = if (f == ##all) then {restriction, extension} else f,<br>
abstract&nbsp; = a<br>
content = ((am<sub>2</sub> , attrs), if (m == true) then mixed(simp) else cm<sub>2</sub> ,
simp))</p>
<p>If a complex type is a restriction with simple content, then the base type refers to a
complex type with simple content. The content of that type (z, above) must be a simple
type and 0 or more attributes. We convert the simple type description and create a new
complex sort.</p>
<p CLASS="rulename">Map Model Group Definition</p>
<p CLASS="antecedent">y = x |&gt; n<br>
y |- mg --&gt; g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- group[@name[n], mg] <br>
=? modelGroup(name = y,<br>
base = AnyGroup,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = g)</p>
<p CLASS="rulename">Map Attribute Group Definition</p>
<p CLASS="antecedent">y = x |&gt; n<br>
y |- mg --&gt; g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- attributeGroup[@name[n], mg] <br>
=? attributeGroup(name = y,<br>
base = AnyGroup,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = g)</p>
<p CLASS="rulename">Map Global Element 1:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
z = x |&gt; s<br>
c = deref( x |&gt; t)<br>
c <em>in</em> complex</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- element[@abstract[a] , @final[f , @block[b] , @name[n]
,&nbsp;<br>
@nillable[u], @substitutionGroup[s] , @type[t]]<br>
=? element(name = y,<br>
base = if (z |- null) then z else AnyElement,<br>
derivation = c.derivation,<br>
refinement = {restriction, extension},<br>
abstract&nbsp; = a<br>
content = c.name)</p>
<p>To create an element sort using a type reference to a complex type.</p>
<p CLASS="rulename">Map Global Element 2:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
z = x |&gt; s<br>
y&nbsp; |- t ? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- element[@abstract[a] , @final[f , @block[b] , @name[n]
,&nbsp; @form[o] , default[d] ,<br>
@fixed[i] , @nillable[u], @substitutionGroup[s] , @type[t]]<br>
=? element(name = y,<br>
base = if (z |- null) then z else AnyElement,<br>
derivation = c.derivation,<br>
refinement = {restriction, extension},<br>
abstract&nbsp; = a<br>
content = c.name)</p>
<p>To create an element containing an inlined type definition, find the sort corresponding
to the type definition and create the element sort using the name of the type definition
for the content.</p>
<p CLASS="rulename">Map Local Element 1:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
c = x |&gt; t</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- element[@default[d], @fixed[i] , @name[n] ,&nbsp;
@form[o] ,&nbsp;<br>
@maxOccurs[m] , @minOccurs[n] , @nullable[u], @type[t]]<br>
=? element(name = y,<br>
base =&nbsp; AnyElement,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = c.name)</p>
<p>A local element which references a type creates a new element structure, whose content
is the name of the referenced type.</p>
<p CLASS="rulename">Map Local Element 2:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
y&nbsp; |- t ? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- element[@default[d], @fixed[i] , @name[n] ,&nbsp;
@form[o] ,&nbsp;<br>
@maxOccurs[m] , @minOccurs[n] , @nullable[u], t]<br>
=? element(name = y,<br>
base =&nbsp; AnyElement,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = c.name)</p>
<p>A local element with an inlined type declaration.</p>
<p CLASS="rulename">Map Attribute 1:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
c&nbsp; = x |&gt; t</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x&nbsp; |- attribute[@name[nd], @form[o] , @type[tn] ,&nbsp; @use[u]
, @value[v]]<br>
=? attribute(name = y,<br>
base =&nbsp; AnyAttribute,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = c)</p>
<p>An attribute declaration referencing a type.</p>
<p CLASS="rulename">Map Attribute 2:</p>
<p CLASS="antecedent">y = x |&gt; n<br>
y |- s&nbsp; ? c</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent" ALIGN="center">x&nbsp; |- attribute[@name[nd], @form[o] ,&nbsp;
@use[u] , @value[v], s]<br>
? attribute(name = y,<br>
base =&nbsp; AnyAttribute,<br>
derivation = restriction,<br>
refinement = {},<br>
abstract&nbsp; = false<br>
content = c.name)</p>
<p>An attribute with an inlined type definition.</p>
<h2><a NAME="section-component-to-component">8</a> Mapping from XSDL Components for
Formalization Components</h2>
<p>This section specifies the mapping from the components described in XML Schemas, Part
II, to the sorts described in this document. The consequent of each rule provides the XSDL
component on the left and the corresponding formal component on the right. We've
represented each XSDL component type as a structure similar to our own, so, for example,
an XSDL particle is represented as a structure with name <em>particle</em> and three
fields, <em>minOccurs</em>, <em>maxOccurs</em>, and <em>term</em>. The value of each field
is a variable which can be used either in the antecedent, or in the second part of the
consequent, which specifies the corresponding formal structure. In the case of a particle
or model group, the formal correspondance is to a piece of content group syntax, but in
the other cases it is to a sort. As there are a number of optional fields in the XSDL
components, if a field does not have a value we assume it is <em>null.</em> </p>
<p>We represent the mapping from an XSDL component to a formal component by:
<ul>
<li>x ~&gt; s (x converts to s). If x is null, then s is null.</li>
</ul>
<p CLASS="rulename">Global Element:</p>
<p CLASS="antecedent">s = global <br>
u |&gt; n |- t ~&gt; t' <br>
e ~&gt; e' </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">element(name=n, <br>
targetNamespace=u, <br>
typeDefinition=t, <br>
scope=s, <br>
valueConstraint=v, <br>
nillable=b, <br>
identityConstraintDefinitions=d, <br>
substitutionGroup=e, <br>
substitutionGroupExclusions=x, <br>
disallowedSubstitutions=d, <br>
abstract=a, <br>
annotation=z) <br>
~&gt; <br>
element(name= u|&gt;n<br>
abstract= a<br>
base= if e' = null then UrElement else e'.name<br>
content= u|&gt;n[t'.name]<br>
derivation= if t' != e'.type then deref(t').derivation else restriction<br>
refinement= if substitutions EO d then {} else x) </p>
<p CLASS="rulename">local element</p>
<p CLASS="antecedent">s=local <br>
y = e |&gt; n <br>
y |- t ~&gt; t' <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e |- element(name=n, <br>
targetNamespace=u, <br>
typeDefinition=t, <br>
scope=s, <br>
valueConstraint=v, <br>
nillable=b, <br>
identityConstraintDefinitions=d, <br>
substitutionGroup=e, <br>
substitutionGroupExclusions=x, <br>
disallowedSubstitutions=d, <br>
annotation=z) <br>
~&gt; <br>
element(name= y, <br>
abstract= false, <br>
base= UrElement, <br>
content= y[t'.name], <br>
derivation= restriction, <br>
refinement= {} ) </p>
<p CLASS="rulename">complex type</p>
<p CLASS="antecedent">y = if n == null then e/type::* else t |&gt; n <br>
b ~&gt; b' <br>
y |- a ~&gt; a' <br>
y |- g ~&gt; g' <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">e |- complexType(name= n <br>
targetNamespace= t <br>
baseTypeDefinition= b <br>
derivationMethod= m <br>
final= f <br>
abstract= a <br>
attributeUsePairs= a <br>
attributeWildcard= aw <br>
contentType= g <br>
prohibitedSubstitutions= r <br>
annotations= ann) <br>
~&gt; <br>
complex(name= y <br>
abstract= a, <br>
base= if b' = null then UrType else b' <br>
content= (a', g'), <br>
derivation= if b' == null then restrictionion else m <br>
refinement= {refinement, restriction} - r) </p>
<p CLASS="rulename">Attribute Type - Global</p>
<p CLASS="antecedent">sc=global <br>
t |- s ~&gt; s' <br>
n' = t |&gt; n </p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">|- attribute( <br>
name= n <br>
target namespace= t <br>
type definition= s <br>
scope= sc <br>
valueConstraint= vc <br>
annotation= an) <br>
~&gt; <br>
attribute(name= n' <br>
abstract= false, <br>
base= AnyAttribute <br>
content= n'[s'.name] <br>
derivation= restriction <br>
refinement= {}) <br>
</p>
<p CLASS="rulename">Attribute Type - Local</p>
<p CLASS="antecedent">sc=local <br>
t |- s ~&gt; s' <br>
n' = x |&gt; n <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">x |- attribute( <br>
name= n <br>
target namespace= t <br>
type definition= s <br>
scope= sc <br>
valueConstraint= vc <br>
annotation= an) <br>
~&gt; <br>
attribute(name= n' <br>
abstract= false, <br>
base= AnyAttribute <br>
content= n'[s'.name] <br>
derivation= restriction <br>
refinement= {}) <br>
</p>
<p CLASS="rulename">Model Group - Sequence</p>
<p CLASS="antecedent">{x|- p_1 ~&gt; g_1 <br>
... <br>
x|- p_n ~&gt; g_n <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">{x |- modelGroup( <br>
compositor= sequence, <br>
particles= p_1,...,p_n <br>
annotation) <br>
~&gt;<br>
(g_1 , ... , g_n) <br>
</p>
<p CLASS="rulename">Model Group - Choice</p>
<p CLASS="antecedent">{x|- p_1 ~&gt; g_1 <br>
... <br>
x|- p_n ~&gt; g_n <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">{x |- modelGroup( <br>
compositor= choice, <br>
particles= p_1,...,p_n <br>
annotation) <br>
~&gt;<br>
(g_1 | ... | g_n) <br>
</p>
<p CLASS="rulename">Model Group - All</p>
<p CLASS="antecedent">{x|- p_1 ~&gt; g_1 <br>
... <br>
x|- p_n ~&gt; g_n <br>
</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">{x |- modelGroup( <br>
compositor= all, <br>
particles= p_1,...,p_n <br>
annotation) <br>
~&gt;<br>
(g_1 &amp; ... &amp; g_n) <br>
</p>
<p CLASS="rulename">Particle</p>
<p CLASS="antecedent">x|- t ~&gt; g</p>
<hr CLASS="rule" WIDTH="50%">
<p CLASS="consequent">{x |- particle( <br>
minOccurs= m <br>
maxOccurs= n <br>
term= t) <br>
~&gt; <br>
g{m,n} <br>
</p>
<h2><a NAME="section-index">8</a>&nbsp;&nbsp;Index of notations</h2>
<dl COMPACT="COMPACT">
<dt><b>8</b> </dt>
<dd>infinity (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>e</b> </dt>
<dd>empty sequence (§<a HREF="#section-structures-groups">3.4</a>), empty forest (§<a
HREF="#section-structures-documents">3.7</a>) </dd>
<dt><b>Ø</b> </dt>
<dd>empty choice (§<a HREF="#section-structures-groups">3.4</a>), empty set </dd>
<dt><b>g<sub>1</sub> , g<sub>2</sub></b> </dt>
<dd>sequence group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>g<sub>1</sub>|g<sub>2</sub></b> </dt>
<dd>choice group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>g<sub>1</sub> &amp;g<sub>2</sub></b> </dt>
<dd>all group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>g{m,n}</b> </dt>
<dd>repetition group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><tt><b>a[g]</b></tt> </dt>
<dd>attribute group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><tt><b>e[g]</b></tt> </dt>
<dd>element group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>d<sub>1</sub> ,d<sub>2</sub></b> </dt>
<dd>sequence forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><tt><b>a[d]</b></tt> </dt>
<dd>attribute forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><tt><b>e[d]</b></tt> </dt>
<dd>element forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><b>a[s <em>types</em> td]</b> </dt>
<dd>typed attribute forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><b>e[t <em>types</em> td]</b> </dt>
<dd>typed element forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><b>d <em>in</em> g</b> </dt>
<dd>forest d matches group g (§<a HREF="#section-validation">6</a>) </dd>
<dt><strong>|-</strong> </dt>
<dd>&nbsp;</dd>
<dd>turnstile (§<a HREF="#section-normalization">4</a><a href="#section-refinement-restriction">5.4</a>) </dd>
<dt><strong>x<sub>1</sub> |&gt; x<sub>2</sub></strong> </dt>
<dd>x1 extends x2 (§<a HREF="#section-normalization">4</a>) </dd>
<dt><strong>x |- d ?dt</strong> </dt>
<dd>d normalizes to dt in context x (§<a HREF="#section-normalization">4</a>) </dd>
<dt><strong>c <em>in</em><sub>p</sub> p</strong> </dt>
<dd>c matches datatype p (§<a HREF="#section-validation-content">6.1</a>) </dd>
<dt><strong>e <em>in</em><sub>v</sub> v</strong> </dt>
<dd>e matches wildcard item v (§<a HREF="#section-validation-content">6.1</a>) </dd>
<dt><strong>e <em>in</em><sub>w</sub> w</strong> </dt>
<dd>e matches wildcard w (§<a HREF="#section-validation-content">6.1</a>) </dd>
<dt><strong>d |?<sub>unmix</sub> d'</strong> </dt>
<dd>d unmixes to d' (§<a HREF="#section-validation-content">6.1</a>) </dd>
<dt><strong><em>d</em> |?<sub>inter</sub> <em>d</em>'<em>;d''</em></strong> </dt>
<dd><em>d</em> interleaves <em>d'</em> and <em>d''</em><a
HREF="#section-validation-content">6.1</a>) </dd>
<dt><strong><em>d</em> ? <em>d</em>'</strong> </dt>
<dd><em>d</em> is a subset of <em>d'</em><a HREF="#section-refinement-ids">6.2</a>) </dd>
<dt><strong>nc <em>in</em> IDREFs(td)</strong> </dt>
<dd><em>nc</em> is in the set of IDREFs in <em>td</em><a HREF="#section-refinement-ids">6.2</a>)
</dd>
<dt><strong>d -? g</strong> </dt>
<dd>d writes as g (§<a HREF="#section-xsdl">7</a>) </dd>
<dt><strong>e[d] =? cmp</strong> </dt>
<dd>e corresponds to cmp (§<a HREF="#section-xsdl">7</a>) </dd>
<dt><b>x&nbsp; &lt; :x'</b> </dt>
<dd>derivation (§<a HREF="#section-refinement-base">5.1</a>) </dd>
<dt><b>g&nbsp; &lt; :<sub>ext</sub>g'</b> </dt>
<dd>extension (§<a HREF="#section-refinement-extension">5.2</a>) </dd>
<dt><b>g&nbsp; &lt; :<sub>res</sub>g'</b> </dt>
<dd>restriction (§<a HREF="#section-refinement-extension">5.2</a>) </dd>
<dt><b>x&nbsp; &lt; :<sub>der</sub> x'</b> </dt>
<dd>extension or restriction (§<a HREF="#section-refinement-constraints">5.4</a>) </dd>
<dt><b>a</b> </dt>
<dd>attribute name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>b</b> </dt>
<dd>boolean (§<a HREF="#section-structures-components">3.5</a>) </dd>
<dt><b>c</b> </dt>
<dd>constant of atomic datatype (§<a HREF="#section-structures-datatypes">3.3</a>) </dd>
<dt><b>d</b> </dt>
<dd>forest (§<a HREF="#section-structures-documents">3.7</a>) </dd>
<dt><b>e</b> </dt>
<dd>element name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>g</b> </dt>
<dd>model group (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>i</b> </dt>
<dd>namespace (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>j</b> </dt>
<dd>local identifier (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>k</b> </dt>
<dd>complex type name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>l</b> </dt>
<dd>scope length of name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>m</b> </dt>
<dd>minimum in repetition (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>n</b> </dt>
<dd>maximum in repetition (§<a HREF="#section-structures-groups">3.4</a>) </dd>
<dt><b>p</b> </dt>
<dd>atomic datatype (§<a HREF="#section-structures-datatypes">3.3</a>) </dd>
<dt><b>s</b> </dt>
<dd>simple type name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>t</b> </dt>
<dd>type name (§<a HREF="http://www.w3.org/TR/xmlschema-formal/#section-structures-names">3.1</a>)
</dd>
<dt><b>u</b> </dt>
<dd>union datatype (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>v</b> </dt>
<dd>wildcard item (§§<a HREF="#section-structures-namesets">3.2</a>) </dd>
<dt><b>u</b> </dt>
<dd>wildcard expression (§§<a HREF="#section-structures-namesets">3.2</a>) </dd>
<dt><b>w</b> </dt>
<dd>wildcard (§§<a HREF="#section-structures-namesets">3.2</a>) </dd>
<dt><b>x</b> </dt>
<dd>name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>ag</b> </dt>
<dd>attribute group (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>eg</b> </dt>
<dd>element group (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>ac</b> </dt>
<dd>attribute content (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>ec</b> </dt>
<dd>element content (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>kc</b> </dt>
<dd>complex type content (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>sc</b> </dt>
<dd>simple type content (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>uc</b> </dt>
<dd>union type content (§<a HREF="#section-structures-constraints">3.6</a>) </dd>
<dt><b>der</b> </dt>
<dd>derivation (§<a HREF="#section-structures-components">3.5</a>) </dd>
<dt><b>srt</b> </dt>
<dd>sort (§<a HREF="#section-structures-components">3.5</a>) </dd>
<dt><b>deref(x)</b> </dt>
<dd>dereferencing (§<a HREF="#section-structures-components">3.5</a>) </dd>
<dt><b>local(x)</b> </dt>
<dd>local name (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>namespace(x)</b> </dt>
<dd>namespace (§<a HREF="#section-structures-names">3.1</a>) </dd>
<dt><b>symbol(x)</b> </dt>
<dd>symbol space (§<a HREF="#section-structures-names">3.1</a>) </dd>
</dl>
<h2><a NAME="tighter-grammar">Appendix A</a> Auxiliary Grammar</h2>
<p>This section contains stricter definitions of some of the non-terminals found in the
context free grammars found throughout the main body of the description. In general, these
more restricted forms are not required, as sorts will be constructed from XSDL transfer
syntax or XSDL components which already enforce these restrictions. In addition, they are
considerably longer than the versions in the main body of the text. We separate them out
here so they do not interfere with understanding the main text.</p>
<p>We start by redefining sorts so as to constrain the values of the different fields. To
do this we introduce new non-terminals for the different types of sorts. A <em>sort</em>
is one of the six sorts of component in XML Schema. We let srt range over sorts.</p>
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">sort</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; srt</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>at</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>el</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>st</tt> &nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>ct</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>agr</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">|</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>mgr</tt> &nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td></td>
<td ALIGN="right"></td>
<td align="center"></td>
<td></td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<!-- TOP -->
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">complex type</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; ct</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>complexType( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>t</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>t</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>ag,eg</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">element</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; el</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>element( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>e</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>e</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>e[t]</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<!-- TOP -->
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute group</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; agr</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attributeGroup( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>an</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>an</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>ag</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">model group</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; mgr</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>modelGroup( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>mn</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>mn</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>eg</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<!-- TOP -->
<table WIDTH="100%" BORDER="0">
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">attribute</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; at</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>attribute( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>a</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>a</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>a[p]</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
<TBODY>
<tr>
<td><table ALIGN="center">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
<td NOWRAP="NOWRAP" align="center"><table>
<TBODY>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">simple types</td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; st</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">::=</td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>simpleType( &nbsp;&nbsp;&nbsp;</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>name =</tt> <tt>t</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>base =</tt> <tt>t</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>derivation =</tt> <tt>der</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>refinement =</tt> <tt>ders</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>abstract =</tt> <tt>b</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp; <tt>content =</tt> <tt>p</tt>
&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
</tr>
<tr>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td ALIGN="right"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center">&nbsp;&nbsp;&nbsp;</td>
</tr>
</TBODY>
</table>
</td>
<td align="center"><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
<td><table BORDER="0">
<TBODY>
<tr>
<td NOWRAP="NOWRAP" align="center"><tt>)</tt></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
</td>
<td NOWRAP="NOWRAP" align="center"></td>
</tr>
</TBODY>
</table>
</td>
</tr>
</TBODY>
</table>
<h2><a NAME="appendix-A">Appendix B</a> Infidelities in the current formalization of XML
Schema</h2>
<p>This document is based on the syntax of XML Schema in the proposed recommendation
draft. The Formalization Taskforce will continue in operation until XML Schema becomes a
recommendation.</p>
<p>Also, in a few places the specification is not quite equivalent to that in XML Schema,
notably for the definition of derivation. We believe that with extra time it should be
possible to model all or most of XML Schema.
<ul>
<li><em>Restriction</em>. This document allows one type to be a subtype of another if the
content group of the subtype validates a subset of the forests validated by the content of
the base type. XML Schema places several further restrictions on this relationship which
are not currently modelled. </li>
<li><em>Content models</em>. Impose additional constraints on content models until they are <em>exactly</em>
like XML Schema. <ul>
<li>mixed element content is not fully integrated; </li>
<li>unambiguity constraint on content models; </li>
<li>checking that abstract components are not instantiated; </li>
<li>subtyping permissions such as final and block; </li>
<li>null elements; </li>
<li>formal model of atomic datatypes. </li>
<li>support for form and form default </li>
<li>support for block, use, and value </li>
<li>mapping from sorts to XML Schema components and coverage of the post-schema-validation
Infoset </li>
</ul>
</li>
<li><em>Identity constraints</em>. Due to the drastic changes in the identity constraints at
the London WG face-to-face, identity constraints have been dropped from this version. </li>
<li><em>Schema composition.</em> <ul>
<li>schema import is not considered </li>
<li>schema include is not considered </li>
<li>schema redefine is not considered </li>
</ul>
</li>
</ul>
<hr>
<h2><a NAME="bibliography">Appendix C</a> Bibliography</h2>
<p><small><a NAME="dataweb">[1]</a> Serge Abiteboul and Peter Buneman and Dan Suciu, <em>Data
on the Web : From Relations to Semistructured Data and XML</em> Morgan Kaufmann, 1999 </small></p>
<p><small><a NAME="cs">[2]</a> Alfred V. Aho, &quot;Algorithms for Finding Patterns in
Strings&quot;, <em>Handbook of Theoretical Computer Science</em>, Jan van Leeuwen, MIT
Press Elsevier, Cambridge, Massachusetts, 1990 </small></p>
<p><small><a NAME="xsd2">[3]</a> Paul V. Biron and Ashok Malhotra, <em>XML Schema Part 2:
Datatypes</em>, , World Wide Web Consortium, 2001, available at <a href="http://www.w3.org/TR/xmlschema-2/">http://www.w3.org/TR/xmlschema-2/</a>
</small></p>
<p><small><a NAME="xml">[4]</a> Tim Bray and Jean Paoli and C. M. Sperberg-McQueen, <em>Extensible
Markup Language (XML) 1.0</em>, , World Wide Web Consortium, 1998, available at <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>
</small></p>
<p><small><a NAME="xpath">[5]</a> James Clark and Steve DeRose, <em>XML path language
(XPath) version 1.0</em>, World Wide Web Consortium, 1999, available at <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a> </small></p>
<p><small><a NAME="xsd0">[6]</a> David C. Fallside, <em>XML Schema Part 0: Primer</em> ,
World Wide Web Consortium, 2001, available at <a href="http://www.w3.org/TR/xmlschema-0/">http://www.w3.org/TR/xmlschema-0/</a> </small></p>
<p><small><a NAME="frege">[7]</a> Gottlob Frege, &quot;Begriffsschrift, a formula
language, modeled upon that of arithmetic, for pure thought (1879)&quot;, <em>From Frege
to Godel: A Source Book in Mathematical Logic, 1879-1931</em>, ed. Jan van Heijenoort, ,
Harvard University Press, Cambridge, Massachusetts, 1967 </small></p>
<p><small><a NAME="xduce">[8]</a> Haruo Hosoya and Jerome Vouillon and Benjamin C. Pierce,
&quot;Regular Expression Types for XML&quot;, <em>Proceedings of the International
Conference on Functional Programming (ICFP)</em>, 2000 </small></p>
<p><small><a NAME="milosuciu">[9]</a> Tova Milo and Dan Suciu, &quot;Type Inference for
Queries on Semistructured Data&quot;, <em>Proceedings of the ACM Symposium on Principles
of Database Systems</em>, 1999 </small></p>
<p><small><a NAME="lang">[10]</a> John C. Mitchell, <em>Foundations for Programming
Languages</em>, , MIT Press, 1996, Cambridge, Massachusetts </small></p>
<p><small><a NAME="xsd1">[11]</a> Henry S. Thompson, David Beech, Murray Maloney and
Noah Mendelsohn, <em>XML Schema Part 1: Structures</em>, , World Wide
Web Consortium, 2001, available at <a href="http://www.w3.org/TR/xmlschema-1/">http://www.w3.org/TR/xmlschema-1/</a>
</small></p>
<p><small><a NAME="xslt">[12]</a> Philip Wadler, &quot;A formal semantics of patterns in
XSLT&quot;, <em>Proceedings of Markup Technologies</em>, ed. B. Tommie Usdin and Deborah
A. Lapeyre and C. M. Sperberg-McQueen, Philadelphia, 1999 </small></p>
<p><small><a NAME="ddj">[13]</a> Philip Wadler, &quot;New Language, Old Logic&quot;, <em>Dr
Dobbs Journal</em>, December, 2000 </small></p>
<p><small><a NAME="tolr8">[14]</a> Allen L. Brown, Jr., &quot;Derivation, tolerance and
validity: a formal model of type definition in XML Schemas&quot;, <em>Proceedings of XML
Europe 2000</em>, ed. Pamela Gennusa, Paris, 2000 </small></p>
<p><small><a NAME="inf1">[15]</a> Gaisi Takeuti, <em>Proof Theory</em>, <em>Studies in
Logic and the Foundations of Mathematics</em>, vol. 81, North-Holland/American Elsevier,
Amsterdam, 1975 </small></p>
<p><small><a NAME="inf2">[16]</a> Dag Prawitz, <em>Natural Deduction: A Proof-Theoretical
Study</em>, , Almqvist &amp; Wiksell, Stockholm, 1965, </small></p>
<p><small><a NAME="logic">[17]</a> Solomon Feferman, &quot;Theories of Finite Type Related
to Mathematical Practice&quot;, <em>Handbook of Mathematical Logic</em>, ed. Jon Barwise,
Elsevier North Holland, Amsterdam, 1977 </small></p>
</body>
</html>