node10-libxslt
Version:
[Fork] Node.js bindings for libxslt compatible with libxmljs
841 lines (840 loc) • 202 kB
text/xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.1//EN"
"xmlspec-v21.dtd" [
<!--ArborText, Inc., 1988-2000, v.4002-->
<!ENTITY http-ident "http://www.w3.org/TR/2000/REC-xml">
<!ENTITY draft.month "October">
<!ENTITY draft.day "6">
<!ENTITY iso6.doc.date "20001006">
<!ENTITY draft.year "2000">
<!ENTITY versionOfXML "1.0">
<!ENTITY pio "'<?xml'">
<!ENTITY doc.date "10 February 1998">
<!ENTITY w3c.doc.date "02-Feb-1998">
<!ENTITY WebSGML "WebSGML Adaptations Annex to ISO 8879">
<!ENTITY pic "'?>'">
<!ENTITY br "\n">
<!ENTITY cellback "#c0d9c0">
<!ENTITY mdash "--">
<!ENTITY com "--">
<!ENTITY como "--">
<!ENTITY comc "--">
<!ENTITY hcro "&#x">
<!ENTITY nbsp " ">
<!ENTITY magicents "<code>amp</code>,
<code>lt</code>,
<code>gt</code>,
<code>apos</code>,
<code>quot</code>">
<!ENTITY doc.audience "public review and discussion">
<!ENTITY doc.distribution "may be distributed freely, as long as
all text and legal notices remain intact">
]>
<spec w3c-doctype="rec">
<!--
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.
-->
<header>
<title>Extensible Markup Language (XML)</title>
<version>1.0 (Second Edition)</version>
<w3c-designation>REC-xml-&iso6.doc.date;</w3c-designation>
<w3c-doctype>W3C Recommendation</w3c-doctype>
<pubdate><day>&draft.day;</day><month>&draft.month;</month><year>&draft.year;</year>
</pubdate>
<publoc><loc href="&http-ident;-&iso6.doc.date;">&http-ident;-&iso6.doc.date;</loc>
(<loc href="&http-ident;-&iso6.doc.date;.html">XHTML</loc>, <loc href="&http-ident;-&iso6.doc.date;.xml">XML</loc>, <loc
href="&http-ident;-&iso6.doc.date;.pdf">PDF</loc>, <loc href="&http-ident;-&iso6.doc.date;-review.html">XHTML
review version</loc> with color-coded revision indicators)</publoc>
<latestloc><loc href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</loc></latestloc>
<prevlocs><loc href="http://www.w3.org/TR/2000/WD-xml-2e-20000814"> http://www.w3.org/TR/2000/WD-xml-2e-20000814</loc>
<loc href="http://www.w3.org/TR/1998/REC-xml-19980210"> http://www.w3.org/TR/1998/REC-xml-19980210</loc><!--
<loc href='http://www.w3.org/TR/PR-xml-971208'>
http://www.w3.org/TR/PR-xml-971208</loc>
<loc href='http://www.w3.org/TR/WD-xml-961114'>
http://www.w3.org/TR/WD-xml-961114</loc>
<loc href='http://www.w3.org/TR/WD-xml-lang-970331'>
http://www.w3.org/TR/WD-xml-lang-970331</loc>
<loc href='http://www.w3.org/TR/WD-xml-lang-970630'>
http://www.w3.org/TR/WD-xml-lang-970630</loc>
<loc href='http://www.w3.org/TR/WD-xml-970807'>
http://www.w3.org/TR/WD-xml-970807</loc>
<loc href='http://www.w3.org/TR/WD-xml-971117'>
http://www.w3.org/TR/WD-xml-971117</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" diff="chg"><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" diff="add"><name>Eve Maler</name><affiliation>Sun Microsystems,
Inc.</affiliation><email href="mailto:elm@east.sun.com">eve.maler@east.sun.com</email>
</author>
</authlist>
<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>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 W3C XML Activity, details of which can be found at <loc
href="http://www.w3.org/XML/">http://www.w3.org/XML</loc>. <phrase diff="add"><loc
role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E100">[E100]</loc>
The English version of this specification is the only normative version. However,
for translations of this document, see <loc href="http://www.w3.org/XML/#trans">http://www.w3.org/XML/#trans</loc>. </phrase>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 diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E66">[E66]</loc>This
specification uses the term URI, which is defined by <bibref ref="Berners-Lee"/>,
a work in progress expected to update <bibref ref="RFC1738"/> and <bibref
ref="RFC1808"/>.</p>
<p diff="add">This second edition is <emph>not</emph> a new version of XML (first published 10 February 1998);
it merely incorporates the changes dictated by the first-edition errata (available
at <loc href="http://www.w3.org/XML/xml-19980210-errata">http://www.w3.org/XML/xml-19980210-errata</loc>)
as a convenience to readers. The errata list for this second edition is available
at <loc href="http://www.w3.org/XML/xml-V10-2e-errata">http://www.w3.org/XML/xml-V10-2e-errata</loc>.</p>
<p>Please report errors in this document to <loc href="mailto:xml-editor@w3.org">xml-editor@w3.org</loc><phrase
diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E101">[E101]</loc>; <loc
href="http://lists.w3.org/Archives/Public/xml-editor">archives</loc> are available</phrase>.</p>
<note diff="add">
<p>C. M. Sperberg-McQueen's affiliation has changed since the publication
of the first edition. 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.</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>
<slist>
<sitem>1997-12-03 : CMSMcQ : yet further changes</sitem>
<sitem>1997-12-02 : TB : further changes (see TB to XML WG, 2 December 1997)</sitem>
<sitem>1997-12-02 : CMSMcQ : deal with as many corrections and comments from
the proofreaders as possible: entify hard-coded document date in pubdate element,
change expansion of entity WebSGML, update status description as per Dan Connolly
(am not sure about refernece to Berners-Lee et al.), add 'The' to abstract
as per WG decision, move Relationship to Existing Standards to back matter
and combine with References, re-order back matter so normative appendices
come first, re-tag back matter so informative appendices are tagged informdiv1,
remove XXX XXX from list of 'normative' specs in prose, move some references
from Other References to Normative References, add RFC 1738, 1808, and 2141
to Other References (they are not normative since we do not require the processor
to enforce any rules based on them), add reference to 'Fielding draft' (Berners-Lee
et al.), move notation section to end of body, drop URIchar non-terminal and
use SkipLit instead, lose stray reference to defunct nonterminal 'markupdecls',
move reference to Aho et al. into appendix (Tim's right), add prose note saying
that hash marks and fragment identifiers are NOT part of the URI formally
speaking, and are NOT legal in system identifiers (processor 'may' signal
an error). Work through: Tim Bray reacting to James Clark, Tim Bray on his
own, Eve Maler, NOT DONE YET: change binary / text to unparsed / parsed. handle
James's suggestion about < in attriubte values uppercase hex characters,
namechar list, </sitem>
<sitem>1997-12-01 : JB : add some column-width parameters</sitem>
<sitem>1997-12-01 : CMSMcQ : begin round of changes to incorporate recent
WG decisions and other corrections: binding sources of character encoding
info (27 Aug / 3 Sept), correct wording of Faust quotation (restore dropped
line), drop SDD from EncodingDecl, change text at version number 1.0, drop
misleading (wrong!) sentence about ignorables and extenders, modify definition
of PCData to make bar on msc grammatical, change grammar's handling of internal
subset (drop non-terminal markupdecls), change definition of includeSect to
allow conditional sections, add integral-declaration constraint on internal
subset, drop misleading / dangerous sentence about relationship of entities
with system storage objects, change table body tag to htbody as per EM change
to DTD, add rule about space normalization in public identifiers, add description
of how to generate our name-space rules from Unicode character database (needs
further work!). </sitem>
<sitem>1997-10-08 : TB : Removed %-constructs again, new rules for PE appearance.</sitem>
<sitem>1997-10-01 : TB : Case-sensitive markup; cleaned up element-type defs,
lotsa little edits for style</sitem>
<sitem>1997-09-25 : TB : Change to elm's new DTD, with substantial detail
cleanup as a side-effect</sitem>
<sitem>1997-07-24 : CMSMcQ : correct error (lost *) in definition of ignoreSectContents
(thanks to Makoto Murata)</sitem>
<sitem>Allow all empty elements to have end-tags, consistent with SGML TC
(as per JJC).</sitem>
<sitem>1997-07-23 : CMSMcQ : pre-emptive strike on pending corrections: introduce
the term 'empty-element tag', note that all empty elements may use it, and
elements declared EMPTY must use it. Add WFC requiring encoding decl to come
first in an entity. Redefine notations to point to PIs as well as binary entities.
Change autodetection table by removing bytes 3 and 4 from examples with Byte
Order Mark. Add content model as a term and clarify that it applies to both
mixed and element content. </sitem>
<sitem>1997-06-30 : CMSMcQ : change date, some cosmetic changes, changes to
productions for choice, seq, Mixed, NotationType, Enumeration. Follow James
Clark's suggestion and prohibit conditional sections in internal subset. TO
DO: simplify production for ignored sections as a result, since we don't need
to worry about parsers which don't expand PErefs finding a conditional section.</sitem>
<sitem>1997-06-29 : TB : various edits</sitem>
<sitem>1997-06-29 : CMSMcQ : further changes: Suppress old FINAL EDIT comments
and some dead material. Revise occurrences of % in grammar to exploit Henry
Thompson's pun, especially markupdecl and attdef. Remove RMD requirement relating
to element content (?). </sitem>
<sitem>1997-06-28 : CMSMcQ : Various changes for 1 July draft: Add text for
draconian error handling (introduce the term Fatal Error). RE deleta est (changing
wording from original announcement to restrict the requirement to validating
parsers). Tag definition of validating processor and link to it. Add colon
as name character. Change def of %operator. Change standard definitions of
lt, gt, amp. Strip leading zeros from #x00nn forms.</sitem>
<sitem>1997-04-02 : CMSMcQ : final corrections of editorial errors found in
last night's proofreading. Reverse course once more on well-formed: Webster's
Second hyphenates it, and that's enough for me.</sitem>
<sitem>1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self</sitem>
<sitem>1997-03-31 : Tim Bray : many changes</sitem>
<sitem>1997-03-29 : CMSMcQ : some Henry Thompson (on entity handling), some
Charles Goldfarb, some ERB decisions (PE handling in miscellaneous declarations.
Changed Ident element to accept def attribute. Allow normalization of Unicode
characters. move def of systemliteral into section on literals.</sitem>
<sitem>1997-03-28 : CMSMcQ : make as many corrections as possible, from Terry
Allen, Norbert Mikula, James Clark, Jon Bosak, Henry Thompson, Paul Grosso,
and self. Among other things: give in on "well formed" (Terry is right), tentatively
rename QuotedCData as AttValue and Literal as EntityValue to be more informative,
since attribute values are the <emph>only</emph> place QuotedCData was used,
and vice versa for entity text and Literal. (I'd call it Entity Text, but
8879 uses that name for both internal and external entities.)</sitem>
<sitem>1997-03-26 : CMSMcQ : resynch the two forks of this draft, reapply
my changes dated 03-20 and 03-21. Normalize old 'may not' to 'must not' except
in the one case where it meant 'may or may not'.</sitem>
<sitem>1997-03-21 : TB : massive changes on plane flight from Chicago to Vancouver</sitem>
<sitem>1997-03-21 : CMSMcQ : correct as many reported errors as possible. </sitem>
<sitem>1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec.</sitem>
<sitem>1997-03-20 : CMSMcQ : cosmetic changes preparatory to revision for
WWW conference April 1997: restore some of the internal entity references
(e.g. to docdate, etc.), change character xA0 to &nbsp; and define nbsp
as &#160;, and refill a lot of paragraphs for legibility.</sitem>
<sitem>1996-11-12 : CMSMcQ : revise using Tim's edits: Add list type of NUMBERED
and change most lists either to BULLETS or to NUMBERED. Suppress QuotedNames,
Names (not used). Correct trivial-grammar doc type decl. Rename 'marked section'
as 'CDATA section' passim. Also edits from James Clark: Define the set of
characters from which [^abc] subtracts. Charref should use just [0-9] not
Digit. Location info needs cleaner treatment: remove? (ERB question). One
example of a PI has wrong pic. Clarify discussion of encoding names. Encoding
failure should lead to unspecified results; don't prescribe error recovery.
Don't require exposure of entity boundaries. Ignore white space in element
content. Reserve entity names of the form u-NNNN. Clarify relative URLs. And
some of my own: Correct productions for content model: model cannot consist
of a name, so "elements ::= cp" is no good. </sitem>
<sitem>1996-11-11 : CMSMcQ : revise for style. Add new rhs to entity declaration,
for parameter entities.</sitem>
<sitem>1996-11-10 : CMSMcQ : revise for style. Fix / complete section on names,
characters. Add sections on parameter entities, conditional sections. Still
to do: Add compatibility note on deterministic content models. Finish stylistic
revision.</sitem>
<sitem>1996-10-31 : TB : Add Entity Handling section</sitem>
<sitem>1996-10-30 : TB : Clean up term & termdef. Slip in ERB decision
re EMPTY.</sitem>
<sitem>1996-10-28 : TB : Change DTD. Implement some of Michael's suggestions.
Change comments back to //. Introduce language for XML namespace reservation.
Add section on white-space handling. Lots more cleanup.</sitem>
<sitem>1996-10-24 : CMSMcQ : quick tweaks, implement some ERB decisions. Characters
are not integers. Comments are /* */ not //. Add bibliographic refs to 10646,
HyTime, Unicode. Rename old Cdata as MsData since it's <emph>only</emph> seen
in marked sections. Call them attribute-value pairs not name-value pairs,
except once. Internal subset is optional, needs '?'. Implied attributes should
be signaled to the app, not have values supplied by processor.</sitem>
<sitem>1996-10-16 : TB : track down & excise all DSD references; introduce
some EBNF for entity declarations.</sitem>
<sitem>1996-10-?? : TB : consistency check, fix up scraps so they all parse,
get formatter working, correct a few productions.</sitem>
<sitem>1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and organizational
changes: Replace a few literals with xmlpio and pic entities, to make them
consistent and ensure we can change pic reliably when the ERB votes. Drop
paragraph on recognizers from notation section. Add match, exact match to
terminology. Move old 2.2 XML Processors and Apps into intro. Mention comments,
PIs, and marked sections in discussion of delimiter escaping. Streamline discussion
of doctype decl syntax. Drop old section of 'PI syntax' for doctype decl,
and add section on partial-DTD summary PIs to end of Logical Structures section.
Revise DSD syntax section to use Tim's subset-in-a-PI mechanism.</sitem>
<sitem>1996-10-10 : TB : eliminate name recognizers (and more?)</sitem>
<sitem>1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 (Characters)</sitem>
<sitem>1996-10-09 : CMSMcQ : re-unite everything for convenience, at least
temporarily, and revise quickly</sitem>
<sitem>1996-10-08 : TB : first major homogenization pass</sitem>
<sitem>1996-10-08 : TB : turn "current" attribute on div type into CDATA</sitem>
<sitem>1996-10-02 : TB : remould into skeleton + entities</sitem>
<sitem>1996-09-30 : CMSMcQ : add a few more sections prior to exchange with
Tim.</sitem>
<sitem>1996-09-20 : CMSMcQ : finish transcribing notes.</sitem>
<sitem>1996-09-19 : CMSMcQ : begin transcribing notes for draft.</sitem>
<sitem>1996-09-13 : CMSMcQ : made outline from notes of 09-06, do some housekeeping</sitem>
</slist>
</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 and ISO/IEC
10646 for characters, Internet RFC 1766 for language identification tags,
ISO 639 for language name codes, and ISO 3166 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 <!-- is for &doc.audience;.--> &doc.distribution;.</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. 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>may</label>
<def>
<p><termdef id="dt-may" term="May">Conforming documents and XML processors
are permitted to but need not behave as described.</termdef></p>
</def></gitem>
<gitem><label>must</label>
<def>
<p><termdef id="dt-must" term="Must">Conforming documents and XML processors
are required to behave as described; otherwise they are in error. <!-- do NOT change this! this is what defines a violation of
a 'must' clause as 'an error'. -MSM --></termdef></p>
</def></gitem>
<gitem><label>error</label>
<def>
<p><termdef id="dt-error" term="Error">A violation of the rules of this specification;
results are undefined. Conforming software may detect and report an error
and may 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> must detect and report to the application.
After encountering a fatal error, the processor may continue processing the
data to search for further errors and may report such errors to the application.
In order to support correction of errors, the processor may 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
must not continue normal processing (i.e., it must not 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
may or must (depending on the modal verb in the sentence) behave as described;
if it does, it must 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 must, 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 must 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. <phrase diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E85">[E85]</loc>At
user option, processors may normalize such characters to some canonical form. </phrase>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"><phrase diff="add"><loc
role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E87">[E87]</loc>Marks
a sentence describing</phrase> 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"><phrase diff="add"><loc
role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E87">[E87]</loc>Marks
a sentence describing</phrase> 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>
</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 may 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 may <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 must 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">
<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> <phrase
diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E17">[E17]</loc>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.</phrase> 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 ISO/IEC 10646 <bibref ref="ISO10646"/> <phrase
diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>(see
also <bibref ref="ISO10646-2000"/>)</phrase>. Legal characters are tab, carriage
return, line feed, and the legal <phrase diff="del"><loc role="erratumref"
href="http://www.w3.org/XML/xml-19980210-errata#E35">[E35]</loc>graphic </phrase>characters
of Unicode and ISO/IEC 10646. <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E69">[E69]</loc>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
must accept any character in the range specified for <nt def="NT-Char">Char</nt>.</phrase>
The use of <quote>compatibility characters</quote>, as defined in section
6.8 of <bibref ref="Unicode"/> <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>(see
also D21 in section 3.6 of <bibref ref="Unicode3"/>)</phrase>, is discouraged.</termdef></p>
<scrap id="char32" lang="ebnf">
<head>Character Range</head>
<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
<prod id="NT-Char">
<lhs>Char</lhs><rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]</rhs>
<com>any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.</com>
</prod>
</prodgroup></scrap>
<p>The mechanism for encoding character code points into bit patterns may
vary from entity to entity. All XML processors must accept the UTF-8 and UTF-16
encodings of 10646; 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>
<!--
<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">
<lhs>S</lhs><rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
</prod>
</prodgroup></scrap>
<p>Characters are classified for convenience as letters, digits, or other
characters. <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E30">[E30]</loc>A
letter consists of an alphabetic or syllabic base character or an ideographic
character.</phrase> 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 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 diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E98">[E98]</loc>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>
<scrap lang="ebnf">
<head>Names and Tokens</head>
<prod id="NT-NameChar">
<lhs>NameChar</lhs><rhs><nt def="NT-Letter">Letter</nt> | <nt def="NT-Digit">Digit</nt>
| '.' | '-' | '_' | ':' | <nt def="NT-CombiningChar">CombiningChar</nt> | <nt
def="NT-Extender">Extender</nt></rhs>
</prod>
<prod id="NT-Name">
<lhs>Name</lhs><rhs>(<nt def="NT-Letter">Letter</nt> | '_' | ':') (<nt def="NT-NameChar">NameChar</nt>)*</rhs>
</prod>
<prod id="NT-Names">
<lhs>Names</lhs><rhs><nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt
def="NT-Name">Name</nt>)*</rhs>
</prod>
<prod id="NT-Nmtoken">
<lhs>Nmtoken</lhs><rhs>(<nt def="NT-NameChar">NameChar</nt>)+</rhs>
</prod>
<prod id="NT-Nmtokens">
<lhs>Nmtokens</lhs><rhs><nt def="NT-Nmtoken">Nmtoken</nt> (<nt def="NT-S">S</nt> <nt
def="NT-Nmtoken">Nmtoken</nt>)*</rhs>
</prod>
</scrap>
<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">
<lhs>EntityValue</lhs><rhs>'"' ([^%&"] | <nt def="NT-PEReference">PEReference</nt>
| <nt def="NT-Reference">Reference</nt>)* '"' </rhs>
<rhs>| "'" ([^%&'] | <nt def="NT-PEReference">PEReference</nt> | <nt
def="NT-Reference">Reference</nt>)* "'"</rhs>
</prod>
<prod id="NT-AttValue">
<lhs>AttValue</lhs><rhs>'"' ([^<&"] | <nt def="NT-Reference">Reference</nt>)*
'"' </rhs>
<rhs>| "'" ([^<&'] | <nt def="NT-Reference">Reference</nt>)*
"'"</rhs>
</prod>
<prod id="NT-SystemLiteral">
<lhs>SystemLiteral</lhs><rhs>('"' [^"]* '"') | ("'" [^']* "'") </rhs>
</prod>
<prod id="NT-PubidLiteral">
<lhs>PubidLiteral</lhs><rhs>'"' <nt def="NT-PubidChar">PubidChar</nt>* '"'
| "'" (<nt def="NT-PubidChar">PubidChar</nt> - "'")* "'"</rhs>
</prod>
<prod id="NT-PubidChar">
<lhs>PubidChar</lhs><rhs>#x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]</rhs>
</prod>
</scrap>
<note diff="add">
<p><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E72">[E72]</loc>Although
the <nt def="NT-EntityValue">EntityValue</nt> production allows the definition
of an entity consisting of a single explicit <code><</code> in the literal
(e.g., <code><!ENTITY mylt "<"></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>, <phrase
diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E89">[E89]</loc><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).</phrase></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 (&) and the left angle bracket (<) may appear
in their literal form <emph>only</emph> 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>.<phrase
diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E18">[E18]</loc>They
are also legal within the <termref def="dt-litentval">literal entity value</termref>
of an internal entity declaration; see <specref ref="wf-entities"/>.</phrase> <!-- FINAL EDIT: restore internal entity decl or leave it out. -->
If they are needed elsewhere, they must be <termref def="dt-escape">escaped</termref>
using either <termref def="dt-charref">numeric character references</termref>
or the strings <quote><code>&amp;</code></quote> and <quote><code>&lt;</code></quote>
respectively. The right angle bracket (>) may be represented using the string <quote><code>&gt;</code></quote>,
and must, <termref def="dt-compat">for compatibility</termref>, be escaped
using <quote><code>&gt;</code></quote> or a character reference when it
appears in the string <quote><code>]]></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>]]></code></quote>.</p>
<p>To allow attribute values to contain both single and double quotes, the
apostrophe or single-quote character (') may be represented as <quote><code>&apos;</code></quote>,
and the double-quote character (") as <quote><code>&quot;</code></quote>.</p>
<scrap lang="ebnf">
<head>Character Data</head>
<prod id="NT-CharData">
<lhs>CharData</lhs><rhs>[^<&]* - ([^<&]* ']]>' [^<&]*)</rhs>
</prod>
</scrap>
</div2>
<div2 id="sec-comments">
<head>Comments</head>
<p><termdef id="dt-comment" term="Comment"><term>Comments</term> may appear
anywhere in a document outside other <termref def="dt-markup">markup</termref>;
in addition, they may 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 may, 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)
must not occur within comments.</termdef> <phrase diff="add"><loc role="erratumref"
href="http://www.w3.org/XML/xml-19980210-errata#E63">[E63]</loc>Parameter
entity references are not recognized within comments.</phrase></p>
<scrap lang="ebnf">
<head>Comments</head>
<prod id="NT-Comment">
<lhs>Comment</lhs><rhs>'<!--' ((<nt def="NT-Char">Char</nt> - '-') | ('-'
(<nt def="NT-Char">Char</nt> - '-')))* '-->'</rhs>
</prod>
</scrap>
<p>An example of a comment:</p>
<eg><!&como; declarations for <head> & <body> &comc;></eg>
<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E27">[E27]</loc>Note
that the grammar does not allow a comment ending in <code>---></code>. The
following example is <emph>not</emph> well-formed.</p>
<eg diff="add"><!-- 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">
<lhs>PI</lhs><rhs>'<?' <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">
<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 must 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
may be used for formal declaration of PI targets. <phrase diff="add"><loc
role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E63">[E63]</loc>Parameter
entity references are not recognized within processing instructions.</phrase></p>
</div2>
<div2 id="sec-cdata-sect">
<head>CDATA Sections</head>
<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term>
may 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><![CDATA[</code></quote>
and end with the string <quote><code>]]></code></quote>:</termdef></p>
<scrap lang="ebnf">
<head>CDATA Sections</head>
<prod id="NT-CDSect">
<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">
<lhs>CDStart</lhs><rhs>'<![CDATA['</rhs>
</prod>
<prod id="NT-CData">
<lhs>CData</lhs><rhs>(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>*
']]>' <nt def="NT-Char">Char</nt>*)) </rhs>
</prod>
<prod id="NT-CDEnd">
<lhs>CDEnd</lhs><rhs>']]>'</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>&lt;</code></quote>
and <quote><code>&amp;</code></quote>. CDATA sections cannot nest.</p>
<p>An example of a CDATA section, in which <quote><code><greeting></code></quote>
and <quote><code></greeting></code></quote> are recognized as <termref
def="dt-chardata">character data</termref>, not <termref def="dt-markup">markup</termref>:</p>
<eg><![CDATA[<greeting>Hello, world!</greeting>]]> </eg>
</div2>
<div2 id="sec-prolog-dtd">
<head>Prolog and Document Type Declaration</head>
<p><termdef id="dt-xmldecl" term="XML Declaration">XML documents <phrase diff="chg"><loc
role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E107">[E107]</loc>should</phrase>
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 version number <quote><code>1.0</code></quote> should be used to indicate
conformance to this version of this specification; it is an error for a document
to use the value <quote><code>1.0</code></quote> if it does not conform to
this version of this specification. It is the intent of the XML working group
to give later versions of this specification numbers other than <quote><code>1.0</code></quote>,
but this intent does not indicate a commitment to produce any future versions
of XML, nor if any are produced, to use any particular numbering scheme. Since
future versions are not ruled out, this construct is provided as a means to
allow the possibility of automatic version recognition, should it become necessary.
Processors may signal an error if they receive documents labeled with versions
they do not support.</p>
<p>The function of the markup in an XML document is to describe its storage
and logical structure and to associate attribute-value 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 must 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">
<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">
<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" diff="chg">
<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>
'"')<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E15">[E15]</loc></com></rhs>
</prod>
<prod id="NT-Eq">
<lhs>Eq</lhs><rhs><nt def="NT-S">S</nt>? '=' <nt def="NT-S">S</nt>?</rhs>
</prod>
<prod id="NT-VersionNum">
<lhs>VersionNum</lhs><rhs>([a-zA-Z0-9_.:] | '-')+</rhs>
</prod>
<prod id="NT-Misc">
<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