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
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 "work in progress".</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>
|
|
2.1 <a HREF="#section-overview-normalization">Normalization</a> <br>
|
|
2.2 <a HREF="#section-overview-components">Components</a> <br>
|
|
2.3 <a HREF="#section-overview-documents">Documents and Forests</a></p>
|
|
|
|
<p>3 <a HREF="#section-structures">Structures</a> <br>
|
|
3.1 <a HREF="#section-structures-names">Names</a> <br>
|
|
3.2 <a HREF="#section-structures-namesets">Wildcards</a> <br>
|
|
3.3 <a HREF="#section-structures-datatypes">Atomic datatypes</a> <br>
|
|
3.4 <a HREF="#section-structures-groups">Content groups</a> <br>
|
|
3.5 <a HREF="#section-structures-components">Components</a> <br>
|
|
3.6 <a HREF="#section-structures-constraints">Constraints</a> <br>
|
|
3.7 <a HREF="#section-structures-documents">Ordered Forests</a> <br>
|
|
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>
|
|
5.1 <a HREF="#section-refinement-base">Base chain</a> <br>
|
|
5.2 <a HREF="#section-refinement-extension">Extension</a> <br>
|
|
5.3 <a HREF="#section-refinement-restriction">Restriction</a> <br>
|
|
5.4 <a HREF="#section-refinement-constraints">Constraints</a></p>
|
|
|
|
<p>6 <a HREF="#section-validation">Validation</a> <br>
|
|
6.1 <a HREF="#section-validation-content">Content validation</a> <br>
|
|
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>
|
|
7.1 <a HREF="#section-xsdl-conversions">Conversions for content model
|
|
particles</a> <br>
|
|
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> 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 [<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. 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. This
|
|
means there is, essentially, one inference rule per context free grammar production.
|
|
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 <a HREF="#section-overview">2</a> gives an overview of the formalism. </li>
|
|
<li>Section <a HREF="#section-structures">3</a> defines the basic structures used in
|
|
the formalization including names, groups, and components. </li>
|
|
<li>Section <a HREF="#section-normalization">4</a> describes normalization. </li>
|
|
<li>Section <a HREF="#section-refinement">5</a> describes refinement. </li>
|
|
<li>Section <a HREF="#section-validation">6</a> describes validation. </li>
|
|
<li>Section <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 <a HREF="#section-index">8</a> indexes the notations used. </li>
|
|
<li>Appendix <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> 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. 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. </p>
|
|
|
|
<pre><xsd:schema targetNamespace = "http://www.example.com/baz.xsd"
|
|
xmlns = "http://www.example.com/baz.xsd"
|
|
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
|
|
<xsd:element name="a" type="t"/>
|
|
<xsd:simpleType name="b">
|
|
<xsd:list itemType="xsd:integer"/>
|
|
</xsd:simpleType>
|
|
<xsd:complexType name="t">
|
|
<xsd:attribute name="b" type="xsd:string"/>
|
|
<xsd:attribute name="c" type="b" use="optional"/>
|
|
</xsd:complexType>
|
|
<xsd:complexType name="u">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="t">
|
|
<xsd:choice>
|
|
<xsd:element name="d">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element name="a"
|
|
type="xsd:string"
|
|
minOccurs="1"
|
|
maxOccurs="unbounded"/>
|
|
</pre>
|
|
|
|
<pre> </xsd:sequence>
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="e" type="xsd:string"/>
|
|
</xsd:choice>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
</xsd:schema>
|
|
</pre>
|
|
|
|
<p>And here is an XML document which matches the above schema</p>
|
|
|
|
<pre><baz:a xmlns:baz="http://www.example.com/baz.xsd"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:type="baz:u"
|
|
b="zero"
|
|
c="1 2">
|
|
<d>
|
|
<a>three</a>
|
|
<a>four</a>
|
|
</d>
|
|
</baz:a>
|
|
</pre>
|
|
|
|
<h3><a NAME="section-overview-normalization">2.1</a> Normalization</h3>
|
|
|
|
<p>We use a normalized form of a schema, which assigns a unique universal name to each
|
|
component of a schema, and "flattens" 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"> 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"> <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"> <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"> <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"> -<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"> -<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"> <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"> <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"> <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"> -<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"> -<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 [<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. 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 "-" or a "+" immediately
|
|
following the # in the name. A "+" indicates the name is to be qualified.
|
|
By default, only top-level elements (such as the "a") are qualified.
|
|
However, for example, if the declaration of the "b" attribute of type
|
|
"t" had been:</p>
|
|
|
|
<p><xsd:attribute name="b" type="xsd:string"
|
|
formDefault="qualified"/></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: The normalized names described in this document exist
|
|
only for the purposes described herein. 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.
|
|
When that effort is complete, this document will adopt that syntax.</p>
|
|
|
|
<h3><a NAME="section-overview-components">2.2</a> 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> Component content</h4>
|
|
|
|
<p>The formalism uses standard regular expression notation [<a NAME="CITEcs"
|
|
HREF="#cs">2</a>] for component content. Component content corresponds roughly to a
|
|
union of both model groups and attributes groups. 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 </b> </dt>
|
|
<dd>empty sequence </dd>
|
|
<dt><b>Ø </b> </dt>
|
|
<dd>empty choice </dd>
|
|
<dt><b>g<sub>1</sub>,g<sub>2 </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 </sub></b> </dt>
|
|
<dd>choice, g<sub>1</sub> or g<sub>2</sub> </dd>
|
|
<dt><b>g<sub>1</sub> & g<sub>2 </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 (m is a natural
|
|
number, n is a natural number or 8) </dd>
|
|
<dt><b>mixed(g) </b> </dt>
|
|
<dd>mixed content in group g </dd>
|
|
<dt><b>@w[g] </b> </dt>
|
|
<dd>attribute, with name in nameset w and content in group g </dd>
|
|
<dt><b>w[g] </b> </dt>
|
|
<dd>element, with name in nameset w and content in group g </dd>
|
|
<dt><b>p </b> </dt>
|
|
<dd>atomic datatype (such as <tt>xsi:string</tt> or <tt>xsi:integer</tt>) </dd>
|
|
<dt><b>x </b> </dt>
|
|
<dd>component name </dd>
|
|
</dl>
|
|
|
|
<p>EDITOR'S NOTE: The grammar above does not distinguish between the precedence of the
|
|
various connectors ("|", "&", and ","). 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. A nameset may be a
|
|
single element or attribute name, a substitution group, or the equivalent of an XSDL
|
|
wildcard. 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[
|
|
(-@t/b[xsi:string] & -@t/c[xsi:integer{0,8}]{0,1}),
|
|
(-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> & 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(
|
|
name = +a,
|
|
base = xsi:UrElement,
|
|
derivation = restriction,
|
|
refinement = {restriction,extension},
|
|
abstract = false,
|
|
content = a[t]
|
|
)
|
|
</pre>
|
|
|
|
<pre>simpleType(
|
|
name = s,
|
|
base = xsi:UrSimpleType,
|
|
derivation = restriction,
|
|
refinement = {restriction},
|
|
abstract = false,
|
|
content = xsi:integer{0,8}
|
|
)
|
|
</pre>
|
|
|
|
<pre>complexType(
|
|
name = t,
|
|
base = xsi:UrType,
|
|
derivation = restriction,
|
|
refinement = {restriction,extension},
|
|
abstract = false,
|
|
content = @t/b & @t/c
|
|
)
|
|
</pre>
|
|
|
|
<pre>attribute(
|
|
name = -@t/b,
|
|
base = xsi:UrAttribute,
|
|
derivation = restriction,
|
|
refinement = {restriction},
|
|
abstract = false,
|
|
content = @t/b[xsi:string]
|
|
)
|
|
</pre>
|
|
|
|
<pre>attribute(
|
|
name = -@t/c,
|
|
base = xsi:UrAttribute,
|
|
derivation = restriction,
|
|
derivation = {restricition},
|
|
abstract = false,
|
|
content = @t/c[s]{0,1}
|
|
)
|
|
</pre>
|
|
|
|
<pre>complexType(
|
|
name = u,
|
|
base = t,
|
|
derivation = extension,
|
|
refinement = {restriction,extension},
|
|
abstract = false,
|
|
content = (-@t/b & @t/c),
|
|
(u/d | u/e)
|
|
)
|
|
</pre>
|
|
|
|
<pre>element(
|
|
name = u/d,
|
|
base = xsi:UrElement,
|
|
derivation = restriction,
|
|
refinement = {},
|
|
abstract = false,
|
|
content = u/d[u/d/*]
|
|
)
|
|
</pre>
|
|
|
|
<pre>complexType(
|
|
name = u/d/*,
|
|
base = xsi:UrType,
|
|
derivation = restriction,
|
|
refinement = {},
|
|
abstract = false,
|
|
content = u/d/*{0,8}
|
|
)
|
|
</pre>
|
|
|
|
<pre>element(
|
|
name = -u/d/*/a,
|
|
base = xsi:UrElement,
|
|
derivation = restriction,
|
|
refinement = {},
|
|
abstract = false,
|
|
content = u/d/*/a[xsi:string]
|
|
)
|
|
</pre>
|
|
|
|
<pre>element(
|
|
name = -u/e,
|
|
base = xsi:UrElement,
|
|
derivation = restriction,
|
|
refinement = {},
|
|
abstract = false,
|
|
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> 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. 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). Here is the original document in this
|
|
notation:</p>
|
|
|
|
<pre>a[
|
|
@xsi:type["u"],
|
|
@b["zero"],
|
|
@c[1,2],
|
|
d[
|
|
a["three"],
|
|
a["four"]
|
|
]
|
|
]
|
|
</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
|
|
"document" and simply use the term <em>element</em>. The term "this
|
|
document" will continue to refer to the document you are reading.</p>
|
|
|
|
<p><strike>Here is the normalized element:</strike></p>
|
|
|
|
<pre><strike>a[
|
|
@xsi:type["u"],
|
|
@t/b["zero"],
|
|
@t/c[1,2],
|
|
u/d[
|
|
u/d/*/a["three"],
|
|
u/d/*/a["four"]
|
|
]
|
|
] </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. 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[
|
|
u <em>types</em> @t/b[xsi:string <em>types</em> "zero"],
|
|
@t/c[s <em>types</em> 1,2],
|
|
u/d[
|
|
u/d/* <em>types</em> u/d/*/a[xsi:string <em>types</em> "three"],
|
|
u/d/*/a[xsi:string <em>types</em> "four"]
|
|
]
|
|
]
|
|
</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> u <em>types</em> @t/b[xsi:string <em>types</em> "zero"],
|
|
@t/c[s <em>types</em> 1,2],
|
|
u/d[
|
|
u/d/* <em>types</em> u/d/*/a[xsi:string <em>types</em> "three"],
|
|
u/d/*/a[xsi:string <em>types</em> "four"]
|
|
]
|
|
</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> 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. This can be viewed as an <em>intentional</em> description
|
|
of a regular expression. However, we can also provide the full <em>extensional</em>
|
|
description of the regular expression, given a finite set of components. 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 "a" element from our sample schema. Note that "a" has
|
|
declared type "t", and "t" has one subtype, "u".
|
|
Therefore the contents of an "a" are either the contents of "t", with
|
|
an optional xsi:type attribute, or the contents of "u" with an obligatory
|
|
xsi:type attribute with value "u":</p>
|
|
|
|
<p>a[(xsi:type="t"? & @t/b & @t/c) |
|
|
((xsi:type="u" & @t/b & @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. 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. It should also be noted that this
|
|
expression does not follow the single attribution and unambiguity constraints of DTDs or
|
|
Schema. 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. For example, suppose there were an element
|
|
"foo" whose content was just an "a" element, and that there also
|
|
existed an element "f" in the substitution group of "a". The the
|
|
content of the "foo" 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> 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> 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
|
|
"non-namespace" (where items not in a namespace reside) and j range over local
|
|
names. In order to cover the case of naming components that are not in a namespace,
|
|
i may be empty. Using these names we can create unique identifiers for the
|
|
components of a schema. 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"> </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"> </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"> 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 reference | 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"> 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"> </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"> </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"> 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> </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"> </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"></td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td ALIGN="right"><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">|</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>
|
|
<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"> </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> </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"> </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> </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"> </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"> </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"> </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"> 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"> 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"> </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"> 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"> 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>/…/sn<sub>n</sub></td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td><table BORDER="0">
|
|
<TBODY>
|
|
<tr>
|
|
<td NOWRAP="NOWRAP" align="center"> namespace i, symbol names sn<sub>1</sub>,…,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. 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 <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>/…/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"> </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"> </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"> 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 </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"> 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 </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"> 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 </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"> 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"> </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"> </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"> 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"> 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"> </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"> 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> 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"> </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"> </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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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 > DIFFERENCE > %</tt>.</p>
|
|
|
|
<h3><a NAME="section-structures-datatypes">3.3</a> 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>"zero"</tt>.</p>
|
|
|
|
<h3><a NAME="section-structures-groups">3.4</a> 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"> </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"> </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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> 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"> 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"> 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"> 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"> </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"> 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 <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&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>
|
|
</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 < n is always false.</p>
|
|
|
|
<h3><a NAME="section-structures-components">3.5</a> 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"> </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"> </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"> 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> </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"> </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"></td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td ALIGN="right"><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">|</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"></td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td ALIGN="right"><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">|</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>
|
|
<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"> </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> </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"> </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> </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"> </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> </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"> </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"> </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"> 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> </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"> </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> </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"> 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>,…,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"> </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"> </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"> 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> </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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>x</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"> </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>base =</tt> <tt>x</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>g</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"> </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 <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 "tighter"
|
|
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> 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> & 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 (&). 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"> </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"> </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"> 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"> 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"> </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> & ag<sub>2</sub></td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td><table BORDER="0">
|
|
<TBODY>
|
|
<tr>
|
|
<td NOWRAP="NOWRAP" align="center"> 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"> </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"> 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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> </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"> 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"> 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"> </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"> 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"> 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"> 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"> 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"> 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"> </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"> 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"> 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"> 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"> </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"> 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"> 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"> 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"> </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"> 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"> </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"> 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 <a
|
|
HREF="#section-overview-components-examples">2.2.2</a> satisfy these constraints.</p>
|
|
|
|
<h3><a NAME="section-structures-documents">3.7</a> 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"> </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"> </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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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 <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"> </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"> </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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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> Inference rules</h3>
|
|
|
|
<p>Operations such as normalization and matching are described with an inference rule
|
|
notation. Originally developed by logicians [<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 [<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. </p>
|
|
|
|
<p CLASS="rulename">Sequence:</p>
|
|
|
|
<p CLASS="antecedent">d<sub>1</sub> <!-- ∈ --><em>in</em> g<sub>1 </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["two"], 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 ]
|
|
and
|
|
b["two"] <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["two"] <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> 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 <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> |> 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>/…/sn<sub>l</sub> |> 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>/…/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>
|
|
|> 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>/…/sn<sub>l</sub> |> 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 |> <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>
|
|
|> 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 |> a <em>in</em> dom(deref()) <br>
|
|
x <: y</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- a ? y |> 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 |> e <em>in</em> dom(deref()) <br>
|
|
x <: y</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- e ? y |> 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"> </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 |- a ? 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 |- e ? e</p>
|
|
|
|
<p ALIGN="left">An attribute name can be normalized if it corresponds to a known name.</p>
|
|
|
|
<p ALIGN="left">EDITORS NOTE: 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 ? c'<br>
|
|
</p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">Empty Document:</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- e ? e</p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">Sequence:</p>
|
|
|
|
<p CLASS="antecedent">x |- d<sub>1</sub> ? td<sub>1 </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] ? 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] ? 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 <: t'<tt> <br>
|
|
t</tt> |- d ? td</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- e[@xsi:type[t], d] ? e'[t <em>types</em> td]</p>
|
|
|
|
<p>The (<span CLASS="rn">Typed Element</span>) rule uses the relation x < :x',
|
|
which is defined Section <a HREF="#section-refinement-base">5.1</a>.</p>
|
|
|
|
<h2><a NAME="section-refinement">5</a> Derivation</h2>
|
|
|
|
<h3><a NAME="section-refinement-base">5.1</a> Base chain</h3>
|
|
|
|
<p>We write <tt>x <: :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 <: x</p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">Transitive:</p>
|
|
|
|
<p CLASS="antecedent"><br>
|
|
x <: x' x' <: x''</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x <: 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 <: x'</p>
|
|
|
|
<h3><a NAME="section-refinement-extension">5.2</a> Extension</h3>
|
|
|
|
<p>We write <tt>g <:<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 <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 & ag') , eg , eg' < :<sub>ext </sub> ag , eg</p>
|
|
|
|
<p ALIGN="center"> </p>
|
|
|
|
<h3><a NAME="section-refinement-restriction">5.3</a> Restriction</h3>
|
|
|
|
<p>We write <tt>g < :<sub>res</sub> g'</tt> if the instances of group g are a subset of
|
|
the instances of group g'. That is, <tt>g <:<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> Constraints</h3>
|
|
|
|
<p>A schema must satisfy certain constraints on derivation to be well-formed. Define <tt>x
|
|
<:<sub>der</sub> x'</tt> to be <tt>x <:<sub>res</sub> x'</tt> if <tt>der =
|
|
restriction</tt> and <tt>x <:<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 < :<sub>der</sub> deref(x').content</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">|- x</p>
|
|
|
|
<h2><a NAME="section-validation">6</a> Validation</h2>
|
|
|
|
<h3><a name="section-mapping-components">6.1</a> 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.
|
|
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 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 "compiled" version of validation with its "interpreted"
|
|
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 π(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"> </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"> </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"> 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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> </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"> 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"> 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"> 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"> 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"> 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"> </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"> unbounded</td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td> </td>
|
|
<td ALIGN="right"> </td>
|
|
<td align="center"> </td>
|
|
<td> </td>
|
|
<td> </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 < :<i><sub>tk</sub></i>. < :<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> </p>
|
|
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">empty sequence:</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e < :<i><sub>tk</sub></i> e</p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">empty choice:</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">Ø < :<i><sub>tk</sub></i> Ø</p>
|
|
|
|
<p CLASS="rulename">nonempty Sequence:</p>
|
|
|
|
<p CLASS="antecedent">tk<sub>1</sub> < :<sub>tk</sub>g<sub>1</sub> <sub> </sub>
|
|
tk<sub>2</sub> < :<sub>tk</sub> g<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk<sub>1</sub> , tk<sub>2</sub> < :<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> < :<sub>tk</sub>g<sub>1</sub> <sub> </sub>
|
|
tk<sub>2</sub> < :<sub>tk</sub> g<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk<sub>1</sub> | tk<sub>2</sub> < :<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> < :<sub>tk</sub>g<sub>1</sub> <sub> </sub>
|
|
tk<sub>2</sub> < :<sub>tk</sub> g<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk<sub>1</sub> & tk<sub>2</sub> < :<i><sub>tk</sub></i>
|
|
g<sub>1</sub> & g<sub>2</sub></p>
|
|
|
|
<p CLASS="rulename">Group repetition:</p>
|
|
|
|
<p CLASS="antecedent">tk < :<i><sub>tk</sub></i> g<sub> </sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk{m,n} < :<i><sub>tk</sub></i> g{m,n}</p>
|
|
|
|
<p CLASS="rulename">attribute nameset:</p>
|
|
|
|
<p CLASS="antecedent">tk < :<i><sub>tk</sub></i> ag <sub> </sub>
|
|
w = w' UNION {a} <sub> </sub> tk' < :<i><sub>tk</sub></i>
|
|
w'[tk]</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">@a[tk] | tk' < :<i><sub>tk</sub></i> @w[ag]</p>
|
|
|
|
<p CLASS="rulename">element nameset:</p>
|
|
|
|
<p CLASS="antecedent">tk < :<i><sub>tk</sub></i> eg <sub> </sub>
|
|
w = w' UNION {e} <sub> </sub> tk' < :<i><sub>tk</sub></i>
|
|
w'[tk]</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e[tk] | tk' < :<i><sub>tk</sub></i> w[eg]</p>
|
|
|
|
<p CLASS="rulename">mixed content:</p>
|
|
|
|
<p CLASS="antecedent">tk<sub>1</sub> < :<sub>tk </sub>mixed(eg<sub>1</sub>) <sub> </sub>
|
|
tk<sub>2</sub> < :<sub>tk</sub> mixed(eg<sub>2</sub>)<sub> </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} < :<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"> </p>
|
|
|
|
<p CLASS="rulename">Model group component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x)..content = eg <sub> </sub>
|
|
tk < :<sub>tk</sub> eg <sub> </sub> x.srt =
|
|
modelGroup</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="rulename">Attribute group component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x)..content = ag <sub> </sub>
|
|
tk < :<sub>tk</sub> ag <sub> </sub> x.srt =
|
|
attributeGroup</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="rulename">Element component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x)..content = c <sub> </sub>
|
|
tk < :<sub>tk</sub> w[tk'] <sub> </sub> tk' <
|
|
:<sub>tk</sub> c</p>
|
|
|
|
<p CLASS="antecedent">w = {y s.t. <sub> </sub> y <: x <sub> </sub>
|
|
deref(y).abstract = <tt>false</tt> <sub> </sub>
|
|
y.srt = element}</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">attribute component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x)..content = c <sub> </sub>
|
|
tk < :<sub>tk</sub> c <sub> </sub> x.srt = group</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">@x[tk] < :<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> <sub> </sub>
|
|
deref(x)..content = c <sub> </sub> tk <
|
|
:<sub>tk</sub> c <sub> </sub> x.srt =
|
|
<tt>complexType</tt></p>
|
|
|
|
<p CLASS="antecedent">There is no y s.t. <sub> </sub> y <:
|
|
x </p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="consequent"> </p>
|
|
|
|
<p CLASS="rulename">unsubtyped abstract complex Type component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x).content != abstract <sub> </sub>
|
|
deref(x)..content = c <sub> </sub> tk <
|
|
:<sub>tk</sub> c <sub> </sub> x.srt =
|
|
<tt>complexType</tt></p>
|
|
|
|
<p CLASS="antecedent">There is no y s.t. <sub> </sub> y <:
|
|
x</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">Ø < :<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"> tk < :<sub>tk</sub> deref(x)..content <sub> </sub>
|
|
x.srt = <tt>complexType</tt> <sub> </sub> deref(x).abstract
|
|
= <tt>false</tt></p>
|
|
<p CLASS="antecedent"> sk<sub>1</sub> < :<sub>tk</sub> deref(y<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>sk<sub>m</sub>
|
|
< :<sub>tk</sub> deref(y<sub>m</sub>)..content</p>
|
|
<p CLASS="antecedent">rk<sub>1</sub> < :<sub>tk</sub> deref(z<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>rk<sub>n</sub>
|
|
< :<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> ))) < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="consequent"> </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"> tk < :<sub>tk</sub> deref(x)..content <sub> </sub>
|
|
x.srt = <tt>complexType</tt> <sub> </sub> deref(x).abstract
|
|
= <tt>true</tt></p>
|
|
<p CLASS="antecedent"> sk<sub>1</sub> < :<sub>tk</sub> deref(y<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>sk<sub>m</sub>
|
|
< :<sub>tk</sub> deref(y<sub>m</sub>)..content</p>
|
|
<p CLASS="antecedent">rk<sub>1</sub> < :<sub>tk</sub> deref(z<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>rk<sub>n</sub>
|
|
< :<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> )) < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="consequent"> </p>
|
|
|
|
<p CLASS="rulename">unsubtyped concrete simple Type component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x).content =
|
|
<tt>false</tt> <sub> </sub>
|
|
deref(x)..content = c <sub> </sub> tk <
|
|
:<sub>tk</sub> c <sub> </sub> x.srt =
|
|
<tt>simpleType</tt></p>
|
|
|
|
<p CLASS="antecedent">There is no y s.t. <sub> </sub> y <:
|
|
x </p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">tk < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="consequent"> </p>
|
|
|
|
<p CLASS="rulename">unsubtyped abstract simple Type component:</p>
|
|
|
|
<p CLASS="antecedent">deref(x).content != abstract <sub> </sub>
|
|
deref(x)..content = c <sub> </sub> tk <
|
|
:<sub>tk</sub> c <sub> </sub> x.srt =
|
|
<tt>simpleType</tt></p>
|
|
|
|
<p CLASS="antecedent">There is no y s.t. <sub> </sub> y <:
|
|
x</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">Ø < :<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"> tk < :<sub>tk</sub> deref(x)..content <sub> </sub>
|
|
x.srt = <tt>complexType</tt> <sub> </sub> deref(x).abstract
|
|
= <tt>false</tt></p>
|
|
<p CLASS="antecedent">rk<sub>1</sub> < :<sub>tk</sub> deref(z<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>rk<sub>n</sub>
|
|
< :<sub>tk</sub> deref(z<sub>n</sub>)..content</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent"> tk | rk<sub>1</sub>
|
|
| ... | rk<sub>n</sub> < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="consequent"> </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"> tk < :<sub>tk</sub> deref(x)..content <sub> </sub>
|
|
x.srt = <tt>complexType</tt> <sub> </sub> deref(x).abstract
|
|
= <tt>true</tt></p>
|
|
<p CLASS="antecedent">rk<sub>1</sub> < :<sub>tk</sub> deref(z<sub>1</sub>)..content <sub> ...</sub> <sub> </sub>rk<sub>n</sub>
|
|
< :<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> < :<i><sub>tk</sub></i> x</p>
|
|
|
|
<p CLASS="rulename">Primitive Atomic datatype:</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">π(p) < :<i><sub>tk</sub></i> p</p>
|
|
|
|
<h3><a NAME="section-validation-content">6.2</a> 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 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 </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 |?<sub>unmix</sub> e</p>
|
|
|
|
<p CLASS="rulename">Unmix Sequence:</p>
|
|
|
|
<p CLASS="antecedent">d<sub>1</sub> |?<sub>unmix</sub>d'<sub>1</sub> <sub> </sub>
|
|
d<sub>2</sub> |?<sub>unmix</sub> d'<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d<sub>1</sub> , d<sub>2</sub> |?<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] |?<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 |?<sub>unmix</sub> e</p>
|
|
|
|
<p>We write <tt><em>d</em> |?<sub>inter</sub> <em>d</em>'<em>;d''</em></tt> (read "<em>d</em>
|
|
interleaves <em>d'</em> and <em>d''</em> ") if some interleaving of <em>d'</em> and <em>d''</em>
|
|
yields <em>d</em>. This relates one sequence to many pairs of sequences. This
|
|
is used for processing <tt><em>g<sub>1</sub></em> &<em>g<sub>2</sub>.</em></tt></p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">Interleave Empty:</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e |?<sub>inter</sub> e;e</p>
|
|
<!-- Rule -->
|
|
|
|
<p CLASS="rulename">Interleave Sequence:</p>
|
|
|
|
<p CLASS="antecedent">d<sub>1</sub> |?<sub>inter</sub>d'<sub>1</sub>;d"<sub>1
|
|
</sub> d<sub>2</sub> |?<sub>inter</sub> d'<sub>2</sub>;d"<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d<sub>1</sub> , d<sub>2</sub> |?<sub>inter</sub> d'<sub>1</sub>
|
|
, d'<sub>2</sub> ;d"<sub>1</sub>,d"<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 |?<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 |?<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 <em>in</em> e</p>
|
|
|
|
<p CLASS="rulename">Sequence:</p>
|
|
|
|
<p CLASS="antecedent">d<sub>1</sub> <em>in</em> g<sub>1</sub> <sub> </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 CLASS="rulename">Choice 1:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> g<sub>1</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d <em>in</em> g<sub>1</sub> | g<sub>2</sub></p>
|
|
|
|
<p CLASS="rulename">Choice 2:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> g<sub>2</sub></p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d <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"<sub>2</sub>
|
|
d<sub>1</sub> <em>in</em> g<sub>1 </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> & g<sub>2</sub></p>
|
|
|
|
<p CLASS="rulename">Repetition 1:</p>
|
|
|
|
<p CLASS="antecedent">d<sub>1</sub> <em>in</em> g<sub> </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> <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> </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> <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 <em>in</em> g{0,n}</p>
|
|
|
|
<p CLASS="rulename">Attribute:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> g a <em>in</em><sub>w</sub>w
|
|
deref(a).content=g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">a[d] <em>in</em> @w</p>
|
|
|
|
<p CLASS="rulename">Element:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> g e <em>in</em><sub>w</sub>w
|
|
deref(e).content=g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e[d] <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] <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] <em>in</em> w%skip</p>
|
|
|
|
<p CLASS="rulename">Mixed Group:</p>
|
|
|
|
<p CLASS="antecedent">d |?<sub>unmix</sub> d' d' <em>in</em> g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d <em>in</em> mixed(g}</p>
|
|
|
|
<p CLASS="rulename">Typed Attribute:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> s</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e[s <em>types</em> d] <em>in</em> e[s]</p>
|
|
|
|
<p CLASS="rulename">Typed Element:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> t t <: t'</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">e[t <em>types</em> d] <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 <em>in</em> p</p>
|
|
|
|
<p CLASS="rulename">Element Refinement:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> e e <: e'</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d <em>in</em> e'</p>
|
|
|
|
<p CLASS="rulename">Component Name:</p>
|
|
|
|
<p CLASS="antecedent">d <em>in</em> g g = deref(x).content</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">d <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 < :x', which is defined in Section <a
|
|
HREF="#section-refinement-base">5.1</a>. The check that t < :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> 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 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) 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>! 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>! 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>! 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>) 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>) 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> XML Schema to Formalization Mapping</h2>
|
|
|
|
<p>EDITOR'S NOTE: Future versions of this document will contain a mapping from the
|
|
XML Schema components described in [<a HREF="#xsd1">11</a>] to sorts. 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><schema></tt>
|
|
elements accepted for either). 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"> </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"> </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"> 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"> 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"> 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"> 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"> </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">all[ag , eg]</td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td><table BORDER="0">
|
|
<TBODY>
|
|
<tr>
|
|
<td NOWRAP="NOWRAP" align="center"> 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"> </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">choice[ag , eg]</td>
|
|
</tr>
|
|
</TBODY>
|
|
</table>
|
|
</td>
|
|
<td><table BORDER="0">
|
|
<TBODY>
|
|
<tr>
|
|
<td NOWRAP="NOWRAP" align="center"> 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"> 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"> 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> 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>&...&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>&...&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 |> 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 |> 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] -? 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 , ev<sub>1</sub>,...,ev<sub>n</sub>]
|
|
? deref(x |> 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 , eg] -? deref( x |> 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> 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 |> n<br>
|
|
y |- cm -? elems y |- am -? atts</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- 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 = 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 |> n<br>
|
|
z = deref(x |> p)<br>
|
|
x.content = (am<sub>2</sub> ,cm<sub>2</sub>)<br>
|
|
y |- cm -? cont y |- am -? atts</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- complexType[@abstract[a] , @final[f] , @block[b] ,<br>
|
|
@mixed[m] , @name[n] , <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 = 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 |> n<br>
|
|
z = deref( x |> p)<br>
|
|
x.content = (am<sub>2</sub> ,cm<sub>2</sub>)<br>
|
|
y |- cm -? cont y |- am -? atts</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- complexType[@abstract[a] , @final[f] , @block[b] ,<br>
|
|
@mixed[m] , @name[n] , <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 = 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 |> n<br>
|
|
z = deref( x |> p)<br>
|
|
x.content = (st<sub>2</sub> ,am<sub>2</sub>)<br>
|
|
y |- st -? simp y |- am -? attrs</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- complexType[@abstract[a] , @final[f , @block[b] ,<br>
|
|
@mixed[m] , @name[n] , <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 = 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 |> n<br>
|
|
y |- mg --> g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- group[@name[n], mg] <br>
|
|
=? modelGroup(name = y,<br>
|
|
base = AnyGroup,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = false<br>
|
|
content = g)</p>
|
|
|
|
<p CLASS="rulename">Map Attribute Group Definition</p>
|
|
|
|
<p CLASS="antecedent">y = x |> n<br>
|
|
y |- mg --> g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- attributeGroup[@name[n], mg] <br>
|
|
=? attributeGroup(name = y,<br>
|
|
base = AnyGroup,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = false<br>
|
|
content = g)</p>
|
|
|
|
<p CLASS="rulename">Map Global Element 1:</p>
|
|
|
|
<p CLASS="antecedent">y = x |> n<br>
|
|
z = x |> s<br>
|
|
c = deref( x |> t)<br>
|
|
c <em>in</em> complex</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- element[@abstract[a] , @final[f , @block[b] , @name[n]
|
|
, <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 = 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 |> n<br>
|
|
z = x |> s<br>
|
|
y |- t ? c</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- element[@abstract[a] , @final[f , @block[b] , @name[n]
|
|
, @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 = 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 |> n<br>
|
|
c = x |> t</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- element[@default[d], @fixed[i] , @name[n] ,
|
|
@form[o] , <br>
|
|
@maxOccurs[m] , @minOccurs[n] , @nullable[u], @type[t]]<br>
|
|
=? element(name = y,<br>
|
|
base = AnyElement,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = 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 |> n<br>
|
|
y |- t ? c</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- element[@default[d], @fixed[i] , @name[n] ,
|
|
@form[o] , <br>
|
|
@maxOccurs[m] , @minOccurs[n] , @nullable[u], t]<br>
|
|
=? element(name = y,<br>
|
|
base = AnyElement,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = 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 |> n<br>
|
|
c = x |> t</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">x |- attribute[@name[nd], @form[o] , @type[tn] , @use[u]
|
|
, @value[v]]<br>
|
|
=? attribute(name = y,<br>
|
|
base = AnyAttribute,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = 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 |> n<br>
|
|
y |- s ? c</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent" ALIGN="center">x |- attribute[@name[nd], @form[o] ,
|
|
@use[u] , @value[v], s]<br>
|
|
? attribute(name = y,<br>
|
|
base = AnyAttribute,<br>
|
|
derivation = restriction,<br>
|
|
refinement = {},<br>
|
|
abstract = 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 ~> 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 |> n |- t ~> t' <br>
|
|
e ~> 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>
|
|
~> <br>
|
|
element(name= u|>n<br>
|
|
abstract= a<br>
|
|
base= if e' = null then UrElement else e'.name<br>
|
|
content= u|>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 |> n <br>
|
|
y |- t ~> 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>
|
|
~> <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 |> n <br>
|
|
b ~> b' <br>
|
|
y |- a ~> a' <br>
|
|
y |- g ~> 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>
|
|
~> <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 ~> s' <br>
|
|
n' = t |> 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>
|
|
~> <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 ~> s' <br>
|
|
n' = x |> 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>
|
|
~> <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 ~> g_1 <br>
|
|
... <br>
|
|
x|- p_n ~> 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>
|
|
~><br>
|
|
(g_1 , ... , g_n) <br>
|
|
</p>
|
|
|
|
<p CLASS="rulename">Model Group - Choice</p>
|
|
|
|
<p CLASS="antecedent">{x|- p_1 ~> g_1 <br>
|
|
... <br>
|
|
x|- p_n ~> 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>
|
|
~><br>
|
|
(g_1 | ... | g_n) <br>
|
|
</p>
|
|
|
|
<p CLASS="rulename">Model Group - All</p>
|
|
|
|
<p CLASS="antecedent">{x|- p_1 ~> g_1 <br>
|
|
... <br>
|
|
x|- p_n ~> 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>
|
|
~><br>
|
|
(g_1 & ... & g_n) <br>
|
|
</p>
|
|
|
|
<p CLASS="rulename">Particle</p>
|
|
|
|
<p CLASS="antecedent">x|- t ~> g</p>
|
|
|
|
<hr CLASS="rule" WIDTH="50%">
|
|
|
|
<p CLASS="consequent">{x |- particle( <br>
|
|
minOccurs= m <br>
|
|
maxOccurs= n <br>
|
|
term= t) <br>
|
|
~> <br>
|
|
g{m,n} <br>
|
|
</p>
|
|
|
|
<h2><a NAME="section-index">8</a> 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> &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> </dd>
|
|
<dd>turnstile (§<a HREF="#section-normalization">4</a>,§<a href="#section-refinement-restriction">5.4</a>) </dd>
|
|
<dt><strong>x<sub>1</sub> |> 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 < :x'</b> </dt>
|
|
<dd>derivation (§<a HREF="#section-refinement-base">5.1</a>) </dd>
|
|
<dt><b>g < :<sub>ext</sub>g'</b> </dt>
|
|
<dd>extension (§<a HREF="#section-refinement-extension">5.2</a>) </dd>
|
|
<dt><b>g < :<sub>res</sub>g'</b> </dt>
|
|
<dd>restriction (§<a HREF="#section-refinement-extension">5.2</a>) </dd>
|
|
<dt><b>x < :<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"> </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"> </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"> 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> </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"> </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> </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"> </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> </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"> </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> </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"> </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> </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"> </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> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>t</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"> </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>base =</tt> <tt>t</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>ag,eg</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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>e</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"> </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>base =</tt> <tt>e</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>e[t]</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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>an</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"> </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>base =</tt> <tt>an</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>ag</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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>mn</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"> </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>base =</tt> <tt>mn</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>eg</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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>a</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"> </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>base =</tt> <tt>a</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>a[p]</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"> </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"> </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"> </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"> 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( </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"> </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>name =</tt> <tt>t</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"> </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>base =</tt> <tt>t</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"> </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>derivation =</tt> <tt>der</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"> </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> <tt>ders</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"> </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>abstract =</tt> <tt>b</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"> </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>content =</tt> <tt>p</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"> </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, "Algorithms for Finding Patterns in
|
|
Strings", <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, "Begriffsschrift, a formula
|
|
language, modeled upon that of arithmetic, for pure thought (1879)", <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,
|
|
"Regular Expression Types for XML", <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, "Type Inference for
|
|
Queries on Semistructured Data", <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, "A formal semantics of patterns in
|
|
XSLT", <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, "New Language, Old Logic", <em>Dr
|
|
Dobbs Journal</em>, December, 2000 </small></p>
|
|
|
|
<p><small><a NAME="tolr8">[14]</a> Allen L. Brown, Jr., "Derivation, tolerance and
|
|
validity: a formal model of type definition in XML Schemas", <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 & Wiksell, Stockholm, 1965, </small></p>
|
|
|
|
<p><small><a NAME="logic">[17]</a> Solomon Feferman, "Theories of Finite Type Related
|
|
to Mathematical Practice", <em>Handbook of Mathematical Logic</em>, ed. Jon Barwise,
|
|
Elsevier North Holland, Amsterdam, 1977 </small></p>
|
|
</body>
|
|
</html>
|