UNPKG

node10-libxslt

Version:

[Fork] Node.js bindings for libxslt compatible with libxmljs

841 lines (840 loc) 202 kB
<?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 "'&lt;?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 "&amp;#x"> <!ENTITY nbsp "&#160;"> <!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 &lt; 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 &amp;nbsp; and define nbsp as &amp;#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 &amp; 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 &amp; 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>'"' ([^%&amp;"] | <nt def="NT-PEReference">PEReference</nt> | <nt def="NT-Reference">Reference</nt>)* '"' </rhs> <rhs>|&nbsp; "'" ([^%&amp;'] | <nt def="NT-PEReference">PEReference</nt> | <nt def="NT-Reference">Reference</nt>)* "'"</rhs> </prod> <prod id="NT-AttValue"> <lhs>AttValue</lhs><rhs>'"' ([^&lt;&amp;"] | <nt def="NT-Reference">Reference</nt>)* '"' </rhs> <rhs>|&nbsp; "'" ([^&lt;&amp;'] | <nt def="NT-Reference">Reference</nt>)* "'"</rhs> </prod> <prod id="NT-SystemLiteral"> <lhs>SystemLiteral</lhs><rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'") </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 |&nbsp;[a-zA-Z0-9] |&nbsp;[-'()+,./:=?;!*#@$_%]</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>&lt;</code> in the literal (e.g., <code>&lt;!ENTITY mylt "&lt;"></code>), it is strongly advised to avoid this practice since any reference to that entity will cause a well-formedness error.</p> </note> </div2> <div2 id="syntax"> <head>Character Data and Markup</head> <p><termref def="dt-text">Text</termref> consists of intermingled <termref def="dt-chardata">character data</termref> and markup. <termdef id="dt-markup" term="Markup"><term>Markup</term> takes the form of <termref def="dt-stag">start-tags</termref>, <termref def="dt-etag">end-tags</termref>, <termref def="dt-empty">empty-element tags</termref>, <termref def="dt-entref">entity references</termref>, <termref def="dt-charref">character references</termref>, <termref def="dt-comment">comments</termref>, <termref def="dt-cdsection">CDATA section</termref> delimiters, <termref def="dt-doctype">document type declarations</termref>, <termref def="dt-pi">processing instructions</termref>, <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 (&amp;) and the left angle bracket (&lt;) 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;amp;</code></quote> and <quote><code>&amp;lt;</code></quote> respectively. The right angle bracket (>) may be represented using the string <quote><code>&amp;gt;</code></quote>, and must, <termref def="dt-compat">for compatibility</termref>, be escaped using <quote><code>&amp;gt;</code></quote> or a character reference when it appears in the string <quote><code>]]&gt;</code></quote> in content, when that string is not marking the end of a <termref def="dt-cdsection">CDATA section</termref>.</p> <p>In the content of elements, character data is any string of characters which does not contain the start-delimiter of any markup. In a CDATA section, character data is any string of characters not including the CDATA-section-close delimiter, <quote><code>]]&gt;</code></quote>.</p> <p>To allow attribute values to contain both single and double quotes, the apostrophe or single-quote character (') may be represented as <quote><code>&amp;apos;</code></quote>, and the double-quote character (") as <quote><code>&amp;quot;</code></quote>.</p> <scrap lang="ebnf"> <head>Character Data</head> <prod id="NT-CharData"> <lhs>CharData</lhs><rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs> </prod> </scrap> </div2> <div2 id="sec-comments"> <head>Comments</head> <p><termdef id="dt-comment" term="Comment"><term>Comments</term> 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>'&lt;!--' ((<nt def="NT-Char">Char</nt> - '-') | ('-' (<nt def="NT-Char">Char</nt> - '-')))* '-->'</rhs> </prod> </scrap> <p>An example of a comment:</p> <eg>&lt;!&como; declarations for &lt;head> &amp; &lt;body> &comc;></eg> <p 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">&lt;!-- B+, B, or B---></eg> </div2> <div2 id="sec-pi"> <head>Processing Instructions</head> <p><termdef id="dt-pi" term="Processing instruction"><term>Processing instructions</term> (PIs) allow documents to contain instructions for applications.</termdef></p> <scrap lang="ebnf"> <head>Processing Instructions</head> <prod id="NT-PI"> <lhs>PI</lhs><rhs>'&lt;?' <nt def="NT-PITarget">PITarget</nt> (<nt def="NT-S">S</nt> (<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>* &pic; <nt def="NT-Char">Char</nt>*)))? &pic;</rhs> </prod> <prod id="NT-PITarget"> <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>&lt;![CDATA[</code></quote> and end with the string <quote><code>]]&gt;</code></quote>:</termdef></p> <scrap lang="ebnf"> <head>CDATA Sections</head> <prod id="NT-CDSect"> <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>'&lt;![CDATA['</rhs> </prod> <prod id="NT-CData"> <lhs>CData</lhs><rhs>(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>* ']]&gt;' <nt def="NT-Char">Char</nt>*)) </rhs> </prod> <prod id="NT-CDEnd"> <lhs>CDEnd</lhs><rhs>']]&gt;'</rhs> </prod> </scrap> <p>Within a CDATA section, only the <nt def="NT-CDEnd">CDEnd</nt> string is recognized as markup, so that left angle brackets and ampersands may occur in their literal form; they need not (and cannot) be escaped using <quote><code>&amp;lt;</code></quote> and <quote><code>&amp;amp;</code></quote>. CDATA sections cannot nest.</p> <p>An example of a CDATA section, in which <quote><code>&lt;greeting></code></quote> and <quote><code>&lt;/greeting></code></quote> are recognized as <termref def="dt-chardata">character data</termref>, not <termref def="dt-markup">markup</termref>:</p> <eg>&lt;![CDATA[&lt;greeting>Hello, world!&lt;/greeting>]]&gt; </eg> </div2> <div2 id="sec-prolog-dtd"> <head>Prolog and Document Type Declaration</head> <p><termdef id="dt-xmldecl" term="XML Declaration">XML documents <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