<!DOCTYPE spec [

<!-- The words 'FINAL EDIT' in comments mark places where changes
need to be made after approval of the document by the ERB, before
publication.  -->

<!ENTITY XML.version "1.0">
<!ENTITY doc.date "2 August 1998">
<!ENTITY iso6.doc.date "19980802">
<!ENTITY w3c.doc.date "2-August-1998">

<!ENTITY xmlspec "http://www.w3.org/TR/REC-xml" >
<!ENTITY xmlpio "'&lt;?XML'">
<!ENTITY pic    "'?>'">
<!ENTITY br     "<BR>">
<!ENTITY mdash  "--"> <!-- was: <!ENTITY mdash  "&#38;#151;"> -->
<!ENTITY com    "--">
<!ENTITY cellback '#c0d9c0'>
<!ENTITY como   "--">
<!ENTITY comc   "--">
<!ENTITY hcro   "&amp;#X">
<!-- <!ENTITY nbsp " "> -->
<!ENTITY nbsp   "&#160;">
<!ENTITY IDEOSPACE "3000" >
<!ENTITY magicents "<code>amp</code>,
<code>lt</code>,
<code>gt</code>,
<code>apos</code>,
<code>quot</code>">
 
<!-- audience and distribution status:  for use at publication time -->
<!--  -->
<!ENTITY doc.audience "public review and discussion">
<!ENTITY doc.distribution "may be distributed freely, as long as
all text and legal notices remain intact">

]>

<!-- for Panorama *-->
<!-- ?VERBATIM "scrap"> -->
<?VERBATIM "eg" ?>

<spec>
<header>
<title>Namespaces in XML</title>
<version></version>
<w3c-designation>WD-xml-names-&iso6.doc.date;</w3c-designation>
<w3c-doctype>World Wide Web Consortium Working Draft</w3c-doctype>
<pubdate><day>2</day><month>August</month><year>1998</year></pubdate>
<notice><p>This draft is for public discussion.</p></notice>
<publoc>
<loc href="http://www.w3.org/TR/1998/WD-xml-names-&iso6.doc.date;">
http://www.w3.org/TR/1998/WD-xml-names-&iso6.doc.date;</loc></publoc>
<latestloc>
<loc href='http://www.w3.org/TR/WD-xml-names'>http://www.w3.org/TR/WD-xml-names</loc>
</latestloc>
<prevlocs>
<loc href='http://www.w3.org/TR/1998/WD-xml-names-19980518'>http://www.w3.org/TR/1998/WD-xml-names-19980518</loc>
<loc href='http://www.w3.org/TR/1998/WD-xml-names-19980327'>http://www.w3.org/TR/1998/WD-xml-names-19980327</loc>
</prevlocs>
<authlist>
<author><name>Tim Bray</name>
<affiliation>Textuality</affiliation>
<email 
href="mailto:tbray@textuality.com">tbray@textuality.com</email></author>
<author><name>Dave Hollander</name>
<affiliation>Hewlett-Packard Company</affiliation>
<email href="mailto:dmh@corp.hp.com">dmh@corp.hp.com</email></author>
<author><name>Andrew Layman</name>
<affiliation>Microsoft</affiliation>
<email href="mailto:andrewl@microsoft.com">andrewl@microsoft.com</email></author>
</authlist>
<status>
<p>This draft specification is a work in progress representing the current
consensus of the W3C XML Working Group. 
This is a W3C Working Draft for review by W3C members and other interested
parties. 
Publication as a working draft does not imply endorsement by the W3C
membership. </p>
<p>This draft embodies a large-scale revision of the namespace
specification.  While it is unfinished in some respects, the
Working Group intends to keep the features it describes
functionally unchanged unless problems are discovered during early
implementation work.  To discover such problems as quickly as
possible, a special editorial team has been formed to receive
feedback from implementors during a one-month period beginning
with the publication of the working draft and ending shortly after
the XML Working Group meeting in Montreal August 22-23.  Please
send implementation experience reports to 
<a href="mailto:xml-names-issues@w3.org">xml-names-issues@w3.org</a>.
</p>
<p>While we do not anticipate substantial changes, we still caution that
further changes are possible and therefore we recommend that only 
experimental software or software that can be easily field-upgraded be
implemented to this specification at this time. 
The XML Working Group will not allow early implementation to constrain its
ability to make changes to this specification 
prior to final release. 
This is a draft document and may be updated, replaced or obsoleted by other
documents at any time. 
It is inappropriate to cite W3C Working Drafts as other than "work in
progress".
</p>
<p>It is the intent of the XML Working Group that this namespace facility
should become an integral part of some future version of the 
XML specification.</p>
</status> 
<abstract>
<p>XML namespaces provide a simple method for qualifying 
names used in Extensible Markup Language documents by associating them
with namespaces identified by URI.</p>
</abstract>
<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-10-10 : TB : Assembled Andrew's material and mine</sitem>
</slist>
</revisiondesc>
</header>
<body> 
<div1 id='sec-intro'>
<head>Motivation and Summary</head>
<p>We envision the use of Extensible Markup Language (XML) documents which 
contain markup that is defined for and used by different software modules.
One motivation for this is modularity; if there is a set of markup 
available which is well-understood and for which there is useful software 
available, it is better to re-use this markup rather than re-invent it.
</p>
<p>Such documents, containing markup from multiple independent sources,
pose problems of recognition and collision.  Software modules need to
be able to recognize the markup (tags and attributes) which they are designed
to process, even in the face 
of "collisions" occurring when markup intended for some other software
package uses the same element type or attribute name.
</p>
<!--
<p>We envision applications of Extensible Markup Language
<bibref ref='XML'/> where a document 
contains markup defined in multiple schemas,
which may have been authored independently.
One
motivation for this is that writing good schemas is hard, so it
is beneficial to re-use parts from existing, well-designed schemas.
Another is the advantage of allowing search engines or other
tools to operate over a range of documents that vary in many
respects but use common names for common element types. </p>
-->

<p>These considerations require that document
constructs
should have universal names, 
whose scope extends beyond their
containing document. 
This specification describes a mechanism,
<emph>XML namespaces</emph>, which accomplishes this.</p>

<p><termdef id='dt-namespace' term='Namespace'>An <term>XML namespace</term>
is a collection of names, identified by a URI,
which are used in XML documents as 
<xtermref href='&xmlspec;#dt-stag'>element types</xtermref> 
and <xtermref href='&xmlspec;#dt-attrname'>attribute names</xtermref>.
</termdef>
XML namespaces
differ from the "namespaces" conventionally used in computing disciplines
in that the XML version has internal structure and is not, mathematically
speaking, a set.
These issues are discussed in
<specref ref='Philosophy' />.
</p>
<p>Names from XML namespaces may appear as
<termref def='dt-qname'>qualified names</termref>, 
which contain a single colon, separating the name into a
<termref def='dt-prefix'>namespace prefix</termref> and the 
<termref def='dt-localname'>local part</termref>.
The prefix, which is mapped to a URI, selects a namespace. 
The combination of
the universally managed URI namespace and the document's own namespace
produces identifiers that are guaranteed universally unique.
A mechanism is provided for defaulting the prefix to avoid clutter
and improve readability.
</p>

<p>URIs can contain characters not allowed in names, so cannot
be used directly as namespace prefixes.
Therefore, the 
namespace prefix serves as a proxy for a URI.
An attribute-based syntax described below is used
to <termref def='dt-NSDecl'>declare</termref> the association of the 
namespace prefix with a URI; 
software which supports this namespace proposal must
recognize and act on these declarations and prefixes.
</p>
</div1>
<div1 id='ns-decl'> 
<head>Declaring Namespaces</head>
<p><termdef id='dt-attdecl'>A namespace is <term>declared</term> using an
attribute whose prefix is <code>xmlns</code> as follows.
Note that many of the nonterminals in the productions in
this specification are defined not here but in
the XML specification <bibref ref='XML'/>.
When nonterminals defined here have the same names as nonterminals
defined in the XML specification, the productions here
in all cases match a subset of the strings matched by the 
corresponding ones there.
<scrap lang='ebnf'>
<head>Namespace declaration using attributes</head>
<prod id='NT-AttNSDef'><lhs>NSDef</lhs>
<rhs><nt def='NT-AttPrefDef'>PrefixDef</nt>
<xnt href='&xmlspec;#NT-Eq'>Eq</xnt>
<xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt></rhs>
<nsc def='nsc-emptyLit' />
<!--<nsc def='nsc-NoFrags' />-->
</prod>
<prod id='NT-AttPrefDef'><lhs>PrefixDef</lhs>
<rhs>'xmlns' (':' <nt def='NT-NCName'>NCName</nt>)?</rhs>
</prod>
<prod id='NT-NCName'><lhs>NCName</lhs>
<rhs>(<nt def='NT-Letter'>Letter</nt> | '_')
(<nt def='NT-NCNameChar'>NCNameChar</nt>)*</rhs><com>An XML
<xnt href='&xmlspec;#NT-Name'>Name</xnt>, minus the ":"</com></prod>
<prod id='NT-NCNameChar'><lhs>NCNameChar</lhs>
<rhs><xnt href="&xmlspec;#NT-Letter">Letter</xnt>
| <xnt href='&xmlspec;#NT-Digit'>Digit</xnt> 
| '.' | '-' | '_'
| <xnt href='&xmlspec;#NT-CombiningChar'>CombiningChar</xnt>
| <xnt href='&xmlspec;#NT-Extender'>Extender</xnt></rhs>
</prod>
</scrap></termdef>
<termdef id='dt-NSName'>The 
<xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt> 
in the <nt def='NT-AttNSDef'>NSDef</nt> production 
is a URI which functions as a <term>namespace name</term> to identify the
namespace.</termdef>
The namespace name, to serve its
intended purpose, should have the characteristics of uniqueness and
persistence.
It is not a goal that it be directly usable for retrieval of a schema (if
any exists). 
An example of a syntax that is designed with these goals in mind is
that for Uniform Resource Names <bibref ref='URNs'/>.
However, it should be noted that ordinary URLs can be managed in such a way as
to achieve these same goals.</p>
<p><termdef id='dt-prefix' term='Namespace Prefix'>In the 
<nt def='NT-PrefixDef'>PrefixDef</nt>
production, if the optional colon and 
<nt def="NT-NCName">NCName</nt> are provided, then that
<nt def="NT-NCName">NCName</nt> gives the <term>namespace prefix</term>,
used to associate names with this namespace
in the scope of the element to which the declaration
is attached.</termdef></p>
<p><termdef id='dt-defaultNS' term='Default Namespace'>If the colon
and <nt def="NT-NCName">NCName</nt> are not provided, then the
associated <termref def='dt-NSName'>namespace name</termref> is
that of the <term>default namespace</term>
in the scope of the element to which the declaration
is attached.
</termdef></p>
<nscnote id='nsc-emptyLit'>
<head>Empty URI</head>
<p>The <xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt>
may be empty <emph>only</emph> if the 
<nt def='NT-PrefixDef'>PrefixDef</nt> is simply <code>xmlns</code>, i.e. is
declaring a <termref def='dt-defaultNS'>default namespace</termref>.
The effect of such a declaration is to override any higher-level
declaration of the default namespace, setting its value to null.
Default namespaces and overriding of declarations are discussed in 
<specref ref='scoping-defaulting'/>.
</p></nscnote>
<!--
<nscnote id='nsc-NoFrags'>
<head>No Fragments</head>
<p>The
<xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt> in
the <nt def='NT-NSDef'>NSDef</nt> 
production must contain a URI, 
<emph>not including</emph> an attached <code>#</code>-separated fragment
identifier.</p>
</nscnote>-->
<p>An example namespace declaration:
<eg><![CDATA[<?xml version="1.0"?>
  <x xmlns:edi='http://ecommerce.org/schema'>
    <!-- the edi namespace applies to the "x" element and contents -->
  </x>]]></eg>
</p>


<!--
<div3 id='decl-with-pi'>
<head>Declaring Namespaces using Processing Instructions</head>
<p><termdef id='dt-NSDecl' term='Namespace Declaration'>A namespace 
may be 
<term>declared</term> using a reserved
<xtermref href="&xmlspec;#dt-pi">processing
instruction</xtermref> as follows:
<scrap lang='ebnf'>
<head>Namespace Declaration PI</head>

<prod id='NT-NDPI'><lhs>NamespacePI</lhs>
<rhs>'&lt;?xml:namespace' 
(<xnt href="&xmlspec;#NT-S">S</xnt>
(<nt def='NT-PrefixDef'>PrefixDef</nt> 
| <nt def='NT-NSDef'>NSDef</nt>)+ '?>' 
</rhs><nsc def='nsc-AndConnector'/>
</prod>
<prod id='NT-NSDef'><lhs>NSDef</lhs>
<rhs>'ns' <xnt href='&xmlspec;#NT-Eq'>Eq</xnt> 
<xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt></rhs>
<nsc def='nsc-NoFrags' /></prod>
<prod id='NT-PrefixDef'><lhs>PrefixDef</lhs>
<rhs>'prefix' <xnt href='&xmlspec;#NT-Eq'>Eq</xnt>
("'" <nt def="NT-NCName">NCName</nt> "'"
| '"' <nt def="NT-NCName">NCName</nt> '"')</rhs>
</prod>
</scrap>
</termdef>
<termdef id='dt-schema' term='Namespace Name'>
The <xnt href="&xmlspec;#NT-SystemLiteral">SystemLiteral</xnt>
in the <nt def='NT-NSDef'>NSDef</nt> production
is a URI which functions as a <term>namespace name</term> to identify
the namespace.</termdef>

</p>

<p><termdef id='dt-prefix' term='Namespace Prefix'>The 
<nt def="NT-NCName">NCName</nt> in the
<nt def='NT-PrefixDef'>PrefixDef</nt> 
production gives the <term>namespace prefix</term>
used to associate names in an XML document
with this namespace.</termdef></p>
<p><termdef id='dt-defaultNS' term='Default Namespace'>If the value
of the <nt def="NT-NCName">NCName</nt> is an empty string, then the
associated <termref def='dt-NSName'>namespace name</termref> is
that of the <term>default namespace</term>.
</termdef></p>


<nscnote id='nsc-AndConnector'>
<head>Required Parts</head>
<p>A namespace declaration PI must contain one 
<nt def='NT-NSDef'>NSDef</nt> and one
<nt def='NT-PrefixDef'>PrefixDef</nt>.
</nscnote>
<p>The <termref def='dt-schema'>namespace name</termref>, to serve its
intended purpose, should have the characteristics of uniqueness and
persistence.
It is not a goal that it be directly usable for retrieval of a schema (if
any exists). 
An example of a syntax that is designed with these goals in mind is
that for Uniform Resource Names <bibref ref='URNs'/>.
However, it should be noted that ordinary URLs can be managed in such a way as
to achieve these same goals.</p>
<p>Examples of namespace declarations:
<eg><![CDATA[<?xml:namespace ns='http://www.microsoft.com/' prefix='ms' ?>
<?xml:namespace ns='urn:ISBN:0-395-36341-6/' prefix='bk' ?>
<?xml:namespace ns='urn:uuid:C4ED1820-6207-11d1-A29F-00AA00C14882/' 
                prefix='w3c' ?>]]></eg>

</p></div3>

<div3 id='ns-pidecl-loc'>
<head>Placement of Processing Instruction Declarations</head>
<p><termref def='dt-NSDecl'>Namespace declarations</termref>
must be located in the 
<loc href='&xmlspec;#sec-prolog-dtd'>prolog</loc>
of an XML document, after the 
<xtermref href='&xmlspec;#dt-xmldecl'>XML
Declaration</xtermref> (if any) and before the
<xtermref href='&xmlspec;#dt-dtd'>DTD</xtermref>
(if any).
This effectively makes the scope of 
<termref def='dt-prefix'>namespace prefixes</termref> global to 
the whole document, including the DTD.
It also means that should a processor wish to insert its own qualified
names, it need only read the namespace declarations from the prolog 
to be sure of generating a new, unique, namespace prefix.</p>
<p>In XML documents conforming to this specification, the 
<xnt href='&xmlspec;#NT-prolog'>prolog</xnt>
must match the following production:
<scrap lang='ebnf'>
<head>Prolog with Namespace Declarations</head>
<prod id='NT-prolog'><lhs>prolog</lhs>
<rhs><xnt href='&xmlspec;#NT-XMLDecl'>XMLDecl</xnt>? 
(<nt def='NT-NDPI'>NamespacePI</nt> |
<xnt href='&xmlspec;#NT-Misc'>Misc</xnt>)* 
(<xnt href='&xmlspec;#NT-doctypedecl'>doctypedecl</xnt> 
<xnt href='&xmlspec;#NT-Misc'>Misc</xnt>*)?</rhs>
<nsc def='nsc-cleanDecl'/>
</prod>
</scrap>
Note that the namespace declarations are ordinary processing
instructions which the XML processor will pass to the application
as it does any other.</p>
<nscnote id='nsc-cleanDecl'>
<head>Unique Prefix</head>
<p>A <termref def='dt-prefix'>namespace prefix</termref> may not be
declared more than once; i.e. there may not be two
<nt def='NT-PrefixDef'>PrefixDefs</nt> which contain the same
<nt def='NT-NCName'>NCName</nt> string.</p>
</nscnote>
</div3>
-->
</div1>
<div1 id='ns-qualnames'>
<head>Qualified Names</head>
<p><termdef id='dt-qname' term='Qualified Name'>In XML
documents conforming to this specification, some
names (constructs corresponding to the nonterminal 
<xnt href="&xmlspec;#NT-Name">Name</xnt>)
may be given as <term>qualified names</term>, defined as follows:
<scrap lang='ebnf'>
<head>Qualified Name</head>
<prod id='NT-QName'><lhs>QName</lhs>
<rhs>
(<nt def='NT-Prefix'>Prefix</nt> ':')?
<nt def='NT-LocalPart'>LocalPart</nt></rhs></prod>
<prod id='NT-Prefix'><lhs>Prefix</lhs>
<rhs><nt def="NT-NCName">NCName</nt></rhs></prod>
<prod id='NT-LocalPart'><lhs>LocalPart</lhs>
<rhs><nt def="NT-NCName">NCName</nt></rhs>
</prod>

</scrap></termdef>
The 
<nt def='NT-Prefix'>Prefix</nt> provides the 
<termref def='dt-prefix'>namespace prefix</termref>
part of the qualified name, and must be associated with a namespace URI
in a
<termref def='dt-NSDecl'>namespace declaration</termref>.
<termdef id='dt-localname' term='Local Part'>
The <nt def='NT-LocalPart'>LocalPart</nt> provides the
<term>local part</term> of the qualified name.</termdef>
</p>
<p>Note that the prefix functions <emph>only</emph> as a placeholder for a
namespace name.
Applications should use the namespace name, not the prefix, in constructing
names whose scope extends beyond the 
containing document.</p>
</div1>
<div1 id='ns-using'>
<head>Using Qualified Names</head>
<p>In XML documents conforming to this specification,
element types are given as
<termref def='dt-qname'>qualified names</termref>, as
follows:
<scrap lang='ebnf'>
<head>Element Types and Attribute Names</head>
<prod id='NT-STag'><lhs>STag</lhs>
<rhs>'&lt;' <nt def='NT-QName'>QName</nt> 
(<xnt href='&xmlspec;#NT-S'>S</xnt> 
<xnt href='&xmlspec;#NT-Attribute'>Attribute</xnt>)* 
<xnt href='&xmlspec;#NT-S'>S</xnt>? '>'
</rhs><nsc def='nsc-NSDeclared'/>
</prod>
<prod id='NT-ETag'><lhs>ETag</lhs>
<rhs>'&lt;/' <nt def='NT-QName'>QName</nt> 
<xnt href='&xmlspec;#NT-S'>S</xnt>? '>'</rhs>
<nsc def='nsc-NSDeclared'/></prod>
<prod id='NT-EmptyElement'><lhs>EmptyElement</lhs>
<rhs>'&lt;' <nt def='NT-QName'>QName</nt> 
(<xnt href='&xmlspec;#NT-S'>S</xnt>
<xnt href='&xmlspec;#NT-Attribute'>Attribute</xnt>)* 
<xnt href='&xmlspec;#NT-S'>S</xnt>? '/>'</rhs>
<nsc def='nsc-NSDeclared'/></prod>
</scrap>
</p>
<p>
Attribute names are given as
<termref def='dt-qname'>qualified names</termref>,
as follows:
<scrap lang='ebnf'>
<head>Attribute</head>
<prod id='NT-Attribute'><lhs>Attribute</lhs>
<rhs><nt def='NT-QName'>QName</nt> <xnt href='&xmlspec;#NT-Eq'>Eq</xnt> 
<xnt href='&xmlspec;#NT-AttValue'>AttValue</xnt></rhs>
<nsc def='nsc-NSDeclared'/></prod>
</scrap>
<nscnote id='nsc-NSDeclared'>
<head>Prefix Declared</head>
<p>The namespace prefix, unless it is <code>xml</code>
or <code>xmlns</code>, must have been
declared in a <termref def='dt-NSDecl'>namespace declaration</termref>.
The namespace prefixes <code>xml</code> and <code>xmlns</code> are reserved,
and considered to 
have been implicitly declared.
Prefixes beginning with the three-letter sequence <code>x</code>,
<code>m</code>, <code>l</code>, in any case combination, are reserved
for use by XML and XML-related specifications.</p>
</nscnote>
</p>
<p>Element names and attribute types are also given as qualified names when
they appear in declarations in the 
<xtermref href='&xmlspec;#dt-dtd'>DTD</xtermref>:
<scrap lang='ebnf'>
<head>Qualified Names in Declarations</head>
<prod id='NT-doctypedecl'><lhs>doctypedecl</lhs>
<rhs>'&lt;!DOCTYPE' <xnt href='&xmlspec;#NT-S'>S</xnt>
<nt def='NT-QName'>QName</nt> (<xnt href='&xmlspec;#NT-S'>S</xnt>
<xnt href='&xmlspec;#NT-ExternalID'>ExternalID</xnt>)? 
<xnt href='&xmlspec;#NT-S'>S</xnt>? ('[' 
(<xnt href='&xmlspec;#NT-markupdecl'>markupdecl</xnt> 
| <xnt href='&xmlspec;#NT-PEReference'>PEReference</xnt> 
| <xnt href='&xmlspec;#NT-S'>S</xnt>)* 
']' 
<nt def='NT-S'>S</nt>?)? '>'</rhs>
</prod>

<prod id='NT-elementdecl'><lhs>elementdecl</lhs>
<rhs>'&lt;!ELEMENT' <xnt href='&xmlspec;#NT-S'>S</xnt> 
<nt def='NT-QName'>QName</nt> 
<xnt href='&xmlspec;#NT-S'>S</xnt> 
<xnt href='&xmlspec;#NT-contentspec'>contentspec</xnt>
<xnt href='&xmlspec;#NT-S'>S</xnt>? '>'</rhs>
</prod>
<prod id='NT-cp'><lhs>cp</lhs>
<rhs>(<nt def='NT-QName'>QName</nt> 
| <xnt href='&xmlspec;#NT-choice'>choice</xnt> 
| <xnt href='&xmlspec;#NT-seq'>seq</xnt>) 
('?' | '*' | '+')?</rhs></prod>
<prod id='NT-Mixed'><lhs>Mixed</lhs>
<rhs>'(' <xnt href='&xmlspec;#NT-S'>S</xnt>? 
'#PCDATA'
(<xnt href='&xmlspec;#NT-S'>S</xnt>? 
'|' 
<xnt href='&xmlspec;#NT-S'>S</xnt>? 
<nt def='NT-QName'>QName</nt>)* 
<xnt href='&xmlspec;#NT-S'>S</xnt>? 
')*' </rhs>
<rhs>| '(' <xnt href='&xmlspec;#NT-S'>S</xnt>? '#PCDATA' <xnt href='&xmlspec;#NT-S'>S</xnt>? ')'
</rhs>
</prod>
<prod id='NT-AttlistDecl'><lhs>AttlistDecl</lhs>
<rhs>'&lt;!ATTLIST' <xnt href='&xmlspec;#NT-S'>S</xnt> 
<nt def='NT-QName'>QName</nt> 
<nt def='NT-AttDef'>AttDef</nt>*
<xnt href='&xmlspec;#NT-S'>S</xnt>? '&gt;'</rhs>
</prod>
<prod id='NT-AttDef'><lhs>AttDef</lhs>
<rhs><xnt href='&xmlspec;#NT-S'>S</xnt> <nt def='NT-QName'>QName</nt> 
<xnt href='&xmlspec;#NT-S'>S</xnt> <xnt href='&xmlspec;#NT-AttType'>AttType</xnt> 
<xnt href='&xmlspec;#NT-S'>S</xnt> <xnt href='&xmlspec;#NT-DefaultDecl'>DefaultDecl</xnt></rhs>
</prod>
</scrap>
</p>
<!--
<p><xnt href='&xmlspec;#dt-pi'>Processing instruction</xnt> targets
are given as 
<termref def='dt-qname'>qualified names</termref>,
as follows:
<scrap lang='ebnf'>
<head>PI Target</head>
<prod id='NT-PITarget'><lhs>PITarget</lhs>
<rhs><nt def='NT-QName'>QName</nt>
</rhs><nsc def='piPrefix'/></prod></scrap>
</p>
<nscnote id='piPrefix'>
<head>Declare Before Use</head>
<p>When a PI target, aside from that in a namespace declaration PI,
is qualified with a prefix, that prefix must
be declared at a location in the document which precedes its use.</p>
</nscnote>
-->
</div1>

<div1 id='scoping-defaulting'>
<head>Namespace Scoping and Defaulting</head>
<p>The namespace declaration is considered to apply to the 
element where it is specified and to all elements within the content  
of that element, unless overridden by another namespace declaration
with the same <nt def='NT-PrefixDef'>PrefixDef</nt> part:
<eg><![CDATA[<?xml version="1.0"?>
<!-- everything here is explicitly in the HTML namespace -->
<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>
  <html:head><html:title>Frobnostication</html:title></html:head>
  <html:body><html:p>Moved to 
    <html:a href='http://frob.com'>here.</html:a></html:p></html:body>
  </html:html>]]></eg>
</p>
<p>Multiple namespace prefixes can be declared as attributes of a single element, 
as shown in this example:
<eg><![CDATA[<?xml version="1.0"?>
<!-- both namespace prefixes are available throughout -->
<bk:book xmlns:bk='urn:loc.gov:books'
         xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <bk:title>Cheaper by the Dozen</bk:title>
    <isbn:number>1568491379</isbn:number>
</bk:book>]]></eg>
</p>
<p>A <termref def='dt-defaultNS'>default namespace</termref> is considered
to apply to the element where it is declared (if that element has no
<termref def='dt-prefix'>namespace prefix</termref>), and to all elements
with no prefix within the content of that
element.
Note that default namespaces do not apply directly to attributes.
The namespace of an unprefixed attribute is a function of the type of 
the element to 
which it is attached, and to the namespace (if any) of that element.
For details, see <specref ref='Philosophy' />.
<eg><![CDATA[<?xml version="1.0"?>
<!-- once again, everything is in the HTML namespace, by default -->
<html xmlns='http://www.w3.org/TR/REC-html40'>
  <head><title>Frobnostication</title></head>
  <body><p>Moved to 
    <a href='http://frob.com'>here</a>.</p></body>
  </html>]]></eg>
<eg><![CDATA[<?xml version="1.0"?>
<!-- unprefixed names are from "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
</book>]]></eg>
</p>
<p>A larger example of namespace scoping:
<eg><![CDATA[<?xml version="1.0"?>
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
    <notes>
      <!-- drop the default into HTML for some commentary -->
      <p xmlns='urn:w3-org-ns:HTML'>
          This is a <i>funny</i> book!
      </p>
    </notes>
</book>]]></eg>
</p>
<p>The default namespace, once declared, may be overridden:
<eg><![CDATA[<?xml version='1.0'?>
<Beers>
  <!-- the default namespace is now that of HTML -->
  <table xmlns='http://www.w3.org/TR/REC-html40'>
   <tr><td>Name</td><td>Origin</td><td>Description</td></tr>
   <tr> 
     <!-- drop the HTML namespace inside table cells -->
     <td><brandName xmlns="">Huntsman</brandName></td>
     <td><origin xmlns="">Bath, UK</origin></td>
     <td>
       <details xmlns=""><class>Bitter</class><hop>Fuggles</hop>
         <pro>Wonderful hop, light alcohol, good summer beer</pro>
         <con>Fragile; excessive variance pub to pub</con>
         </details>
        </td>
      </tr>
    </table>
  </Beers>]]></eg>
</p>
</div1>

<!--
<div2 id='ns-unames'>
<head>Universal Names</head>
<p><termdef id='UniName' term='Universal Name'>For each <termref
def='dt-qname'>qualified name</termref>, there is a corresponding
<term>universal name</term>, which is an ordered pair containing
first, the <termref def='dt-schema'>namespace name</termref> 
associated with its <termref def='dt-prefix'>prefix</termref>,
and second, its <termref def='dt-localname'>local
part</termref>.</termdef></p>
<p>A universal name is independent of the prefix in use in any particular XML
document; thus, universal names provide a basis for comparing named
objects located in different XML documents.</p>
</div2>
<div2 id='ns-equiv'>
<head>Equivalence of Qualified Names</head>
<p>In order to compare qualified names correctly, it is important to treat the
<termref def='dt-prefix'>namespace prefix</termref> merely as a placeholder
for the <termref def='dt-schema'>namespace name</termref> (URI) with which it
is associated.
<termdef id='NSEquiv' term='Equivalent'>Concretely, this means that
we can define <term>equivalence</term> in element types, attribute names, and
PI targets as follows:
<olist><item><p>If two element types
which occur in the same document have the same prefix and local
part, they are equivalent.</p></item>
<item><p>If two element types which occur in the same document have different
prefixes but the same local part, and their prefixes are associated 
with the same namespace name, they are equivalent.</p></item>
<item><p>If two element types which occur in two different documents have the
same local part, both have prefixes, and those
prefixes are associated with the same namespace name,
they are equivalent.</p></item>
</olist>
The same rules apply to any two 
<loc href='&xmlspec;#sec-pi'>PI targets</loc>, and to any two names of
attributes which are attached to equivalent element types.
</termdef></p>
<p>The following example shows the contents of two different XML
documents:
<eg><![CDATA[<?xml version='1.0' ?>
<?xml:namespace ns='http://www.w3.org/Schemas/A' prefix='w3c' ?>
<?xml:namespace ns='http://www.w3.org/Schemas/A' prefix='Consortium' ?>
<?xml:namespace ns='http://www.iso.ch/Schemas/B' prefix='ISO' ?>
<list>
 <!- - #1 - -> <w3c:Item val='1' />                         
 <!- - #2 - -> <Consortium:Item val='2' ISO:Class='19' /> 
 <!- - #3 - -> <ISO:Item>Three</ISO:Item>                   
 </list>
<!- - End of Document 1 - ->

<?xml version='1.0' ?>
<?xml:namespace ns='http://www.w3.org/Schemas/A' prefix='w3.org' ?>
<?xml:namespace ns='http://www.iso.ch/Schemas/B' prefix='iso' ?>
<?xml:namespace ns='http://www.nist.gov/Schemas/C' prefix='NIST' ?>
<list>
 <!- - #4 - -> <w3.org:Item iso:Class='77' val='1' />        
 <!- - #5 - -> <NIST:Item w3.org:Class='a' iso:Class='42' /> 
 </list>]]></eg>
In these examples:
<olist><item><p>Element #1, Element #2, and Element #4 are all of equivalent
type.</p>
</item>
<item><p>The type of Element #3 is not equivalent to that of any other element.</p></item>
<item><p>The <code>val</code> attribute of Element #1 and the <code>val</code>
attribute of Element #4 have equivalent names.</p></item>
<item><p>The <code>ISO:Class</code> attribute of Element #2 and the
<code>iso:Class</code> attribute of Element #4 have equivalent
names.</p></item>
<item><p>The <code>iso:Class</code> attribute of Element #4 and the
<code>iso:Class</code> attribute of Element #5 do <emph>not</emph> have
equivalent names, because the types of the elements to which they are attached
are not equivalent.</p>
</item>
</olist>
</p>
<p>Note that two names which are equivalent may not 
<xtermref href='&xmlspec;#elementvalid'>match</xtermref> in the sense defined in
the XML spec.
This means that in order to perform 
<xtermref href='&xmlspec;#dt-valid'>validation</xtermref>, it may be necessary
to rewrite or insert prefixes in declarations and tags in
order to 
make element types and attribute 
names which are equivalent match.</p>
</div2>
-->
<div1 id='Philosophy'>
<head>The Internal Structure of XML Namespaces</head>
<div2 id='sets-no-good'>
<head>The Insufficiency of the Traditional Namespace</head>
<p>In the computing disciplines, the term "namespace" conventionally refers to
a <emph>set</emph> of names, i.e. a collection containing no duplicates.
However, treating the names used in XML markup
as such a namespace would greatly impair their usefulness.
The primary use of such names in XML documents is to enable identification 
of logical 
structures in documents by software modules such as query processors,
stylesheet-driven
rendering engines, and schema-driven validators.
Consider the following example:
<eg><![CDATA[<section><title>Book-Signing Event</title>
<signing>
  <author title="Mr" name="Vikram Seth" />
  <book title="A Suitable Boy" price="$22.95" /></signing>
<signing>
  <author title="Dr" name="Oliver Sacks" />
  <book title="The Island of the Color-Blind" price="$12.95" /></signing>
</section>]]></eg>
In this example, there are three occurrences of the name <code>title</code>
within markup, and the name alone clearly provides insufficient information
to allow correct processing by a software module.</p>
<p>Another problematic area comes from the use of "global" attributes, as
illustrated by this example, a fragment of an XML document which is to 
be displayed using a CSS stylesheet:
<eg><![CDATA[<RESERVATION>
 <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
 <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
 <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>]]></eg>
In this case, the <code>CLASS</code> attribute, which describes the fare basis
and takes values such as "J", "Y", and "C", is distinct at all semantic levels
from the <code>HTML:CLASS</code> attribute, which is used to achieve CSS
formatting effects.</p>
<p>XML 1.0 does not provide a built-in way to declare "global" attributes;
items such as the HTML <code>CLASS</code> attribute are global only in their
prose description and their interpretation by HTML applications.
However, such attributes, an important distinguishing feature of which is that
their names are unique, are commonly observed to occur in a variety of
applications.</p>
</div2>
<div2 id='ns-breakdown'>
<head>XML Namespace Partitions</head>
<p>In order to support the goal of making both qualified and unqualified names
useful in meeting their intended purpose, we identify the names appearing in
an XML namespace as belonging to one of several disjoint traditional
(i.e. set-structured) namespaces, called namespace partitions.
The partitions are:
<glist>
<gitem><label>The All Element Types Partition</label>
<def><p>All element types in an XML namespace appear in this partition.
Each has a unique <termref def='dt-localname'>local part</termref>; the
combination of the namespace name and the local part uniquely identifies the
element type.</p></def></gitem>
<gitem><label>The Global Attribute Partition</label>
<def><p>This partition contains the names of all attributes which are defined,
in this namespace, to be global.
The only required characteristic of a global attribute is that its name be
unique in the global attribute partition.
This specification makes no
assertions as to the proper usage of such attributes.
The combination of the namespace name and the attribute name uniquely
identifies the global attribute.</p></def></gitem>
<gitem><label>The Per-Element-Type Partitions</label>
<def><p>Each type in the All Element Types Partition has an
associated namespace in which appear the names of the unqualified attributes
that are provided for that element.
This is a traditional namespace because the appearance of duplicate attribute
names on an element is forbidden by XML 1.0.
The combination of the attribute name with the element's type and namespace
name uniquely identifies each unqualified attribute.</p></def></gitem>
</glist>
</p>
<p>In XML documents conforming to this specification, the names of 
all qualified (prefixed) attributes are assigned to the global attribute
partition, and the names of all unqualified attributes are assigned to the
appropriate per-element-type partition.</p>
</div2>
<div2 id='ns-expnames'>
<head>Expanded Element Types and Attribute Names</head>
<p>For convenience in specifying rules and in making comparisons, we define an
expanded form, expressed here in XML element syntax, for each element type and
attribute name in an XML document.</p>
<p><termdef id='dt-ExpEType' term="Expanded Element Type">An 
<term>expanded element
type</term> is expressed as an empty XML element of type
<code>ExpEType</code>. 
It has a required <code>type</code> attribute which
gives the type's <nt def='NT-LocalPart'>LocalPart</nt>, and an optional
<code>ns</code> attribute which, if the element is qualified, gives its
<termref def='dt-schema'>namespace name</termref>.</termdef></p>
<p><termdef id='dt-expaname' term="Expanded Attribute Name">An 
<term>expanded
attribute name</term> is expressed as an empty XML element of type
<code>ExpAName</code>.
It has a required <code>name</code> attribute which gives the name.
If the attribute is global, it has a required <code>ns</code> attribute
which gives the <termref def='dt-schema'>namespace name</termref>;
otherwise, it has a required attribute <code>eltype</code> which
gives the type of the attached element, and an optional attribute
<code>elns</code> which gives the namespace name, if known, of the
attached element.</termdef></p>
<p>Slight variations on the examples given above will illustrate
the working of expanded element types and attribute names.
The following two fragments are each followed by a table showing
the expansion of the names:
<eg><![CDATA[<!-- 1 --> <section xmlns='urn:com:books-r-us'>
<!-- 2 -->   <title>Book-Signing Event</title>
<!-- 3 -->   <signing>
<!-- 4 -->     <author title="Mr" name="Vikram Seth" />
<!-- 5 -->     <book title="A Suitable Boy" price="$22.95" />
             </signing>
           </section>]]></eg>
The names would expand as follows:
<htable bgcolor="&cellback;" border="1" cellpadding="7">
<tr align='left'><td>Line</td><td>Name</td><td>Expanded</td>
</tr>
<tr>
<td>1</td><td>section</td>
<td>&lt;ExpEType type="section" ns="urn:com:books-r-us" /> </td></tr>
<tr><td>2</td>
<td>title</td><td>&lt;ExpEType type="title" ns="urn:com:books-r-us" /> </td>
</tr>
<tr>
<td>3</td>
<td>signing</td><td>&lt;ExpEType type="signing" ns="urn:com:books-r-us" />
</td>
</tr>
<tr>
<td>4</td>
<td>author</td><td>&lt;ExpEType type="author" ns="urn:com:books-r-us" /> </td>
</tr>
<tr>
<td>4</td>
<td>title</td>
<td>&lt;ExpAName name='title' eltype="author" elns="urn:com:books-r-us" />
</td>
</tr>
<tr>
<td>4</td>
<td>name</td>
<td>&lt;ExpAName name='name' eltype="author" elns="urn:com:books-r-us" /></td>
</tr>
<tr>
<td>5</td>
<td>book</td><td>&lt;ExpEType type="book" ns="urn:com:books-r-us" /></td>
</tr>
<tr>
<td>5</td>
<td>title</td><td>&lt;ExpAName name='title' eltype="book" elns="urn:com:books-r-us" /></td>
</tr>
<tr>
<td>5</td>
<td>price</td><td>&lt;ExpAName name='price' eltype="book" elns="urn:com:books-r-us" /></td>
</tr>
</htable>

<eg><![CDATA[<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40">
<!-- 2 --> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
<!-- 3 --> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
<!-- 4 --> <HTML:A HREF='/cgi-bin/ResStatus'>Check Status</HTML:A>
<!-- 5 --> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>]]></eg>

<htable bgcolor="&cellback;" border="1" cellpadding="7">
<tr><td>1</td>
<td>RESERVATION</td><td>&lt;ExpEType type="RESERVATION" /></td>
</tr>
<tr>
<td>2</td>
<td>NAME</td><td>&lt;ExpEType type="NAME" /></td>
</tr>
<tr>
<td>2</td>
<td>HTML:CLASS</td>
<td>&lt;ExpAName name="CLASS" ns=http://www.w3.org/TR/REC-html40 /></td>
</tr>
<tr>
<td>3</td>
<td>SEAT</td><td>&lt;ExpEType type="SEAT" /></td>
</tr>
<tr>
<td>3</td>
<td>CLASS</td><td>&lt;ExpAName name="CLASS" eltype="SEAT"></td>
</tr>
<tr>
<td>3</td>
<td>HTML:CLASS</td><td>&lt;ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" /></td>
</tr>
<tr>
<td>4</td>
<td>HTML:A</td><td>&lt;ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" /></td>
</tr>
<tr>
<td>4</td>
<td>HREF</td><td>&lt;ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" /></td>
</tr>
<tr>
<td>5</td>
<td>DEPARTURE</td><td>&lt;ExpEType type="DEPARTURE" /></td>
</tr></htable>
</p>
</div2>
<div2 id='ns-uniqattr'>
<head>Unique Expanded Attribute Names</head>
<p>In an XML document conforming to this specification, no element may have
two attributes whose expanded names are equivalent, i.e. have the same
attribute-value pairs and child elements with the same content.</p>
</div2>
</div1>
<!--
<div2 id='Ambiguity'><head>Ambiguity In Universal Names</head>
<p>When a schema is provided for a namespace, there is no guarantee that
the combination of namespace name and local part will
provide sufficient information to locate the appropriate description
in the schema (if any exists) for the named object.
The XML document type definition is an example of a schema language in which 
this is possible.
In a DTD, many attributes can be declared which share a
name; they are distinguished by being attached to different element
types.</p>
<p>This ambiguity is not always a problem.
Consider one of the HTML 4.0 
DTDs: these define two attributes, <code>CLASS</code> and <code>STYLE</code>,
for use with stylesheets.
This attribute is defined in such a way that it may apply to 
virtually every element, and that its semantics are identical wherever 
applied.
Thus, given a prefix <code>html</code> which selects a 
namespace whose schema is that of 
HTML 4.0, the following would present no problems:
<eg><![CDATA[<Warning html:class='Important'>Sudden death may ensue.</Warning>]]></eg>
</p>
<p>On the other hand, consider a document that uses data types
defined by ISO Standard 31, which deals with units of measure.
In ISO 31, the unit "degrees" can apply
to measures of several very different quantities.
Thus, assuming the prefix <code>ISO</code> denotes a namespace associated with
ISO 31, whatever the schema language in use, the following would almost
certainly be ambiguous:
<eg><![CDATA[<Item ISO:degrees='31'/>]]></eg>
</p>
<p>To make this more concrete, consider a schema which is an XML DTD 
containing the following declarations:
<eg><![CDATA[<!ATTLIST Heat  Temp CDATA #IMPLIED>
<!ATTLIST Color Temp (3200|3400|5500) #IMPLIED>]]></eg>
Suppose that in some document this DTD is associated with a namespace
identified by the 
prefix <code>T</code>.
Then, in the following example, it is impossible (without extra
external information) to distinguish 
whether <code>T:Temp</code> is the <code>Temp</code> attribute associated with
the  <code>Heat</code> element, or that associated with the <code>Color</code>
element:
<eg><![CDATA[<Item T:Temp='3400'/>]]></eg>
</p>
<p>This problem can in general be addressed by using multiple namespaces.
In the immediately preceding example, it would be necessary to
declare namespaces with prefixes, for example, <code>T.Heat</code> and
<code>T.Color</code>, whose associated 
<termref def='dt-schema'>namespace names</termref> would select the parts of
the schema that described, respectively, the attributes of the
<code>Heat</code> and <code>Color</code> attributes.
Then the example could be disambiguated as follows:
<eg><![CDATA[<Item T.Heat:Temp='5400'/>]]></eg>
</p>
</div2>
-->
<div1 id='Conformance'>
<head>Conformance</head>
<p>Names in XML documents which conform to this specification are
element types and attribute names which match the production for 
<nt def='NT-QName'>QName</nt> and
which satisfy the "Namespace Constraints" in this document.</p>
<p>An XML document conforms to this specification if all other 
tokens in the document which are required, for XML conformance, to match the
XML production for <xnt href="&xmlspec;#NT-Name">Name</xnt>, match
this specification's production for <nt def='NT-NCName'>NCName</nt>, 
and in which elements have attributes with unique expanded names.
</p>
<p>The effect of conformance is that in such a document:
<ulist><item><p>All element types and attribute names contain either zero
or one colon.</p></item>
<item><p>No entity names, PI targets, or notation names contain any colons.</p>
</item>
</ulist></p>
<p>Strictly speaking, attribute values declared to be of types
<kw>ID</kw>, <kw>IDREF(S)</kw>, <kw>ENTITY(IES)</kw>,
and <kw>NOTATION</kw> are also <xnt href="&xmlspec;#NT-Name">Names</xnt>,
and thus should be colon-free.
However, the declared type of attribute values is in principle only available
in documents which have been
<xtermref href='&xmlspec;#dt-validating'>validated</xtermref>.
Thus, in <xtermref href='&xmlspec;#dt-wellformed'>well-formed</xtermref> XML
documents, there can be no assurance that the contents of attribute values
have been checked for conformance to this specification.</p>
</div1>
<!--
<div1 id='sec-example'>
<head>Examples</head>
<div2 id='syntax-eg'>
<head>The On-line Bookstore</head>
<p>Imagine an XML document representing an invoice for books. If
public schemas exist for elements and attributes describing
books, electronic transactions and digital signatures, the
invoice author should be able to use these, rather than inventing
new element and attribute types. Any reader of the invoice
document should be able to infer a consistent meaning to its
contents, the same meaning as if the elements and attributes had
appeared in a different kind of document (such as an invoice for
automotive parts, or an inventory of books or a digital signature
on a legal contract). A search tool should be able
to locate the elements,
regardless of the document in which they reside. Further, since
several schemas may choose the same name (e.g. &quot;size&quot;)
for elements or attributes with different meanings, these must be
distinguished if used within the same document.</p>

<eg><![CDATA[<Order xmlns:B="urn:loc.gov:books"
       xmlns="http://ecommerce.org/schema"
       xmlns:dsig="urn:digitalSignatures.org:schema"
       xmlns:dt="urn:uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
 <dsig:dsig>
   <Manifest>80183589575795589189518915</Manifest>
   <Sig href="http://XYX/Joe@company.com"/>
 </dsig:dsig>
 <SoldTo>
   <LastName>Layman</LastName>
   <FirstName>Andrew</FirstName>
 </SoldTo>

 <SoldOn dt:baseType="date.iso8601">1997-03-17</SoldOn>
 <Item Price="5.95">
   <B:BOOK TITLE="Number, the Language of Science" 
           AUTHOR="Dantzig, Tobias"/>
 </Item>
 <Item Price="12.95">
   <B:BOOK TITLE="Introduction to Objectivist Epistemology"
           AUTHOR="Rand, Ayn"/>
 </Item>
</Order>]]></eg>
</div2>
</div1>
-->
</body>
<back>
 
<div1 id='sec-xml-and-sgml'>
<head>Acknowledgements</head>
 
<p>This work reflects input from a very large number of people, 
including especially the members of the World Wide
Web Consortium XML Working Group and Special Interest Group 
and the participants in the W3C Metadata Activity.</p>
</div1>
<div1 id='refs'>
<head>References</head>
<blist>
<bibl id='URNs' key='RFC2141'>
IETF (Internet Engineering Task Force)
<emph>RFC 2141: URN Syntax</emph>, ed. R. Moats. May 1997.
</bibl>
<bibl id='XML' key='XML'>
<em>Extensible Markup Language
(XML) 1.0</em>, eds. Tim Bray, Jean
Paoli, and C. M.
Sperberg-McQueen.
10 February 1998. Available at
http://www.w3.org/TR/REC-xml.
</bibl>
</blist>
</div1>
</back>
</spec>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-default-dtd-file:"~/sgml/spec.ced"
sgml-omittag:t
sgml-shorttag:t
End:
-->

