<?xml version='1.0'?>
<?xml:stylesheet type='text/xsl' href='xmlschema.msxsl'?>
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification::19990205//EN" "xmlspec-19990429.dtd" [
  <!ENTITY % versionEntities SYSTEM "versionInfo.ent">
  %versionEntities; <!-- get path and date entities -->
 <!ENTITY cellback '#d0d9fa'>
 <!ENTITY cellfront '#bedce6'>
 <!ENTITY xmlspec "http://www.w3.org/TR/REC-xml">
 <!ENTITY xmlnsspec "http://www.w3.org/TR/REC-xml-names/">
 <!ENTITY xslspec "http://www.w3.org/TR/xsl/">
 <!ENTITY xmlinfosetspec "http://www.w3.org/TR/xml-infoset">
 <!ENTITY xsdl "&XSP1.base;/">
 <!ENTITY rdfschspec "http://www.w3.org/TR/PR-rdf-schema/">
 <!ENTITY SchemaWG "<loc href='http://www.w3.org/XML/Activity#schema-wg'>W3C XML Schema Working Group</loc>">

 <!ENTITY year "&draft.year;">
 <!ENTITY mm "&draft.MM;">
 <!ENTITY MM "&draft.month;">
 <!ENTITY dd "&draft.DD;">
 <!ENTITY MMDD "&mm;&dd;">
 <!ENTITY iso.doc.date "&year;&MMDD;">

 <!ENTITY thisversion "&draft.base;/">
 <!ATTLIST eg text CDATA #IMPLIED> <!-- experimental pointer to out-of-line
                                        example text -->
 <!ENTITY order "&#163;">
 <!ENTITY le "&#8804;"> <!-- less than or equal to, U+2264 ISOtech -->
 <!ENTITY ne "&#8800;"> <!-- not equal to, U+2260 ISOtech -->
 <!ENTITY infin "&#8734;"> <!-- infinity, U+221E ISOtech -->
 <!ENTITY times "&#215;"> <!-- multiplication, U+00D7 -->
 <!ENTITY sect   "&#xa7;">

<!-- we'll see if anyone has a sense of humor -->
<!-- note: I tried to do this with conditional sections,
     but XT seems to get confused and reports a syntax error -->
<!ENTITY % sense-of-humor "INCLUDE">
<!ENTITY % no-sense-of-humor "IGNORE">
<!--
<![%sense-of-humor[
 <!ENTITY long "Homer">
 <!ENTITY int "Sideshow-Bob">
 <!ENTITY short "Bart">
 <!ENTITY byte "Troy-McClure">
 <!ENTITY unsigned-long "Apu-Nahasapeemapetilon">
 <!ENTITY unsigned-int "Chief-Wiggums">
 <!ENTITY unsigned-short "Mr-Burns">
 <!ENTITY unsigned-byte "Krusty-the-Clown">
-->
<!--
 ]]>
<![%no-sense-of-humor[
-->
 <!ENTITY long "long">
 <!ENTITY int "int">
 <!ENTITY short "short">
 <!ENTITY byte "byte">
 <!ENTITY unsigned-long "unsigned-long">
 <!ENTITY unsigned-int "unsigned-int">
 <!ENTITY unsigned-short "unsigned-short">
 <!ENTITY unsigned-byte "unsigned-byte">
<!--
 ]]> 
-->

   <!ELEMENT propdef ANY> <!-- best we can do without editing xml-spec -->
   <!ATTLIST propdef id ID #REQUIRED
                     name CDATA #REQUIRED>
   <!ELEMENT propref EMPTY>
   <!ATTLIST propref ref IDREF #REQUIRED>
   <!ELEMENT xpropref (#PCDATA)>
   <!ATTLIST xpropref href CDATA #IMPLIED>
   <!ELEMENT compdef (proplist)>
   <!ATTLIST compdef name CDATA #REQUIRED
                     ref IDREF #REQUIRED>
   <!ELEMENT proplist (propdef*)>
   <!ELEMENT reprdef (reprcomp*)>
   <!ATTLIST reprdef eltname NMTOKENS #REQUIRED
                     local NMTOKEN #IMPLIED>
   <!ELEMENT reprcomp (reprdep?,propmap*)>
   <!ATTLIST reprcomp ref IDREF #REQUIRED
                      abstract CDATA #REQUIRED>
   <!ELEMENT reprdep ANY> <!-- best we can do without editing xml-spec -->
    <!ELEMENT propmap ANY> <!-- best we can do without editing xml-spec -->
   <!ATTLIST propmap name IDREF #REQUIRED>
   <!ELEMENT eltref EMPTY>
   <!ATTLIST eltref ref NMTOKEN #REQUIRED>
   <!ELEMENT stale ANY>
   <!ELEMENT dtref EMPTY>
   <!ATTLIST dtref ref NMTOKEN #REQUIRED>   
   <!ENTITY % local.p.class "|stale|facets|subtypes|inverse-facets|open-issues|revisions">
   <!ENTITY % local.termdef.class "|propdef">
   <!ENTITY % local.ref.class "|propref|xpropref|eltref|dtref">
   <!ENTITY % local.illus.class "|compdef|reprdef|proplist">
   <!ENTITY i-attribute "<xpropref href='http://www.w3.org/TR/xml-infoset#infoitem.attribute'>attribute</xpropref>">
   <!ENTITY i-children "<xpropref href='http://www.w3.org/TR/xml-infoset#infoitem.element'>children</xpropref>">
   <!ENTITY i-attributes "<xpropref href='http://www.w3.org/TR/xml-infoset#infoitem.element'>attributes</xpropref>">
   <!ENTITY i-attrChildren "<xpropref href='http://www.w3.org/TR/xml-infoset#infoitem.attribute'>children</xpropref>">
   <!ENTITY i-value "<xpropref href='http://www.w3.org/TR/xml-infoset#infoitem.attribute'>value</xpropref>">
   <!ENTITY i-ccode "<xpropref
href='http://www.w3.org/TR/xml-infoset#infoitem.character'>character code</xpropref>">

	<!ELEMENT facets EMPTY>
	<!ELEMENT subtypes EMPTY>
	<!ELEMENT inverse-facets EMPTY>
	<!ATTLIST inverse-facets
		name CDATA #REQUIRED>
	<!ELEMENT open-issues EMPTY>
	<!ELEMENT revisions EMPTY>
	
	<!ATTLIST table
		align CDATA #IMPLIED
		bgcolor CDATA #IMPLIED>
	]>
<spec>
<header>
<title>XML Schema Part 2: Datatypes</title>
<version></version>
    <w3c-designation>&WD-XSP2;-&iso.doc.date;</w3c-designation>
    <w3c-doctype>W3C Working Draft</w3c-doctype>
<pubdate><day>&dd;</day><month>&MM;</month><year>&year;<!--
Point release id: <code>$Id: datatypes.xml,v 1.29.2.5 2000/02/25 02:52:28 ht Exp $</code>--></year></pubdate>
<notice role="publoc">
<p>	(in <loc href='&XSP2.URI;.xml'>XML</loc> and
<loc href='&XSP2.base;/'>HTML</loc>,	with a
<loc href='&XSP2.URI;.xsd'>schema</loc> and
<loc href='&XSP2.URI;.dtd'>DTD</loc> for datatype definitions,
as well as a <loc href='&XSP2.base;/builtins.xsd'>schema</loc>
for built-in datatypes only.)
</p>
</notice>
<publoc>
	<loc href='&XSP2.base;/'>
	&XSP2.base;/</loc>
<!--
	(in <loc href='&XSP2.URI;.xml'>XML</loc> and
<loc href='&XSP2.URI;.html'>HTML</loc>,
	with accompanying <loc href='&XSP2.URI;.xsd'>schema</loc> and <loc href='&XSP2.URI;.dtd'>DTD</loc>)
 -->
</publoc>
<prevlocs>
	<loc href='http://www.w3.org/TR/1999/WD-xmlschema-2-19991217/'>
		http://www.w3.org/TR/1999/WD-xmlschema-2-19991217/
	</loc>
    <loc href="http://www.w3.org/TR/1999/WD-xmlschema-2-19991105/">http://www.w3.org/TR/1999/WD-xmlschema-2-19991105/</loc>
    <loc href='http://www.w3.org/TR/1999/WD-xmlschema-2-19990924/'>http://www.w3.org/TR/1999/WD-xmlschema-2-19990924/</loc>
	<loc href='http://www.w3.org/1999/05/06-xmlschema-2/'>
	http://www.w3.org/1999/05/06-xmlschema-2/</loc>
</prevlocs>
<latestloc>

	<loc href='http://www.w3.org/TR/xmlschema-2/'>http://www.w3.org/TR/xmlschema-2/</loc>

</latestloc>
<authlist>
<author>
<name>Paul V. Biron</name>
<affiliation>Kaiser Permanente, for Health Level Seven</affiliation>
<email href='mailto:Paul.V.Biron@kp.org'>Paul.V.Biron@kp.org</email>
</author>
<author>
<name>Ashok Malhotra</name>
<affiliation>IBM</affiliation>
<email href='mailto:petsa@us.ibm.com'>petsa@us.ibm.com</email>
</author>
</authlist>
    <status>
<p>This is a public working draft of XML Schema 1.0 for review by the
public and by members of the World Wide Web Consortium.
</p><p>
It has been reviewed by the XML Schema Working Group, and the Working
Group has agreed to its publication.  The WG believes this draft to be
`feature-complete': the functionality included here is substantially
complete and is expected to be stable.  We do not expect to add major
new functionality, or to make major changes to the functionality
described in this draft.  Some sections of the draft (in particular
those on conformance), and some aspects of the design (in particular
details of the transfer syntax for schemas), on the other hand, are
still rough and are expected to be revised.
</p><p>
Following a period of review and polishing, it is the WG's intent
to issue a Last Call for Review by other W3C working groups sometime
during March, 2000, and to submit this specification thereafter for publication as a Candidate Recommendation.  This schedule
may vary, depending on the comments of the public and of other W3C
working groups on this draft.  Such comments are instrumental in the
WG's deliberations, and we encourage readers to review the draft and send comments to
        <loc
         href="http://lists.w3.org/Archives/Public/www-xml-schema-comments/">www-xml-schema-comments@w3.org</loc>
(<loc href='http://lists.w3.org/Archives/Public/www-xml-schema-comments/'>archive</loc>).   
</p><p>
Although the Working Group does not anticipate further substantial
changes to the functionality described here, this is still a working
draft, subject to change based on experience and on comment by the
public and other W3C working groups.  The present version should
be implemented only by those interested in providing a check on
its design or by those preparing for an implementation of the
Candidate Recommendation.  <emph>The Schema WG will not
allow early implementation to constrain its ability to make changes to
this specification prior to final release.</emph>
</p>
<p>
A list of current W3C working drafts can be found at
<loc href='http://www.w3.org/TR/'>http://www.w3.org/TR/</loc>. 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>
<!--
<ednote>
	<edtext>
  -->
<p>
Several "note types" are used throughout this draft:
</p>
<glist>
		<gitem><label>issue [Issue (issue-name): ]</label>
			<def>
			<p>something on which the editors are seeking comment.</p>
			</def>
		</gitem>
		<gitem><label>editorial note [Ed. Note: ]</label>
			<def>
				<p>something the editors wish to call to the attention of the
				reader. To be removed prior to the recommendation becoming final.</p>
			</def>
		</gitem>
		<gitem><label>note [Note: ]</label>
			<def>
				<p>something the editors wish to call to the attention of the reader.
				To remain in the final recommendation.</p>
			</def>
		</gitem>
	</glist>
<!--
	</edtext>
</ednote>
-->
</status>
<abstract>
<p>
XML Schema: Datatypes is part 2 of a two-part draft of the specification for the
XML Schema definition language. This document proposes facilities for 
defining datatypes to be used
in XML Schemas and other XML specifications.
The datatype language, which is itself represented in XML 1.0, provides a superset
of the capabilities found in XML 1.0 document type definitions (DTDs) for specifying
datatypes on elements and attributes.
</p>
</abstract>
<langusage>
<language id='EN'>English</language>
</langusage>
<revisiondesc>
<slist>
<!--
     commenting these out means only that they won't show up in the stylesheet
	 generated "Revisions from previous draft" appendix
  -->
<!-- Changes before Sept public draft commented out...
<sitem>
19990521: PVB: corrected definition of length and maxlengths facet for strings to
be in terms of <emph>characters</emph> not <emph>bytes</emph>
</sitem>
<sitem>
19990521: PVB: removed issue "other-date-representations".  We don't
want other separators, left mention of aggregate reps for dates as
an ednote.
</sitem>
<sitem>
19990521: PVB: fixed "holidays" example, "-0101" ==> "==0101"
(where == in the correction should be two hyphens, but that would
not allow us to comment out this sitem)
</sitem>
<sitem>
19990521: PVB: fixed "common date" example, lexicalRepresenation ==> lexicalRepresentation
</sitem>
<sitem>
19990521: PVB: added note that -YY-MM-DD style dates are deprecated
</sitem>
<sitem>
19990521: PVB: added termdef element around definition of subtype
</sitem>
<sitem>
19990521: PVB: removed "whose basetype is a built-in" from definition of
"user-generated" datatype
</sitem>
<sitem>
19990521: PVB: clarified that the length facet for binary datatype is
length in bytes
</sitem>
<sitem>
19990521: PVB: fixed weird spacing problems introduced by ArborText
</sitem>
<sitem>
19990521: PVB: fixed references to non-terminals in productions
</sitem>
<sitem>
19990524: AM: changed "boolean" to have a single lexical representation.
</sitem>
<sitem>
19990524: AM: added issue: "should we add a facet to restrict a binary
datatype to a user-defined format such as audio, image, etc."
</sitem>
<sitem>
19990524: AM: corrected reference to SQL standard.
</sitem>
<sitem>
19990524: AM: corrected definition of length and maximum length
facets to be a positive integer.
</sitem>
<sitem>
19990524: AM: corrected default format for integer, decimal and real.
</sitem>
<sitem>
19990524: AM: rewrote issue definition-overiding.
</sitem>
<sitem>
19990524: AM: edited Conformance section to add example of lexical
errors and fix reference to above issue.
</sitem>
<sitem>
19990601: PVB: changed date formats in examples of Section 1 to be conformant
with the date datatype
</sitem>
<sitem>
19990601: PVB: added a "for compatibility" terminology entry
</sitem>
<sitem>
19990601: PVB: added a Name datatype and redefined the XML 1.0 attribute types
in terms of it
</sitem>
<sitem>
19990601: PVB: remove "for attributes only" restriction on XML 1.0  attribute types.
Added a "for compatibility" clause for attribute values.
</sitem>
<sitem>
19990601: PVB: added language datatype
</sitem>
<sitem>
19990602: PVB: added uuid datatype
</sitem>
<sitem>
19990602: PVB: added NCName datatype
</sitem>
<sitem>
19990604: AM: changed date and time formats to allow only ISO 8601
extended format. Impacted sections on the date, time datatypes,
section 4, Appendix C.
</sitem>
<sitem>
19990604: AM: added ednote to string datatype saying we need to harmonize
with I18N character model.
</sitem>
<sitem>
19990604: PVB: added "Revisions from previous draft" appendix
</sitem>
<sitem>
19990604: PVB: moved "built-in generated" datatype definitions into the
schema for datatype definitions (instead of it being in its own appendix).
</sitem>
<sitem>
19990604: PVB: upadted the schema for datatype definitions to point to
the correct (per xmlschema-1) DTD and schema
</sitem>
<sitem>
19990623: AM: added paragraph to conformance section which begins
to be more precise about how conforming processors should behave
</sitem>
<sitem>
19990623: AM: removed confusing statement from conformance section
which said that " checking for lexical conformance is all that is
expected of an XML processor."
</sitem>
<sitem>
19990623: PVB: removed section on "Characterizing Operations" and
all references to it (or its content) in the rest of the draft.
</sitem>
<sitem>
19990623: PVB: removed uuid datatype
</sitem>
<sitem>
19990623: PVB: made NMTOKEN a primitive datatype and Name a
subtype of NMTOKEN.
</sitem>
<sitem>
19990623: PVB: corrected the basetypes of following XML-related
generated datatypes: IDREFS (from ID to IDREF), ENTITY (from ID to Name),
ENTITIES (from ID to ENTITY), NMTOKENS (from Name to NMTOKEN).
</sitem>
<sitem>
19990623: PVB: changed name of section "User-Generated Datatypes" to
the more correct "Defining Generated Datatypes".  Also added some
explanatory text to the beginning of that section which explains
that the abstract syntax there is used both for defining built-in
and user-generated datatypes.
</sitem>
<sitem>
19990623: PVB: added explanations of abstract and concrete
syntax (mostly borrowed from the structural draft) to section
"Defining Generated Datatypes".
</sitem>
<sitem>
19990623: PVB: separated references into those that are normative
and those that are non-normative
</sitem>
<sitem>
19990623: PVB: added a pointer to the draft revision of ISO 8601
in its bib entry
</sitem>
<sitem>
19990623: PVB: added "no-consensus" issues to those all sections
except "Type System" and "Built-in datatypes" stating that no WG
concensus has been reached on the section (the exclusions above
are because those sections which granted consensus status at the
Ann Arbor f2f)
</sitem>
<sitem>
19990623: PVB: cleaned up productions for numeric literals
</sitem>
<sitem>
19990624: PVB: excluded subsections 1.1 and 1.2 from the "no-consusus"
issue for section 1
</sitem>
<sitem>
19990630: PVB: removed number datatype, made real into a built-in
primitive, changed the basetype of decimal to real and the basetype
of integer to decimal.  Also added NaN, INF and -INF to the lexical
space of all numeric types.
</sitem>
<sitem>
19990630: PVB: added 2 new subtypes of integer: non-positive-integer
and non-negative-integer, each of which has 1 subtype: negative-integer
and positive-integer, respectively.  Added generated datatype definitions
for these to the schema for datatypes.
</sitem>
<sitem>
19990630: PVB: fixed typos in definition of IDREF and IDREFS
(was "the lexical space of ID is .." now "the lexical space of IDREF is ...")
</sitem>
<sitem>
19990630: PVB: added issue(non-negative-integer-literals)
</sitem>
<sitem>
19990630: PVB: added links to known subtypes in all datatype
descriptions
</sitem>
<sitem>
19990630: PVB: changed "no-consensus" issues to "no-consensus"
ednotes
</sitem>
<sitem>
19990630: PVB: changed "no-consensus" ednote for section 1 to
exclude subsection 1.3, as voted on during the telcon today
</sitem>
<sitem>
19990630: PVB: corrected several interal cross-references: from termref's
to specref's
</sitem>
<sitem>
19990630: PVB: added all previous drafts (internal as well as public WDs)
to the "Previous Versions" section.  In future public WDs only those
"previous versions" which were public WDs will display
</sitem>
<sitem>
19990630: PVB: changed "collection" to "set" in definition of "value space"
(thought this had been changed long ago, sorry)
</sitem>
<sitem>
19990708: PVB: removed section 1.5 "Organization", per WG vote on telcon
</sitem>
<sitem>
19990708: PVB: removed "no-consensus" ednote from section 1
</sitem>
<sitem>
19990709: PVB: added (stub) subsections on "Precision", "Scale" and "Encoding" to
section 2.4.2 "Constraining Facets".  All facets mentioned in all datatype
definitions in section 3 should be listed in 2.4.2. (this is not intended to address
the standing issue <xspecref href="http://www.w3.org/XML/Group/xmlschema-current/issues.html#constraining-facet-definitions">
constraining-facet-definitions</xspecref>, but was needed for the next revision item)
</sitem>
<sitem>
19990709: PVB: added "Datatypes and Facets" appendix which consists of
several tables which attempt to show which facets apply to which datatypes
</sitem>
<sitem>
19990713: PVB: fixed bug in schema for datatypes regarding modelGroup vs.
elementType Refs in unordered modelGroup
as per
<loc href='http://lists.w3.org/Archives/Public/www-xml-schema-comments/1999AprJun/0088.html'>
http://lists.w3.org/Archives/Public/www-xml-schema-comments/1999AprJun/0088.html</loc>
</sitem>
<sitem>
19990726: AM: Changed example of user-generated datatype from
heightInInches to i4.
</sitem>
<sitem>
19990726: AM: Rewrote "Exact and Approximate".
</sitem>
<sitem>
19990812: PVB: Removed all mention of picture constraints as lexical-representations
for strings
</sitem>
<sitem>
19990819: AM: Amended Ed. Note on a URL for the datatypes namespace
referring to Dan Connolly's note "make up your own".
</sitem>
<sitem>
19990819: AM: Removed issue on NULLS, 2 occurrences.
</sitem>
<sitem>
19990819: AM: Changed Ed. Note on "Better Ref Mechs" associated with
IDREFS to "issue"..
</sitem>
<sitem>
19990819: AM: Removed issue on measurement units as WG decided to
defer to version 2.
</sitem>
<sitem>
19990919: HT: modifed abstract syntax to better reflect intent?
</sitem>
<sitem>
19990923: HT: modified schema for schemas to conform to the concrete
syntax in the latest Structures draft
</sitem>
<sitem>
19990923: PVB: added minAbsoluteValue and maxAbsoluteValue facets to
real, their intent is to allow generation of subtypes of real whose
value spaces correspond to comment float-point representations.
Added examples to section 4 to show how to generate IEEE 32-bit, etc.
</sitem>
<sitem>
19990923: PVB: replaced dateTime, date, time and timePeriod with all
new date/time related types: timeInstant, timeInstant, recurringInstant,
date and time.  Additionally, limited the lexical representations of each
of the new types to a single form (w/ the exception of still allowing both
left truncation and reduced [i.e., right truncated] representations).
Changed all examples which used date/time to use the new lexical representation
</sitem>
<sitem>
19990923: PVB: modified the abstract syntax, schema for datatypes and DTD
for datatypes to bring them in line with above changes.
</sitem>
<sitem>
19990924: HST: link housekeeping before publication</sitem>
<sitem>
19991020: AM: Rewrote "NOTATION".
</sitem>
<sitem>
19991020: AM: Made NMTOKEN a subtype of string.
</sitem>
<sitem>
19991020: AM: Changed lex reps for all date and time datatypes to ISO
extended format i.e. with separators.
</sitem>
<sitem>
19991020: AM: Removed issue on non-Gregorian dates.
</sitem>
<sitem>
19991020: AM: Renamed "lexical representation" facet for string to "pattern".
</sitem>
 <sitem>
19991026: AM: Added appendix discussing ISO 8601 formats.  Removed note
asking for such explanation.
</sitem>
<sitem>
1999-10-26: PVB: fixed errors in datatypes.xsd and datatypes.dtd as pointed
out by <loc href="http://lists.w3.org/Archives/Public/www-xml-schema-comments/1999JulSep/0050.html">
Curt Arnold</loc>
</sitem>
<sitem>
1999-10-26: PVB: added period to the facets production
</sitem>
<sitem>
1999-10-26: PVB: added a note on the basetype to the definition of
datatype NMTOKEN
</sitem>
<sitem>
1999-10-26: PVB: removed NaN, INF and -INF from the lexical space
of integer and decimal
</sitem>
<sitem>
1999-11-08: PVB: removed real datatype and all references to it
</sitem>
<sitem>
1999-11-08: PVB: added inital definitions for float and double datatypes.
This initial definition is not intended to be complete, we need a more
complete description of the round-to-nearest behavior of mapping literals
into the value space (i.e., a more readable description of "best approximation"
from the Clinger paper in the non-normative references section).
</sitem>
<sitem>
1999-11-08: PVB: corrected typos in the definitions of datatypes generated
from integer to corrected identify the generated type
</sitem>
<sitem>
1999-11-08: PVB: added specref elements to all mentions of constraining facets
</sitem>
<sitem>
1999-11-08: PVB: added term elements to all mentions of a datatype name in
the definition of that datatype
</sitem>
<sitem>
1999-11-12: PVB: changed lexical space of timeInstant to be more consistent
with ISO 8601, nYnMnDTnHnMnS (minus the 'P' designator).
</sitem>
<sitem>
1999-11-12: PVB fixed productions for decimalLiteral to allow forms such as
-.12 and -23.
</sitem>
<sitem>
19991122: AM: Added some more explanation to timeInstant format.  Fixed
Appendix D to reflect changes.
</sitem>
<sitem>
19991122: AM: Added "uncountable infinite and exact" value space to 2.4.1.3
</sitem>
<sitem>
19991122: AM: Removed issue "Better Reference Mechanisms".
</sitem>
<sitem>
19991122: AM: Added "collation sequence for strings is Unicode characater number".
</sitem>
<sitem>
19991122: AM: Added min/max facets to date/time dataypes.
</sitem>
<sitem>
19991122: AM: Removed issues on URI and binary datatypes.
</sitem>
<sitem>
19991122: AM: Added value space validation to conformance section.
</sitem>
<sitem>
19991122: AM: Added values space definitions to date/time datatypes.
</sitem>
<sitem>
1999-12-08: pvb: Added QName datatype
</sitem>
<sitem>
1999-12-08: pvb: changed language to be a subtype of string
</sitem>
<sitem>
1999-12-10: pvb: many small editorial changes for consistency
</sitem>
<sitem>
1999-12-10: pvb: Added pattern facet to all date/time types (should
have been there all along)
</sitem>
<sitem>
1999-12-10: pvb: Added full list of facets and subtypes to each type
definition
</sitem>
<sitem>
1999-12-10: pvb: replaced regex appendix with a brief summary of proposed
Unicode support, complete proposal coming shortly
</sitem>
<sitem>
1999-12-10: pvb: moved some references from normative to non-normative
</sitem>
<sitem>
1999-12-10: pvb: changed concrete syntax for datatype defns to more closely
match the structures draft: in particular, to allow annotations on the
datatype element and all facet elements.
</sitem>
<sitem>
1999-12-15: pvb: added normaitive reference to RTC 2045 for def of base64
</sitem>
<sitem>
1999-12-15: pvb: many more small editorial changes, for consistency in
style and presentation
</sitem>
<sitem>
1999-12-15: pvb: corrected small errors in table in appendix C.1, Fundamental
facets
</sitem>
<sitem>
1999-12-15: pvb: filled out list of datatypes for each facet in appendix C.2,
Constraining facets
</sitem>
<sitem>
1999-12-15: expanded abstract
</sitem>
<sitem>
1999-12-15: pvb: updated description of lexical space for float/double to
include literals for +- inf, +- 0, nan.
</sitem>
<sitem>
1999-12-16: pvb: modified defns of ID, IDREF, IDREFS, ENTITY, ENTITIES
and NOTATION to match NCName instead of Name as required by the Namespaces
in XML spec
</sitem>
<sitem>
1999-12-16: pvb: fully specified value space for decimal
</sitem>
 End of commented out section -->
<sitem>
2000-02-08: pvb: spell check
</sitem>
<sitem>
2000-02-08: pvb: added COS's for interaction between min/max-X facets
</sitem>
<sitem>
2000-02-08: pvb: changed datatype of length, min/maxlength facets from
positive-integer to non-negative-integer
</sitem>
<sitem>
2000-02-08: pvb: corrected typo in date-lexical-representaion, where a
"specific century" was noted as YY (changed to CC)
</sitem>
<sitem>
2000-02-08: pvb: changed defn of atomic from being "intrinsically indivisible"
to "regarded as indivisible by this specification"
</sitem>
<sitem>
2000-02-08: pvb: clarified defn of facet, wrt value spaces and not "concepts
or objects"
</sitem>
<sitem>
2000-02-08: pvb: merged "terminology" sections from both part 1 and part 2
</sitem>
<sitem>
2000-02-08: pvb: fixed datatype of scale facet (from pos-int to non-neg-int)
</sitem>
<sitem>
2000-02-08: pvb: added "priority feedback note" for bigNums
</sitem>
<sitem>
2000-02-09: pvb: fixed circular defn of decimal, as suggested 
by DC
<!--
<loc href='http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2000Jan/0365.html'>
http://lists.w3.org/Archives/Member/w3c-xml-schema-ig/2000Jan/0365.html</loc>
-->
</sitem>
<sitem>
2000-02-09: pvb: added 1 and 0 to lexical space of boolean
</sitem>
<sitem>
2000-02-09: pvb: added subsections to section 4...this may get undone when I
dump the abstract syntax, we'll see
</sitem>
<sitem>
2000-02-10: pvb: added pattern facet to all datatypes
</sitem>
<sitem>
2000-02-10: pvb: updated several incorrect values in the constraining
facets "table" in Appendix C2.
</sitem>
<sitem>
2000-02-10: pvb: changed examples to use &lt;documentation> instead
of &lt;info> as the child of &lt;annotation>
</sitem>
<!-- these are changes to implement berkeley f2f decisions -->
<sitem>
2000-02-10: pvb: added the correct built-in datatypes namespace to
section 3.1 (closes the datatypes portion of issue 78)
</sitem>
<sitem>
2000-02-10: pvb: changed examples to use &lt;simpleType> instead of
&lt;datatype>, equivalent changes to the DTD and schema will come shortly
closes the datatypes portion of issue 157)
</sitem>
<sitem>
2000-02-10: pvb: renamed uri datatype to uri-reference; clarified the
defn wrt RFC 2396; included specific mention of absolute vs. relative
uri-references; still need to be specific about the lexical representation
(closes some parts of issue 212)
</sitem>
<sitem>
2000-02-15: pvb: added SVC to binary, which says one must give a value for
the encoding facet (i.e., a hack to get around the problem that we don't
have the concept of "required" facets) [part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved ID to a primitive type (since it has validation requirements
above and beyond those provided for subtypes of string).  Also added a Note: to it
making explicit the fact that the value space is scoped to an instance document
(unlike the value space of types such as integer).  Also fixed a bug in the
definition, which refered to Name instead of NCName
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved IDREF to a primitive type (since it has validation
requirements above and beyond those provided for subtypes of string).
Added an issue about whether this could be generated from ID.
Also added a Note: to it making explicit the fact that the value space is scoped
to an instance document (unlike the value space of types such as integer).
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved IDREFS to a primitive type (since it has validation
requirements above and beyond those provided for subtypes of string)....this is
just a temporary home and it will become generated as list of IDREF when I get
the list stuff implemented
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved ENTITY to a primitive type (since it has validation
requirements above and beyond those provided for subtypes of string).
Also added a Note: to it making explicit the fact that the value space is scoped
to an instance document (unlike the value space of types such as integer).
Also added a SVC that entity values must match a declared unparsed entity name.
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved ENTITIES to a primitive type (since it has validation
requirements above and beyond those provided for subtypes of string)....this is
just a temporary home and it will become generated as list of ENTITY when I get
the list stuff implemented
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: moved NOTATION to a primitive type (since it has validation
requirements above and beyond those provided for subtypes of string).
Also added a Note: to it making explicit the fact that the value space is scoped
to an instance document (unlike the value space of types such as integer).
Also added a SVC that notation values must match a declared notation name.
[part of the resolution to issue 81]
</sitem>
<sitem>
2000-02-15: pvb: updated table in appendix C1, to note that all datatypes
are exact
</sitem>
<sitem>
2000-02-16: pvb: added i4, i8, u4, u8, etc. subtypes of integer, using
editor's discretion in their naming as instructed at the berkeley f2f...changed the
first example in section 4 "Defining Generated Datatypes" to use the Sku
datatype from Part 0, instead of i4 since we now have i4 built-in
</sitem>
<sitem>
2000-02-16: pvb: removed issue: definition-overriding from the draft
</sitem>
<sitem>
2000-02-17: pvb: removed the exact vs. approximate distinction entirely
(since all our types turned out to be exact)
</sitem>
<sitem>
2000-02-17: pvb: removed all mention of aggregate datatypes.  Changed
the "atomic vs. aggregate" dichotomy to be: atomic vs. list.
[part of resolution to issue 112]
</sitem>
<sitem>
2000-02-17: pvb: clarified defns of value space and lexical space.  In
particular, moved the notion of a literal denoting a value from the defn
to LS to VS and noted that a literal is a character information item from
the info set.
</sitem>
<sitem>
2000-02-17: pvb: changed terminology of "generated" to "derived", to be
in alignment with the structures spec
[part of resolution to issue 204]
</sitem>
<sitem>
2000-02-17: pvb: removed definition of term subtype, changed all prose of the
form "for subtypes of X" to "for datatypes derived from X"
[part of resolution to issue 204]
</sitem>
<sitem>
2000-02-17: pvb: removed a para from Conformance section which mentioned
processor option of turning off validation of certain facets
</sitem>
<sitem>
2000-02-17: pvb: removed note that order-relations are not defined
</sitem>
<sitem>
2000-02-17: pvb: made IDREFS, ENTITIES and NMTOKENS derived by list from
IDREF, ENTITY and NMTOKENS respectively.
[part of resolution of issue 81]
</sitem>
<sitem>
2000-02-17: pvb: clarified what the values {hex,base64} mean for the
encoding facet
</sitem>
<sitem>
2000-02-17: pvb: added pointers from the 4 mechanisms to create a value space
to the places in the spec where those mechanisms are described
</sitem>
<sitem>
2000-02-17: pvb: all built-in generated types are now defined in the
schema for datatypes
</sitem>
<sitem>
2000-02-21: pvb: clarified list datatypes, wrt use of component type
which allows whitespace in its literals and wrt facets applicable for
deriving subtypes of a list type
</sitem>
<sitem>
2000-02-23: pvb: change defn of binary and meaning of length facet
for binary to be measured in octets, since both lexical encodings
are only defined for octet multiples.
</sitem>
<sitem>
2000-02-23: pvb: incorporated prose description of regex language
(thanx to Matt Timmermans!!!!)
</sitem>
<sitem>
2000-02-23: pvb: added appinfo's to builtin definitions in the
schema for datatypes, which are used to generate the list of
constraining facets for each builtin datatype in the html version
of the spec
</sitem>
<sitem>
2000-02-23: pvb: replaced abstract syntax with 2 new sections for
"schema components" and "xml representation" constructs, still needs
a lot of editorial work tho
</sitem>
<sitem>
2000-02-23: pvb: list of derived types for each built-in type
is now auto-generated from the builtins.xsd
</sitem>
<sitem>
2000-02-23: pvb: appendix C.2 (list of datatypes to which each
facet applies) is now auto-generated form the builtins.xsd
</sitem>
<sitem>
2000-02-24: pvb: put equality back in as a fundamental facet,
to help with the vote on today's telcon regarding key, unique
and keyref value matching.
</sitem>
<sitem>
2000-02-24: pvb: added 'datatype valid' validation constraint
</sitem>
<sitem>
2000-02-24: pvb: added stub for 'facet valid' validation constraint
</sitem>
<!--
<sitem>
2000-02-24: pvb:
</sitem>
-->
</slist>
</revisiondesc>
</header>
<body>
<div1 id='Intro'>
<head>Introduction</head>
<div2 id='purpose'>
<head>Purpose</head>
<p>
The <bibref ref='XML'/> specification defines limited
facilities for applying datatypes to document content in that documents
may contain or refer to DTDs that assign types to elements and attributes.
However, document authors, including authors of traditional
<emph>documents</emph> and those transporting <emph>data</emph> in XML,
often require a higher degree of type checking to ensure robustness in
document understanding and data interchange.
</p>
<p>
The table below offers two typical examples of XML instances
in which datatypes are implicit: the instance on the left
represents a billing invoice, the instance on the
right a memo or perhaps an email message in XML.
</p>
<table border='1' bgcolor='&cellback;'>
<thead>
<tr>
<th align='center'>Data oriented</th>
<th align='center'>Document oriented</th>
</tr>
</thead>
<tbody>
<tr>
<td><eg><![CDATA[<invoice>
   <orderDate>1999-01-21</orderDate>
   <shipDate>1999-01-25</shipDate>
   <billingAddress>
      <name>Ashok Malhotra</name>
      <street>123 IBM Ave.</street>
      <city>Hawthorne</city>
      <state>NY</state>
      <zip>10532-0000</zip>
   </billingAddress>
   <voice>555-1234</voice>
   <fax>555-4321</fax>
</invoice>]]></eg></td>
<td><eg><![CDATA[<memo importance="high"
      date="1999-03-23">
   <from>Paul V. Biron</from>
   <to>Ashok Malhotra</to>
   <subject>Latest draft</subject>
   <body>
      We need to discuss the latest
      draft <emph>immediately</emph>.
      Either email me at <email>
      mailto:paul.v.biron@kp.org</email>
      or call <phone>555-9876</phone>
   </body>
</memo>]]></eg></td>
</tr>
</tbody>
</table>
<p>
The invoice contains several dates and telephone numbers, the postal
abbreviation for a state
(which comes from an enumerated list of sanctioned values), and a ZIP code
(which takes a definable regular form).  The memo contains many
of the same types of information: a date, telephone number, email address
and an "importance" value (from an enumerated
list, such as "low", "medium" or "high").  Applications which process
invoices and memos need to raise exceptions if something that was
supposed to be a date or telephone number does not conform to the rules
for valid dates or telephone numbers.
</p>
<p>
In both cases, validity constraints exist on the content of the
instances that are not expressible in XML DTDs.  The limited datatyping
facilities in XML have prevented validating XML processors from supplying
the rigorous type checking required in these situations.  The result
has been that individual applications writers have had to implement type
checking in an ad hoc manner.  This specification addresses
the need of both document authors and applications writers for a robust,
extensible datatype system for XML which could be incorporated into
XML processors.  As discussed below, these datatypes could be used in other
XML-related standards as well.
</p>
</div2>
<div2 id='requirements'>
<head>Requirements</head>
<p>
The <bibref ref='schema-requirements'/> document spells out
concrete requirements to be fulfilled by this specification,
which state that the XML Schema Language must:
</p>
<olist>
<item>
<p>
provide for primitive data typing, including byte, date,
integer, sequence, SQL &amp; Java primitive data types, etc.;
</p>
</item>
<item>
<p>
define a type system that is adequate for import/export
from database systems (e.g., relational, object, OLAP);
</p>
</item>
<item>
<p>
distinguish requirements relating to lexical data representation
vs. those governing an underlying information set;
</p>
</item>
<item>
<p>
allow creation of user-defined datatypes, such as
datatypes that are derived from existing datatypes and which
may constrain certain of its properties (e.g., range,
precision, length, format).
</p>
</item>
</olist>
</div2>
<div2 id='scope'>
<head>Scope</head>
<p>
This portion of the XML Schema Language discusses datatypes that can be
used in an XML Schema.  These datatypes can be specified for element content
that would be specified as <xspecref href='&xmlspec;#dt-chardata'>#PCDATA</xspecref>
and attribute values of <xspecref href='&xmlspec;#sec-attribute-types'>various
types </xspecref> in a DTD.  It is the intension of this specification that
it be usable outside of the context of XML Schemas for a wide range of other
XML-related activities such as <bibref ref='XSL'/> and <bibref ref='RDFSchema'/>.
</p>
</div2>
<div2 id='terminology'>
<head>Terminology</head>
<p>
The terminology used to describe XML Schema Datatypes is defined in the body of
this specification. The terms defined in the following list are used in building
those definitions and in describing the actions of a datatype processor:
</p>
<ednote>
<edtext>
The list below represents a merger of the equivlant sections from both
structures and datatypes.  Do we really need all of these terms defined
in the datatypes spec?
</edtext>
</ednote>
<glist>
<gitem>
<label><termdef id='dt-compatibility' term='for compatibility'>
for compatibility</termdef></label>
<def>
<p>
A feature of this
specification included solely to ensure that schemas which use this feature
remain compatible with <bibref ref='XML'/>
</p>
</def>
</gitem>
<gitem>
<label><termdef id="dt-may" term="may"><term>may</term></termdef></label>
<def>
<p>
Conforming documents and processors are permitted to but need
not behave as described.
</p>
</def>
</gitem>
<gitem>
<label><termdef id="dt-match" term="match"><term>match</term></termdef> </label>
<def>
<p>
(Of strings or names:) Two strings or names being compared must
be character for character the same.
</p>
</def>
</gitem>
<gitem>
<label><termdef id="dt-identical" term="identical">identical</termdef></label>
<def>
<p>
(Of <pt>URI</pt>s) <emph>identical</emph>, according to the rules for identity in
<bibref ref="XMLNS"/>.
</p>
</def>
</gitem>
<!--<stale>-->
<gitem>
<label><termdef id="dt-must" term="must"><term>must</term></termdef></label>
<def>
<p>
Conforming documents and processors are required to behave as
described; otherwise they are in <termref def="dt-error">error</termref>.
</p>
</def>
</gitem>
<gitem>
<label><termdef id="dt-error" term="error"><term>error</term></termdef></label>
<def>
<p>
A violation of the rules of this specification; results are undefined.
Conforming software may detect and report an error and may recover from it.
</p>
</def>
</gitem>
<gitem>
<label><termdef id="dt-fatal-error" term="fatal error"><term>fatal
error</term></termdef></label>
<def>
<p>
An <termref def="dt-error">error</termref> which a conforming
processor must detect and report to the application.
</p>
</def>
</gitem>
<!--</stale>-->
</glist>
</div2>
</div1>
<div1 id='typesystem'>
<head>Type System</head>
<p>
This section describes the conceptual framework behind the type system
defined in this specification.  The framework has been influenced by the
<bibref ref='ISO11404'/> standard on language-independent datatypes
as well as the datatypes for <bibref ref='SQL'/> and for programming languages
such as Java.
</p>
<p>
The datatypes discussed in this specification are computer representations
of well known abstract concepts such as <emph>integer</emph> and <emph>date</emph>.
It is not the place of this specification to define these abstract concepts;
many other publications provide excellent definitions.
</p>
<!--
<p>
Two concepts are essential for an understanding of datatypes as they
are discussed here: a <termref def='dt-value-space'/> is an abstract collection of
permitted values for a datatype. Each datatype also has a space of valid
lexical representations or literals, each of which denotes a single value.
A single value in the <termref def='dt-value-space'/> may
be denoted by several distinct valid literals.
</p>
-->
<div2 id='datatype'>
<head>Datatype</head>
<p>
<termdef id='dt-datatype' term='datatype'>In this specification,
a <term>datatype</term> is defined as a 3-tuple, consisting of
a) a set of distinct values, called its <termref def='dt-value-space'/>,
b) a set of lexical representations, called its <termref def='dt-lexical-space'/>,
and c) a set of facets that characterize properties of the
<termref def='dt-value-space'/>, individual values or lexical items.
</termdef>
</p>
</div2>
<div2 id='value-space'>
<head>Value space</head>
<p>
<termdef id='dt-value-space' term='value space'>A <term>value
space</term> is the set of values for a given datatype.
Each value in the <term>value space</term> of a datatype is denoted by
one or more literals in its <termref def='dt-lexical-space'/>.
</termdef>
</p>
<p>
The <termref def='dt-value-space'/> of a given datatype can
be defined in one of the following ways:
<ulist>
<item>
<p>
defined axiomatically from fundamental notions (intensional definition)
[see <termref def='dt-primitive'/>]
</p>
</item>
<item>
<p>
enumerated outright (extensional definition)
[see <termref def='dt-enumeration'/>]
</p>
</item>
<item>
<p>
defined by restricting the <termref def='dt-value-space'/> of
an already defined datatype to a particular subset with a given set of properties
[see <termref def='dt-derived'/>]
</p>
</item>
<item>
<p>
defined as a combination of values from an already defined
<termref def='dt-value-space'/>(s) by a specific construction procedure
[see <termref def='dt-list'/>]
</p>
</item>
</ulist>
</p>
<p>
<termref def='dt-value-space'/>s have certain properties.  For example,
they always have the property of <termref def='dt-cardinality'/>,
some definition of <emph>equality</emph>
and may be <termref def='dt-ordered'/> by which individual
values within the <termref def='dt-value-space'/> can be compared to one another.
The properties of <termref def='dt-value-space'/>s that are recognized
by this specification are defined in <specref ref='fundamental-facets'/>.
</p>
</div2>
<div2 id='lexical-space'>
<head>Lexical space</head>
<p>
In addition to its <termref def='dt-value-space'/>, each datatype also has a lexical
space.
</p>
<p>
<termdef term='lexical space' id='dt-lexical-space'>A
<term>lexical space</term> is the set of valid <emph>literals</emph> for a datatype
(literals may appear as one or more
<xspecref href='&xmlinfosetspec;#infoitem.character'>character information
item</xspecref>s as defined in <bibref ref='XML-Infoset'/>).
</termdef>
</p>
<p>
For example, "100" and "1.0E2"
are two different literals from the <termref def='dt-lexical-space'/> of
<dtref ref='float'/> which both denote the same value.
The type system defined in this specification provides a mechanism for
schema designers to control the set of values and the corresponding set of
acceptable literals of those values for a datatype.
</p>
</div2>
<!--
     remove this entire section (and all references to it) for now...
	 we will reintroduce it later if we get EVERYTHING else done and
	 there is still time
	
<div2 id="characterizing-operations">
<head>Characterizing operations</head>
<p>
Many different datatypes may share the same <termref def='dt-value-space'/>.  As
a result, a datatype is only partially defined by its <termref def='dt-value-space'/>.
<termdef id="dt-characterizing-operations" term="characterizing operations">The
<term>characterizing operations</term> for a datatype are those operations (such as
"add" or "append") on or resulting in values of the datatype which distinguish
this datatype from other datatypes having <termref def='dt-value-space'/>s
which are identical
except possibly for substitution of symbols.</termdef>
</p>
<p>
Characterizing operations  can be useful in choosing the appropriate
datatype for particular purposes, such as mapping to or from common programming
languages or database environments.
</p>
<ednote>
<edtext>
Currently, no characterizing operations are defined on the
<termref def='dt-built-in'/> datatypes provided by this specification;
additionally, there is
no means to specify characterizing operations on <termref def='dt-user-derived'/>
datatypes.
This will be addressed in a future draft.
</edtext>
</ednote>
<p>
This discussion of characterizing operations in the definition
of datatype is for pedagogical purposes only and does <emph>not</emph>
imply that conforming processors must implement those operations, nor
does it imply that <emph>expressions</emph> (containing operators) which
evaluate to values of a given datatype will be accepted by conforming processors.
</p>
<div3 id="equal">
<head>Equal</head>
<p>
Every <termref def='dt-value-space'/> supports the notion of equality,
with	the following
rules:
</p>
<ulist>
<item>
<p>
for any two instances of values from the <termref def='dt-value-space'/> (a,b),
either a
is equal to b, denoted a = b, or a is not equal to b, denoted a != b;
</p>
</item>
<item>
<p>
there is no pair of instances (a, b) of values from the <termref def='dt-value-space'/>
such that both a = b and a != b;
</p>
</item>
<item>
<p>
for every value a from the <termref def='dt-value-space'/>, a = a;
</p>
</item>
<item>
<p>
for any two instances (a, b) of values from the <termref def='dt-value-space'/>,
a = b if and only if b = a;
</p>
</item>
<item>
<p>
for any three instances (a, b, c) of values from the <termref def='dt-value-space'/>,
if a = b and b = c, then a = c.
</p>
</item>
</ulist>
<p>
On every datatype, the operation Equal is defined in terms of the equality property of
the <termref def='dt-value-space'/>: for any values a, b drawn from the
<termref def='dt-value-space'/>, Equal(a,b) is true if a = b, and false otherwise.
</p>
</div3>
</div2>
  -->
<div2 id='facets'>
<head>Facets</head>
<p>
<termdef id='dt-facet' term='facet'>A <term>facet</term> is a
single defining aspect of a <termref def='dt-value-space'/>.  Generally speaking,
each facet characterizes a <termref def='dt-value-space'/> along independent
axes or dimensions.</termdef>
</p>
<p>
The facets of a datatype serve to distinguish those aspects of
one datatype which <emph>differ</emph> from other datatypes.
Rather than being defined solely in terms of a prose description
the datatypes in this specification are defined in terms of
the <emph>synthesis</emph> of facet values which together
determine the <termref def='dt-value-space'/> and properties of the datatype.
</p>
<p>
Facets are of two types: <emph>fundamental</emph> facets that define
the datatype and <emph>non-fundamental</emph> or <emph>constraining
</emph> facets that constrain the permitted values of a datatype.
</p>
<div3 id='fundamental-facets'>
<head>Fundamental facets</head>
<!--
					<issue id="facet-or-property">
						<p>
							Are the <bibref ref="ISO11404"/> notions of <specref
							ref="order"/>, <specref ref="bound"/>, etc. really
							facets as we've been talking about them, or are they
							<emph>properties</emph> which are logically derived
							from concrete values given for specific facets?
							(e.g., if a value is given for the <term>maxInclusive</term>
							facet then the datatype has the property of being
							<term>bounded</term>).
						</p>
					</issue>
  -->
<p>
A datatype is characterized by properties of its <termref def='dt-value-space'/>.
Each of
these properties give rise to a facet that serves to characterize
the datatype.
These properties are discussed in this section.
</p>
<div4 id="equal">
<head>Equal</head>
<p>
Every <termref def='dt-value-space'/> supports the notion of equality,
with	the following
rules:
</p>
<ulist>
<item>
<p>
for any two instances of values from the <termref def='dt-value-space'/> (a,b),
either a
is equal to b, denoted a = b, or a is not equal to b, denoted a != b;
</p>
</item>
<item>
<p>
there is no pair of instances (a, b) of values from the <termref def='dt-value-space'/>
such that both a = b and a != b;
</p>
</item>
<item>
<p>
for every value a from the <termref def='dt-value-space'/>, a = a;
</p>
</item>
<item>
<p>
for any two instances (a, b) of values from the <termref def='dt-value-space'/>,
a = b if and only if b = a;
</p>
</item>
<item>
<p>
for any three instances (a, b, c) of values from the <termref def='dt-value-space'/>,
if a = b and b = c, then a = c.
</p>
</item>
</ulist>
<p>
On every datatype, the operation Equal is defined in terms of the equality property of
the <termref def='dt-value-space'/>: for any values a, b drawn from the
<termref def='dt-value-space'/>, Equal(a,b) is true if a = b, and false otherwise.
</p>
</div4>
<div4 id='order'>
<head>Order</head>
<p>
<termdef id='dt-ordered' term='ordered'>A <termref def='dt-value-space'/>, and hence
a datatype, is said to be <term>ordered</term> if there exists an
<term>order relation</term>
defined for that <termref def='dt-value-space'/>.</termdef>
</p>
<p>
<term>order relations</term>
have the following
rules:
</p>
<ulist>
<item>
<p>
for every pair (a, b) from the <termref def='dt-value-space'/>,
either a &lt; b or b &lt;
a, or a = b;
</p>
</item>
<item>
<p>
for every triple (a, b, c) from the <termref def='dt-value-space'/>,
if a &lt; b and
b &lt; c, then a &lt; c.
</p>
</item>
</ulist>
<!--
     remove all references to the section on characterizing-operations)
	 for now...
	 we will reintroduce it later if we get EVERYTHING else done and
	 there is still time
	
<p>
If a <termref def='dt-value-space'/> is ordered, then the datatype will have
a corresponding
<specref ref="characterizing-operations"/>, called InOrder(a, b), defined
by:
</p>
<ulist>
<item>
<p>
for every (a, b) from the <termref def='dt-value-space'/>,
InOrder(a, b) is true if a &lt;=
b, and false otherwise.
</p>
</item>
</ulist>
  -->
<p>
There may exist several possible order relations for a given
<termref def='dt-value-space'/>.
Additionally, there may exist multiple datatypes with the same
<termref def='dt-value-space'/>.
In such cases, each datatype will define a different order relation on the
<termref def='dt-value-space'/>.
</p>
<!--
<ednote>
<edtext>
Currently, no order relations are defined on the <termref def='dt-built-in'/>
datatypes provided by this specification; additionally, there is no means
to specify an order relation on <termref def='dt-user-derived'/> datatypes.
This will be addressed
in a future draft.
</edtext>
</ednote>
-->
</div4>
<div4 id='bounds'>
<head>Bounds</head>
<p>
<termdef id='dt-bounded-above' term='bounded above'>
A <termref def='dt-value-space'/> is <term>bounded above</term>
if there exists a unique value <emph>U</emph> in the <termref def='dt-value-space'/>
such that,
for all values <emph>v</emph> in the <termref def='dt-value-space'/>,
<emph>v</emph> &lt;= <emph>U</emph>.
</termdef>
<termdef id='dt-upper-bound' term='upper bound'>
The value <emph>U</emph> is said to be an <term>upper bound</term> of the
<termref def='dt-value-space'/>.
</termdef>
</p>
<p>
<termdef id='dt-bounded-below' term='bounded below'>A
<termref def='dt-value-space'/> is <term>bounded below</term> if there exists a
unique value <emph>L</emph> in the space such that, for all values <emph>v</emph>
in the <termref def='dt-value-space'/>, <emph>L</emph> &lt;= <emph>v</emph>.
</termdef>
<termdef id='dt-lower-bound' term='lower bound'>
The value <emph>L</emph> is then said to be a  <term>lower bound</term> of
the <termref def='dt-value-space'/>.</termdef>
</p>
<p>
<termdef id='dt-bounded' term='bounded'>A datatype is <term>bounded</term> if
its <termref def='dt-value-space'/> has both an <termref def='dt-upper-bound'/>
and a
<termref def='dt-lower-bound'/>.
</termdef>
</p>
</div4>
<div4 id='cardinality'>
<head>Cardinality</head>
<p>
<termdef id='dt-cardinality' term='cardinality'>Every <termref def='dt-value-space'/>
has associated
with it the concept of <term>cardinality</term>.  Some <termref def='dt-value-space'/>s
are finite,
some are countably infinite while still others are uncountably infinite. A
datatype is said to have the cardinality of its <termref def='dt-value-space'/>.
</termdef>
</p>
<p>
It
is sometimes useful to categorize <termref def='dt-value-space'/>s
(and hence, datatypes) as
to their cardinality, there are three significant cases:
</p>
<ulist>
<item>
<p>
<termref def='dt-value-space'/>s that are finite
</p>
</item>
<item>
<p>
<termref def='dt-value-space'/>s that are countably infinite
<!--and exact
(see <specref ref='exact-approx'/>)
-->
</p>
</item>
<!--
<item>
<p>
<termref def='dt-value-space'/>s that are countably infinite and approximate
(see <specref ref='exact-approx'/>)
</p>
</item>
-->
<!--
<item>
<p>
<termref def='dt-value-space'/>s that are uncountably infinite and exact
(see <specref ref='exact-approx'/>)
</p>
</item>
-->
</ulist>
<!--
<p>
Every finite <termref def='dt-value-space'/> is necessarily exact. No computational
datatype has a <termref def='dt-value-space'/> that is is uncountably infinite.
</p>
-->
</div4>
<!--
<div4 id='exact-approx'>
<head>Exact and Approximate</head>
<p>
The computational representation of a datatype may limit the degree
to which values of the datatype can be distinguished.
</p>
<p>
<termdef id='dt-exact' term='exact'>
If every
value in the <termref def='dt-value-space'/> of the conceptual datatype is distinguishable
in the computational representation from every other value in the
<termref def='dt-value-space'/>,
then the datatype is said to be <term>exact</term>.</termdef>
<termdef id='dt-approximate' term='approximate'>
If a datatype is not <term>exact</term> then it is <term>approximate</term>.</termdef>
</p>
<p>
Certain mathematical datatypes with very large or infinite value
spaces have representations which are said to be approximate in that
multiple values in the conceptual <termref def='dt-value-space'/> map to single values
in the <termref def='dt-value-space'/> of the representation.
In this specification, all approximate datatypes have computational
models which specify, via parametric values, a degree of approximation,
that is, they require a certain minimum set of values of the mathematical
datatype to be distinguishable in the computational datatype.
Further, each value in the conceptual <termref def='dt-value-space'/> must be capable
of being represented in the representational <termref def='dt-value-space'/>
within a certain
distance i.e. the difference between the conceptual value and the
representational value must not exceed some agreed upon value.
</p>
</div4>
-->
<div4 id='numeric'>
<head>Numeric</head>
<p>
<termdef id='dt-numeric' term='numeric'>A datatype is said to be
<term>numeric</term> if its values are conceptually
quantities (in some mathematical number system).</termdef>
<termdef id='dt-non-numeric' term='non-numeric'>A datatype
whose values are not <termref def='dt-numeric'/> is said to be <term>non-numeric</term>
.</termdef>
</p>
</div4>
</div3>
<div3 id='non-fundamental'>
<head>Constraining or Non-fundamental facets</head>
<p>
<termdef id='dt-constraining-facet' term='constraining facet'>A
<term>Constraining facet</term> is an optional property that can be
applied to a datatype to constrain its <termref def='dt-value-space'/>.
</termdef>
</p>
<p>
Constraining the <termref def='dt-value-space'/> consequently constrains
the <termref def='dt-lexical-space'/>.  Adding
<termref def='dt-constraining-facet'/>s
to a <termref def='dt-basetype'/> is described in
<specref ref='derivation-by-restriction'/>.
</p>
<p>
In this section we define all <termref def='dt-constraining-facet'/>s
that are available for use when defining
<termref def='dt-derived'/> datatypes.
</p>
<div4 id='length'>
<head>length</head>
<p>
<termdef id='dt-length' term='length'><term>length</term> is
the number of <emph>units of length</emph>, where <emph>units of length</emph>
varies depending on the <termref def='dt-basetype'/>.
The value of <term>length</term> must be a
<dtref ref='non-negative-integer'/>.
</termdef>
</p>
<p>
For datatypes <termref def='dt-derived'/> from <dtref ref='string'/>,
<term>length</term> is measured in units of characters.
For datatypes <termref def='dt-derived'/> from <dtref ref='binary'/>,
<term>length</term> is measured in octets (8 bits).
For datatypes <termref def='dt-derived'/> by <termref def='dt-list'/>,
<term>length</term> is measured in list items.
</p>
<!--
<ednote>
<edtext>
We need to ultimately reconcile the notion of string length with the resolution
of the i18n issues around character, indexing, etc.  I18N recommends
that length and maxlength be a "character count" and do not indicate
storage requirements.
</edtext>
</ednote>
-->
</div4>
<div4 id='minlength'>
<head>minlength</head>
<p>
<termdef id='dt-minlength' term='minlength'><term>minlength</term> is
the minimum number of <emph>units of length</emph>, where <emph>units of length</emph>
varies depending on the <termref def='dt-basetype'/>.
The value of <term>minlength</term> must be a
<dtref ref='non-negative-integer'/>.</termdef>
</p>
<p>
For datatypes <termref def='dt-derived'/> from <dtref ref='string'/>,
<term>minlength</term> is measured in units of characters.
For datatypes <termref def='dt-derived'/> from <dtref ref='binary'/>,
<term>minlength</term> is measured in bits.
</p>
<constraintnote type='cos' id='length-minlength'>
<head>length and minlength</head>
<p>
It is an <termref def='dt-error'/> for both <termref def='dt-length'/>
and <termref def='dt-minlength'/> to be specified
for the same datatype.
</p>
</constraintnote>
<constraintnote type='cos' id='minlength-less-than-equal-to-maxlength'>
<head>minlength &lt;= maxlength</head>
<p>
It is an <termref def='dt-error'/> for the value specified for
<termref def='dt-minlength'/> to be greater than the value specified for
<termref def='dt-maxlength'/> for the same datatype.
</p>
</constraintnote>
</div4>
<div4 id='maxlength'>
<head>maxlength</head>
<p>
<termdef id='dt-maxlength' term='maxlength'><term>maxlength</term> is
the maximum number of <emph>units of length</emph>, where <emph>units of length</emph>
varies depending on the <termref def='dt-basetype'/>.
The value of <term>maxlength</term> must be a
<dtref ref='non-negative-integer'/>.</termdef>
</p>
<p>
For datatypes <termref def='dt-derived'/> from <dtref ref='string'/>,
<term>maxlength</term> is measured in units of characters.
For datatypes <termref def='dt-derived'/> from <dtref ref='binary'/>,
<term>maxlength</term> is measured in bits.
</p>
<constraintnote type='cos' id='length-maxlength'>
<head>length and maxlength</head>
<p>
It is an <termref def='dt-error'/> for both <termref def='dt-length'/>
and <termref def='dt-maxlength'/> to be specified
for the same datatype.
</p>
</constraintnote>
</div4>
<div4 id='pattern'>
<head>pattern</head>
<p>
<termdef id='dt-pattern' term='pattern'>
<!--For subtypes of <dtref ref='string'/>, -->
<term>pattern</term> is a constraint on the
<termref def='dt-value-space'/> of a datatype which is achieved by constraining
the <termref def='dt-lexical-space'/>.
The value of <term>pattern</term> must be a <termref def='dt-regex'/>.
<!--
For subtypes of the date and time related types (<dtref ref='timeInstant'/>, <dtref ref='timeInstant'/>,
<dtref ref='recurringInstant'/>, <dtref ref='date'/> and <dtref ref='time'/>),
<term>pattern</term> can be used to constrain the allowable values using
IS0 8601 "pictures" (<specref ref='formatdetails'/>).
-->
</termdef>
</p>
</div4>
<div4 id='enumeration'>
<head>enumeration</head>
<p>
<termdef id='dt-enumeration' term='enumeration'>
<term>enumeration</term> constrains the <termref def='dt-value-space'/>
to a specified set of values.
</termdef>
</p>
<p>
No order or any other relationship is implied between the individual
items of the enumeration set.
</p>
</div4>
<div4 id='maxInclusive'>
<head>maxInclusive</head>
<p>
<termdef id='dt-maxInclusive' term='maxInclusive'>
<term>maxInclusive</term> is the <termref def='dt-upper-bound'/>
of the <termref def='dt-value-space'/> for a datatype with the
<termref def='dt-ordered'/> property.  The value is
<emph>inclusive</emph> in the sense that the value is itself included
in the <termref def='dt-value-space'/>.
The value of <term>maxInclusive</term> must be of the same type
as the <termref def='dt-basetype'/>.
</termdef>
</p>
<constraintnote type='cos' id='minInclusive-less-than-equal-to-maxInclusive'>
<head>minInclusive &lt;= maxInclusive</head>
<p>
It is an <termref def='dt-error'/> for the value specified for
<termref def='dt-minInclusive'/> to be greater than the value specified for
<termref def='dt-maxInclusive'/> for the same datatype.
</p>
</constraintnote>
</div4>
<div4 id='maxExclusive'>
<head>maxExclusive</head>
<p>
<termdef id='dt-maxExclusive' term='maxExclusive'>
<term>maxExclusive</term> is the <termref def='dt-upper-bound'/>
of the <termref def='dt-value-space'/> for a datatype with the
<termref def='dt-ordered'/>
property.  The value is <emph>exclusive</emph> in the sense that
the value is itself excluded from the <termref def='dt-value-space'/>.
The value of <term>maxExclusive</term> must be of the same type
as the <termref def='dt-basetype'/>.
</termdef>
</p>
<constraintnote type='cos' id='maxInclusive-maxExclusive'>
<head>maxInclusive and maxExclusive</head>
<p>
It is an <termref def='dt-error'/> for both <termref def='dt-maxInclusive'/>
and <termref def='dt-maxExclusive'/> to be specified
for the same datatype.
</p>
</constraintnote>
<constraintnote type='cos' id='minExclusive-less-than-equal-to-maxExclusive'>
<head>minExclusive &lt;= maxExclusive</head>
<p>
It is an <termref def='dt-error'/> for the value specified for
<termref def='dt-minExclusive'/> to be greater than the value specified for
<termref def='dt-maxExclusive'/> for the same datatype.
</p>
</constraintnote>
</div4>
<div4 id='minInclusive'>
<head>minInclusive</head>
<p>
<termdef id='dt-minInclusive' term='minInclusive'>
<term>minInclusive</term> is the <termref def='dt-lower-bound'/>
of the <termref def='dt-value-space'/> for a datatype with the
<termref def='dt-ordered'/>
property.  The value is <emph>inclusive</emph> in the
sense that the value is itself included in the <termref def='dt-value-space'/>.
The value of <term>minInclusive</term> must be of the same type
as the <termref def='dt-basetype'/>.
</termdef>
</p>
</div4>
<div4 id='minExclusive'>
<head>minExclusive</head>
<p>
<termdef id='dt-minExclusive' term='minExclusive'>
<term>minExclusive</term> is the <termref def='dt-lower-bound'/>
of the <termref def='dt-value-space'/> for a datatype with the
<termref def='dt-ordered'/>
property.  The value is <emph>exclusive</emph> in the sense that
the value is itself excluded from the <termref def='dt-value-space'/>
for the datatype.
The value of <term>minExclusive</term> must be of the same type
as the <termref def='dt-basetype'/>.
</termdef>
</p>
<constraintnote type='cos' id='minInclusive-minExclusive'>
<head>minInclusive and minExclusive</head>
<p>
It is an <termref def='dt-error'/> for both <termref def='dt-minInclusive'/>
and <termref def='dt-minExclusive'/> to be specified
for the same datatype.
</p>
</constraintnote>
</div4>
<div4 id='precision'>
<head>precision</head>
<p>
<termdef id='dt-precision' term='precision'><term>precision</term>
is the total number of decimal digits in values of datatypes
<termref def='dt-derived'/> from <dtref ref='decimal'/>.  The value of
<term>precision</term> must be a <dtref ref='positive-integer'/>.
</termdef>
</p>
</div4>
<div4 id='scale'>
<head>scale</head>
<p>
<termdef id='dt-scale' term='scale'><term>scale</term>
is the total number of decimal digits to the right of the decimal
indicator in values of datatypes <termref def='dt-derived'/> from
<dtref ref='decimal'/>. The value of <term>scale</term> must be a
<dtref ref='non-negative-integer'/> .
</termdef>
<constraintnote type='cos' id='scale-precision'>
<head>scale less than or equal to precision</head>
<p>
It is an <termref def='dt-error'/> for <termref def='dt-scale'/> to be greater than
<termref def='dt-precision'/>.
</p>
</constraintnote>
</p>
</div4>
<div4 id='encoding'>
<head>encoding</head>
<p>
<termdef id='dt-encoding' term='encoding'><term>encoding</term> is the
encoded form of the <termref def='dt-lexical-space'/> of 
datatypes <termref def='dt-derived'/> from <dtref ref='binary'/>.
The value of <term>encoding</term> must be one of {hex, base64}.
</termdef>
</p>
<p>
If the value of <term>encoding</term> is <emph>hex</emph> then each
binary octect is encoded as a character tuple, consisting the two
hexadecimal digits ([0-9a-fA-F]) representing the octet code. For example,
"20" is the <emph>hex</emph> encoding for the US-ASCII space character.
</p>
<p>
If the value of <term>encoding</term> is <emph>base64</emph> then the
entire binary stream is encoding using the Base64 Content-Transfer-Encoding
defined in Section 6.8 <bibref ref='RFC2045'/>.
</p>
</div4>
<div4 id='period'>
<head>period</head>
<p>
<termdef id='dt-period' term='period'><term>period</term> is the frequency
of recurrence for values of datatypes <termref def='dt-derived'/> from
<dtref ref='recurringInstant'/>.
The value of <term>period</term> must be <dtref ref='timeInstant'/>.
</termdef>
</p>
</div4>
</div3>
</div2>
<div2 id='datatype-dichotomies'>
<head>Datatype dichotomies</head>
<p>
It is useful to categorize the datatypes defined in this specification
along various dimensions, forming a set of characterization dichotomies.
</p>
<div3 id='atomic-vs-list'>
<head>Atomic vs. list datatypes</head>
<p>
The first distinction to be made is that between <termref def='dt-atomic'/>
and <termref def='dt-list'/> datatypes.
</p>
<ulist>
<item>
<p>
<termdef id='dt-atomic' term='atomic'><term>Atomic</term> datatypes
are those having values which are regarded by this
specification as being indivisible.</termdef>
</p>
</item>
<item>
<p>
<termdef id='dt-list' term='list'><term>List</term>
datatypes are those having values which consist of a sequence of
values of an <termref def='dt-atomic'/> datatype.
</termdef>
</p>
</item>
</ulist>
<p>
For example, a single token which <termref def='dt-match'/>es
<xspecref href='&xmlspec;#NT-Nmtoken'>Nmtoken</xspecref> from <bibref ref='XML'/>
could be the value of an <termref def='dt-atomic'/> datatype
(<dtref ref='NMTOKEN'/>); while a sequence of such tokens could be
the value of a <termref def='dt-list'/> datatype (<dtref ref='NMTOKENS'/>).
</p>
<div4 id='atomic'>
<head>Atomic datatypes</head>
<p>
<termref def='dt-atomic'/> datatypes may be either
<termref def='dt-primitive'/> or <termref def='dt-derived'/>.  The
<termref def='dt-value-space'/> of an <termref def='dt-atomic'/> datatype
is a set of "atomic" values, which for the purposes of this specification,
are not further decomposable.  The <termref def='dt-lexical-space'/> of an
<termref def='dt-atomic'/> datatype is a set of <emph>literals</emph>
whose internal structure is specific to the datatype is question.
</p>
</div4>
<div4 id='list-datatypes'>
<head>List datatypes</head>
<p>
<termref def='dt-list'/> datatypes are always <termref def='dt-derived'/>.
The <termref def='dt-value-space'/> of a <termref def='dt-list'/> datatype
is a set of finite sequences of <termref def='dt-atomic'/> values.
The <termref def='dt-lexical-space'/> of a
<termref def='dt-list'/> datatype is a set of literals
whose internal structure is a whitespace
separated sequence of literals
of the <termref def='dt-atomic'/> datatype of the items in the
<termref def='dt-list'/>
(where whitespace matches <xspecref href='&xmlspec;#NT-S'>S</xspecref>
in <bibref ref='XML'/>).
</p>
<!-- changes these links to "derived by list" when that target
gets created: BLAH -->
<p>
It is not an <termref def='dt-error'/> to define a
<termref def='dt-list'/> datatype <termref def='dt-derived'/> from an
<termref def='dt-atomic'/> datatype whose
<termref def='dt-lexical-space'/> allows whitespace.
</p>
<note role='example'>
<eg>
&lt;simpleType name='listOfString' base='string' derivedBy='list'/>
</eg>
<eg>
&lt;someElement xsi:type='listOfString'>
this is not list item 1
this is not list item 2
this is not list item 3
&lt;/someElement>
</eg>
<p>
In the above example, the value of the <emph>someElement</emph> element
is not a <termref def='dt-list'/> of <termref def='dt-length'/> 3;
rather, it is a <termref def='dt-list'/> of <termref def='dt-length'/>
18.
</p>
</note>
<p>
When a datatype is <termref def='dt-derived'/> from a
<termref def='dt-list'/> datatype, the following
<termref def='dt-constraining-facet'/>s may be used:
</p>
<ulist>
<item><p><termref def='dt-length'/></p></item>
<item><p><termref def='dt-maxlength'/></p></item>
<item><p><termref def='dt-minlength'/></p></item>
<item><p><termref def='dt-enumeration'/></p></item>
</ulist>
<p>
For each of the above <termref def='dt-facet'/>s, the
<emph>unit of length</emph> is measured in list items.
</p>
<note>
<p>
A datatype which is <termref def='dt-atomic'/> in this specification need not
be an "atomic" datatype in any programming language used to implement
this specification.  Likewise,a datatype which is a <termref def='dt-list'/>
in this specification need not be a "list" datatype in any programming language
used to implement this specification.
</p>
</note>
</div4>
</div3>
<div3 id='primitive-vs-derived'>
<head>Primitive vs. derived datatypes</head>
<p>
Next, we distinquish between <termref def='dt-primitive'/> and 
<termref def='dt-derived'/> datatypes.
</p>
<ulist>
<item>
<p>
<termdef id='dt-primitive' term='primitive'><term>Primitive</term>
datatypes are those that are not defined in terms of other datatypes;
they exist <emph>ab initio</emph>.</termdef>
</p>
</item>
<item>
<p>
<termdef id='dt-derived' term='derived'><term>Derived</term>
datatypes are those that are defined in terms of other datatypes.</termdef>
</p>
</item>
</ulist>
<p>
For example, a <dtref ref='float'/> is a well defined mathematical   <!--find example other than float -->
concept that cannot be defined in terms of other datatypes while
a <dtref ref='date'/> is a special case of the more general datatype
<dtref ref='recurringInstant'/>.
</p>
<p>
The datatypes defined by this specification fall into both
the <termref def='dt-primitive'/> and <termref def='dt-derived'/> categories.
It is felt that a judiciously
chosen set of <termref def='dt-primitive'/> datatypes will serve the widest
possible audience by providing a set of convenient datatypes that can be used as is,
as well as providing a rich enough base from which the variety of datatypes needed
by schema designers can be <termref def='dt-derived'/>.
</p>
<!--
</div3>
<div3 id='basetype'>
<head>Basetype</head>
-->
<p>
<termdef id='dt-basetype' term='base type'>Every <termref def='dt-derived'/>
datatype is defined in terms of an existing datatype, referred to as
the <term>base type</term>.  <term>base type</term>s may be either
<termref def='dt-primitive'/> or <termref def='dt-derived'/>.</termdef>
</p>
<!--
<p>
<termdef id='dt-subtype' term='subtype'>If type <emph>a</emph> is the
<termref def='dt-basetype'/> of type <emph>b</emph>, then <emph>b</emph>
is said to be a <term>subtype</term> of <emph>a</emph>.
The <termref def='dt-value-space'/> of a <term>subtype</term>
is a <emph>subset</emph> of the <termref def='dt-value-space'/>
of the <termref def='dt-basetype'/>.
</termdef>
</p>
-->
<!--
<p>
In the example above, <dtref ref='date'/>
is a <termref def='dt-subtype'/> of the <termref def='dt-basetype'/>
<dtref ref='recurringInstant'/>.
</p>
-->
<p>
In the example above, <dtref ref='date'/>
is <termref def='dt-derived'/> from the <termref def='dt-basetype'/>
<dtref ref='recurringInstant'/>.
</p>
<note>
<p>
A datatype which is <termref def='dt-primitive'/> in this specification need not
be a "primitive" datatype in any programming language used to implement
this specification.
Likewise, a datatype which is <termref def='dt-derived'/> in this specification
need not be a "derived" datatype in any programming language used to implement
this specification.
</p>
</note>
</div3>
<div3 id='built-in-vs-user-derived'>
<head>Built-in vs. user-derived datatypes</head>
<ulist>
<item>
<p>
<termdef id='dt-built-in' term='built-in'><term>Built-in</term>
datatypes are those which are defined in this specification,
and may be either <termref def='dt-primitive'/> or <termref def='dt-derived'/>;
</termdef>
</p>
</item>
<item>
<p>
<termdef id='dt-user-derived' term='user-derived'><term>User-derived</term>
datatypes are those <termref def='dt-derived'/> datatypes that are defined by
individual schema designers by giving values to
<termref def='dt-constraining-facet'/>s.
</termdef>
</p>
</item>
</ulist>
<p>
Conceptually there is no difference between the <termref def='dt-built-in'/>
<termref def='dt-derived'/>
datatypes included in this specification and the <termref def='dt-user-derived'/>
datatypes which will be created by individual schema designers.
The <termref def='dt-built-in'/> <termref def='dt-derived'/> datatypes are those
which are believed to
be so common that if they were not defined in this specification
many schema designers would end up "reinventing" them.  Furthermore,
including these <termref def='dt-derived'/> datatypes in this specification
serves to demonstrate the mechanics and utility of the datatype
generation facilities of this specification.
</p>
<note>
<p>
A datatype which is <termref def='dt-built-in'/> in this specification need not
be a "built-in" datatype in any programming language used to implement
this specification.
Likewise, a datatype which is <termref def='dt-user-derived'/> in this
specification need not
be a "user-derived" datatype in any programming language used to implement
this specification.
</p>
</note>
</div3>
</div2>
</div1>
<div1 id='built-in-datatypes'>
<head>Built-in datatypes</head>
<div2 id='namespaces'>
<head>Namespace considerations</head>
<p>
The <termref def='dt-built-in'/> datatypes defined by this specification
are designed so that systems other than the XML Schema Definition Language
may use them. To facilitate such usage the <termref def='dt-built-in'/>
datatypes in this specification have the namespace URI:
</p>
<ulist>
<item><p>http://www.w3.org/1999/XMLSchema/datatypes</p></item>
</ulist>
<p>
This applies to both
<termref def='dt-built-in'/> <termref def='dt-primitive'/> and
<termref def='dt-built-in'/> <termref def='dt-derived'/> datatypes.
</p>
<p>
Each <termref def='dt-user-derived'/> datatype is also associated with a
unique namespace.
However, <termref def='dt-user-derived'/> datatypes do not come from the
XML Datatype Language
namespace; rather, they come from the namespace of the schema in which they
are defined (see <xspecref href='&xsdl;#declare-schema'>XML
Representation of Schemas</xspecref> in <bibref ref='structural-schemas'/>).
</p>
<p>
As described in more detail in <specref ref='datatype-definitions'/>,
each <termref def='dt-user-derived'/> datatype must be defined in terms
of another datatype in one of two ways: 1) by assigning
<termref def='dt-constraining-facet'/>s which serve
to restrict the <termref def='dt-value-space'/> of the
<termref def='dt-user-derived'/> datatype to a subset of the
<termref def='dt-basetype'/>; 2) by creating a <termref def='dt-list'/>
datatype whose <termref def='dt-value-space'/> consists of finite-length
sequences of values of the <termref def='dt-basetype'/>.
</p>
</div2>
<div2 id='built-in-primitive-datatypes'>
<head>Primitive datatypes</head>
<p>
The <termref def='dt-primitive'/> datatypes defined by this specification
are described below.  For each datatype, the <termref def='dt-value-space'/>
and <termref def='dt-lexical-space'/> are specified, all
<termref def='dt-constraining-facet'/>s which apply to the datatype are
and any datatypes <termref def='dt-derived'/> from this the datatype are listed.
</p>
<p>
<termref def='dt-primitive'/> datatypes can only be added by revisions to this
specification.
</p>
<div3 id='string'>
<head>string</head>
<p>
<termdef id='dt-string' term='string'>The <term>string</term>
datatype represents character strings in XML.  The <termref def='dt-value-space'/>
of <term>string</term> is the set of finite sequences of UCS characters
(<bibref ref='ISO10646'/> and <bibref ref='Unicode'/>).  A UCS
character (or just character, for short) is an atomic unit of communication;
it is not further specified except to note that every UCS character
has a corresponding UCS code point, which is an integer.
The <termref def='dt-ordered'/> property of <term>string</term> is
the <bibref ref='Unicode'/> character number sequence.
</termdef>
</p>
<ednote>
<edtext>
We need to harmonize this definition with the I18N character model.
</edtext>
</ednote>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<subtype name='string'/>
<p>
<term>string</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='language'/></p></item>
<item><p><specref ref='NMTOKEN'/></p></item>
<item><p><specref ref='Name'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='string'>
	<subtype>NMTOKEN</subtype>
	<subtype>language</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='boolean'>
<head>boolean</head>
<p>
<termdef id='dt-boolean' term='boolean'><term>boolean</term>
has the <termref def='dt-value-space'/> required to support
the mathematical concept of binary-valued
logic: {true, false}.</termdef>
</p>
<div4 id='boolean-lexical-representation'>
<head>Lexical Representation</head>
<p>
An instance of a datatype that is defined as <termref def='dt-boolean'/>
can have the following legal lexical values {true, 1, false, 0}, with '1' being
the same as 'true' and '0' being the same as 'false'.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='boolean'>
	<facet>pattern</facet>
</simpleType>
-->
</div3>
<div3 id="float">
<head>float</head>
<p>
<termdef id='dt-float' term='float'><term>float</term> corresponds
to the IEEE single-precision 32-bit floating point type <bibref ref="ieee754"/>.
The basic <termref def='dt-value-space'/> of <term>float</term> consists of
the values <emph>m &times; 2^e</emph>, where <emph>m</emph> is an <dtref ref='integer'/>
whose absolute value is less than <emph>2^24</emph>, and <emph>e</emph> is an
<dtref ref='integer'/> between -149 and 104, inclusive.  In addition to
the basic <termref def='dt-value-space'/> described above, the
<termref def='dt-value-space'/> of <term>float</term> also
contains the following <emph>special values</emph>: positive and negative zero,
positive negative infinity and not-a-number.
</termdef>
</p>
<p>
The mapping from a literal in the <termref def='dt-lexical-space'/> to a value
in the <termref def='dt-value-space'/> of
<term>float</term> follows IEEE <emph>round to nearest</emph> behavior
<bibref ref="ieee754"/>.  For further information on mapping literals to values in
the <termref def='dt-value-space'/>, see <bibref ref='clinger1990'/>.
</p>
<div4 id="float-lexical-representation">
<head>Lexical representation</head>
<p>
<term>float</term> values have a single standard lexical representation consisting of
a mantissa followed, optionally, by the character "E" or "e", followed by an
exponent.  The exponent must be an integer.  The
mantissa must be a decimal number. The
representations for exponent and mantissa must follow the
lexical rules for <dtref ref='integer'/> and <dtref ref='decimal'/>.
If the "E" or "e" and the following exponent are omitted, an exponent
value of 0 is assumed.
</p>
<p>
The <emph>special values</emph> positive and negative zero, positive
and negative infinity and not-a-number have <code>0</code>, <code>-0</code>,
<code>INF</code>, <code>-INF</code> and <code>NaN</code>, respectively.
</p>
<p>
For example, <code>-1E4, 1267.43233E12, 12.78e-2, 12 and INF</code> are all legal
literals for <term>float</term>.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
<!--
<simpleType name='float'>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div4>
</div3>
<div3 id="double">
<head>double</head>
<p>
<termdef id='dt-double' term='double'>The <term>double</term> datatype corresponds
to IEEE double-precision 64-bit floating point type <bibref ref="ieee754"/>.
The basic <termref def='dt-value-space'/> of <term>double</term> consists of the values 
<emph>m &times; 2^e</emph>, where <emph>m</emph> is an <dtref ref='integer'/>
whose absolute value is less than <emph>2^53</emph>, and <emph>e</emph> is an
<dtref ref='integer'/> between -1075 and 970, inclusive.  In addition to the
basic <termref def='dt-value-space'/> described above,
the <termref def='dt-value-space'/> of <term>double</term> also contains the following
<emph>special values</emph>: positive and negative zero, positive
negative infinity and not-a-number.
</termdef>
</p>
<p>
The mapping from a literal in the <termref def='dt-lexical-space'/> to a value in
the <termref def='dt-value-space'/> of <term>double</term> follows IEEE <emph>round
to nearest</emph> behavior <bibref ref="ieee754"/>.  For further information on
mapping literals to values in the <termref def='dt-value-space'/>, see
<bibref ref='clinger1990'/>.
</p>
<div4 id="double-lexical-representation">
<head>Lexical representation</head>
<p>
<term>double</term> values have a single standard lexical representation consisting of
a mantissa followed, optionally, by the character "E" or "e", followed by an
exponent.  The exponent must be an integer.  The
mantissa must be a decimal number. The
representations for exponent and mantissa must follow the
lexical rules for <dtref ref='integer'/> and <dtref ref='decimal'/>.
If the "E" or "e" and the following exponent are omitted, an exponent
value of 0 is assumed.
</p>
<p>
The <emph>special values</emph> positive and negative zero, positive
and negative infinity and not-a-number have <code>0</code>, <code>-0</code>,
<code>INF</code>, <code>-INF</code> and <code>NaN</code>, respectively.
</p>
<p>
For example, <code>-1E4, 1267.43233E12, 12.78e-2, 12 and INF</code> are all legal
literals for <term>double</term>.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
<!--
<simpleType name='double'>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div4>
</div3>
<div3 id='decimal'>
<head>decimal</head>
<p>
<termdef id='dt-decimal' term='decimal'><term>decimal</term>
represents arbitrary precision decimal numbers.
The <termref def='dt-value-space'/> of <term>decimal</term>
consists of the values <emph role='equation'>i &times; 10^n</emph>,
where <emph role='equation'>i</emph> and <emph role='equation'>n</emph>
are integers, with <emph role='equation'>n</emph> being known
as the <termref def='dt-scale'/> of the <termref def='dt-value-space'/>.
</termdef>
</p>
<note>
<p>
The use of arbitrary precision decimal numbers (including all
datatypes derived from decimal [e.g., <dtref ref='integer'/>]) in this
design impacts the implementation of schema processors in
a number of places: checking <termref def='dt-maxlength'/> constraints on
<dtref ref='string'/>s, for example. It may impact interchange between
XML schemas and programming languages, databases, etc.
</p>
<p>
Our design discussions did not reveal convincing evidence
of undue burden because of arbitrary precision decimal
numbers in this design, but we welcome further input
from implementors.
</p>
</note>
<div4 id='decimal-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>decimal</term> has a single standard lexical representation.
This consists of a finite sequence of decimal digits separated by a period
as a decimal indicator, in accordance with the scale and precision facets,
 with an optional leading sign. If the sign is
omitted, "+" is assumed.  Leading and trailing zeroes are optional.
 For example: -1.23,
12678967.543233, +100000.00.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>decimal</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='integer'/></p></item>
</ulist>
-->
<!--
<simpleType name='decimal'>
	<subtype>integer</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
	<facet>precision</facet>
	<facet>scale</facet>
</simpleType>
-->
</div4>
</div3>
<div3 id="timeInstant">
<head>timeInstant</head>
<p>
<termdef id="dt-timeInstant" term="timeInstant"><term>timeInstant</term>
represents a combination of date and time values representing a single
instant in time.
The <termref def='dt-value-space'/> of <term>timeInstant</term> is the space of Gregorian dates
and legal time values as defined in &sect; 5.4 of <bibref ref="ISO8601"/>.</termdef>
</p>
<div4 id="timeInstant-lexical-repr">
<head>Lexical Representation</head>
<p>
A single lexical representation, which is a subset of the lexical
representations allowed by <bibref ref="ISO8601"/>, is allowed for <term>timeInstant</term>.
This lexical representation is the <bibref ref="ISO8601"/>
extended format CCYY-MM-DDThh:mm:ss.sss where "CC" represents the century, "YY"
the year, "MM" the month and "DD" the day, preceded by an optional
leading sign to indicate a negative number. If the sign is
omitted, "+" is assumed. 
The letter "T" is the
date/time separator and "hh", "mm", "ss.sss" represent hour, minute
and second respectively.  Additional digits can be used to increase
the precision of fractional seconds if desired.
To accommodate year values greater than 9999 additional digits can be added
to the left of this representation.
</p>
<p>
This representation can be immediately followed by a "Z" to indicate
Coordinated Universal Time.  To indicate the time zone, i.e. the difference
between the local time and Coordinated Universal Time, the difference
immediately follows the time and consists of a sign, + or -, followed
by hh:mm.  See also <specref ref="isoformats"/>.</p>
<p>
For example, to indicate 1:20 pm on May the 31st, 1999 for Eastern Standard Time
which is 5 hours behind Coordinated Universal Time, one
would write: 1999-05-31T13:20:00-05:00.
</p>
</div4>
<!--
<div4 id="timeInstant-truncated-repr">
<head>Truncated Representations</head>
<p>Left truncated forms of the above representation are used as the lexical
representation for the <dtref ref="recurringInstant"/> datatype and
its subtype <dtref ref="time"/>.
Right truncated forms of this representation are used as the lexical
representation for the datatype <dtref ref="date"/>.</p>
</div4>
  -->
<div4>
<head>Constraining facets</head>
<facets/>
<!--
<simpleType name='timeInstant'>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div4>
</div3>
<div3 id="timeDuration">
<head>timeDuration</head>
<p>
<termdef id="dt-timeDuration" term="timeDuration"><term>timeDuration</term>
represents a duration of time.
The <termref def='dt-value-space'/> of <term>timeDuration</term> is the
space of time durations as defined in &sect; 5.5.3.2 of
<bibref ref="ISO8601"/>.
</termdef>
</p>
<div4 id="timeDuration-lexical-repr">
<head>Lexical Representation</head>
<p>
A single lexical representation, conforming to a subset of the 
representations allowed by <bibref ref="ISO8601"/>, is allowed for <term>timeDuration</term>.
This lexical representation is the <bibref ref="ISO8601"/>
extended format P<emph>n</emph>Y<emph>n</emph>M<emph>n</emph>DT<emph>n</emph>H
<emph>n</emph>M<emph>n</emph>S, where <emph>n</emph>Y represents the number
of years, <emph>n</emph>M the number of months, <emph>n</emph>D the number of
days, 'T' is the date/time separator, <emph>n</emph>H the number of hours,
<emph>n</emph>M the number of minutes and <emph>n</emph>S the number of seconds.
The number of seconds can include decimal digits to arbitrary precision.
An optional preceding minus sign ('-') is allowed, to indicate a negative duration.
If the sign is omitted a positive duration is
indicated. See also <specref ref="isoformats"/>.
</p>
<p>
For example, to indicate a duration of 1 year, 2 months, 3 days, 10
hours, and 30 minutes, one would write: P1Y2M3DT10H30M.
</p>
<p>Right truncated forms of the above representation are allowed. For example,
P1347Y and P1347M are both allowed; P0Y1347M is also allowed. 
P0Y1347M0D is not allowed and P-1347M is not allowed although -P1347M is
allowed.</p>
<p>
Time periods, i.e. specific durations of time, can be represented by supplying
two items of information: a start instant and a duration or a start instant and
an end instant or an end instant and a duration.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
</div3>
<div3 id="recurringInstant">
<head>recurringInstant</head>
<p>
<termdef id="dt-recurringInstant" term="recurringInstant"><term>recurringInstant</term>
represents an instant of time that recurs with a specific
<dtref ref="timeInstant"/>.
</termdef>
</p>
<p>
Note that we do not attempt to support
general recurring instants of time, just those that needed to support
<dtref ref="date"/> and <dtref ref="time"/> and those
that arise from truncated and reduced lexical representations of
<dtref ref="timeInstant"/>. See also <specref ref="isoformats"/>.
</p>
<div4 id="recurringInstant-lexical-repr">
<head>Lexical Representation</head>
<p>
The lexical representation for <term>recurringInstant</term> is the left truncated
<bibref ref="ISO8601"/> representation for <dtref ref="timeInstant"/>.
For example, if the century "CC" is omitted from the timeInstant
representation it means a timeInstant that recurs every hundred years.
Similarly, if "CCYY" is omitted it designates a time instant that recurs
every year.
</p>
<p>
Every two character "unit" of the representation that is omitted is indicated by
a single hyphen "-".  For example, to indicate 1:20 pm on May the 31st
every year, one would write write: --05-31T13:20:00-05:00.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>recurringInstant</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref="date"/></p></item>
<item><p><specref ref="time"/></p></item>
</ulist>
-->
<!--
<simpleType name='recurringInstant'>
	<subtype>date</subtype>
	<subtype>time</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
	<facet>period</facet>
</simpleType>
-->
</div4>
</div3>
<!--
<div3 id="recurringDuration">
<head>recurringDuration</head>
<p>
<termdef id="dt-recurringDuration" term="recurringDuration"> The
<term>recurringDuration</term> datatype represents an duration of time
that recurs with at a specific <dtref ref="timeInstant"/>.  Note that we
do not attempt to support general recurring durations of time, just those
that we need to support the <dtref ref="date"/> and <dtref ref="time"/>
datatypes and those that arise from truncated lexical representations of
<dtref ref="timeInstant"/>.
</p>
<div4 id="recurringDuration-lexical-repr">
<head>Lexical Representation</head>
<p>
The lexical representation for recurringDuration is the left truncated <bibref ref="ISO8601"/>
representation for <dtref ref="timeInstant"/>.
For example, if the century "CC" is omitted from the timeInstant
representation it means a timeInstant that recurs every hundred years.
Another way of interpreting such a representation is to assume it refers
to a single duration in the current century.  Similarly, if "CCYY" is omitted it designates a
time duration that recurs every year.  Alternatively, it designates
a time instant for the current year.
</p>
</div4>
</div3>
  -->
<div3 id='binary'>
<head>binary</head>
<p>
<termdef id='dt-term' term='binary'><term>binary</term>
represents arbitrary binary data.  The <termref def='dt-value-space'/> of <term>binary</term>
is the set of finite sequences of binary octets.
</termdef>
</p>
<constraintnote type='svc' id='encoding-required'>
<head>encoding required for binary</head>
<p>
It is an <termref def='dt-error'/> for <term>binary</term> to be used directly in
a schema.  Only datatypes that are <termref def='dt-derived'/> from
<term>binary</term> by specify a value for <termref def='dt-encoding'/>
can be used in a schema.
</p>
</constraintnote>
<div4>
<head>Constraining facets</head>
<facets/>
<ednote>
<edtext>
What does the pattern facet on binary really mean?  Since pattern operates on the
lexical space, one would have to give a regex for the base64 or hex that would
result for a specifc binary sequence that one wanted to constrain...this is not
too far fetched for hex, but almost impossible for base64, isn't it?
</edtext>
</ednote>
</div4>
<!--
<simpleType name='binary'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>encoding</facet>
	<facet>pattern</facet>
</simpleType>
-->
</div3>
<div3 id='uri-reference'>
<head>uri-reference</head>
<p>
<termdef id='dt-uri-reference' term='uri-reference'><term>uri-reference</term>
represents a Uniform Resource Identifier (URI) Reference as defined in Section 4
of <bibref ref='RFC2396'/>.
A <term>uri-reference</term> may be absolute or relative, and may have
an optional fragment identifier.
</termdef>
</p>
<p>
<termdef id='dt-absolute-uri-reference' term='absolute uri-reference'>
An <term>absolute uri-reference</term> refers to a resource
in a manner which is independent of the context in which the
<termref def='dt-uri-reference'/> occurs.
</termdef>
</p>
<p>
<termdef id='dt-relative-uri-reference' term='relative uri-reference'>
A <term>relative uri-reference</term> refers to a resource
by describing the difference within a hierarchy of resources between the
context in which the <term>relative uri-reference</term> occurs and 
the <termref def='dt-absolute-uri-reference'/> of the resource.
</termdef>
</p>
<!-- <issue id='uri-reference-scheme-facet'>
<p>
should we have a facet to allow a limitation to a specific scheme?  It
might be useful to able to say that something was not only a URI, but that
it was a "mailto" and not a "http://...".
</p>
</issue> -->
<div4 id='uri-reference-lexical-representation'>
<head>Lexical representation</head>
<p>
to be filled in a future point release
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
<!--
<simpleType name='uri-reference'>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div4>
</div3>
<!--
     remove uuid datatype for now...
	 we might reintroduce it later if we get EVERYTHING else done and
	 there is still time

<div3 id="uuid">
<head>uuid</head>
<p>
<termdef id="dt-uuid" term="uuid">The <term>uuid</term> datatype
represents Universally Unique IDentifiers as defined in <bibref ref="uuids"/>.
The <termref def='dt-value-space'/> of the uuid datatype is the set of 128-bit sequences, groupped
into 16 octects, where some bits of octet 8 (called the variant field)
determine finer structure (see <bibref ref="uuids"/> for a complete description).
The lexical space of the uuid datatype is the set of all 36 character
strings where the 9th, 14th, 19th and 24th characters are "-" and all other
characters are hexidecimal digits.</termdef>
</p>
<p>
The <term>uuid</term> datatype has no fundamental or constraining facets.
</p>
</div3>
  -->
<div3 id='ID'>
<head>ID</head>
<p>
<termdef id='dt-ID' term='ID'><term>ID</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>ID attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>ID</term> is the set of
all strings that match the
<xnt href='&xmlnsspec;#NT-NCName'>NCName</xnt> production in <bibref ref='XMLNS'/>
and have been used in an XML document.  The <termref def='dt-lexical-space'/>
of <term>ID</term>
is the set of all strings that match the <xnt href='&xmlnsspec;#NT-NCName'>
NCName</xnt> production in <bibref ref='XMLNS'/>.
</termdef>
</p>
<note>
<p>
The <termref def='dt-value-space'/> of <term>ID</term> is scoped to a specifc
instance document.
</p>
</note>
<p>
For compatibility (see <specref ref='terminology'/>)
<term>ID</term> should be used only on attributes.
</p>
<constraintnote type='svc' id='id'>
<head>ID Unique</head>
<p>
An <term>ID</term> must not appear
more than once in an XML document as a value of this type; i.e.,
<term>ID</term> values must uniquely identify the elements which bear them.
</p>
</constraintnote>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='ID'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='IDREF'>
<head>IDREF</head>
<p>
<termdef id='dt-IDREF' term='IDREF'><term>IDREF</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>IDREF attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>IDREF</term> is the set of all
strings that match the
<xnt href='&xmlnsspec;#NT-NCName'>NCName</xnt> production in <bibref ref='XMLNS'/>
and have been used in an XML document as the value of an element or attribute
of type <dtref ref='ID'/>.  The <termref def='dt-lexical-space'/>
of <term>IDREF</term>
is the set of all strings that match the <xnt href='&xmlnsspec;#NT-NCName'>
NCName</xnt> production in <bibref ref='XMLNS'/>.
<!--
The
<termref def='dt-basetype'/> of <term>IDREF</term> is <dtref ref='ID'/>.
-->
</termdef>
</p>
<issue id='idref-subtype-of-id'>
<p>
Can IDREF be defined as a subtype of ID?  Since every IDREF must also be an
ID I think we're
OK...we get around the problem of validation requirements not being supported
by our general facet mechanism because of this.  However, the only way to do
that today would be as follows: &lt;simpleType name='IDREF' basetype='ID'/>,
that is, by not giving any facets and, in effect, saying that the value spaces
are <term>identical</term>; but, isn't the "real" value
space of IDREF a restriction (i.e., a proper subset) of the value space of ID?
</p>
</issue>
<note>
<p>
The <termref def='dt-value-space'/> of <term>IDREF</term> is scoped to a specifc
instance document.
<!--
and is a restriction of the instance document scoped
<termref def='dt-value-space'/> of <dtref ref='ID'/>.
-->
</p>
</note>
<p>
For compatibility (see <specref ref='terminology'/>) this datatype should be
used only on attributes.
</p>
<constraintnote type='svc' id='idref'>
<head>IDREF</head>
<p>
An <term>IDREF</term> must match the value of an <dtref ref='ID'/> in the XML
document in which it occurs.
<!--
; i.e. <term>IDREF</term> values must match the value of some
<dtref ref='ID'/>.
-->
</p>
</constraintnote>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>IDREF</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref="IDREFS"/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='IDREF'>
	<subtype>IDREFS</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='ENTITY'>
<head>ENTITY</head>
<p>
<termdef id='dt-ENTITY' term='ENTITY'><term>ENTITY</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>ENTITY attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>ENTITY</term> is the set of all
strings that match the
<xnt href='&xmlnsspec;#NT-NCName'>NCName</xnt> production in <bibref ref='XMLNS'/>
and have been declared as an unparsed
entity in a DTD.  The <termref def='dt-lexical-space'/>
of <term>ENTITY</term>
is the set of all strings that match the <xnt href='&xmlnsspec;#NT-NCName'>
NCName</xnt> production in <bibref ref='XMLNS'/>.
</termdef>
</p>
<ednote><edtext>Need a reference to unparsed entity in XML 1.0</edtext></ednote>
<note>
<p>
The <termref def='dt-value-space'/> of <term>ENTITY</term> is scoped to a specifc
instance document.
</p>
</note>
<constraintnote type='svc' id='entity'>
<head>ENTITY declared</head>
<p>
<term>ENTITY</term> values must match an unparsed entity name
that is declared in the schema.
</p>
</constraintnote>
<p>
For compatibility (see <specref ref='terminology'/>) <term>ENTITY</term>
should be used only on attributes.
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>ENTITY</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='ENTITIES'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='ENTITY'>
	<subtype>ENTITIES</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='NOTATION'>
<head>NOTATION</head>
<p>
<termdef id='dt-NOTATION' term='NOTATION'><term>NOTATION</term> represents the
<xnt href='&xmlspec;#NT-NotationType'>NOTATION attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>NOTATION</term> is the set of all
<xspecref href='&xsdl;#declare-notation'>notations declared</xspecref> in
a schema.
The <termref def='dt-lexical-space'/> of <term>NOTATION</term>
is the set of all strings that match the <xnt href='&xmlnsspec;#NT-NCName'>
NCName</xnt> production in <bibref ref='XMLNS'/>.
<!--
The <termref def='dt-basetype'/>
of <term>NOTATION</term> is <dtref ref='NCName'/>.
-->
</termdef>
</p>
<note>
<p>
The <termref def='dt-value-space'/> of <term>NOTATION</term> is scoped to a specifc
instance document.
</p>
</note>
<constraintnote type='svc' id='notation'>
<head>NOTATION declared</head>
<p>
<term>NOTATION</term> values must match a notation name
that is declared in the schema.
</p>
</constraintnote>
<p>
For compatibility (see <specref ref='terminology'/>) <term>NOTATION</term>
should be used only on attributes.
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='NOTATION'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
</div2>
<div2 id='built-in-derived'>
<head>Derived datatypes</head>
<p>
This section gives conceptual definitions for all
<termref def='dt-built-in'/> <termref def='dt-derived'/>
datatypes defined by this specification.
The XML Representation
used to define <termref def='dt-derived'/> datatypes (whether
<termref def='dt-built-in'/> or <termref def='dt-user-derived'/>) is
given in section <specref ref='datatype-definitions'/>
and the complete definitions of the <termref def='dt-built-in'/>
<termref def='dt-derived'/> datatypes are provided in Appendix
<specref ref='schema'/>.
</p>
<div3 id='language'>
<head>language</head>
<p>
<termdef id='dt-language' term='language'><term>language</term>
represents natural language identifiers as defined by <bibref ref='RFC1766'/>.
The <termref def='dt-value-space'/> of <term>language</term> is the set of all
strings that match the <xnt href='&xmlspec;#NT-LanguageID'>LanguageID</xnt>
production in <bibref ref='XML'/>.
The <termref def='dt-lexical-space'/> of <term>language</term> is the set
of all strings that match the <xnt href='&xmlspec;#NT-LanguageID'>LanguageID</xnt>
production in <bibref ref='XML'/>.  The <termref def='dt-basetype'/> of
<term>language</term> is <dtref ref='string'/>.
</termdef>
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='language' base='string'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='IDREFS'>
<head>IDREFS</head>
<p>
<termdef id='dt-IDREFS' term='IDREFS'><term>IDREFS</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>IDREFS attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>IDREFS</term> is the set of
finite-length sequences of <termref def='dt-IDREF'/>s
that have been used in an XML document. The <termref def='dt-lexical-space'/>
of <term>IDREFS</term> is the set of whitespace separated tokens, each
of which is in the <termref def='dt-lexical-space'/>
of <dtref ref='IDREF'/>.
The <termref def='dt-basetype'/> of <term>IDREFS</term> is <dtref ref='IDREF'/>.
</termdef>
</p>
<note>
<p>
The <termref def='dt-value-space'/> of <term>IDREFS</term> is scoped to a specifc
instance document.
</p>
</note>
<p>
For compatibility (see <specref ref='terminology'/>) <term>IDREFS</term>
should be used only on attributes.
</p>
<ednote>
<edtext>
Should we include the type definitions for all built-in-derived types inline,
such as the following:
</edtext>
</ednote>
<note role='example'>
<eg><![CDATA[<simpleType name="IDREFS" base="IDREF" derivedBy="list"/>]]></eg>
</note>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<div4>
<head>Derived datatypes</head>
<subtypes/>
<p>
<term>IDREFS</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='IDREF'/></p></item>
</ulist>
</div4>
-->
<!--
<constraintnote type='svc' id='idref'>
<head>IDREF</head>
<p>
each Name must match the value of an <dtref ref='ID'/> in the XML
document; i.e. <term>IDREF</term> values must match the value of some
<dtref ref='ID'/>.
</p>
</constraintnote>
-->
<!--
<simpleType name='IDREFS' base='IDREF'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='ENTITIES'>
<head>ENTITIES</head>
<p>
<termdef id='dt-ENTITIES' term='ENTITIES'><term>ENTITIES</term>
represents the <xnt href='&xmlspec;#NT-TokenizedType'>
ENTITIES attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>ENTITIES</term> is the set of
finite-length sequences of <termref def='dt-ENTITY'/>s that have been declared as
unparsed entities in a DTD.
The <termref def='dt-lexical-space'/> of <term>ENTITIES</term> is the set of
whitespace separated tokens, each of which is in the <termref def='dt-lexical-space'/>
of <dtref ref='NMTOKEN'/>.
The <termref def='dt-basetype'/> of <term>ENTITIES</term> is <dtref ref='ENTITY'/>.
</termdef>
</p>
<note>
<p>
The <termref def='dt-value-space'/> of <term>ENTITIES</term> is scoped to a specifc
instance document.
</p>
</note>
<p>
For compatibility (see <specref ref='terminology'/>) <term>ENTITIES</term>
should be used only on attributes.
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='ENTITIES'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='NMTOKEN'>
<head>NMTOKEN</head>
<p>
<termdef id='dt-NMTOKEN' term='NMTOKEN'><term>NMTOKEN</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>NMTOKEN attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>NMTOKEN</term> is the set
of tokens that <termref def='dt-match'/> the
<xnt href='&xmlspec;#NT-Nmtoken'>Nmtoken</xnt> production in <bibref ref='XML'/>.
The <termref def='dt-lexical-space'/> of <term>NMTOKEN</term> is the set of
strings that <termref def='dt-match'/> the
<xnt href='&xmlspec;#NT-Nmtoken'>Nmtoken</xnt> production in <bibref ref='XML'/>.
The <termref def='dt-basetype'/> of <term>NMTOKEN</term> is <dtref ref='string'/>.
</termdef>
</p>
<p>
For compatibility (see <specref ref='terminology'/>) <term>NMTOKEN</term> should
be used only on attributes.
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>NMTOKEN</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='NMTOKENS'/></p></item>
<item><p><specref ref='Name'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='NMTOKEN' base='string'>
	<subtype>NMTOKENS</subtype>
	<subtype>Name</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='NMTOKENS'>
<head>NMTOKENS</head>
<p>
<termdef id='dt-NMTOKENS' term='NMTOKENS'><term>NMTOKENS</term> represents the
<xnt href='&xmlspec;#NT-TokenizedType'>NMTOKENS attribute type</xnt> from
<bibref ref='XML'/>.
The <termref def='dt-value-space'/> of <term>NMTOKENS</term> is the
set of fininte-length sequences of <termref def='dt-NMTOKEN'/>s.
The <termref def='dt-lexical-space'/> of <term>NMTOKENS</term> is the set of 
whitespace separated tokens, each of which is in the <termref def='dt-lexical-space'/>
of <dtref ref='NMTOKEN'/>.
The <termref def='dt-basetype'/> of <term>NMTOKENS</term> is
<dtref ref='NMTOKEN'/>.
</termdef>
</p>
<p>
For compatibility (see <specref ref='terminology'/>) <term>NMTOKENS</term> should
be used only on attributes.
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='NMTOKENS' base='NMTOKEN'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='Name'>
<head>Name</head>
<p>
<termdef id='dt-Name' term='Name'><term>Name</term>
represents <xspecref href='&xmlspec;#dt-name'>XML Names</xspecref>.
The <termref def='dt-value-space'/> of <term>Name</term>
the set of all strings which match the <xspecref href='&xmlspec;#NT-Name'>
Name</xspecref> production of <bibref ref='XML'/>.  The
<termref def='dt-lexical-space'/> of <term>Name</term> is the set of all
strings which match the
<xnt href='&xmlspec;#NT-Name'>Name</xnt> production of
<bibref ref='XML'/>. The <termref def='dt-basetype'/> of <term>Name</term>
is <dtref ref='string'/>.</termdef>
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>Name</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='QName'/></p></item>
<item><p><specref ref='NCName'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='Name' base='NMTOKEN'>
	<subtype>ID</subtype>
	<subtype>NCName</subtype>
	<subtype>QName</subtype>
	<subtype>NOTATION</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='QName'>
<head>QName</head>
<p>
<termdef id='dt-QName' term='QName'><term>QName</term>
represents <xspecref href='&xmlnsspec;#dt-qname'>XML qualified names</xspecref>.
The <termref def='dt-value-space'/> of <term>QName</term>
is the set of all strings which match the <xspecref href='&xmlnsspec;#NT-QName'>
QName</xspecref> production of <bibref ref='XMLNS'/>.  The
<termref def='dt-lexical-space'/> of
<term>QName</term> is the set of all strings which match the
<xnt href='&xmlnsspec;#NT-QName'>QName</xnt> production of
<bibref ref='XMLNS'/>.  The <termref def='dt-basetype'/> of <term>QName</term>
is <dtref ref='Name'/>. </termdef>
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='QName' base='Name'>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='NCName'>
<head>NCName</head>
<p>
<termdef id='dt-NCName' term='NCName'><term>NCName</term>
represents XML "non-colonized" Names.  The <termref def='dt-value-space'/>
of <term>NCName</term> is
the set of all strings which match the <xspecref href='&xmlnsspec;#NT-NCName'>
NCName</xspecref> production of <bibref ref='XMLNS'/>.  The
<termref def='dt-lexical-space'/> of
<term>NCName</term> is the set of all strings which match the
<xnt href='&xmlnsspec;#NT-NCName'>NCName</xnt> production of
<bibref ref='XMLNS'/>.  The <termref def='dt-basetype'/> of <term>NCName</term>
is <dtref ref='Name'/>. </termdef>
</p>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<div4>
<head>Derived datatypes</head>
<subtypes/>
<p>
<term>NCName</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='ID'/></p></item>
<item><p><specref ref='NOTATION'/></p></item>
</ulist>
</div4>
-->
<!--
<simpleType name='NCName' base='Name'>
	<subtype>ID</subtype>
	<subtype>NOTATION</subtype>
	<facet>length</facet>
	<facet>minlength</facet>
	<facet>maxlength</facet>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='integer'>
<head>integer</head>
<p>
<termdef id='dt-integer' term='integer'><term>integer</term>
is <termref def='dt-derived'/> from <dtref ref='decimal'/>
by fixing the value of <termref def='dt-scale'/> to be 0.
This results in the standard mathematical concept of the integer numbers.
The <termref def='dt-value-space'/> of <term>integer</term> is the infinite set
{...,-2,-1,0,1,2,...}
The <termref def='dt-basetype'/> of <term>integer</term> is <dtref ref='decimal'/>.
</termdef>
</p>
<div4 id='integer-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>integer</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: -1, 0,
12678967543233, +100000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>integer</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='non-positive-integer'/></p></item>
<item><p><specref ref='long'/></p></item>
<item><p><specref ref='non-negative-integer'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='integer' base='decimal'>
	<subtype>non-positive-integer</subtype>
	<subtype>long</subtype>
	<subtype>non-negative-integer</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='non-positive-integer'>
<head>non-positive-integer</head>
<p>
<termdef id='dt-non-positive-integer' term='non-positive-integer'>
<term>non-positive-integer</term>
is <termref def='dt-derived'/> from <dtref ref='integer'/>
by fixing the value of <termref def='dt-maxInclusive'/> to be 0.
This results in the standard mathematical concept of the non-positive integers.
The <termref def='dt-value-space'/> of <term>non-positive-integer</term>
is the infinite set {...,-2,-1,0}.
The <termref def='dt-basetype'/> of <term>non-positive-integer</term>
is <dtref ref='integer'/>.
</termdef>
</p>
<div4 id='non-positive-integer-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>non-positive-integer</term> values have a single, standard lexical representation.
This consists of a string of digits with a leading "-" sign.
For example: -1, 0, -12678967543233, -100000.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>non-positive-integer</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='negative-integer'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='non-positive-integer' base='integer'>
	<subtype>negative-integer</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='negative-integer'>
<head>negative-integer</head>
<p>
<termdef id='dt-negative-integer' term='negative-integer'>
<term>negative-integer</term>
is <termref def='dt-derived'/> from <dtref ref='non-positive-integer'/>
by fixing the value of <termref def='dt-maxInclusive'/> to be -1.
This results in the standard mathematical concept of the negative integers.
The <termref def='dt-value-space'/> of <term>negative-integer</term>
is the infinite set
{...,-2,-1}.
The <termref def='dt-basetype'/>
of <term>negative-integer</term>
is <dtref ref='non-positive-integer'/>.
</termdef>
</p>
<div4 id='negative-integer-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>negative-integer</term> values have a single, standard lexical representation.
This consists of a string of digits with a leading "-" sign.
For example: -1, -12678967543233, -100000.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='negative-integer' base='non-positive-integer'>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='long'>
<head>&long;</head>
<p>
<termdef id='dt-long' term='long'><term>&long;</term>
is <termref def='dt-derived'/> from <dtref ref='integer'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 9223372036854775807
and <termref def='dt-minInclusive'/> to be -9223372036854775808.
The <termref def='dt-basetype'/> of <term>&long;</term> is <dtref ref='integer'/>.
</termdef>
</p>
<div4 id='long-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&long;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: -1, 0,
12678967543233, +100000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&long;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='int'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='long' base='integer'>
	<subtype>int</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='int'>
<head>&int;</head>
<p>
<termdef id='dt-int' term='int'><term>&int;</term>
is <termref def='dt-derived'/> from <dtref ref='long'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 2147483647
and <termref def='dt-minInclusive'/> to be -2147483648.
The <termref def='dt-basetype'/> of <term>&int;</term> is <dtref ref='long'/>.
</termdef>
</p>
<div4 id='int-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&int;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: -1, 0,
126789675, +100000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&int;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='short'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='int' base='long'>
	<subtype>short</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='short'>
<head>&short;</head>
<p>
<termdef id='dt-short' term='short'><term>&short;</term>
is <termref def='dt-derived'/> from <dtref ref='short'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 32767
and <termref def='dt-minInclusive'/> to be -32768.
The <termref def='dt-basetype'/> of <term>&short;</term> is <dtref ref='int'/>.
</termdef>
</p>
<div4 id='short-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&short;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: -1, 0,
12678, +10000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&short;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='byte'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='short' base='int'>
	<subtype>byte</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='byte'>
<head>&byte;</head>
<p>
<termdef id='dt-byte' term='byte'><term>&byte;</term>
is <termref def='dt-derived'/> from <dtref ref='short'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 127
and <termref def='dt-minInclusive'/> to be -128.
The <termref def='dt-basetype'/> of <term>&byte;</term> is <dtref ref='short'/>.
</termdef>
</p>
<div4 id='byte-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&byte;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: -1, 0,
126, +100.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<!--
<simpleType name='byte' base='short'>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='non-negative-integer'>
<head>non-negative-integer</head>
<p>
<termdef id='dt-non-negative-integer' term='non-negative-integer'>
<term>non-negative-integer</term>
is <termref def='dt-derived'/> from <dtref ref='integer'/>
by fixing the value of <termref def='dt-minInclusive'/> to be 0.
This results in is the standard mathematical concept of the non-negative
integers. The <termref def='dt-value-space'/> of <term>non-negative-integer</term>
is the infinite set {0,1,2,...}.
The <termref def='dt-basetype'/> of <term>non-negative-integer</term>
is <dtref ref='integer'/>.
</termdef>
</p>
<div4 id='non-negative-integer-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>non-negative-integer</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading "+" sign.
If the sign is omitted, "+" is assumed.  For example: 1, 0,
12678967543233, +100000.
</p>
</div4>
<div4>
<head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>non-negative-integer</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='unsigned-long'/></p></item>
<item><p><specref ref='positive-integer'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='non-negative-integer' base='integer'>
	<subtype>unsigned-long</subtype>
	<subtype>positive-integer</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='unsigned-long'>
<head>&unsigned-long;</head>
<p>
<termdef id='dt-unsigned-long' term='unsigned-long'><term>&unsigned-long;</term>
is <termref def='dt-derived'/> from <dtref ref='non-negative-integer'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 18446744073709551615.
The <termref def='dt-basetype'/> of <term>&unsigned-long;</term> is
<dtref ref='non-negative-integer'/>.
</termdef>
</p>
<div4 id='unsigned-long-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&unsigned-long;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: 0,
12678967543233, +100000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&unsigned-long;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='unsigned-int'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='unsigned-long' base='non-negative-integer'>
	<subtype>unsigned-int</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='unsigned-int'>
<head>&unsigned-int;</head>
<p>
<termdef id='dt-unsigned-int' term='unsigned-int'><term>&unsigned-int;</term>
is <termref def='dt-derived'/> from <dtref ref='unsigned-long'/>
by fixing the values of <termref def='dt-maxInclusive'/> to be 4294967295.
The <termref def='dt-basetype'/> of <term>&unsigned-int;</term> is
<dtref ref='unsigned-long'/>.
</termdef>
</p>
<div4 id='unsigned-int-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&unsigned-int;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: 0,
1267896754, +100000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&unsigned-int;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='unsigned-short'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='unsigned-int' base='unsigned-long'>
	<subtype>unsigned-short</subtype>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='unsigned-short'>
<head>&unsigned-short;</head>
<p>
<termdef id='dt-unsigned-short' term='unsigned-short'><term>&unsigned-short;</term>
is <termref def='dt-derived'/> from <dtref ref='unsigned-int'/>
by fixing the value <termref def='dt-maxInclusive'/> to be 65535.
The <termref def='dt-basetype'/> of <term>&unsigned-short;</term> is
<dtref ref='unsigned-int'/>.
</termdef>
</p>
<div4 id='unsigned-short-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&unsigned-short;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: 0,
12678, +10000.
</p>
</div4>
<div4><head>Constraining facets</head>
<facets/>
</div4>
<div4>
<head>Derived datatypes</head>
<subtypes/>
<!--
<p>
<term>&unsigned-short;</term> has the following <termref def='dt-derived'/> datatypes:
</p>
<ulist>
<item><p><specref ref='unsigned-byte'/></p></item>
</ulist>
-->
</div4>
<!--
<simpleType name='unsigned-short' base='unsigned-int'>
	<subtypes>unsigned-byte</subtypes>
	<facet>minExclusive</facet>
	<facet>maxExclusive</facet>
	<facet>minInclusive</facet>
	<facet>maxInclusive</facet>
	<facet>pattern</facet>
	<facet>enumeration</facet>
</simpleType>
-->
</div3>
<div3 id='unsigned-byte'>
<head>&unsigned-byte;</head>
<p>
<termdef id='dt-unsigned-byte' term='unsigned-byte'><term>&unsigned-byte;</term>
is <termref def='dt-derived'/> from <dtref ref='unsigned-short'/>
by fixing the value <termref def='dt-maxInclusive'/> to be 255.
The <termref def='dt-basetype'/> of <term>&unsigned-byte;</term> is
<dtref ref='unsigned-short'/>.
</termdef>
</p>
<div4 id='unsigned-byte-lexical-representation'>
<head>Lexical representation</head>
<p>
<term>&unsigned-byte;</term> values have a single, standard lexical representation.
This consists of a string of digits with an optional leading sign.
If the sign is omitted, "+" is assumed.  For example: 0,
126, 