<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE spec SYSTEM "xmlspec.dtd" [
	<!ENTITY errataloc "http://www.w3.org/XML/xml-V11-1e-errata">
	<!ENTITY impreploc "http://www.w3.org/XML/2002/09/xml11-implementation.html">
	<!ENTITY preverrataloc "">
	<!ENTITY doc.shortname "xml11">
	<!ENTITY draft.tr.level "PR">
	<!ENTITY draft.year "2003">
	<!ENTITY draft.month.name "November">
	<!ENTITY draft.month "11">
	<!ENTITY draft.day "05">
	<!ENTITY iso6.doc.date "&draft.year;&draft.month;&draft.day;">
	<!ENTITY doc.ident "&draft.tr.level;-&doc.shortname;-&iso6.doc.date;">
	<!ENTITY translationloc "http://www.w3.org/2003/03/Translations/byTechnology?technology=xml11">
	<!ENTITY http-ident "http://www.w3.org/TR/&draft.year;/&doc.ident;/">
	<!ENTITY http-ident "http://www.w3.org/XML/Group/&draft.year;/&draft.month;/&doc.ident;/">
	<!ENTITY versionOfXML "1.1">
	<!ENTITY WebSGML "WebSGML Adaptations Annex to ISO 8879">
	<!ENTITY nbsp "&#160;">
	<!ENTITY mdash "&#x2014;">
	<!ENTITY pio "'&lt;?xml'">
	<!ENTITY pic "'?>'">
	<!ENTITY como "--">
	<!ENTITY comc "--">
	<!ENTITY hcro "&amp;#x">
	<!ENTITY magicents "<code>amp</code>,
<code>lt</code>,
<code>gt</code>,
<code>apos</code>,
<code>quot</code>">
	<!ENTITY middot "&#xB7;">
	<!ENTITY auml "&#xE4;">
	<!ENTITY ccedil "&#xE7;">
	<!ENTITY uuml "&#xFC;">
]>
<?xml-stylesheet type="text/xsl" href="PER-xml-3e.xsl"?>
<!--?xmlspysps C:\Program Files\Altova\XMLSPY\sps\Template\xmlspec\xmlspec.sps?-->
<spec w3c-doctype="pr">
	<!--
Notes on preparation of the XML 1.1 First Edition:

- Removed all diff="add" and diff="chg" markup
- Removed all elements with diff="del" markup
- Removed all erratum references (locs with role="erratumref")
- Added new editor
- Patched up status section
- Content from XML 1.1 CR
- Made ref to XML 1.0 non-normative
- Appendixes I and J changed for 1.1 First Edition
- New Appendix B has problems, move to Appendix K instead
- Added all accepted and resolved issues
- Backed out overkill resolution of Tobin-02
-->

	<!--
Notes on preparation of the Third Edition:

- Last erratum integrated: E60
- Worked from http://www.w3.org/XML/xml-V10-2e-errata.
- Changed DTD reference to point to V2.4 of XMLspec.
- Added stylesheet PI.
- Revised Status section to reflect new status.
- Incorporated all errata (barring obsoleted and invalid ones);
  added links to the errata document with <loc role="erratumref">
  elements; used diff="{add|chg|del}" attribute.  This version
  expects that the official HTML output will have diff="del"
  elements suppressed.
- Added formal markup (rfc2119 element) for RFC 2119 keywords
  (MUST, SHOULD, etc.).  This required small modifications to
  the text in some cases, like "is" -> "MUST be".
-->

	<!--
Notes on preparation of the Second Edition:

- Worked from http://www.w3.org/XML/xml-19980210-errata.
- Changed DTD reference to point to V2.1 of XMLspec.
- Moved version number from <title> to <version> element and
  added "second edition" wording.  Mentioned edition information
  in status.
- Removed bgcolor="&cellback;" attributes from all <td>
  elements because that attribute is not in the current table model.
- Reversed status and abstract, so that abstract is first, according
  to W3C guidelines.
- Changed some <emph>s to <titleref>s in bibliography.
- Changed some <code>s to <at> etc. throughout; where used <attval>,
  removed existing <quote>s because the stylesheet produces them.
- Removed some spurious spaces.
- Added affiliation markup to the original member list.
- Added commas between individual <thisver> elements, because
  whitespace is now significant there.
- Moved <eg>s, <scrap>s, and lists outside of <p>s for cleaner HTML
  conversion.
- Revised Status section to reflect new status.
- Fixed all titleref hrefs so they get transformed properly; at
  next revision, these all probably need to be changed to some
  other markup.
- Incorporated all errata (barring obsoleted and invalid ones);
  added links to the errata document with <loc role="erratumref">
  elements; used diff="{add|chg|del}" attribute.  This version
  expects that the official HTML output will have diff="del"
  elements suppressed.
- Removed most of the contents of the revisondesc element, which
  documented the production of the first edition.  Historians
  may find this content in the first (or second edition).
-->
	<header>
		<title>Extensible Markup Language (XML)</title>
		<version>&versionOfXML;</version>
		<w3c-designation>&doc.ident;</w3c-designation>
		<w3c-doctype>W3C Proposed Recommendation</w3c-doctype>
		<pubdate>
			<day>&draft.day;</day>
			<month>&draft.month.name;</month>
			<year>&draft.year;</year>
		</pubdate>
		<publoc><loc href="&http-ident;">&http-ident;</loc></publoc>
		<altlocs>
			<loc href="&http-ident;&doc.ident;.xml">XML</loc>
			<!--loc href="&http-ident;&doc.ident;.pdf">PDF</loc-->
			<loc href="&http-ident;&doc.ident;-review.html">XHTML with color-coded revision indicators</loc>
		</altlocs>
		<latestloc><loc href="http://www.w3.org/TR/&doc.shortname;">http://www.w3.org/TR/&doc.shortname;</loc></latestloc>
		<prevlocs><loc href="http://www.w3.org/TR/2002/CR-xml11-20021015/">http://www.w3.org/TR/2002/CR-xml11-20021015/</loc></prevlocs>
		<authlist>
			<author role="1e">
				<name>Tim Bray</name>
				<affiliation>Textuality and Netscape</affiliation>
				<email href="mailto:tbray@textuality.com">tbray@textuality.com</email>
			</author>
			<author role="1e">
				<name>Jean Paoli</name>
				<affiliation>Microsoft</affiliation>
				<email href="mailto:jeanpa@microsoft.com">jeanpa@microsoft.com</email>
			</author>
			<author role="1e">
				<name>C. M. Sperberg-McQueen</name>
				<affiliation>University
of Illinois at Chicago and Text Encoding Initiative</affiliation>
				<email href="mailto:cmsmcq@uic.edu">cmsmcq@uic.edu</email>
			</author>
			<author role="2e">
				<name>Eve Maler</name>
				<affiliation>Sun Microsystems, Inc.</affiliation>
				<email href="mailto:elm@east.sun.com">eve.maler@east.sun.com</email>
			</author>
			<author role="3e">
				<name>Fran&ccedil;ois Yergeau</name>
				<email href="mailto:fyergeau@alis.com">fyergeau@alis.com</email>
			</author>
			<author role="1.1-1e" diff="add">
				<name>John Cowan</name>
				<email href="mailto:cowan@ccil.org">cowan@ccil.org</email>
			</author>
		</authlist>
		<errataloc href="&errataloc;"/>
		<preverrataloc href="&preverrataloc;"/>
		<translationloc href="&translationloc;"/>
		<abstract>
			<p>The Extensible Markup Language (XML) is a subset of SGML that is completely
described in this document. Its goal is to enable generic SGML to be served,
received, and processed on the Web in the way that is now possible with HTML.
XML has been designed for ease of implementation and for interoperability
with both SGML and HTML.</p>
		</abstract>
		<status>
			<!--p>This document has been reviewed by W3C Members and other interested parties
and has been endorsed by the Director as a W3C Recommendation. It is a stable
document and may be used as reference material or cited as a normative reference
from another document. W3C's role in making the Recommendation is to draw
attention to the specification and to promote its widespread deployment. This
enhances the functionality and interoperability of the Web.</p-->
			<p><emph>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the <loc href="http://www.w3.org/TR/">W3C technical reports index</loc> at http://www.w3.org/TR/.</emph></p>
			<p>This document is a <loc href="http://www.w3.org/2003/06/Process-20030618/tr.html#RecsPR">Proposed Recommendation</loc> of the W3C.  This document is based on the feedback from implementers on the XML 1.0 Candidate Recommendation dated 15 October 2002, and the <loc href="http://www.w3.org/XML/Core">XML Core Working Group</loc> believes that the specification is now stable and ready for the Advisory Committee review.</p>
<p>Publication as a Proposed Recommendation does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.</p>
			<p>W3C Advisory Committee Representatives are invited to submit their formal review per the 
instructions in the Call for Review. The public is also invited to send comments to 
<loc href="mailto:xml-editor@w3.org">xml-editor@w3.org</loc> (public <loc href="http://lists.w3.org/Archives/Public/xml-editor/">archives</loc> are available).
The review period extends to 5 December 2003.
Reviewers are encouraged to read the <loc href="&http-ident;&doc.ident;-review.html">XHTML with color-coded revision indicators</loc>; this version highlights each substantive change separating XML 1.1 from XML 1.0.</p>
			<p>This document specifies a syntax created by subsetting an existing, widely
used international text processing standard (Standard Generalized Markup Language,
ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web.
It is a product of the <loc href="http://www.w3.org/XML/Activity.html">W3C XML Activity</loc>.
The English version of this specification is the only normative version. However,
for translations of this document, see <loc href="&translationloc;">&translationloc;</loc>.
A list of current W3C Recommendations and other technical documents can be found
at <loc href="http://www.w3.org/TR/">http://www.w3.org/TR</loc>.</p>
			<p>Documentation of intellectual property possibly relevant to this recommendation
may be found at the Working Group's public
<loc href="http://www.w3.org/2002/08/xmlcore-IPR-statements">IPR disclosure page</loc>.</p>
			<p>An implementation report for XML 1.1 is available at <loc href="&impreploc;">&impreploc;</loc>.</p>
			<p>Please report errors in this document to <loc href="mailto:xml-editor@w3.org">xml-editor@w3.org</loc>; <loc href="http://lists.w3.org/Archives/Public/xml-editor">archives</loc> are available. The errata list for this third edition is available
at <loc href="&errataloc;">&errataloc;</loc>.</p>
			<p>A <loc href="http://www.w3.org/XML/Test/">Test Suite</loc> is maintained to help assessing conformance to this specification.</p>
			<note>
				<p>C. M. Sperberg-McQueen's affiliation has changed since the publication
of the first edition of XML 1.0. He is now at the World Wide Web Consortium, and can
be contacted at <loc href="mailto:cmsmcq@w3.org">cmsmcq@w3.org</loc>.</p>
			</note>
		</status>
		<pubstmt>
			<p>Chicago, Vancouver, Mountain View, et al.: World-Wide Web Consortium, XML
Working Group, 1996, 1997, 2000, 2003.</p>
		</pubstmt>
		<sourcedesc>
			<p>Created in electronic form.</p>
		</sourcedesc>
		<langusage>
			<language id="EN">English</language>
			<language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
		</langusage>
		<revisiondesc>
			<p role="cvsid">$Id: PR-xml11-20031105.xml,v 1.1 2003/11/03 17:05:58 vivien Exp $</p>
		</revisiondesc>
	</header>
	<body>
		<div1 id="sec-intro">
			<head>Introduction</head>
			<p>Extensible Markup Language, abbreviated XML, describes a class of data
objects called <termref def="dt-xml-doc">XML documents</termref> and partially
describes the behavior of computer programs which process them. XML is an
application profile or restricted form of SGML, the Standard Generalized Markup
Language <bibref ref="ISO8879"/>. By construction, XML documents are conforming
SGML documents.</p>
			<p>XML documents are made up of storage units called <termref def="dt-entity">entities</termref>,
which contain either parsed or unparsed data. Parsed data is made up of <termref def="dt-character">characters</termref>, some of which form <termref def="dt-chardata">character
data</termref>, and some of which form <termref def="dt-markup">markup</termref>.
Markup encodes a description of the document's storage layout and logical
structure. XML provides a mechanism to impose constraints on the storage layout
and logical structure.</p>
			<p><termdef id="dt-xml-proc" term="XML Processor">A software module called
an <term>XML processor</term> is used to read XML documents and provide access
to their content and structure.</termdef> <termdef id="dt-app" term="Application">It
is assumed that an XML processor is doing its work on behalf of another module,
called the <term>application</term>.</termdef> This specification describes
the required behavior of an XML processor in terms of how it must read XML
data and the information it must provide to the application.</p>
			<div2 id="sec-origin-goals">
				<head>Origin and Goals</head>
				<p>XML was developed by an XML Working Group (originally known as the SGML
Editorial Review Board) formed under the auspices of the World Wide Web Consortium
(W3C) in 1996. It was chaired by Jon Bosak of Sun Microsystems with the active
participation of an XML Special Interest Group (previously known as the SGML
Working Group) also organized by the W3C. The membership of the XML Working
Group is given in an appendix. Dan Connolly served as the WG's contact with
the W3C.</p>
				<p>The design goals for XML are:</p>
				<olist>
					<item>
						<p>XML shall be straightforwardly usable over the Internet.</p>
					</item>
					<item>
						<p>XML shall support a wide variety of applications.</p>
					</item>
					<item>
						<p>XML shall be compatible with SGML.</p>
					</item>
					<item>
						<p>It shall be easy to write programs which process XML documents.</p>
					</item>
					<item>
						<p>The number of optional features in XML is to be kept to the absolute
minimum, ideally zero.</p>
					</item>
					<item>
						<p>XML documents should be human-legible and reasonably clear.</p>
					</item>
					<item>
						<p>The XML design should be prepared quickly.</p>
					</item>
					<item>
						<p>The design of XML shall be formal and concise.</p>
					</item>
					<item>
						<p>XML documents shall be easy to create.</p>
					</item>
					<item>
						<p>Terseness in XML markup is of minimal importance.</p>
					</item>
				</olist>
<p>This specification, together with associated standards (Unicode
<bibref ref="Unicode"/> and ISO/IEC 10646 <bibref ref="ISO10646"/>
for characters, Internet RFC 3066 <bibref ref="RFC1766"/> for
language identification tags, ISO 639 <bibref ref="ISO639"/>
for language name codes, and ISO 3166 <bibref ref="ISO3166"/> for
country name codes), provides all the information necessary to
understand XML Version &versionOfXML; and construct computer
programs to process it.</p>
				<p>This version of the XML specification may be distributed freely, as long as
all text and legal notices remain intact.</p>
			</div2>
			<div2 id="sec-terminology">
				<head>Terminology</head>
				<p>The terminology used to describe XML documents is defined in the body of
this specification. <phrase role="mustard">The key words <rfc2119>MUST</rfc2119>, <rfc2119>MUST NOT</rfc2119>, <rfc2119>REQUIRED</rfc2119>, <rfc2119>SHALL</rfc2119>, <rfc2119>SHALL NOT</rfc2119>, <rfc2119>SHOULD</rfc2119>, <rfc2119>SHOULD NOT</rfc2119>, <rfc2119>RECOMMENDED</rfc2119>, <rfc2119>MAY</rfc2119>, and <rfc2119>OPTIONAL</rfc2119>, when <rfc2119>EMPHASIZED</rfc2119>, are to be interpreted as described in <bibref ref="rfc2119"/>. In addition, </phrase>the terms defined in the following list are used in building
those definitions and in describing the actions of an XML processor:<glist>
						<gitem>
							<label>error</label>
							<def>
								<p><termdef id="dt-error" term="Error">A violation of the rules of this specification;
results are undefined. <phrase role="mustard">Unless otherwise specified, failure to observe a prescription of this specification indicated by one of the keywords <rfc2119>MUST</rfc2119>, <rfc2119>REQUIRED</rfc2119>, <rfc2119>MUST NOT</rfc2119>, <rfc2119>SHALL</rfc2119> and <rfc2119>SHALL NOT</rfc2119> is an error.</phrase>  Conforming software <rfc2119>MAY</rfc2119> detect and report an error
and <rfc2119>MAY</rfc2119> recover from it.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>fatal error</label>
							<def>
								<p><termdef id="dt-fatal" term="Fatal Error">An error which a conforming <termref def="dt-xml-proc">XML processor</termref> <rfc2119>MUST</rfc2119> detect and report to the application.
After encountering a fatal error, the processor <rfc2119>MAY</rfc2119> continue processing the
data to search for further errors and <rfc2119>MAY</rfc2119> report such errors to the application.
In order to support correction of errors, the processor <rfc2119>MAY</rfc2119> make unprocessed
data from the document (with intermingled character data and markup) available
to the application. Once a fatal error is detected, however, the processor
<rfc2119>MUST NOT</rfc2119> continue normal processing (i.e., it <rfc2119>MUST NOT</rfc2119> continue to pass character
data and information about the document's logical structure to the application
in the normal way).</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>at user option</label>
							<def>
								<p><termdef id="dt-atuseroption" term="At user option">Conforming software
<rfc2119>MAY</rfc2119> or <rfc2119>MUST</rfc2119> (depending on the modal verb in the sentence) behave as described;
if it does, it <rfc2119>MUST</rfc2119> provide users a means to enable or disable the behavior
described.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>validity constraint</label>
							<def>
								<p><termdef id="dt-vc" term="Validity constraint">A rule which applies to
all <termref def="dt-valid">valid</termref> XML documents. Violations of validity
constraints are errors; they <rfc2119>MUST</rfc2119>, at user option, be reported by <termref def="dt-validating">validating XML processors</termref>.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>well-formedness constraint</label>
							<def>
								<p><termdef id="dt-wfc" term="Well-formedness constraint">A rule which applies
to all <termref def="dt-wellformed">well-formed</termref> XML documents. Violations
of well-formedness constraints are <termref def="dt-fatal">fatal errors</termref>.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>match</label>
							<def>
								<p><termdef id="dt-match" term="match">(Of strings or names:) Two strings
or names being compared <rfc2119>MUST</rfc2119> be identical. Characters with multiple possible
representations in ISO/IEC 10646 (e.g. characters with both precomposed and
base+diacritic forms) match only if they have the same representation in both
strings. No
case folding is performed. (Of strings and rules in the grammar:) A string
matches a grammatical production if it belongs to the language generated by
that production. (Of content and content models:) An element matches its declaration
when it conforms in the fashion described in the constraint <specref ref="elementvalid"/>.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>for compatibility</label>
							<def>
								<p><termdef id="dt-compat" term="For Compatibility">Marks
a sentence describing a feature of XML included solely to ensure
that XML remains compatible with SGML.</termdef></p>
							</def>
						</gitem>
						<gitem>
							<label>for interoperability</label>
							<def>
								<p><termdef id="dt-interop" term="For interoperability">Marks
a sentence describing a non-binding recommendation included to increase
the chances that XML documents can be processed by the existing installed
base of SGML processors which predate the &WebSGML;.</termdef></p>
							</def>
						</gitem>
					</glist></p>
			</div2>
			<div2 id="sec-xml11" diff="add">
				<head>Rationale for XML 1.1</head>
<p>The W3C's XML 1.0 Recommendation was first issued in 1998, and
despite the issuance of many errata culminating in a Third Edition
of 2003, has remained (by intention) unchanged with respect to what
is well-formed XML and what is not. This stability has been
extremely useful for interoperability. However, the Unicode
Standard on which XML 1.0 relies for character specifications has
not remained static, evolving from version 2.0 to version 4.0 and
beyond. Characters not present in Unicode 2.0 may already be used
in XML 1.0 character data. However, they are not allowed in XML
names such as element type names, attribute names, enumerated
attribute values, processing instruction targets, and so on. In
addition, some characters that should have been permitted in XML
names were not, due to oversights and inconsistencies in Unicode
2.0.</p>

<p>The overall philosophy of names has changed since XML 1.0.
Whereas XML 1.0 provided a rigid definition of names, wherein
everything that was not permitted was forbidden, XML 1.1 names are
designed so that everything that is not forbidden (for a specific
reason) is permitted. Since Unicode will continue to grow past
version 4.0, further changes to XML can be avoided by allowing
almost any character, including those not yet assigned, in
names.</p>

<p>In addition, XML 1.0 attempts to adapt to the line-end
conventions of various modern operating systems, but discriminates
against the conventions used on IBM and IBM-compatible mainframes.
As a result, XML documents on mainframes are not plain text files
according to the local conventions. XML 1.0 documents generated on
mainframes must either violate the local line-end conventions, or
employ otherwise unnecessary translation phases before parsing and
after generation. Allowing straightforward interoperability is
particularly important when data stores are shared between
mainframe and non-mainframe systems (as opposed to being copied
from one to the other). Therefore XML 1.1 adds NEL (#x85) to the
list of line-end characters. For completeness, the Unicode line
separator character, #x2028, is also supported.
</p>

<p>Finally, there is considerable demand to define a standard representation
of arbitrary Unicode characters in XML documents. Therefore, XML 1.1
allows the use of character references to the control characters #x1 through
#x1F, most of which are forbidden in XML 1.0. For reasons of robustness,
however, these characters still cannot be used directly in documents. In
order to improve the robustness of character encoding detection, the additional
control characters #x7F through #x9F, which were freely allowed in XML 1.0
documents, now must also appear only as character references. (Whitespace
characters are of course exempt.) The minor sacrifice of backward compatibility
is considered not significant. Due to potential problems with APIs,
#x0 is still forbidden both directly and as a character reference.
</p>

<p>A new XML version, rather than a set of errata to XML 1.0, is
being created because the changes affect the definition of
well-formed documents. XML 1.0 processors must continue to reject
documents that contain new characters in XML names, new line-end
conventions, and references to control characters. The distinction between XML 1.0 and XML 1.1 documents
is indicated by the version number information in the XML
declaration at the start of each document.
</p>

			</div2>
		</div1>
		<!-- &Docs; -->
		<div1 id="sec-documents">
			<head>Documents</head>
			<p><termdef id="dt-xml-doc" term="XML Document"> A data object is an <term>XML
document</term> if it is <termref def="dt-wellformed">well-formed</termref>,
as defined in this specification. A well-formed XML document <rfc2119>MAY</rfc2119> in addition
be <termref def="dt-valid">valid</termref> if it meets certain further constraints.</termdef></p>
			<p>Each XML document has both a logical and a physical structure. Physically,
the document is composed of units called <termref def="dt-entity">entities</termref>.
An entity <rfc2119>MAY</rfc2119> <termref def="dt-entref">refer</termref> to other entities to
cause their inclusion in the document. A document begins in a <quote>root</quote>
or <termref def="dt-docent">document entity</termref>. Logically, the document
is composed of declarations, elements, comments, character references, and
processing instructions, all of which are indicated in the document by explicit
markup. The logical and physical structures <rfc2119>MUST</rfc2119> nest properly, as described
in <specref ref="wf-entities"/>.</p>
			<div2 id="sec-well-formed">
				<head>Well-Formed XML Documents</head>
				<p><termdef id="dt-wellformed" term="Well-Formed"> A textual object is a <term>well-formed</term>
XML document if:</termdef></p>
				<olist>
					<item>
						<p>Taken as a whole, it matches the production labeled <nt def="NT-document">document</nt>.</p>
					</item>
					<item>
						<p>It meets all the well-formedness constraints given in this specification.</p>
					</item>
					<item>
						<p>Each of the <termref def="dt-parsedent">parsed entities</termref>
which is referenced directly or indirectly within the document is <termref def="dt-wellformed">well-formed</termref>.</p>
					</item>
				</olist>
				<scrap id="document" lang="ebnf">
					<head>Document</head>
					<prod id="NT-document" num="1">
						<lhs>document</lhs>
						<rhs><nt def="NT-prolog">prolog</nt> <nt def="NT-element">element</nt> <nt def="NT-Misc">Misc</nt>*</rhs>
					</prod>
				</scrap>
				<p>Matching the <nt def="NT-document">document</nt> production implies that:</p>
				<olist>
					<item>
						<p>It contains one or more <termref def="dt-element">elements</termref>.</p>
					</item>
					<!--* N.B. some readers (notably JC) find the following
paragraph awkward and redundant. I agree it's logically redundant:
it *says* it is summarizing the logical implications of
matching the grammar, and that means by definition it's
logically redundant. I don't think it's rhetorically
redundant or unnecessary, though, so I'm keeping it. It
could however use some recasting when the editors are feeling
stronger. -MSM *-->
					<item>
						<p><termdef id="dt-root" term="Root Element">There is exactly one element,
called the <term>root</term>, or document element, no part of which appears
in the <termref def="dt-content">content</termref> of any other element.</termdef> For
all other elements, if the <termref def="dt-stag">start-tag</termref> is in
the content of another element, the <termref def="dt-etag">end-tag</termref>
is in the content of the same element. More simply stated, the elements,
delimited by start- and end-tags, nest properly within each other.</p>
					</item>
				</olist>
				<p><termdef id="dt-parentchild" term="Parent/Child">As a consequence of this,
for each non-root element <el>C</el> in the document, there is one other element <el>P</el>
in the document such that <el>C</el> is in the content of <el>P</el>, but
is not in the content of any other element that is in the content of <el>P</el>. <el>P</el>
is referred to as the <term>parent</term> of <el>C</el>, and <el>C</el> as
a <term>child</term> of <el>P</el>.</termdef></p>
			</div2>
			<div2 id="charsets">
				<head>Characters</head>
				<p><termdef id="dt-text" term="Text">A parsed entity contains <term>text</term>,
a sequence of <termref def="dt-character">characters</termref>, which may
represent markup or character data.</termdef> <termdef id="dt-character" term="Character">A <term>character</term>
is an atomic unit of text as specified by <phrase>ISO/IEC 10646:2000 <bibref ref="ISO10646"/></phrase>. Legal characters are tab, carriage
return, line feed, and the legal characters
of Unicode and ISO/IEC 10646. The
versions of these standards cited in <specref ref="sec-existing-stds"/> were
current at the time this document was prepared. New characters may be added
to these standards by amendments or new editions. Consequently, XML processors
<rfc2119>MUST</rfc2119> accept any character in the range specified for <nt def="NT-Char">Char</nt></termdef></p>
				<scrap id="char32" lang="ebnf">
					<head>Character Range</head>
					<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
						<prod id="NT-Char" num="2">
							<lhs>Char</lhs>
							<rhs diff="chg">[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]</rhs>
							<com>any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.</com>
						</prod>
						<prod id="NT-RestrictedChar" num="2a" diff="add">
							<lhs>RestrictedChar</lhs>
							<rhs>[#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#xBF]</rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p>The mechanism for encoding character code points into bit patterns <rfc2119>MAY</rfc2119>
vary from entity to entity. All XML processors <rfc2119>MUST</rfc2119> accept the UTF-8 and UTF-16
encodings of <phrase> Unicode 3.1
<bibref ref="Unicode3"/></phrase>;
the mechanisms for signaling which of the two is in use,
or for bringing other encodings into play, are discussed later, in <specref ref="charencoding"/>.</p>
				<note>
					<p>Document authors are encouraged to avoid
<quote>compatibility characters</quote>, as defined
in section 6.8 of <bibref ref="Unicode"/> (see also D21 in section 3.6 of
<bibref ref="Unicode3"/>). The characters defined in the following ranges are also
discouraged. They are either control characters or permanently undefined Unicode
characters:</p>
					<eg>
[#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF],
[#1FFFE-#x1FFFF], [#2FFFE-#x2FFFF], [#3FFFE-#x3FFFF],
[#4FFFE-#x4FFFF], [#5FFFE-#x5FFFF], [#6FFFE-#x6FFFF],
[#7FFFE-#x7FFFF], [#8FFFE-#x8FFFF], [#9FFFE-#x9FFFF],
[#AFFFE-#xAFFFF], [#BFFFE-#xBFFFF], [#CFFFE-#xCFFFF],
[#DFFFE-#xDFFFF], [#EFFFE-#xEFFFF], [#FFFFE-#xFFFFF],
[#10FFFE-#x10FFFF].</eg>
				</note>
				<!--
<p>Regardless of the specific encoding used, any character in
the ISO/IEC 10646 character set may be referred to by the decimal
or hexadecimal equivalent of its UCS-4 code value.
</p>-->
			</div2>
			<div2 id="sec-common-syn">
				<head>Common Syntactic Constructs</head>
				<p>This section defines some symbols used widely in the grammar.</p>
				<p><nt def="NT-S">S</nt> (white space) consists of one or more space (#x20)
characters, carriage returns, line feeds, or tabs.</p>
				<scrap id="white" lang="ebnf">
					<head>White Space</head>
					<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
						<prod id="NT-S" num="3">
							<lhs>S</lhs>
							<rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
						</prod>
					</prodgroup>
				</scrap>
        <note>
         <p>The presence of #xD in the above production is
	maintained purely for backward compatibility with the
	<loc href="http://www.w3.org/TR/1998/REC-xml-19980210">First Edition</loc>.
	As explained in <specref ref="sec-line-ends"/>,
	all #xD characters literally present in an XML document
	are either removed or replaced by #xA characters before
	any other processing is done. The only way to get a #xD character to match this production is to
  use a character reference in an entity value literal.</p>
        </note>
				<p diff="del">Characters are classified for convenience as letters, digits, or other
characters. A
letter consists of an alphabetic or syllabic base character or an ideographic
character. Full definitions of the specific characters in each class
are given in <specref ref="CharClasses"/>.</p>
				<p><termdef id="dt-name" term="Name">A <term>Name</term> is a token beginning
with a letter or one of a few punctuation characters, and continuing with
letters, digits, hyphens, underscores, colons, or full stops, together known
as name characters.</termdef> Names beginning with the string <quote><code>xml</code></quote>,
or <phrase>with</phrase> any string which would match <code>(('X'|'x') ('M'|'m') ('L'|'l'))</code>,
are reserved for standardization in this or future versions of this specification.</p>
				<note>
					<p>The
Namespaces in XML Recommendation <bibref ref="xml-names"/> assigns a meaning
to names containing colon characters. Therefore, authors should not use the
colon in XML names except for namespace purposes, but XML processors must
accept the colon as a name character.</p>
				</note>
				<p>An <nt def="NT-Nmtoken">Nmtoken</nt> (name token) is any mixture of name
characters.</p>
<p diff="add">The first character of a Name <rfc2119>MUST</rfc2119> be a NameStartChar, and any
other characters <rfc2119>MUST</rfc2119> be NameChars; this mechanism is used to
prevent names from beginning with European (ASCII) digits or with
basic combining characters. Almost all characters are permitted in
names, except those which either are or reasonably could be used as
delimiters. The intention is to be inclusive rather than exclusive,
so that writing systems not yet encoded in Unicode can be used in
XML names. See <specref ref="sec-suggested-names"/> for suggestions on the creation of
names.</p>

<p diff="add">Document authors are encouraged to use names which are
meaningful words or combinations of words in natural languages, and
to avoid symbolic or whitespace characters in names. Note that
COLON, HYPHEN-MINUS, FULL STOP (period), LOW LINE (underscore), and
MIDDLE DOT are explicitly permitted.</p>

<p diff="add">The ASCII symbols and punctuation marks, along with a fairly
large group of Unicode symbol characters, are excluded from names
because they are more useful as delimiters in contexts where XML
names are used outside XML documents; providing this group gives
those contexts hard guarantees about what <emph>cannot</emph> be part of
an XML name. The character #x037E, GREEK QUESTION MARK, is excluded
because when normalized it becomes a semicolon, which could change
the meaning of entity references.</p>
				<scrap lang="ebnf">
					<head>Names and Tokens</head>
					<prod id="NT-NameStartChar" num="4">
						<lhs>NameStartChar</lhs>
						<rhs diff="chg">":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]</rhs>
					</prod>
					<prod id="NT-NameChar" num="4a" diff="add">
						<lhs>NameChar</lhs>
						<rhs><nt def="NT-NameStartChar">NameStartChar</nt> | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]</rhs>
					</prod>
					<prod id="NT-Name" num="5">
						<lhs>Name</lhs>
						<rhs diff="chg"><nt def="NT-NameStartChar">NameStartChar</nt> (<nt def="NT-NameChar">NameChar</nt>)*</rhs>
					</prod>
					<prod id="NT-Names" num="6">
						<lhs>Names</lhs>
						<rhs><nt def="NT-Name">Name</nt> (#x20 <nt def="NT-Name">Name</nt>)*</rhs>
					</prod>
					<prod id="NT-Nmtoken" num="7">
						<lhs>Nmtoken</lhs>
						<rhs>(<nt def="NT-NameChar">NameChar</nt>)+</rhs>
					</prod>
					<prod id="NT-Nmtokens" num="8">
						<lhs>Nmtokens</lhs>
						<rhs><nt def="NT-Nmtoken">Nmtoken</nt> (#x20 <nt def="NT-Nmtoken">Nmtoken</nt>)*</rhs>
					</prod>
				</scrap>
				<note>
					<p>The <nt def="NT-Names">Names</nt>
and <nt def="NT-Nmtokens">Nmtokens</nt> productions are used to define the validity
of tokenized attribute values after normalization (see <specref ref="sec-attribute-types"/>).</p>
				</note>
				<p>Literal data is any quoted string not containing the quotation mark used
as a delimiter for that string. Literals are used for specifying the content
of internal entities (<nt def="NT-EntityValue">EntityValue</nt>), the values
of attributes (<nt def="NT-AttValue">AttValue</nt>), and external identifiers
(<nt def="NT-SystemLiteral">SystemLiteral</nt>). Note that a <nt def="NT-SystemLiteral">SystemLiteral</nt>
can be parsed without scanning for markup.</p>
				<scrap lang="ebnf">
					<head>Literals</head>
					<prod id="NT-EntityValue" num="9">
						<lhs>EntityValue</lhs>
						<rhs>'"' ([^%&amp;"] | <nt def="NT-PEReference">PEReference</nt>
| <nt def="NT-Reference">Reference</nt>)* '"' </rhs>
						<rhs>|&nbsp; "'" ([^%&amp;'] | <nt def="NT-PEReference">PEReference</nt> | <nt def="NT-Reference">Reference</nt>)* "'"</rhs>
					</prod>
					<prod id="NT-AttValue" num="10">
						<lhs>AttValue</lhs>
						<rhs>'"' ([^&lt;&amp;"] | <nt def="NT-Reference">Reference</nt>)*
'"' </rhs>
						<rhs>|&nbsp; "'" ([^&lt;&amp;'] | <nt def="NT-Reference">Reference</nt>)*
"'"</rhs>
					</prod>
					<prod id="NT-SystemLiteral" num="11">
						<lhs>SystemLiteral</lhs>
						<rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'") </rhs>
					</prod>
					<prod id="NT-PubidLiteral" num="12">
						<lhs>PubidLiteral</lhs>
						<rhs>'"' <nt def="NT-PubidChar">PubidChar</nt>* '"'
| "'" (<nt def="NT-PubidChar">PubidChar</nt> - "'")* "'"</rhs>
					</prod>
					<prod id="NT-PubidChar" num="13">
						<lhs>PubidChar</lhs>
						<rhs>#x20 | #xD | #xA |&nbsp;[a-zA-Z0-9] |&nbsp;[-'()+,./:=?;!*#@$_%]</rhs>
					</prod>
				</scrap>
				<note>
					<p>Although
the <nt def="NT-EntityValue">EntityValue</nt> production allows the definition
of an entity consisting of a single explicit <code>&lt;</code> in the literal
(e.g., <code>&lt;!ENTITY mylt "&lt;"></code>), it is strongly advised to avoid
this practice since any reference to that entity will cause a well-formedness
error.</p>
				</note>
			</div2>
			<div2 id="syntax">
				<head>Character Data and Markup</head>
				<p><termref def="dt-text">Text</termref> consists of intermingled <termref def="dt-chardata">character data</termref> and markup. <termdef id="dt-markup" term="Markup"><term>Markup</term> takes the form of <termref def="dt-stag">start-tags</termref>, <termref def="dt-etag">end-tags</termref>, <termref def="dt-empty">empty-element tags</termref>, <termref def="dt-entref">entity references</termref>, <termref def="dt-charref">character
references</termref>, <termref def="dt-comment">comments</termref>, <termref def="dt-cdsection">CDATA section</termref> delimiters, <termref def="dt-doctype">document
type declarations</termref>, <termref def="dt-pi">processing instructions</termref>, <nt def="NT-XMLDecl">XML declarations</nt>, <nt def="NT-TextDecl">text declarations</nt>,
and any white space that is at the top level of the document entity (that
is, outside the document element and not inside any other markup).</termdef></p>
				<p><termdef id="dt-chardata" term="Character Data">All text that is not markup
constitutes the <term>character data</term> of the document.</termdef></p>
				<p>The ampersand character (&amp;) and the left angle bracket (&lt;) <phrase role="mustard"><rfc2119>MUST NOT</rfc2119></phrase> appear
in their literal form<phrase role="mustard">, except</phrase> when used as markup delimiters, or
within a <termref def="dt-comment">comment</termref>, a <termref def="dt-pi">processing
instruction</termref>, or a <termref def="dt-cdsection">CDATA section</termref>.
<!-- FINAL EDIT: restore internal entity decl or leave it out. -->
If they are needed elsewhere, they <rfc2119>MUST</rfc2119> be <termref def="dt-escape">escaped</termref>
using either <termref def="dt-charref">numeric character references</termref>
or the strings <quote><code>&amp;amp;</code></quote> and <quote><code>&amp;lt;</code></quote>
respectively. The right angle bracket (>) <rfc2119>MAY</rfc2119> be represented using the string <quote><code>&amp;gt;</code></quote>,
and <rfc2119>MUST</rfc2119>, <termref def="dt-compat">for compatibility</termref>, be escaped
using <phrase>either</phrase> <quote><code>&amp;gt;</code></quote> or a character reference when it
appears in the string <quote><code>]]&gt;</code></quote> in content, when
that string is not marking the end of a <termref def="dt-cdsection">CDATA
section</termref>.</p>
				<p>In the content of elements, character data is any string of characters
which does not contain the start-delimiter of any markup. In a CDATA section,
character data is any string of characters not including the CDATA-section-close
delimiter, <quote><code>]]&gt;</code></quote>.</p>
				<p>To allow attribute values to contain both single and double quotes, the
apostrophe or single-quote character (') <rfc2119>MAY</rfc2119> be represented as <quote><code>&amp;apos;</code></quote>,
and the double-quote character (") as <quote><code>&amp;quot;</code></quote>.</p>
				<scrap lang="ebnf">
					<head>Character Data</head>
					<prod id="NT-CharData" num="14">
						<lhs>CharData</lhs>
						<rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs>
					</prod>
				</scrap>
			</div2>
			<div2 id="sec-comments">
				<head>Comments</head>
				<p><termdef id="dt-comment" term="Comment"><term>Comments</term> <rfc2119>MAY</rfc2119> appear
anywhere in a document outside other <termref def="dt-markup">markup</termref>;
in addition, they <rfc2119>MAY</rfc2119> appear within the document type declaration at places
allowed by the grammar. They are not part of the document's <termref def="dt-chardata">character
data</termref>; an XML processor <rfc2119>MAY</rfc2119>, but need not, make it possible for an
application to retrieve the text of comments. <termref def="dt-compat">For
compatibility</termref>, the string <quote><code>--</code></quote> (double-hyphen)
<rfc2119>MUST NOT</rfc2119> occur within comments.</termdef> Parameter
entity references <phrase role="mustard"><rfc2119>MUST NOT</rfc2119> be</phrase> recognized within comments.</p>
				<scrap lang="ebnf">
					<head>Comments</head>
					<prod id="NT-Comment" num="15">
						<lhs>Comment</lhs>
						<rhs>'&lt;!--' ((<nt def="NT-Char">Char</nt> - '-') | ('-'
(<nt def="NT-Char">Char</nt> - '-')))* '-->'</rhs>
					</prod>
				</scrap>
				<p>An example of a comment:</p>
				<eg>&lt;!&como; declarations for &lt;head> &amp; &lt;body> &comc;></eg>
				<p>Note
that the grammar does not allow a comment ending in <code>---></code>. The
following example is <emph>not</emph> well-formed.</p>
				<eg>&lt;!-- B+, B, or B---></eg>
			</div2>
			<div2 id="sec-pi">
				<head>Processing Instructions</head>
				<p><termdef id="dt-pi" term="Processing instruction"><term>Processing instructions</term>
(PIs) allow documents to contain instructions for applications.</termdef></p>
				<scrap lang="ebnf">
					<head>Processing Instructions</head>
					<prod id="NT-PI" num="16">
						<lhs>PI</lhs>
						<rhs>'&lt;?' <nt def="NT-PITarget">PITarget</nt> (<nt def="NT-S">S</nt>
(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>* &pic; <nt def="NT-Char">Char</nt>*)))? &pic;</rhs>
					</prod>
					<prod id="NT-PITarget" num="17">
						<lhs>PITarget</lhs>
						<rhs><nt def="NT-Name">Name</nt> - (('X' | 'x') ('M' |
'm') ('L' | 'l'))</rhs>
					</prod>
				</scrap>
				<p>PIs are not part of the document's <termref def="dt-chardata">character
data</termref>, but <rfc2119>MUST</rfc2119> be passed through to the application. The PI begins
with a target (<nt def="NT-PITarget">PITarget</nt>) used to identify the application
to which the instruction is directed. The target names <quote><code>XML</code></quote>, <quote><code>xml</code></quote>,
and so on are reserved for standardization in this or future versions of this
specification. The XML <termref def="dt-notation">Notation</termref> mechanism
<rfc2119>MAY</rfc2119> be used for formal declaration of PI targets. Parameter
entity references <phrase role="mustard"><rfc2119>MUST NOT</rfc2119> be</phrase> recognized within processing instructions.</p>
			</div2>
			<div2 id="sec-cdata-sect">
				<head>CDATA Sections</head>
				<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term> <rfc2119>MAY</rfc2119> occur anywhere character data may occur; they are used to escape blocks
of text containing characters which would otherwise be recognized as markup.
CDATA sections begin with the string <quote><code>&lt;![CDATA[</code></quote>
and end with the string <quote><code>]]&gt;</code></quote>:</termdef></p>
				<scrap lang="ebnf">
					<head>CDATA Sections</head>
					<prod id="NT-CDSect" num="18">
						<lhs>CDSect</lhs>
						<rhs><nt def="NT-CDStart">CDStart</nt> <nt def="NT-CData">CData</nt> <nt def="NT-CDEnd">CDEnd</nt></rhs>
					</prod>
					<prod id="NT-CDStart" num="19">
						<lhs>CDStart</lhs>
						<rhs>'&lt;![CDATA['</rhs>
					</prod>
					<prod id="NT-CData" num="20">
						<lhs>CData</lhs>
						<rhs>(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>*
']]&gt;' <nt def="NT-Char">Char</nt>*)) </rhs>
					</prod>
					<prod id="NT-CDEnd" num="21">
						<lhs>CDEnd</lhs>
						<rhs>']]&gt;'</rhs>
					</prod>
				</scrap>
				<p>Within a CDATA section, only the <nt def="NT-CDEnd">CDEnd</nt> string is
recognized as markup, so that left angle brackets and ampersands may occur
in their literal form; they need not (and cannot) be escaped using <quote><code>&amp;lt;</code></quote>
and <quote><code>&amp;amp;</code></quote>. CDATA sections cannot nest.</p>
				<p>An example of a CDATA section, in which <quote><code>&lt;greeting></code></quote>
and <quote><code>&lt;/greeting></code></quote> are recognized as <termref def="dt-chardata">character data</termref>, not <termref def="dt-markup">markup</termref>:</p>
				<eg>&lt;![CDATA[&lt;greeting>Hello, world!&lt;/greeting>]]&gt; </eg>
			</div2>
			<div2 id="sec-prolog-dtd">
				<head>Prolog and Document Type Declaration</head>
				<p><termdef id="dt-xmldecl" term="XML Declaration">XML documents <rfc2119>SHOULD</rfc2119>
begin with an <term>XML declaration</term> which specifies the version of
XML being used.</termdef> For example, the following is a complete XML document, <termref def="dt-wellformed">well-formed</termref> but not <termref def="dt-valid">valid</termref>:</p>
				<eg><![CDATA[<?xml version="1.0"?>
<greeting>Hello, world!</greeting> ]]></eg>
				<p>and so is this:</p>
				<eg><![CDATA[<greeting>Hello, world!</greeting>]]></eg>

				<p>The function of the markup in an XML document is to describe its storage and
logical structure and to associate<phrase>attribute
name-value</phrase> pairs with its logical structures. XML provides a mechanism, the
<termref def="dt-doctype">document
type declaration</termref>, to define constraints on the logical structure
and to support the use of predefined storage units. <termdef id="dt-valid" term="Validity">An XML document is <term>valid</term> if it has an associated
document type declaration and if the document complies with the constraints
expressed in it.</termdef></p>
				<p>The document type declaration <rfc2119>MUST</rfc2119> appear before the first <termref def="dt-element">element</termref>
in the document.</p>
				<scrap id="xmldoc" lang="ebnf">
					<head>Prolog</head>
					<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
						<prod id="NT-prolog" num="22">
							<lhs>prolog</lhs>
							<rhs><nt def="NT-XMLDecl">XMLDecl</nt>? <nt def="NT-Misc">Misc</nt>*
(<nt def="NT-doctypedecl">doctypedecl</nt> <nt def="NT-Misc">Misc</nt>*)?</rhs>
						</prod>
						<prod id="NT-XMLDecl" num="23">
							<lhs>XMLDecl</lhs>
							<rhs>&pio; <nt def="NT-VersionInfo">VersionInfo</nt> <nt def="NT-EncodingDecl">EncodingDecl</nt>? <nt def="NT-SDDecl">SDDecl</nt>? <nt def="NT-S">S</nt>?&pic;</rhs>
						</prod>
						<prod id="NT-VersionInfo" num="24">
							<lhs>VersionInfo</lhs>
							<rhs><nt def="NT-S">S</nt> 'version' <nt def="NT-Eq">Eq</nt>
("'" <nt def="NT-VersionNum">VersionNum</nt> "'" | '"' <nt def="NT-VersionNum">VersionNum</nt>
'"')</rhs>
						</prod>
						<prod id="NT-Eq" num="25">
							<lhs>Eq</lhs>
							<rhs><nt def="NT-S">S</nt>? '=' <nt def="NT-S">S</nt>?</rhs>
						</prod>
						<prod id="NT-VersionNum" num="26">
							<lhs>VersionNum</lhs>
							<rhs>'&versionOfXML;'</rhs>
						</prod>
						<prod id="NT-Misc" num="27">
							<lhs>Misc</lhs>
							<rhs><nt def="NT-Comment">Comment</nt> | <nt def="NT-PI">PI</nt>
| <nt def="NT-S">S</nt></rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p><termdef id="dt-doctype" term="Document Type Declaration">The XML <term>document
type declaration</term> contains or points to <termref def="dt-markupdecl">markup
declarations</termref> that provide a grammar for a class of documents. This
grammar is known as a document type definition, or <term>DTD</term>. The document
type declaration can point to an external subset (a special kind of <termref def="dt-extent">external entity</termref>) containing markup declarations,
or can contain the markup declarations directly in an internal subset, or
can do both. The DTD for a document consists of both subsets taken together.</termdef></p>
				<p><termdef id="dt-markupdecl" term="markup declaration"> A <term>markup declaration</term>
is an <termref def="dt-eldecl">element type declaration</termref>, an <termref def="dt-attdecl">attribute-list declaration</termref>, an <termref def="dt-entdecl">entity
declaration</termref>, or a <termref def="dt-notdecl">notation declaration</termref>.</termdef>
These declarations <rfc2119>MAY</rfc2119> be contained in whole or in part within <termref def="dt-PE">parameter
entities</termref>, as described in the well-formedness and validity constraints
below. For further
information, see <specref ref="sec-physical-struct"/>.</p>
				<scrap id="dtd" lang="ebnf">
					<head>Document Type Definition</head>
					<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
						<prod id="NT-doctypedecl" num="28">
							<lhs>doctypedecl</lhs>
							<rhs>'&lt;!DOCTYPE' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>
(<nt def="NT-S">S</nt> <nt def="NT-ExternalID">ExternalID</nt>)? <nt def="NT-S">S</nt>?
('[' <nt def="NT-intSubset">intSubset</nt> ']' <nt def="NT-S">S</nt>?)? '>'</rhs>
							<vc def="vc-roottype"/>
							<wfc def="ExtSubset"/>
						</prod>
						<prod id="NT-DeclSep" num="28a">
							<lhs>DeclSep</lhs>
							<rhs><nt def="NT-PEReference">PEReference</nt> | <nt def="NT-S">S</nt></rhs>
							<wfc def="PE-between-Decls"/>
						</prod>
						<prod id="NT-intSubset" num="28b">
							<lhs>intSubset</lhs>
							<rhs>(<nt def="NT-markupdecl">markupdecl</nt> | <nt def="NT-DeclSep">DeclSep</nt>)*</rhs>
						</prod>
						<prod id="NT-markupdecl" num="29">
							<lhs>markupdecl</lhs>
							<rhs><nt def="NT-elementdecl">elementdecl</nt> | <nt def="NT-AttlistDecl">AttlistDecl</nt> | <nt def="NT-EntityDecl">EntityDecl</nt>
| <nt def="NT-NotationDecl">NotationDecl</nt> | <nt def="NT-PI">PI</nt> | <nt def="NT-Comment">Comment</nt></rhs>
							<vc def="vc-PEinMarkupDecl"/>
							<wfc def="wfc-PEinInternalSubset"/>
						</prod>
					</prodgroup>
				</scrap>
				<p>Note
that it is possible to construct a well-formed document containing a <nt def="NT-doctypedecl">doctypedecl</nt>
that neither points to an external subset nor contains an internal subset.</p>
				<p>The markup declarations <rfc2119>MAY</rfc2119> be made up in whole or in part of the <termref def="dt-repltext">replacement text</termref> of <termref def="dt-PE">parameter
entities</termref>. The productions later in this specification for individual
nonterminals (<nt def="NT-elementdecl">elementdecl</nt>, <nt def="NT-AttlistDecl">AttlistDecl</nt>,
and so on) describe the declarations <emph>after</emph> all the parameter
entities have been <termref def="dt-include">included</termref>.</p>
				<p>Parameter
entity references are recognized anywhere in the DTD (internal and external
subsets and external parameter entities), except in literals, processing instructions,
comments, and the contents of ignored conditional sections (see <specref ref="sec-condition-sect"/>).
They are also recognized in entity value literals. The use of parameter entities
in the internal subset is restricted as described below.</p>
				<vcnote id="vc-roottype">
					<head>Root Element Type</head>
					<p>The <nt def="NT-Name">Name</nt>
in the document type declaration <rfc2119>MUST</rfc2119> match the element type of the <termref def="dt-root">root element</termref>.</p>
				</vcnote>
				<vcnote id="vc-PEinMarkupDecl">
					<head>Proper Declaration/PE Nesting</head>
					<p>Parameter-entity <termref def="dt-repltext">replacement text</termref> <rfc2119>MUST</rfc2119> be properly nested with markup declarations. That is to say, if either
the first character or the last character of a markup declaration (<nt def="NT-markupdecl">markupdecl</nt>
above) is contained in the replacement text for a <termref def="dt-PERef">parameter-entity
reference</termref>, both <rfc2119>MUST</rfc2119> be contained in the same replacement text.</p>
				</vcnote>
				<wfcnote id="wfc-PEinInternalSubset">
					<head>PEs in Internal Subset</head>
					<p>In
the internal DTD subset, <termref def="dt-PERef">parameter-entity references</termref> <phrase role="mustard"><rfc2119>MUST NOT</rfc2119> occur within markup declarations; they <rfc2119>MAY</rfc2119> occur where markup declarations can occur</phrase>.
(This does not apply to references that occur in external parameter entities
or to the external subset.)</p>
				</wfcnote>
				<wfcnote id="ExtSubset">
					<head>External Subset</head>
					<p>The external subset, if any, <rfc2119>MUST</rfc2119> match the production for <nt def="NT-extSubset">extSubset</nt>.</p>
				</wfcnote>
				<wfcnote id="PE-between-Decls">
					<head>PE Between Declarations</head>
					<p>The replacement text of a parameter entity reference
in a <nt def="NT-DeclSep">DeclSep</nt> <rfc2119>MUST</rfc2119> match the production <nt def="NT-extSubsetDecl">extSubsetDecl</nt>.</p>
				</wfcnote>
				<p>Like the internal subset, the external subset and any external parameter
entities referenced
in a <nt def="NT-DeclSep">DeclSep</nt> <rfc2119>MUST</rfc2119> consist of a series of
complete markup declarations of the types allowed by the non-terminal symbol <nt def="NT-markupdecl">markupdecl</nt>, interspersed with white space or <termref def="dt-PERef">parameter-entity references</termref>. However, portions of
the contents of the external subset or of these
external parameter entities <rfc2119>MAY</rfc2119> conditionally be ignored by using the <termref def="dt-cond-section">conditional section</termref> construct; this is not
allowed in the internal subset<phrase> but is
allowed in external parameter entities referenced in the internal subset</phrase>.</p>
				<scrap id="ext-Subset" lang="ebnf">
					<head>External Subset</head>
					<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
						<prod id="NT-extSubset" num="30">
							<lhs>extSubset</lhs>
							<rhs><nt def="NT-TextDecl">TextDecl</nt>? <nt def="NT-extSubsetDecl">extSubsetDecl</nt></rhs>
						</prod>
						<prod id="NT-extSubsetDecl" num="31">
							<lhs>extSubsetDecl</lhs>
							<rhs>( <nt def="NT-markupdecl">markupdecl</nt> | <nt def="NT-conditionalSect">conditionalSect</nt> | <nt def="NT-DeclSep">DeclSep</nt>)*</rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p>The external subset and external parameter entities also differ from the
internal subset in that in them, <termref def="dt-PERef">parameter-entity
references</termref> are permitted <emph>within</emph> markup declarations,
not only <emph>between</emph> markup declarations.</p>
				<p>An example of an XML document with a document type declaration:</p>
				<eg><![CDATA[<?xml version="1.0"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting> ]]></eg>
				<p>The <termref def="dt-sysid">system identifier</termref> <quote><code>hello.dtd</code></quote>
gives the address (a URI reference) of a DTD for the document.</p>
				<p>The declarations can also be given locally, as in this example:</p>
				<eg><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>]]></eg>
				<p>If both the external and internal subsets are used, the internal subset
<phrase role="mustard"><rfc2119>MUST</rfc2119> be</phrase> considered to occur before the external subset. <!-- 'is considered to'? boo. whazzat mean? -->
This has the effect that entity and attribute-list declarations in the internal
subset take precedence over those in the external subset.</p>
				<p diff="add">XML 1.1 processors should accept XML 1.0
documents as well. If a document is well-formed or valid XML 1.0, and provided it
does not contain any control characters
in the range [#x7F-#x9F] other than as character escapes, it may be
made well-formed or valid XML 1.1 respectively simply by changing the
version number.</p>
			</div2>
			<div2 id="sec-rmd">
				<head>Standalone Document Declaration</head>
				<p>Markup declarations can affect the content of the document, as passed from
an <termref def="dt-xml-proc">XML processor</termref> to an application; examples
are attribute defaults and entity declarations. The standalone document declaration,
which <rfc2119>MAY</rfc2119> appear as a component of the XML declaration, signals whether or
not there are such declarations which appear external to the <termref def="dt-docent">document
entity</termref>
or in parameter entities. <termdef id="dt-extmkpdecl" term="External Markup Declaration">An <term>external
markup declaration</term> is defined as a markup declaration occurring in
the external subset or in a parameter entity (external or internal, the latter
being included because non-validating processors are not required to read
them).</termdef></p>
				<scrap id="fulldtd" lang="ebnf">
					<head>Standalone Document Declaration</head>
					<prodgroup pcw2="4" pcw4="19.5" pcw5="9">
						<prod id="NT-SDDecl" num="32">
							<lhs>SDDecl</lhs>
							<rhs>#x20+ 'standalone' <nt def="NT-Eq">Eq</nt>
(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) </rhs>
							<vc def="vc-check-rmd"/>
						</prod>
					</prodgroup>
				</scrap>
				<p>In a standalone document declaration, the value <attval>yes</attval> indicates
that there are no <termref def="dt-extmkpdecl">external markup declarations</termref> which
affect the information passed from the XML processor to the application. The
value <attval>no</attval> indicates that there are or may be such external
markup declarations. Note that the standalone document declaration only denotes
the presence of external <emph>declarations</emph>; the presence, in a document,
of references to external <emph>entities</emph>, when those entities are internally
declared, does not change its standalone status.</p>
				<p>If there are no external markup declarations, the standalone document declaration
has no meaning. If there are external markup declarations but there is no
standalone document declaration, the value <attval>no</attval> is assumed.</p>
				<p>Any XML document for which <code>standalone="no"</code> holds can be converted
algorithmically to a standalone document, which may be desirable for some
network delivery applications.</p>
				<vcnote id="vc-check-rmd">
					<head>Standalone Document Declaration</head>
					<p>The
standalone document declaration <rfc2119>MUST</rfc2119> have the value <attval>no</attval> if
any external markup declarations contain declarations of:</p>
					<ulist>
						<item>
							<p>attributes with <termref def="dt-default">default</termref> values,
if elements to which these attributes apply appear in the document without
specifications of values for these attributes, or</p>
						</item>
						<item>
							<p>entities (other than &magicents;), if <termref def="dt-entref">references</termref>
to those entities appear in the document, or</p>
						</item>
						<item>
							<p>attributes with
tokenized types, where the
attribute appears in the document with a value such that
<titleref href="#AVNormalize">normalization</titleref>
will produce a different value from that which would be produced
in the absence of the declaration, or</p>
						</item>
						<item>
							<p>element types with <termref def="dt-elemcontent">element content</termref>,
if white space occurs directly within any instance of those types.</p>
						</item>
					</ulist>
				</vcnote>
				<p>An example XML declaration with a standalone document declaration:</p>
				<eg>&lt;?xml version="&versionOfXML;" standalone='yes'?></eg>
			</div2>
			<div2 id="sec-white-space">
				<head>White Space Handling</head>
				<p>In editing XML documents, it is often convenient to use <quote>white space</quote>
(spaces, tabs, and blank lines)
to set apart the markup for greater readability. Such white space is typically
not intended for inclusion in the delivered version of the document. On the
other hand, <quote>significant</quote> white space that should be preserved
in the delivered version is common, for example in poetry and source code.</p>
				<p>An <termref def="dt-xml-proc">XML processor</termref> <rfc2119>MUST</rfc2119> always pass
all characters in a document that are not markup through to the application.
A <termref def="dt-validating"> validating XML processor</termref> <rfc2119>MUST</rfc2119> also
inform the application which of these characters constitute white space appearing
in <termref def="dt-elemcontent">element content</termref>.</p>
				<p>A special <termref def="dt-attr">attribute</termref> named <att>xml:space</att> <rfc2119>MAY</rfc2119> be attached to an element to signal an intention that in that element,
white space should be preserved by applications. In valid documents, this
attribute, like any other, <rfc2119>MUST</rfc2119> be <termref def="dt-attdecl">declared</termref>
if it is used. When declared, it <rfc2119>MUST</rfc2119> be given as an <termref def="dt-enumerated">enumerated
type</termref> whose values
are one or both of <attval>default</attval> and <attval>preserve</attval>.
For example:</p>
				<eg><![CDATA[<!ATTLIST poem  xml:space (default|preserve) 'preserve'>]]>

&lt;!ATTLIST pre xml:space (preserve) #FIXED 'preserve'></eg>
				<p>The value <attval>default</attval> signals that applications' default white-space
processing modes are acceptable for this element; the value <attval>preserve</attval>
indicates the intent that applications preserve all the white space. This
declared intent is considered to apply to all elements within the content
of the element where it is specified, unless <phrase>overridden</phrase> with
another instance of the <att>xml:space</att> attribute. <phrase>This specification does not give meaning to any value of <att>xml:space</att> other than <attval>default</attval> and <attval>preserve</attval>. It is an error for other values to be specified; the XML processor <rfc2119>MAY</rfc2119> report the error or <rfc2119>MAY</rfc2119> recover by ignoring the attribute specification or by reporting the (erroneous) value to the application. Applications may ignore or reject erroneous values.</phrase></p>
				<p>The <termref def="dt-root">root element</termref> of any document is considered
to have signaled no intentions as regards application space handling, unless
it provides a value for this attribute or the attribute is declared with a
default value.</p>
			</div2>
			<div2 id="sec-line-ends">
				<head>End-of-Line Handling</head>
				<p>XML <termref def="dt-parsedent">parsed entities</termref> are often stored
in computer files which, for editing convenience, are organized into lines.
These lines are typically separated by some combination of the characters
carriage-return (#xD) and line-feed (#xA).</p>
				<p>To
simplify the tasks of <termref def="dt-app">applications</termref>, the
<phrase><termref def="dt-xml-proc">XML
processor</termref> <rfc2119>MUST</rfc2119> behave as if it</phrase> normalized all line breaks in external parsed
entities (including the document entity) on input, before parsing, by translating
<phrase diff="del">both the two-character sequence #xD #xA and any #xD that is not followed by
#xA to a single #xA character.</phrase>
<phrase diff="add">all of the following to a single #xA character:</phrase></p>
				<olist diff="add">
<item><p>the two-character sequence #xD #xA</p></item>

<item><p>the two-character sequence #xD #x85</p></item>

<item><p>the single character #x85</p></item>

<item><p>the single character #x2028</p></item>

<item><p>any #xD character that is not immediately followed by #xA or #x85.</p></item>
				</olist>
<p diff="chg">  The characters #x85 and #x2028 cannot be reliably recognized and
  translated until an entity's encoding declaration (if present) has
  been read.  Therefore, it is a fatal error to use them within the XML
  declaration or text declaration.
</p>

			</div2>
			<div2 id="sec-lang-tag">
				<head>Language Identification</head>
				<p>In document processing, it is often useful to identify the natural or formal
language in which the content is written. A special <termref def="dt-attr">attribute</termref>
named <att>xml:lang</att> <rfc2119>MAY</rfc2119> be inserted in documents to specify the language
used in the contents and attribute values of any element in an XML document.
In valid documents, this attribute, like any other, <rfc2119>MUST</rfc2119> be <termref def="dt-attdecl">declared</termref>
if it is used. The
values of the attribute are language identifiers as defined by <bibref ref="RFC1766"/>, <titleref>Tags
for the Identification of Languages</titleref>, or its successor<phrase>; in addition, the empty string <rfc2119>MAY</rfc2119> be specified</phrase>.</p>
				<p>(Productions 33 through 38 have been removed.)</p>
				<p>For example:</p>
				<eg><![CDATA[<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
  <l>Habe nun, ach! Philosophie,</l>
  <l>Juristerei, und Medizin</l>
  <l>und leider auch Theologie</l>
  <l>durchaus studiert mit hei&#xDF;em Bem&#xFC;h'n.</l>
</sp>]]></eg>
				<!--<p>The xml:lang value is considered to apply both to the contents of an
element and
(unless otherwise via attribute default values) to the
values of all of its attributes with free-text (CDATA) values. -->
				<p>The intent declared with <att>xml:lang</att> is considered to apply to
all attributes and content of the element where it is specified, unless overridden
with an instance of <att>xml:lang</att> on another element within that content. <phrase>In particular, the empty value of <att>xml:lang</att> is used on an element B to override a specification of <att>xml:lang</att> on an enclosing element A, without specifying another language. Within B, it is considered that there is no language information available, just as if <att>xml:lang</att> had not been specified on B or any of its ancestors.</phrase></p>
				<!--
If no
value is specified for xml:lang on an element, and no default value is
defined for it in the DTD, then the xml:lang attribute of any element
takes the same value it has in the parent element, if any. The two
technical terms in the following example both have the same effective
value for xml:lang:

  <p xml:lang="en">Here the keywords are
  <term xml:lang="en">shift</term> and
  <term>reduce</term>. ...</p>

The application, not the XML processor, is responsible for this '
inheritance' of attribute values.
-->
				<note>
					<p>Language information may also be provided by external transport protocols (e.g. HTTP or
  MIME). When available, this information may be used by XML applications, but the more local
  information provided by <att>xml:lang</att> should be considered to override it.
</p>
				</note>
				<p>A simple declaration for <att>xml:lang</att> might take the form</p>
				<eg>xml:lang <phrase>CDATA</phrase> #IMPLIED</eg>
				<p>but specific default values <rfc2119>MAY</rfc2119> also be given, if appropriate. In a collection
of French poems for English students, with glosses and notes in English, the <att>xml:lang</att>
attribute might be declared this way:</p>
				<eg>&lt;!ATTLIST poem   xml:lang <phrase>CDATA</phrase> 'fr'>
&lt;!ATTLIST gloss  xml:lang <phrase>CDATA</phrase> 'en'>
&lt;!ATTLIST note   xml:lang <phrase>CDATA</phrase> 'en'></eg>
			</div2>
			<div2 id="sec-normalization-checking" diff="add">
				<head>Normalization Checking</head>

<p>All XML <termref def="dt-parsedent"> parsed
entities</termref> (including <termref def="dt-docent"> document
entities</termref>) <rfc2119>SHOULD</rfc2119> be fully normalized as per the definition of
<bibref ref="Charmod"/> supplemented by the following definitions of <emph>
relevant constructs</emph> for XML:</p>


				<olist>
<item>
<p>The <termref def="dt-repltext">
replacement text</termref> of all <termref def="dt-parsedent">parsed
entities</termref></p>
</item>

<item>
<p>All text matching, in context, one of the following
productions:</p>

<olist>
<item><p><nt def="NT-CData">
CData</nt></p></item>

<item><p><nt def="NT-CharData">
CharData</nt></p></item>

<item><p><nt def="NT-content">
content</nt></p></item>

<item><p><nt def="NT-Name"> Name</nt></p></item>

<item><p><nt def="NT-Nmtoken">
Nmtoken</nt></p></item></olist></item>
				</olist>

<p>However, a document is still well-formed even if it is not fully normalized.
XML processors <rfc2119>SHOULD</rfc2119> provide a user option to verify that the document being
processed is in fully normalized form, and report to the application whether
it is or not. The option to not verify <rfc2119>SHOULD</rfc2119> be chosen only when the
input text is certified, as defined by <bibref ref="Charmod"/>.</p>

<p>The verification of full normalization <rfc2119>MUST</rfc2119> be carried out as if by
first verifying that the entity is in include-normalized form as
defined by <bibref ref="Charmod"/> and by then verifying that none of the relevant
constructs listed above begins (after character references are
expanded) with a composing character as defined by <bibref ref="Charmod"/>.
Non-validating processors <rfc2119>MUST</rfc2119> ignore possible
denormalizations that would be caused by inclusion of external
entities that they do not read.</p>

<note><p>The composing characters are all
Unicode characters of non-zero combining class, plus a small number
of class-zero characters that nevertheless take part as a
non-initial character in certain Unicode canonical
decompositions.  Since these characters are meant to follow
base characters, restricting relevant constructs (including
content) from beginning with a composing character does not
meaningfully diminish the expressiveness of XML.</p></note>

<p>If, while verifying full normalization, a processor encounters
characters for which it cannot determine the normalization
properties (i.e., characters introduced in a version of <bibref ref="Unicode3"/>
later than the one used in the implementation of the processor),
then the processor <rfc2119>MAY</rfc2119>, at user option, ignore any possible
denormalizations caused by these characters. The option to ignore
those denormalizations <rfc2119>SHOULD</rfc2119> not be chosen by applications when
reliability or security are critical.</p>

<p> XML processors <rfc2119>MUST</rfc2119> not transform the input to be in fully
normalized form. XML applications that create XML 1.1 output
from either XML 1.1 or XML 1.0 input <rfc2119>SHOULD</rfc2119> ensure that the output
is fully normalized; it is not necessary for internal processing
forms to be fully normalized.</p>

<p>The purpose of this section is to strongly encourage XML
processors to ensure that the creators of XML documents have
properly normalized them, so that XML applications can make tests
such as identity comparisons of strings without having to worry
about the different possible "spellings" of strings which
Unicode allows.
</p>
<p diff="add">When entities are in a non-Unicode encoding, if the processor 
transcodes them to Unicode, it <rfc2119>SHOULD</rfc2119> use a normalizing transcoder.
</p>
			</div2>
		</div1>
		<!-- &Elements; -->
		<div1 id="sec-logical-struct">
			<head>Logical Structures</head>
			<p><termdef id="dt-element" term="Element">Each <termref def="dt-xml-doc">XML
document</termref> contains one or more <term>elements</term>, the boundaries
of which are either delimited by <termref def="dt-stag">start-tags</termref>
and <termref def="dt-etag">end-tags</termref>, or, for <termref def="dt-empty">empty</termref>
elements, by an <termref def="dt-eetag">empty-element tag</termref>. Each
element has a type, identified by name, sometimes called its <quote>generic
identifier</quote> (GI), and <rfc2119>MAY</rfc2119> have a set of attribute specifications.</termdef>
Each attribute specification has a <termref def="dt-attrname">name</termref>
and a <termref def="dt-attrval">value</termref>.</p>
			<scrap lang="ebnf">
				<head>Element</head>
				<prod id="NT-element" num="39">
					<lhs>element</lhs>
					<rhs><nt def="NT-EmptyElemTag">EmptyElemTag</nt></rhs>
					<rhs>| <nt def="NT-STag">STag</nt> <nt def="NT-content">content</nt> <nt def="NT-ETag">ETag</nt></rhs>
					<wfc def="GIMatch"/>
					<vc def="elementvalid"/>
				</prod>
			</scrap>
			<p>This specification does not constrain the semantics, use, or (beyond syntax)
names of the element types and attributes, except that names beginning with
a match to <code>(('X'|'x')('M'|'m')('L'|'l'))</code> are reserved for standardization
in this or future versions of this specification.</p>
			<wfcnote id="GIMatch">
				<head>Element Type Match</head>
				<p>The <nt def="NT-Name">Name</nt>
in an element's end-tag <rfc2119>MUST</rfc2119> match the element type in the start-tag.</p>
			</wfcnote>
			<vcnote id="elementvalid">
				<head>Element Valid</head>
				<p>An element is valid
if there is a declaration matching <nt def="NT-elementdecl">elementdecl</nt>
where the <nt def="NT-Name">Name</nt> matches the element type, and one of
the following holds:</p>
				<olist>
					<item>
						<p>The declaration matches <kw>EMPTY</kw> and the element has no <termref def="dt-content">content</termref> <phrase>(not even entity
references, comments, PIs or white space)</phrase>.</p>
					</item>
					<item>
						<p>The declaration matches <nt def="NT-children">children</nt> and the
sequence of <termref def="dt-parentchild">child elements</termref> belongs
to the language generated by the regular expression in the content model,
with optional white space<phrase>, comments and
PIs (i.e. markup matching production [27] <nt def="NT-Misc">Misc</nt>)</phrase> between the
start-tag and the first child element, between child elements, or between
the last child element and the end-tag. Note that a CDATA section containing
only white space <phrase>or a reference
to an entity whose replacement text is character references expanding to white
space</phrase> <phrase>do</phrase> not
match the nonterminal <nt def="NT-S">S</nt>, and
hence cannot appear in these positions<phrase>; however, a
reference to an internal entity with a literal value consisting of character
references expanding to white space does match <nt def="NT-S">S</nt>, since its
replacement text is the white space resulting from expansion of the character
references</phrase>.</p>
					</item>
					<item>
						<p>The declaration matches <nt def="NT-Mixed">Mixed</nt> and the content
<phrase>(after replacing
any entity references with their replacement text)</phrase> consists of
<termref def="dt-chardata">character data</termref><phrase>,
<termref def="dt-comment">comments</termref>, <termref def="dt-pi">PIs</termref></phrase> and <termref def="dt-parentchild">child elements</termref> whose types match names in the
content model.</p>
					</item>
					<item>
						<p>The declaration matches <kw>ANY</kw>, and the
<phrase>content
<phrase>(after replacing
any entity references with their replacement text)</phrase>
consists of character data and <termref def="dt-parentchild">child elements</termref>
whose types</phrase>
have been declared.</p>
					</item>
				</olist>
			</vcnote>
			<div2 id="sec-starttags">
				<head>Start-Tags, End-Tags, and Empty-Element Tags</head>
				<p><termdef id="dt-stag" term="Start-Tag">The beginning of every non-empty
XML element is marked by a <term>start-tag</term>.</termdef></p>
				<scrap lang="ebnf">
					<head>Start-tag</head>
					<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
						<prod id="NT-STag" num="40">
							<lhs>STag</lhs>
							<rhs>'&lt;' <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt def="NT-Attribute">Attribute</nt>)* <nt def="NT-S">S</nt>? '>'</rhs>
							<wfc def="uniqattspec"/>
						</prod>
						<prod id="NT-Attribute" num="41">
							<lhs>Attribute</lhs>
							<rhs><nt def="NT-Name">Name</nt> <nt def="NT-Eq">Eq</nt> <nt def="NT-AttValue">AttValue</nt></rhs>
							<vc def="ValueType"/>
							<wfc def="NoExternalRefs"/>
							<wfc def="CleanAttrVals"/>
						</prod>
					</prodgroup>
				</scrap>
				<p>The <nt def="NT-Name">Name</nt> in the start- and end-tags gives the element's <term>type</term>. <termdef id="dt-attr" term="Attribute"> The <nt def="NT-Name">Name</nt>-<nt def="NT-AttValue">AttValue</nt>
pairs are referred to as the <term>attribute specifications</term> of the
element</termdef>, <termdef id="dt-attrname" term="Attribute Name">with the <nt def="NT-Name">Name</nt> in each pair referred to as the <term>attribute name</term></termdef>
and <termdef id="dt-attrval" term="Attribute Value">the content of the <nt def="NT-AttValue">AttValue</nt> (the text between the <code>'</code> or <code>"</code>
delimiters) as the <term>attribute value</term>.</termdef>Note
that the order of attribute specifications in a start-tag or empty-element
tag is not significant.</p>
				<wfcnote id="uniqattspec">
					<head>Unique Att Spec</head>
					<p><phrase role="mustard">An attribute name
<rfc2119>MUST NOT</rfc2119></phrase> appear more than once in the same start-tag or empty-element tag.</p>
				</wfcnote>
				<vcnote id="ValueType">
					<head>Attribute Value Type</head>
					<p>The attribute <rfc2119>MUST</rfc2119>
have been declared; the value <rfc2119>MUST</rfc2119> be of the type declared for it. (For attribute
types, see <specref ref="attdecls"/>.)</p>
				</vcnote>
				<wfcnote id="NoExternalRefs">
					<head>No External Entity References</head>
					<p>Attribute
values <phrase role="mustard"><rfc2119>MUST NOT</rfc2119></phrase> contain direct or indirect entity references to external entities.</p>
				</wfcnote>
				<wfcnote id="CleanAttrVals">
					<head>No <code>&lt;</code> in Attribute Values</head>
					<p>The <termref def="dt-repltext">replacement text</termref> of any entity
referred to directly or indirectly in an attribute value <rfc2119>MUST NOT</rfc2119> contain a <code>&lt;</code>.</p>
				</wfcnote>
				<p>An example of a start-tag:</p>
				<eg>&lt;termdef id="dt-dog" term="dog"></eg>
				<p><termdef id="dt-etag" term="End Tag">The end of every element that begins
with a start-tag <rfc2119>MUST</rfc2119> be marked by an <term>end-tag</term> containing a name
that echoes the element's type as given in the start-tag:</termdef></p>
				<scrap lang="ebnf">
					<head>End-tag</head>
					<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
						<prod id="NT-ETag" num="42">
							<lhs>ETag</lhs>
							<rhs>'&lt;/' <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt>?
'>'</rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p>An example of an end-tag:</p>
				<eg>&lt;/termdef></eg>
				<p><termdef id="dt-content" term="Content">The <termref def="dt-text">text</termref>
between the start-tag and end-tag is called the element's <term>content</term>:</termdef></p>
				<scrap lang="ebnf">
					<head>Content of Elements</head>
					<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
						<prod id="NT-content" num="43">
							<lhs>content</lhs>
							<rhs><nt def="NT-CharData">CharData</nt>? ((<nt def="NT-element">element</nt>
| <nt def="NT-Reference">Reference</nt> | <nt def="NT-CDSect">CDSect</nt>
| <nt def="NT-PI">PI</nt> | <nt def="NT-Comment">Comment</nt>) <nt def="NT-CharData">CharData</nt>?)*</rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p><termdef id="dt-empty" term="Empty">An element
with no <nt def="NT-content">content</nt> is said to be <term>empty</term>.</termdef> The representation
of an empty element is either a start-tag immediately followed by an end-tag,
or an empty-element tag. <termdef id="dt-eetag" term="empty-element tag">An <term>empty-element
tag</term> takes a special form:</termdef></p>
				<scrap lang="ebnf">
					<head>Tags for Empty Elements</head>
					<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
						<prod id="NT-EmptyElemTag" num="44">
							<lhs>EmptyElemTag</lhs>
							<rhs>'&lt;' <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt def="NT-Attribute">Attribute</nt>)* <nt def="NT-S">S</nt>? '/>'</rhs>
							<wfc def="uniqattspec"/>
						</prod>
					</prodgroup>
				</scrap>
				<p>Empty-element tags <rfc2119>MAY</rfc2119> be used for any element which has no content, whether
or not it is declared using the keyword <kw>EMPTY</kw>. <termref def="dt-interop">For
interoperability</termref>, the empty-element tag <rfc2119>SHOULD</rfc2119>
be used, and <rfc2119>SHOULD</rfc2119> only be used, for elements which are declared
EMPTY.</p>
				<p>Examples of empty elements:</p>
				<eg>&lt;IMG align="left"
 src="http://www.w3.org/Icons/WWW/w3c_home" />
&lt;br>&lt;/br>
&lt;br/></eg>
			</div2>
			<div2 id="elemdecls">
				<head>Element Type Declarations</head>
				<p>The <termref def="dt-element">element</termref> structure of an <termref def="dt-xml-doc">XML document</termref> <rfc2119>MAY</rfc2119>, for <termref def="dt-valid">validation</termref>
purposes, be constrained using element type and attribute-list declarations.
An element type declaration constrains the element's <termref def="dt-content">content</termref>.</p>
				<p>Element type declarations often constrain which element types can appear
as <termref def="dt-parentchild">children</termref> of the element. At user
option, an XML processor <rfc2119>MAY</rfc2119> issue a warning when a declaration mentions an
element type for which no declaration is provided, but this is not an error.</p>
				<p><termdef id="dt-eldecl" term="Element Type declaration">An <term>element
type declaration</term> takes the form:</termdef></p>
				<scrap lang="ebnf">
					<head>Element Type Declaration</head>
					<prodgroup pcw2="5.5" pcw4="18" pcw5="9">
						<prod id="NT-elementdecl" num="45">
							<lhs>elementdecl</lhs>
							<rhs>'&lt;!ELEMENT' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt> <nt def="NT-contentspec">contentspec</nt> <nt def="NT-S">S</nt>?
'>'</rhs>
							<vc def="EDUnique"/>
						</prod>
						<prod id="NT-contentspec" num="46">
							<lhs>contentspec</lhs>
							<rhs>'EMPTY' | 'ANY' | <nt def="NT-Mixed">Mixed</nt>
| <nt def="NT-children">children</nt></rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p>where the <nt def="NT-Name">Name</nt> gives the element type being declared.</p>
				<vcnote id="EDUnique">
					<head>Unique Element Type Declaration</head>
					<p><phrase role="mustard">An element
type <rfc2119>MUST NOT</rfc2119></phrase> be declared more than once.</p>
				</vcnote>
				<p>Examples of element type declarations:</p>
				<eg>&lt;!ELEMENT br EMPTY>
&lt;!ELEMENT p (#PCDATA|emph)* >
&lt;!ELEMENT %name.para; %content.para; >
&lt;!ELEMENT container ANY></eg>
				<div3 id="sec-element-content">
					<head>Element Content</head>
					<p><termdef id="dt-elemcontent" term="Element content">An element <termref def="dt-stag">type</termref> has <term>element content</term> when elements
of that type <rfc2119>MUST</rfc2119> contain only <termref def="dt-parentchild">child</termref>
elements (no character data), optionally separated by white space (characters
matching the nonterminal <nt def="NT-S">S</nt>).</termdef> <termdef id="dt-content-model" term="Content model">In this case, the constraint includes a <term>content
model</term>, a simple grammar governing the allowed types of the
child elements and the order in which they are allowed to appear.</termdef>
The grammar is built on content particles (<nt def="NT-cp">cp</nt>s), which
consist of names, choice lists of content particles, or sequence lists of
content particles:</p>
					<scrap lang="ebnf">
						<head>Element-content Models</head>
						<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
							<prod id="NT-children" num="47">
								<lhs>children</lhs>
								<rhs>(<nt def="NT-choice">choice</nt> | <nt def="NT-seq">seq</nt>)
('?' | '*' | '+')?</rhs>
							</prod>
							<prod id="NT-cp" num="48">
								<lhs>cp</lhs>
								<rhs>(<nt def="NT-Name">Name</nt> | <nt def="NT-choice">choice</nt>
| <nt def="NT-seq">seq</nt>) ('?' | '*' | '+')?</rhs>
							</prod>
							<prod id="NT-choice" num="49">
								<lhs>choice</lhs>
								<rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> ( <nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )+ <nt def="NT-S">S</nt>? ')'</rhs>
								<vc def="vc-PEinGroup"/>
							</prod>
							<prod id="NT-seq" num="50">
								<lhs>seq</lhs>
								<rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> ( <nt def="NT-S">S</nt>? ',' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )* <nt def="NT-S">S</nt>? ')'</rhs>
								<vc def="vc-PEinGroup"/>
							</prod>
						</prodgroup>
					</scrap>
					<p>where each <nt def="NT-Name">Name</nt> is the type of an element which
<rfc2119>MAY</rfc2119> appear as a <termref def="dt-parentchild">child</termref>. Any content
particle in a choice list <rfc2119>MAY</rfc2119> appear in the <termref def="dt-elemcontent">element
content</termref> at the location where the choice list appears in the grammar;
content particles occurring in a sequence list <rfc2119>MUST</rfc2119> each appear in the <termref def="dt-elemcontent">element content</termref> in the order given in the list.
The optional character following a name or list governs whether the element
or the content particles in the list may occur one or more (<code>+</code>),
zero or more (<code>*</code>), or zero or one times (<code>?</code>). The
absence of such an operator means that the element or content particle <rfc2119>MUST</rfc2119>
appear exactly once. This syntax and meaning are identical to those used in
the productions in this specification.</p>
					<p>The content of an element matches a content model if and only if it is
possible to trace out a path through the content model, obeying the sequence,
choice, and repetition operators and matching each element in the content
against an element type in the content model. <termref def="dt-compat">For
compatibility</termref>, it is an error if <phrase>the content model
allows an element to match more than one occurrence of an element type in the
content model</phrase>. For more information, see <specref ref="determinism"/>.</p>
					<!--appendix <specref ref="determinism"/>.-->
					<!-- appendix on deterministic content models. -->
					<vcnote id="vc-PEinGroup">
						<head>Proper Group/PE Nesting</head>
						<p>Parameter-entity <termref def="dt-repltext">replacement text</termref> <rfc2119>MUST</rfc2119> be properly nested with parenthesized
groups. That is to say, if either of the opening or closing parentheses in
a <nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or <nt def="NT-Mixed">Mixed</nt>
construct is contained in the replacement text for a <termref def="dt-PERef">parameter
entity</termref>, both <rfc2119>MUST</rfc2119> be contained in the same replacement text.</p>
						<p><termref def="dt-interop">For interoperability</termref>, if a parameter-entity reference
appears in a <nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or <nt def="NT-Mixed">Mixed</nt> construct, its replacement text <rfc2119>SHOULD</rfc2119> contain at
least one non-blank character, and neither the first nor last non-blank character
of the replacement text <rfc2119>SHOULD</rfc2119> be a connector (<code>|</code> or <code>,</code>).</p>
					</vcnote>
					<p>Examples of element-content models:</p>
					<eg>&lt;!ELEMENT spec (front, body, back?)>
&lt;!ELEMENT div1 (head, (p | list | note)*, div2*)>
&lt;!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*></eg>
				</div3>
				<div3 id="sec-mixed-content">
					<head>Mixed Content</head>
					<p><termdef id="dt-mixed" term="Mixed Content">An element <termref def="dt-stag">type</termref>
has <term>mixed content</term> when elements of that type <rfc2119>MAY</rfc2119> contain character
data, optionally interspersed with <termref def="dt-parentchild">child</termref>
elements.</termdef> In this case, the types of the child elements <rfc2119>MAY</rfc2119> be constrained,
but not their order or their number of occurrences:</p>
					<scrap lang="ebnf">
						<head>Mixed-content Declaration</head>
						<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
							<prod id="NT-Mixed" num="51">
								<lhs>Mixed</lhs>
								<rhs>'(' <nt def="NT-S">S</nt>? '#PCDATA' (<nt def="NT-S">S</nt>?
'|' <nt def="NT-S">S</nt>? <nt def="NT-Name">Name</nt>)* <nt def="NT-S">S</nt>?
')*' </rhs>
								<rhs>| '(' <nt def="NT-S">S</nt>? '#PCDATA' <nt def="NT-S">S</nt>? ')' </rhs>
								<vc def="vc-PEinGroup"/>
								<vc def="vc-MixedChildrenUnique"/>
							</prod>
						</prodgroup>
					</scrap>
					<p>where the <nt def="NT-Name">Name</nt>s give the types of elements that
may appear as children. The
keyword <kw>#PCDATA</kw> derives historically from the term <quote>parsed
character data.</quote></p>
					<vcnote id="vc-MixedChildrenUnique">
						<head>No Duplicate Types</head>
						<p>The
same name <rfc2119>MUST NOT</rfc2119> appear more than once in a single mixed-content declaration.</p>
					</vcnote>
					<p>Examples of mixed content declarations:</p>
					<eg>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
&lt;!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
&lt;!ELEMENT b (#PCDATA)></eg>
				</div3>
			</div2>
			<div2 id="attdecls">
				<head>Attribute-List Declarations</head>
				<p><termref def="dt-attr">Attributes</termref> are used to associate name-value
pairs with <termref def="dt-element">elements</termref>. Attribute specifications
<phrase role="mustard"><rfc2119>MUST NOT</rfc2119> appear outside of</phrase> <termref def="dt-stag">start-tags</termref> and <termref def="dt-eetag">empty-element tags</termref>; thus, the productions used to
recognize them appear in <specref ref="sec-starttags"/>. Attribute-list declarations
<rfc2119>MAY</rfc2119> be used:</p>
				<ulist>
					<item>
						<p>To define the set of attributes pertaining to a given element type.</p>
					</item>
					<item>
						<p>To establish type constraints for these attributes.</p>
					</item>
					<item>
						<p>To provide <termref def="dt-default">default values</termref> for
attributes.</p>
					</item>
				</ulist>
				<p><termdef id="dt-attdecl" term="Attribute-List Declaration"><term>Attribute-list
declarations</term> specify the name, data type, and default value (if any)
of each attribute associated with a given element type:</termdef></p>
				<scrap lang="ebnf">
					<head>Attribute-list Declaration</head>
					<prod id="NT-AttlistDecl" num="52">
						<lhs>AttlistDecl</lhs>
						<rhs>'&lt;!ATTLIST' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt def="NT-AttDef">AttDef</nt>* <nt def="NT-S">S</nt>? '>'</rhs>
					</prod>
					<prod id="NT-AttDef" num="53">
						<lhs>AttDef</lhs>
						<rhs><nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt> <nt def="NT-AttType">AttType</nt> <nt def="NT-S">S</nt> <nt def="NT-DefaultDecl">DefaultDecl</nt></rhs>
					</prod>
				</scrap>
				<p>The <nt def="NT-Name">Name</nt> in the <nt def="NT-AttlistDecl">AttlistDecl</nt>
rule is the type of an element. At user option, an XML processor <rfc2119>MAY</rfc2119> issue
a warning if attributes are declared for an element type not itself declared,
but this is not an error. The <nt def="NT-Name">Name</nt> in the <nt def="NT-AttDef">AttDef</nt>
rule is the name of the attribute.</p>
				<p>When more than one <nt def="NT-AttlistDecl">AttlistDecl</nt> is provided
for a given element type, the contents of all those provided are merged. When
more than one definition is provided for the same attribute of a given element
type, the first declaration is binding and later declarations are ignored. <termref def="dt-interop">For interoperability,</termref> writers of DTDs <rfc2119>MAY</rfc2119> choose
to provide at most one attribute-list declaration for a given element type,
at most one attribute definition for a given attribute name in an attribute-list
declaration, and at least one attribute definition in each attribute-list
declaration. For interoperability, an XML processor <rfc2119>MAY</rfc2119> at user option
issue a warning when more than one attribute-list declaration is provided
for a given element type, or more than one attribute definition is provided
for a given attribute, but this is not an error.</p>
				<div3 id="sec-attribute-types">
					<head>Attribute Types</head>
					<p>XML attribute types are of three kinds: a string type, a set of tokenized
types, and enumerated types. The string type may take any literal string as
a value; the tokenized types have varying lexical and semantic constraints.
The validity constraints noted in the grammar are applied after the attribute
value has been normalized as described in <phrase><specref ref="AVNormalize"/></phrase>.</p>
					<scrap lang="ebnf">
						<head>Attribute Types</head>
						<prodgroup pcw4="14" pcw5="11.5">
							<prod id="NT-AttType" num="54">
								<lhs>AttType</lhs>
								<rhs><nt def="NT-StringType">StringType</nt> | <nt def="NT-TokenizedType">TokenizedType</nt>
| <nt def="NT-EnumeratedType">EnumeratedType</nt></rhs>
							</prod>
							<prod id="NT-StringType" num="55">
								<lhs>StringType</lhs>
								<rhs>'CDATA'</rhs>
							</prod>
							<prod id="NT-TokenizedType" num="56">
								<lhs>TokenizedType</lhs>
								<rhs>'ID'</rhs>
								<vc def="id"/>
								<vc def="one-id-per-el"/>
								<vc def="id-default"/>
								<rhs>| 'IDREF'</rhs>
								<vc def="idref"/>
								<rhs>| 'IDREFS'</rhs>
								<vc def="idref"/>
								<rhs>| 'ENTITY'</rhs>
								<vc def="entname"/>
								<rhs>| 'ENTITIES'</rhs>
								<vc def="entname"/>
								<rhs>| 'NMTOKEN'</rhs>
								<vc def="nmtok"/>
								<rhs>| 'NMTOKENS'</rhs>
								<vc def="nmtok"/>
							</prod>
						</prodgroup>
					</scrap>
					<vcnote id="id">
						<head>ID</head>
						<p>Values of type <kw>ID</kw> <rfc2119>MUST</rfc2119> match the <nt def="NT-Name">Name</nt> production. A name <rfc2119>MUST NOT</rfc2119> appear more than once
in an XML document as a value of this type; i.e., ID values <rfc2119>MUST</rfc2119> uniquely
identify the elements which bear them.</p>
					</vcnote>
					<vcnote id="one-id-per-el">
						<head>One ID per Element Type</head>
						<p><phrase role="mustard">An element
type <rfc2119>MUST NOT</rfc2119></phrase> have more than one ID attribute specified.</p>
					</vcnote>
					<vcnote id="id-default">
						<head>ID Attribute Default</head>
						<p>An ID attribute
<rfc2119>MUST</rfc2119> have a declared default of <kw>#IMPLIED</kw> or <kw>#REQUIRED</kw>.</p>
					</vcnote>
					<vcnote id="idref">
						<head>IDREF</head>
						<p>Values of type <kw>IDREF</kw> <rfc2119>MUST</rfc2119>
match the <nt def="NT-Name">Name</nt> production, and values of type <kw>IDREFS</kw> <rfc2119>MUST</rfc2119> match <nt def="NT-Names">Names</nt>; each <nt def="NT-Name">Name</nt> <rfc2119>MUST</rfc2119> match the value of an ID attribute on some element in the XML document;
i.e. <kw>IDREF</kw> values <rfc2119>MUST</rfc2119> match the value of some ID attribute.</p>
					</vcnote>
					<vcnote id="entname">
						<head>Entity Name</head>
						<p>Values of type <kw>ENTITY</kw> <rfc2119>MUST</rfc2119> match the <nt def="NT-Name">Name</nt> production, values of type <kw>ENTITIES</kw> <rfc2119>MUST</rfc2119> match <nt def="NT-Names">Names</nt>; each <nt def="NT-Name">Name</nt> <rfc2119>MUST</rfc2119> match the name of an <termref def="dt-unparsed">unparsed entity</termref>
declared in the <termref def="dt-doctype">DTD</termref>.</p>
					</vcnote>
					<vcnote id="nmtok">
						<head>Name Token</head>
						<p>Values of type <kw>NMTOKEN</kw> <rfc2119>MUST</rfc2119> match the <nt def="NT-Nmtoken">Nmtoken</nt> production; values of type <kw>NMTOKENS</kw> <rfc2119>MUST</rfc2119> match <nt def="NT-Nmtokens">Nmtokens</nt>.</p>
					</vcnote>
					<!-- why?
<p>The XML processor must normalize attribute values before
passing them to the application, as described in
<specref ref="AVNormalize"/>.</p>-->
					<p><termdef id="dt-enumerated" term="Enumerated Attribute
Values"><term>Enumerated attributes</term> <phrase role="mustard"><rfc2119>MUST</rfc2119></phrase> take one of a list of values
provided in the declaration</termdef>. There are two kinds of enumerated types:</p>
					<scrap lang="ebnf">
						<head>Enumerated Attribute Types</head>
						<prod id="NT-EnumeratedType" num="57">
							<lhs>EnumeratedType</lhs>
							<rhs><nt def="NT-NotationType">NotationType</nt>
| <nt def="NT-Enumeration">Enumeration</nt></rhs>
						</prod>
						<prod id="NT-NotationType" num="58">
							<lhs>NotationType</lhs>
							<rhs>'NOTATION' <nt def="NT-S">S</nt> '(' <nt def="NT-S">S</nt>? <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-Name">Name</nt>)* <nt def="NT-S">S</nt>? ')' </rhs>
							<vc def="notatn"/>
							<vc def="OneNotationPer"/>
							<vc def="NoNotationEmpty"/>
							<vc def="NoDuplicateTokens"/>
						</prod>
						<prod id="NT-Enumeration" num="59">
							<lhs>Enumeration</lhs>
							<rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-Nmtoken">Nmtoken</nt>
(<nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-Nmtoken">Nmtoken</nt>)* <nt def="NT-S">S</nt>? ')'</rhs>
							<vc def="enum"/>
							<vc def="NoDuplicateTokens"/>
						</prod>
					</scrap>
					<p>A <kw>NOTATION</kw> attribute identifies a <termref def="dt-notation">notation</termref>,
declared in the DTD with associated system and/or public identifiers, to be
used in interpreting the element to which the attribute is attached.</p>
					<vcnote id="notatn">
						<head>Notation Attributes</head>
						<p>Values of this type
<rfc2119>MUST</rfc2119> match one of the <titleref href="#Notations">notation</titleref> names
included in the declaration; all notation names in the declaration <rfc2119>MUST</rfc2119> be
declared.</p>
					</vcnote>
					<vcnote id="OneNotationPer">
						<head>One Notation Per Element Type</head>
						<p><phrase role="mustard">An element type <rfc2119>MUST NOT</rfc2119></phrase> have more than one <kw>NOTATION</kw>
attribute specified.</p>
					</vcnote>
					<vcnote id="NoNotationEmpty">
						<head>No Notation on Empty Element</head>
						<p><termref def="dt-compat">For compatibility</termref>,
an attribute of type <kw>NOTATION</kw> <rfc2119>MUST NOT</rfc2119> be declared on an element
declared <kw>EMPTY</kw>.</p>
					</vcnote>
					<vcnote id="NoDuplicateTokens">
						<head>No Duplicate
Tokens</head>
						<p>The notation names in a single <nt def="NT-NotationType">NotationType</nt>
attribute declaration, as well as the <nt def="NT-Nmtoken">NmToken</nt>s in a single
<nt def="NT-Enumeration">Enumeration</nt> attribute declaration, <rfc2119>MUST</rfc2119> all be distinct.</p>
					</vcnote>
					<vcnote id="enum">
						<head>Enumeration</head>
						<p>Values of this type <rfc2119>MUST</rfc2119> match
one of the <nt def="NT-Nmtoken">Nmtoken</nt> tokens in the declaration.</p>
					</vcnote>
					<p><termref def="dt-interop">For interoperability,</termref> the same <nt def="NT-Nmtoken">Nmtoken</nt> <rfc2119>SHOULD NOT</rfc2119> occur more than once in the enumerated
attribute types of a single element type.</p>
				</div3>
				<div3 id="sec-attr-defaults">
					<head>Attribute Defaults</head>
					<p>An <termref def="dt-attdecl">attribute declaration</termref> provides information
on whether the attribute's presence is <rfc2119>REQUIRED</rfc2119>, and if not, how an XML processor
<phrase>is
to</phrase> react if a declared attribute is absent in a document.</p>
					<scrap lang="ebnf">
						<head>Attribute Defaults</head>
						<prodgroup pcw4="14" pcw5="11.5">
							<prod id="NT-DefaultDecl" num="60">
								<lhs>DefaultDecl</lhs>
								<rhs>'#REQUIRED' |&nbsp;'#IMPLIED' </rhs>
								<rhs>| (('#FIXED' S)? <nt def="NT-AttValue">AttValue</nt>)</rhs>
								<vc def="RequiredAttr"/>
								<vc def="defattrvalid"/>
								<wfc def="CleanAttrVals"/>
								<vc def="FixedAttr"/>
							</prod>
						</prodgroup>
					</scrap>
					<p>In an attribute declaration, <kw>#REQUIRED</kw> means that the attribute
<rfc2119>MUST</rfc2119> always be provided, <kw>#IMPLIED</kw> that no default value is provided.
<!-- not any more!!
<kw>#IMPLIED</kw> means that if the attribute is omitted
from an element of this type,
the XML processor must inform the application
that no value was specified; no constraint is placed on the behavior
of the application. --><termdef id="dt-default" term="Attribute Default">If
the declaration is neither <kw>#REQUIRED</kw> nor <kw>#IMPLIED</kw>, then
the <nt def="NT-AttValue">AttValue</nt> value contains the declared <term>default</term>
value; the <kw>#FIXED</kw> keyword states that the attribute <rfc2119>MUST</rfc2119> always have
the default value.
When an XML processor encounters
an <phrase>element
without a specification for an attribute for which it has read a default
value declaration, it <rfc2119>MUST</rfc2119> report the attribute with the declared default
value to the application</phrase>.</termdef></p>
					<vcnote id="RequiredAttr">
						<head>Required Attribute</head>
						<p>If the default
declaration is the keyword <kw>#REQUIRED</kw>, then the attribute <rfc2119>MUST</rfc2119> be
specified for all elements of the type in the attribute-list declaration.</p>
					</vcnote>
					<vcnote id="defattrvalid">
						<head><phrase>Attribute
Default Value Syntactically Correct</phrase></head>
						<p>The declared default value <rfc2119>MUST</rfc2119> meet the <phrase>syntactic</phrase>
constraints of the declared attribute type.</p>
						<p>Note that only the
syntactic constraints of the type are required here; other constraints (e.g.
that the value be the name of a declared unparsed entity, for an attribute of
type ENTITY) may come into play if the declared default value is actually used
(an element without a specification for this attribute occurs).</p>
					</vcnote>
					<vcnote id="FixedAttr">
						<head>Fixed Attribute Default</head>
						<p>If an attribute
has a default value declared with the <kw>#FIXED</kw> keyword, instances of
that attribute <rfc2119>MUST</rfc2119> match the default value.</p>
					</vcnote>
					<p>Examples of attribute-list declarations:</p>
					<eg>&lt;!ATTLIST termdef
          id      ID      #REQUIRED
          name    CDATA   #IMPLIED>
&lt;!ATTLIST list
          type    (bullets|ordered|glossary)  "ordered">
&lt;!ATTLIST form
          method  CDATA   #FIXED "POST"></eg>
				</div3>
				<div3 id="AVNormalize">
					<head>Attribute-Value Normalization</head>
					<p>Before the value of an attribute is passed to the application or checked
for validity, the XML processor <rfc2119>MUST</rfc2119> normalize the attribute value by applying
the algorithm below, or by using some other method such that the value passed
to the application is the same as that produced by the algorithm.</p>
					<olist>
						<item>
							<p>All line breaks <rfc2119>MUST</rfc2119> have been normalized on input to #xA as described
in <specref ref="sec-line-ends"/>, so the rest of this algorithm operates
on text normalized in this way.</p>
						</item>
						<item>
							<p>Begin with a normalized value consisting of the empty string.</p>
						</item>
						<item>
							<p>For each character, entity reference, or character reference in the
unnormalized attribute value, beginning with the first and continuing to the
last, do the following:</p>
							<ulist>
								<item>
									<p>For a character reference, append the referenced character to the
normalized value.</p>
								</item>
								<item>
									<p>For an entity reference, recursively apply step 3 of this algorithm
to the replacement text of the entity.</p>
								</item>
								<item>
									<p>For a white space character (#x20, #xD, #xA, #x9), append a space
character (#x20) to the normalized value.</p>
								</item>
								<item>
									<p>For another character, append the character to the normalized value.</p>
								</item>
							</ulist>
						</item>
					</olist>
					<p>If the attribute type is not CDATA, then the XML processor <rfc2119>MUST</rfc2119> further
process the normalized attribute value by discarding any leading and trailing
space (#x20) characters, and by replacing sequences of space (#x20) characters
by a single space (#x20) character.</p>
					<p>Note that if the unnormalized attribute value contains a character reference
to a white space character other than space (#x20), the normalized value contains
the referenced character itself (#xD, #xA or #x9). This contrasts with the
case where the unnormalized value contains a white space character (not a
reference), which is replaced with a space character (#x20) in the normalized
value and also contrasts with the case where the unnormalized value contains
an entity reference whose replacement text contains a white space character;
being recursively processed, the white space character is replaced with a
space character (#x20) in the normalized value.</p>
					<p>All attributes for which no declaration has been read <rfc2119>SHOULD</rfc2119> be treated
by a non-validating processor as if declared <kw>CDATA</kw>.</p>
					<p>It
is an error if an
<phrase><termref def="dt-attrval">attribute
value</termref> contains a <termref def="dt-entref">reference</termref> to an
entity for which no declaration has been read.</phrase></p>
					<p>Following are examples of attribute normalization. Given the following
declarations:</p>
					<eg>&lt;!ENTITY d "&amp;#xD;">
&lt;!ENTITY a "&amp;#xA;">
&lt;!ENTITY da "&amp;#xD;&amp;#xA;"></eg>
					<p>the attribute specifications in the left column below would be normalized
to the character sequences of the middle column if the attribute <att>a</att>
is declared <kw>NMTOKENS</kw> and to those of the right columns if <att>a</att>
is declared <kw>CDATA</kw>.</p>
					<table border="1" frame="border" summary="Attribute normalization summary">
						<thead>
							<tr>
								<th>Attribute specification</th>
								<th>a is NMTOKENS</th>
								<th>a is CDATA</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><eg>a="

xyz"</eg></td>
								<td><eg>x y z</eg></td>
								<td><eg>#x20 #x20 x y z</eg></td>
							</tr>
							<tr>
								<td><eg>a="&amp;d;&amp;d;A&amp;a;<phrase>&amp;#x20;</phrase>&amp;a;B&amp;da;"</eg></td>
								<td><eg>A #x20 B</eg></td>
								<td><eg>#x20 #x20 A #x20 <phrase>#x20</phrase> #x20 B #x20 #x20</eg></td>
							</tr>
							<tr>
								<td><eg>a=
"&amp;#xd;&amp;#xd;A&amp;#xa;&amp;#xa;B&amp;#xd;&amp;#xa;"</eg></td>
								<td><eg>#xD #xD A #xA #xA B #xD #xA</eg></td>
								<td><eg>#xD #xD A #xA #xA B #xD #xA</eg></td>
							</tr>
						</tbody>
					</table>
					<p>Note that the last example is invalid (but well-formed) if <att>a</att>
is declared to be of type <kw>NMTOKENS</kw>.</p>
				</div3>
			</div2>
			<div2 id="sec-condition-sect">
				<head>Conditional Sections</head>
				<p><termdef id="dt-cond-section" term="conditional section"><term>Conditional
sections</term> are portions of the <termref def="dt-doctype">document type
declaration external subset</termref> <phrase>or
of external parameter entities </phrase>which are included in, or excluded from,
the logical structure of the DTD based on the keyword which governs them.</termdef></p>
				<scrap lang="ebnf">
					<head>Conditional Section</head>
					<prodgroup pcw2="9" pcw4="14.5">
						<prod id="NT-conditionalSect" num="61">
							<lhs>conditionalSect</lhs>
							<rhs><nt def="NT-includeSect">includeSect</nt> | <nt def="NT-ignoreSect">ignoreSect</nt></rhs>
						</prod>
						<prod id="NT-includeSect" num="62">
							<lhs>includeSect</lhs>
							<rhs>'&lt;![' S? 'INCLUDE' S? '[' <nt def="NT-extSubsetDecl">extSubsetDecl</nt>
']]&gt;' </rhs>
							<vc def="condsec-nesting"/>
						</prod>
						<prod id="NT-ignoreSect" num="63">
							<lhs>ignoreSect</lhs>
							<rhs>'&lt;![' S? 'IGNORE' S? '[' <nt def="NT-ignoreSectContents">ignoreSectContents</nt>*
']]&gt;'</rhs>
							<vc def="condsec-nesting"/>
						</prod>
						<prod id="NT-ignoreSectContents" num="64">
							<lhs>ignoreSectContents</lhs>
							<rhs><nt def="NT-Ignore">Ignore</nt> ('&lt;![' <nt def="NT-ignoreSectContents">ignoreSectContents</nt> ']]&gt;' <nt def="NT-Ignore">Ignore</nt>)*</rhs>
						</prod>
						<prod id="NT-Ignore" num="65">
							<lhs>Ignore</lhs>
							<rhs><nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>*
('&lt;![' | ']]&gt;') <nt def="NT-Char">Char</nt>*) </rhs>
						</prod>
					</prodgroup>
				</scrap>
				<vcnote id="condsec-nesting">
					<head>Proper Conditional Section/PE Nesting</head>
					<p>If any of the "<code>&lt;![</code>",
"<code>[</code>", or "<code>]]&gt;</code>" of a conditional section is contained
in the replacement text for a parameter-entity reference, all of them <rfc2119>MUST</rfc2119>
be contained in the same replacement text.</p>
				</vcnote>
				<p>Like the internal and external DTD subsets, a conditional section may contain
one or more complete declarations, comments, processing instructions, or nested
conditional sections, intermingled with white space.</p>
				<p>If the keyword of the conditional section is <kw>INCLUDE</kw>, then the
contents of the conditional section <phrase role="mustard"><rfc2119>MUST</rfc2119> be considered</phrase> part of the DTD. If the keyword of
the conditional section is <kw>IGNORE</kw>, then the contents of the conditional
section <phrase role="mustard"><rfc2119>MUST</rfc2119> be considered as</phrase> not logically part of the DTD.
If a conditional section with a keyword of <kw>INCLUDE</kw> occurs within
a larger conditional section with a keyword of <kw>IGNORE</kw>, both the outer
and the inner conditional sections <phrase role="mustard"><rfc2119>MUST</rfc2119> be</phrase> ignored. The contents
of an ignored conditional section <phrase role="mustard"><rfc2119>MUST</rfc2119> be</phrase> parsed by ignoring all characters after
the "<code>[</code>" following the keyword, except conditional section starts
"<code>&lt;![</code>" and ends "<code>]]&gt;</code>", until the matching conditional
section end is found. Parameter entity references <phrase role="mustard"><rfc2119>MUST NOT</rfc2119> be</phrase> recognized in this
process.</p>
				<p>If the keyword of the conditional section is a parameter-entity reference,
the parameter entity <rfc2119>MUST</rfc2119> be replaced by its content before the processor
decides whether to include or ignore the conditional section.</p>
				<p>An example:</p>
				<eg>&lt;!ENTITY % draft 'INCLUDE' >
&lt;!ENTITY % final 'IGNORE' >

&lt;![%draft;[
&lt;!ELEMENT book (comments*, title, body, supplements?)>
]]&gt;
&lt;![%final;[
&lt;!ELEMENT book (title, body, supplements?)>
]]&gt;</eg>
			</div2>
			<!--
<div2 id='sec-pass-to-app'>
<head>XML Processor Treatment of Logical Structure</head>
<p>When an XML processor encounters a start-tag, it must make
at least the following information available to the application:
<ulist>
<item>
<p>the element type's generic identifier</p>
</item>
<item>
<p>the names of attributes known to apply to this element type
(validating processors must make available names of all attributes
declared for the element type; non-validating processors must
make available at least the names of the attributes for which
values are specified.
</p>
</item>
</ulist>
</p>
</div2>
-->
		</div1>
		<!-- &Entities; -->
		<div1 id="sec-physical-struct">
			<head>Physical Structures</head>
			<p><termdef id="dt-entity" term="Entity">An XML document may consist of one
or many storage units. These
are called <term>entities</term>; they all have <term>content</term> and are
all (except for the <termref def="dt-docent">document entity</termref> and
the <termref def="dt-doctype">external DTD subset</termref>) identified by
entity <term>name</term>.</termdef> Each XML document has one entity
called the <termref def="dt-docent">document entity</termref>, which serves
as the starting point for the <termref def="dt-xml-proc">XML processor</termref>
and may contain the whole document.</p>
			<p>Entities may be either parsed or unparsed. <termdef id="dt-parsedent" term="Text Entity">A <term>parsed
entity's</term> contents are referred to as its <termref def="dt-repltext">replacement
text</termref>; this <termref def="dt-text">text</termref> is considered an
integral part of the document.</termdef></p>
			<p><termdef id="dt-unparsed" term="Unparsed Entity">An <term>unparsed entity</term>
is a resource whose contents may or may not be <termref def="dt-text">text</termref>,
and if text, may
be other than XML. Each unparsed entity has an associated <termref def="dt-notation">notation</termref>, identified by name. Beyond a requirement
that an XML processor make the identifiers for the entity and notation available
to the application, XML places no constraints on the contents of unparsed
entities.</termdef></p>
			<p>Parsed entities are invoked by name using entity references; unparsed entities
by name, given in the value of <kw>ENTITY</kw> or <kw>ENTITIES</kw> attributes.</p>
			<p><termdef id="gen-entity" term="general entity"><term>General entities</term>
are entities for use within the document content. In this specification, general
entities are sometimes referred to with the unqualified term <emph>entity</emph>
when this leads to no ambiguity.</termdef> <termdef id="dt-PE" term="Parameter entity"><term>Parameter
entities</term> are parsed entities for use within the DTD.</termdef>
These two types of entities use different forms of reference and are recognized
in different contexts. Furthermore, they occupy different namespaces; a parameter
entity and a general entity with the same name are two distinct entities.</p>
			<div2 id="sec-references">
				<head>Character and Entity References</head>
				<p><termdef id="dt-charref" term="Character Reference"> A <term>character
reference</term> refers to a specific character in the ISO/IEC 10646 character
set, for example one not directly accessible from available input devices.</termdef></p>
				<scrap lang="ebnf">
					<head>Character Reference</head>
					<prod id="NT-CharRef" num="66">
						<lhs>CharRef</lhs>
						<rhs>'&amp;#' [0-9]+ ';' </rhs>
						<rhs>| '&hcro;' [0-9a-fA-F]+ ';'</rhs>
						<wfc def="wf-Legalchar"/>
					</prod>
				</scrap>
				<wfcnote id="wf-Legalchar">
					<head>Legal Character</head>
					<p>Characters referred
to using character references <rfc2119>MUST</rfc2119> match the production for <nt def="NT-Char">Char</nt>.</p>
				</wfcnote>
				<p>If the character reference begins with <quote><code>&amp;#x</code></quote>,
the digits and letters up to the terminating <code>;</code> provide a hexadecimal
representation of the character's code point in ISO/IEC 10646. If it begins
just with <quote><code>&amp;#</code></quote>, the digits up to the terminating <code>;</code>
provide a decimal representation of the character's code point.</p>
				<p><termdef id="dt-entref" term="Entity Reference">An <term>entity reference</term>
refers to the content of a named entity.</termdef> <termdef id="dt-GERef" term="General Entity Reference">References to parsed general entities use
ampersand (<code>&amp;</code>) and semicolon (<code>;</code>) as delimiters.</termdef> <termdef id="dt-PERef" term="Parameter-entity reference"><term>Parameter-entity references</term>
use percent-sign (<code>%</code>) and semicolon (<code>;</code>) as delimiters.</termdef></p>
				<scrap lang="ebnf">
					<head>Entity Reference</head>
					<prod id="NT-Reference" num="67">
						<lhs>Reference</lhs>
						<rhs><nt def="NT-EntityRef">EntityRef</nt> | <nt def="NT-CharRef">CharRef</nt></rhs>
					</prod>
					<prod id="NT-EntityRef" num="68">
						<lhs>EntityRef</lhs>
						<rhs>'&amp;' <nt def="NT-Name">Name</nt> ';'</rhs>
						<wfc def="wf-entdeclared"/>
						<vc def="vc-entdeclared"/>
						<wfc def="textent"/>
						<wfc def="norecursion"/>
					</prod>
					<prod id="NT-PEReference" num="69">
						<lhs>PEReference</lhs>
						<rhs>'%' <nt def="NT-Name">Name</nt> ';'</rhs>
						<vc def="vc-entdeclared"/>
						<wfc def="norecursion"/>
						<wfc def="indtd"/>
					</prod>
				</scrap>
				<wfcnote id="wf-entdeclared">
					<head>Entity Declared</head>
					<p>In a document
without any DTD, a document with only an internal DTD subset which contains
no parameter entity references, or a document with <quote><code>standalone='yes'</code></quote>, for
an entity reference that does not occur within the external subset or a parameter
entity, the <nt def="NT-Name">Name</nt> given in the entity reference <rfc2119>MUST</rfc2119> <termref def="dt-match">match</termref> that in an <titleref href="#sec-entity-decl">entity
declaration</titleref> that does not occur within the external subset or a
parameter entity, except that well-formed documents need not declare
any of the following entities: &magicents;. The
declaration of a general entity <rfc2119>MUST</rfc2119> precede any reference to it which appears
in a default value in an attribute-list declaration.</p>
					<p><phrase>Note
that non-validating processors are <titleref href="#include-if-valid">not
obligated to</titleref> to read and process entity declarations occurring in parameter entities or in
the external subset</phrase>; for such documents,
the rule that an entity must be declared is a well-formedness constraint only
if <titleref href="#sec-rmd">standalone='yes'</titleref>.</p>
				</wfcnote>
				<vcnote id="vc-entdeclared">
					<head>Entity Declared</head>
					<p>In a document with
an external subset or external parameter entities with <quote><code>standalone='no'</code></quote>,
the <nt def="NT-Name">Name</nt> given in the entity reference <rfc2119>MUST</rfc2119> <termref def="dt-match">match</termref> that in an <titleref href="#sec-entity-decl">entity
declaration</titleref>. For interoperability, valid documents <rfc2119>SHOULD</rfc2119> declare
the entities &magicents;, in the form specified in <specref ref="sec-predefined-ent"/>.
The declaration of a parameter entity <rfc2119>MUST</rfc2119> precede any reference to it. Similarly,
the declaration of a general entity <rfc2119>MUST</rfc2119> precede any attribute-list
declaration containing a default value with a direct or indirect reference
to that general entity.</p>
				</vcnote>
				<!-- FINAL EDIT: is this duplication too clumsy? -->
				<wfcnote id="textent">
					<head>Parsed Entity</head>
					<p>An entity reference <rfc2119>MUST
NOT</rfc2119> contain the name of an <termref def="dt-unparsed">unparsed entity</termref>.
Unparsed entities may be referred to only in <termref def="dt-attrval">attribute
values</termref> declared to be of type <kw>ENTITY</kw> or <kw>ENTITIES</kw>.</p>
				</wfcnote>
				<wfcnote id="norecursion">
					<head>No Recursion</head>
					<p>A parsed entity <rfc2119>MUST NOT</rfc2119> contain a recursive reference to itself, either directly or indirectly.</p>
				</wfcnote>
				<wfcnote id="indtd">
					<head>In DTD</head>
					<p>Parameter-entity references <phrase role="mustard"><rfc2119>MUST NOT</rfc2119> appear outside</phrase>
 the <termref def="dt-doctype">DTD</termref>.</p>
				</wfcnote>
				<p>Examples of character and entity references:</p>
				<eg>Type &lt;key>less-than&lt;/key> (&hcro;3C;) to save options.
This document was prepared on &amp;docdate; and
is classified &amp;security-level;.</eg>
				<p>Example of a parameter-entity reference:</p>
				<eg><![CDATA[<!-- declare the parameter entity "ISOLat2"... -->
<!ENTITY % ISOLat2
         SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... now reference it. -->
%ISOLat2;]]></eg>
			</div2>
			<div2 id="sec-entity-decl">
				<head>Entity Declarations</head>
				<p><termdef id="dt-entdecl" term="entity declaration"> Entities are declared
thus:</termdef></p>
				<scrap lang="ebnf">
					<head>Entity Declaration</head>
					<prodgroup pcw2="5" pcw4="18.5">
						<prod id="NT-EntityDecl" num="70">
							<lhs>EntityDecl</lhs>
							<rhs><nt def="NT-GEDecl">GEDecl</nt><!--</rhs><com>General entities</com>
<rhs>--> | <nt def="NT-PEDecl">PEDecl</nt></rhs>
							<!--<com>Parameter entities</com>-->
						</prod>
						<prod id="NT-GEDecl" num="71">
							<lhs>GEDecl</lhs>
							<rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt> <nt def="NT-EntityDef">EntityDef</nt> <nt def="NT-S">S</nt>?
'>'</rhs>
						</prod>
						<prod id="NT-PEDecl" num="72">
							<lhs>PEDecl</lhs>
							<rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> '%' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt> <nt def="NT-PEDef">PEDef</nt> <nt def="NT-S">S</nt>? '>'</rhs>
							<!--<com>Parameter entities</com>-->
						</prod>
						<prod id="NT-EntityDef" num="73">
							<lhs>EntityDef</lhs>
							<rhs><nt def="NT-EntityValue">EntityValue</nt><!--</rhs>
<rhs>-->| (<nt def="NT-ExternalID">ExternalID</nt> <nt def="NT-NDataDecl">NDataDecl</nt>?)</rhs>
							<!-- <nt def='NT-ExternalDef'>ExternalDef</nt></rhs> -->
						</prod>
						<!-- FINAL EDIT: what happened to WFs here? -->
						<prod id="NT-PEDef" num="74">
							<lhs>PEDef</lhs>
							<rhs><nt def="NT-EntityValue">EntityValue</nt> | <nt def="NT-ExternalID">ExternalID</nt></rhs>
						</prod>
					</prodgroup>
				</scrap>
				<p>The <nt def="NT-Name">Name</nt> identifies the entity in an <termref def="dt-entref">entity
reference</termref> or, in the case of an unparsed entity, in the value of
an <kw>ENTITY</kw> or <kw>ENTITIES</kw> attribute. If the same entity is declared
more than once, the first declaration encountered is binding; at user option,
an XML processor <rfc2119>MAY</rfc2119> issue a warning if entities are declared multiple times.</p>
				<div3 id="sec-internal-ent">
					<head>Internal Entities</head>
					<p><termdef id="dt-internent" term="Internal Entity Replacement Text">If the
entity definition is an <nt def="NT-EntityValue">EntityValue</nt>, the defined
entity is called an <term>internal entity</term>. There is no separate physical
storage object, and the content of the entity is given in the declaration.</termdef>
Note that some processing of entity and character references in the <termref def="dt-litentval">literal entity value</termref> may be required to produce
the correct <termref def="dt-repltext">replacement text</termref>: see <specref ref="intern-replacement"/>.</p>
					<p>An internal entity is a <termref def="dt-parsedent">parsed entity</termref>.</p>
					<p>Example of an internal entity declaration:</p>
					<eg>&lt;!ENTITY Pub-Status "This is a pre-release of the
 specification."></eg>
				</div3>
				<div3 id="sec-external-ent">
					<head>External Entities</head>
					<p><termdef id="dt-extent" term="External Entity">If the entity is not internal,
it is an <term>external entity</term>, declared as follows:</termdef></p>
					<scrap lang="ebnf">
						<head>External Entity Declaration</head>
						<!--
<prod id='NT-ExternalDef'><lhs>ExternalDef</lhs>
<rhs></prod> -->
						<prod id="NT-ExternalID" num="75">
							<lhs>ExternalID</lhs>
							<rhs>'SYSTEM' <nt def="NT-S">S</nt> <nt def="NT-SystemLiteral">SystemLiteral</nt></rhs>
							<rhs>| 'PUBLIC' <nt def="NT-S">S</nt> <nt def="NT-PubidLiteral">PubidLiteral</nt> <nt def="NT-S">S</nt> <nt def="NT-SystemLiteral">SystemLiteral</nt></rhs>
						</prod>
						<prod id="NT-NDataDecl" num="76">
							<lhs>NDataDecl</lhs>
							<rhs><nt def="NT-S">S</nt> 'NDATA' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt></rhs>
							<vc def="not-declared"/>
						</prod>
					</scrap>
					<p>If the <nt def="NT-NDataDecl">NDataDecl</nt> is present, this is a general <termref def="dt-unparsed">unparsed entity</termref>; otherwise it is a parsed entity.</p>
					<vcnote id="not-declared">
						<head>Notation Declared</head>
						<p>The <nt def="NT-Name">Name</nt> <rfc2119>MUST</rfc2119> match the declared name of a <termref def="dt-notation">notation</termref>.</p>
					</vcnote>
					<p><termdef id="dt-sysid" term="System Identifier">The <nt def="NT-SystemLiteral">SystemLiteral</nt> is called the entity's <term>system
identifier</term>. It is <phrase>meant to be
converted to</phrase> a URI reference
(as defined in <bibref ref="rfc2396"/>, updated by <bibref ref="rfc2732"/>),
<phrase>as part of the
process of dereferencing it</phrase> to obtain input for the XML processor to construct the
entity's replacement text.</termdef> It is an error for a fragment identifier
(beginning with a <code>#</code> character) to be part of a system identifier.
Unless otherwise provided by information outside the scope of this specification
(e.g. a special XML element type defined by a particular DTD, or a processing
instruction defined by a particular application specification), relative URIs
are relative to the location of the resource within which the entity declaration
occurs. <phrase>This is defined to
be the external entity containing the '&lt;' which starts the declaration, at the
point when it is parsed as a declaration.</phrase>
A URI might thus be relative to the <termref def="dt-docent">document
entity</termref>, to the entity containing the <termref def="dt-doctype">external
DTD subset</termref>, or to some other <termref def="dt-extent">external parameter
entity</termref>. <phrase>Attempts to
retrieve the resource identified by a URI <rfc2119>MAY</rfc2119> be redirected at the parser
level (for example, in an entity resolver) or below (at the protocol level,
for example, via an HTTP <code>Location:</code> header). In the absence of additional
information outside the scope of this specification within the resource,
the base URI of a resource is always the URI of the actual resource returned.
In other words, it is the URI of the resource retrieved after all redirection
has occurred.</phrase></p>
					<p>System
identifiers (and other XML strings meant to be used as URI references) <rfc2119>MAY</rfc2119> contain
characters that, according to <bibref ref="rfc2396"/> and <bibref ref="rfc2732"/>,
must be escaped before a URI can be used to retrieve the referenced resource. The
characters to be escaped are the control characters #x0 to #x1F and #x7F (most of
which cannot appear in XML), space #x20, the delimiters '&lt;' #x3C, '&gt;' #x3E and
'"' #x22, the <emph>unwise</emph> characters '{' #x7B, '}' #x7D, '|' #x7C, '\' #x5C, '^' #x5E and
'`' #x60, as well as all characters above #x7F. Since escaping is not always a fully
reversible process, it <rfc2119>MUST</rfc2119> be performed only when absolutely necessary and as late
as possible in a processing chain. In particular, neither the process of converting
a relative URI to an absolute one nor the process of passing a URI reference to a
process or software component responsible for dereferencing it <rfc2119>SHOULD</rfc2119> trigger escaping.
When escaping does occur, it <rfc2119>MUST</rfc2119> be performed as follows:</p>
					<olist>
						<item>
							<p>Each
character <phrase>to be escaped</phrase>
is <phrase>represented in</phrase>
UTF-8 <phrase><bibref ref="Unicode3"/></phrase>
as one or more bytes.</p>
						</item>
						<item>
							<p><phrase>The resulting bytes</phrase>
are escaped with
the URI escaping mechanism (that is, converted to <code>%</code><var>HH</var>,
where HH is the hexadecimal notation of the byte value).</p>
						</item>
						<item>
							<p>The original character is replaced by the resulting character sequence.</p>
						</item>
					</olist>
					<p><termdef id="dt-pubid" term="Public identifier"> In addition to a system
identifier, an external identifier <rfc2119>MAY</rfc2119> include a <term>public identifier</term>.</termdef>
An XML processor attempting to retrieve the entity's content <rfc2119>MAY</rfc2119> use
<phrase>any combination of
the public and system identifiers as well as additional information outside the
scope of this specification</