/[suikacvs]/markup/xml/xmlcc/xmlcc-work.en.html
Suika

Diff of /markup/xml/xmlcc/xmlcc-work.en.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by wakaba, Tue Nov 13 01:11:21 2007 UTC revision 1.29 by wakaba, Fri Oct 17 05:57:26 2008 UTC
# Line 17  Line 17 
17  <body class="has-abstract">  <body class="has-abstract">
18    
19  <div class="header">  <div class="header">
20  <h1>manakai's XML Conformance Checking</h1>  <h1>manakai's <abbr>XML</abbr> Conformance Checking</h1>
21  <h2>Working Draft <time datetime=2007-11-13>13 November 2007</time></h2>  <h2>Working Draft <time datetime=2008-10-17>17 October 2008</time></h2>
22    
23  <dl class="versions-uri">  <dl class="versions-uri">
24  <dt>This Version</dt>  <dt>This Version</dt>
# Line 42  Line 42 
42        >w@suika.fam.cx</a>&gt;</code></dd>        >w@suika.fam.cx</a>&gt;</code></dd>
43  </dl>  </dl>
44    
45  <p class="copyright" lang="en">&#xA9; <time>2007</time> <a  <p class="copyright" lang="en">&#xA9; <time>2007</time>$B!>(B<time>2008</time> <a
46      href="http://suika.fam.cx/~wakaba/who?" rel="author">Wakaba</a>.      href="http://suika.fam.cx/~wakaba/who?" rel="author">Wakaba</a>.
47  Permission is granted to copy, distribute and/or modify this document  Permission is granted to copy, distribute and/or modify this document
48  under the terms of the <a rel="license"  under the terms of the <a rel="license"
# Line 79  project.  It might be updated, replaced, Line 79  project.  It might be updated, replaced,
79  other documents at any time.  It is inappropriate to  other documents at any time.  It is inappropriate to
80  cite this document as other than <q>work in progress</q>.</p>  cite this document as other than <q>work in progress</q>.</p>
81    
82    <p>The scope of this specification is explicitly limited to the <a
83    href="http://suika.fam.cx/www/markup/html/whatpm/readme">Whatpm</a>
84    implementation.  It is <em>not</em> the purpose of this specification
85    to define a general guideline to parse or to check XML documents.
86    This specification does <em>not</em> try to define a new version of
87    XML at all.
88    
89    <p>This version of the specification supports the fourth edition of
90    XML 1.0 and the second edition of XML 1.1.  The fifth edition of XML
91    1.0 might be supported in a later version.  XML namespaces
92    specifications is expected to be supported in a later version of this
93    specification.
94    
95  <p>Comments on this document are welcome and  <p>Comments on this document are welcome and
96  may be sent to the <a href="#author">author</a>.</p>  may be sent to the <a href="#author">author</a>.</p>
97    
# Line 92  normative version.</p> Line 105  normative version.</p>
105    
106  <p class=section-info>This section is <em>non$B!>(Bnormative</em>.</p>  <p class=section-info>This section is <em>non$B!>(Bnormative</em>.</p>
107    
108  <div class="issue ed">...</div>  <p>This specification defines how the parsing and the conformance
109    checking of XML documents should be implemented in the <a
110    href="http://suika.fam.cx/www/markup/html/whatpm/readme">Whatpm</a>
111    XML parser and conformance checker.
112    
113    <p>It is <em>not</em> the purpose of this specification to define,
114    e.g., how to parse XML documents in general; its scope is explicitly
115    limited to the <a
116    href="http://suika.fam.cx/www/markup/html/whatpm/readme">Whatpm</a>
117    implementation.
118    
119    <div class="issue ed">...
120    
121    <p>Much of invalid (well-formed or not) XML document parsing and XML document
122    / XML DOM conformance is left undefined so that this document provides a
123    guideline for conformance checkers.
124    </div>
125    
126    
127  </div>  </div>
# Line 118  else in this specification is normative. Line 147  else in this specification is normative.
147  <p><span class=ed>Algorithm is normative but non-normative</span>.  <p><span class=ed>Algorithm is normative but non-normative</span>.
148  In addition, the order in which <a href="#errors">errors</a> are  In addition, the order in which <a href="#errors">errors</a> are
149  raised is undefined.</p>  raised is undefined.</p>
150    
151    <p>This document sometimes cites parts of <abbr>XML</abbr> 1.0 specification
152    by hyperlinks.  When the document being processed is an <abbr>XML</abbr> 1.1
153    document, however, corresponding parts of the <abbr>XML</abbr> 1.1
154    specification should be consulted instead.</p>
155  </div>  </div>
156    
157  <div class="section" id=checking-dom>  <div class=section id=processing-model>
158  <h2>Checking <abbr>DOM</abbr></h2>  <h2>Processing Model</h2>
159    
160    <p>Conceptually, validation of an XML document is split into two
161    stages for the purpose of this specification: the <dfn
162    id=xml-document-parsing>XML document parsing</dfn> stage and the <dfn
163    id=dom-xml-conformance-checking>DOM XML conformance checking</dfn>
164    stage.
165    
166    <p>The input to the XML document parsing stage is a byte sequence
167    representing the parsed XML document (and any additional metadata),
168    and the output are a DOM tree representing the XML document and zero
169    or more <a href="#error">errors</a>.  The processor that implements
170    this stage is called <dfn id=parser>parser</dfn>.  Requirements for a
171    parser are defined in the section of <a href="#parsing-xml">Parsing an
172    XML Document</a>.
173    
174    <p>The input to the DOM XML conformance chcking stage is a DOM tree,
175    and the output are zero or more <a href="#error">errors</a>.  The
176    processor that implements this stage is called <dfn
177    id=conformance-checker>conformance checker</dfn>.  Requirements for a
178    conformance checker are defined in the section of <a
179    href="#checking-dom">Checking an XML DOM Tree</a>.
180    
 <p>The following algorithms and definitions are applied to  
 <abbr>XML</abbr> documents; especially, they are not applied  
 to <abbr>HTML</abbr> documents.<!-- TODO: ref to HTML5 --></p>  
181    
182  <div class=section id=error-categories>  <div class=section id=error-categories>
183  <h3>Error Classification</h3>  <h3>Error Classification</h3>
184    
185    <p class=ed>An <dfn id=error>error</dfn> is ...
186    
187  <p class=ed>If a <code>Document</code> node has no  <p class=ed>If a <code>Document</code> node has no
188  xml-well-formedness-error, entity-error, and unknown-error,  xml-well-formedness-error, entity-error, and unknown-error,
189  then it is well-formed.  If a well-formed <code>Document</code>  then it is well-formed.  If a well-formed <code>Document</code>
# Line 141  into a well$B!>(Bformed XML document. Line 195  into a well$B!>(Bformed XML document.
195  can be easily serialized into a valid XML document.</p>  can be easily serialized into a valid XML document.</p>
196  </div>  </div>
197    
198    <p class=ed>To be a conforming <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#dt-validating">validating XML processor</a>,
199    ...</p>
200    
201  <p>Errors are classified into these  <p>Errors are classified into these
202  <dfn id=error-category title="error category">error categories</dfn>:</p>  <dfn id=error-category title="error category">error categories</dfn>:</p>
203    
# Line 159  can be easily serialized into a valid XM Line 216  can be easily serialized into a valid XM
216    </dd>    </dd>
217  <dt><dfn id=round-trip-error><code>round-trip-error</code></dfn></dt>  <dt><dfn id=round-trip-error><code>round-trip-error</code></dfn></dt>
218    <dd class=ed>@@</dd>    <dd class=ed>@@</dd>
219    <dt><dfn id=round-trip-warning><code>round-trip-warning</code></dfn></dt>
220      <dd>
221        <p>A <a href="#round-trip-warning"><code>round-trip-warning</code></a>
222        will be raised when a construct, which might not be restored to the same
223        construct when it is serialized and then re-parsed by a conforming
224        processor, is encountered.</p>
225        <div class="example memo">
226          <p>For a <code>Comment</code> node a
227          <a href="#round-trip-warning"><code>round-trip-warning</code></a> will
228          be raised, since <abbr>XML</abbr> processors are not required to
229          report texts of comments for applications.</p>
230        </div>
231      </dd>
232  <dt class=ed><dfn id=unknown-error><code>unknown-error</code></dfn>?</dt>  <dt class=ed><dfn id=unknown-error><code>unknown-error</code></dfn>?</dt>
233    <dd class=ed>@@</dd>    <dd class=ed>@@</dd>
234  <dt><dfn id=xml-misc-error><code>xml-misc-error</code></dt>  <dt><dfn id=xml-misc-error><code>xml-misc-error</code></dt>
# Line 179  can be easily serialized into a valid XM Line 249  can be easily serialized into a valid XM
249    <a href="@@/#dt-fatal">fatal error</a>)    <a href="@@/#dt-fatal">fatal error</a>)
250    that is not classified to any other <a href="#error-category">error    that is not classified to any other <a href="#error-category">error
251    category</a>. <span class=ed>@@ What errors fall into this category?</span></dd>    category</a>. <span class=ed>@@ What errors fall into this category?</span></dd>
252    <dt><dfn id=xml-misc-recommendation><code>xml-misc-recommendation</code></dfn></dt>
253      <dd>
254        <p>An
255        <a href="#xml-misc-recommendation"><code>xml-misc-recommendation</code></a>
256        will be raised if a <em class=rfc2119>SHOULD</em>$B!>(Blevel requirement
257        in <abbr>XML</abbr> specification is not met.</p>
258      </dd>
259  <dt><dfn id=xml-validity-error><code>xml-validity-error</code></dfn></dt>  <dt><dfn id=xml-validity-error><code>xml-validity-error</code></dfn></dt>
260    <dd>A violation of validity constraint in XML document.</dd>    <dd>A violation of validity constraint in XML document.</dd>
261  <dt><dfn id=xml-well-formedness-error><code>xml-well-formedness-error</code></dfn></dt>  <dt><dfn id=xml-well-formedness-error><code>xml-well-formedness-error</code></dfn></dt>
# Line 188  can be easily serialized into a valid XM Line 265  can be easily serialized into a valid XM
265    violate to any well$B!>(Bformedness constraint in XML    violate to any well$B!>(Bformedness constraint in XML
266    specification <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>,    specification <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>,
267    <a href="#ref-XML11">XML11</a>]</cite>.</p></dd>    <a href="#ref-XML11">XML11</a>]</cite>.</p></dd>
268    <dt><dfn id=misc-info><code>misc-info</code></dfn>
269      <dd><p>A <code>misc-info</code> is raised when some status information
270      on parsing or checking process that are considered useful for debugging
271      and so on is available.  It by no means implies the non-conformance of
272      the document.
273  </dl>  </dl>
274    
275  <div class=ed><p>@@ TODO: #dt-atuseroption at user option  <div class=ed><p>@@ TODO: #dt-atuseroption at user option
276  (MAY or MUST), #dt-compat for compatibility,  (MAY or MUST), #dt-compat for compatibility,
277  #dt-interop for interoperability</p></div>  #dt-interop for interoperability</p>
278    
279    <p>TODO: XML 1.1, XML Namespace 1.0/1.1, xml:base, xml:id
280    
281    <p>TODO: XML "error"/"fatal error" is not always non-conforming (only
282    when MUST or SHOULD).
283  </div>  </div>
284    
285    </div>
286    
287    </div>
288    
289    <div class=section id=parsing-xml>
290    <h2>Parsing an <abbr>XML</abbr> Document</h2>
291    
292    <p>When a byte stream that represents an XML document is given to a
293    parser, it <em class=rfc2119>MUST</em> create a DOM tree according to
294    relevant specifications <span class=ed>[XML10, XML11, XMLNAMES10,
295    XMLNAMES11, DOM3CORE, WEBDOMCORE, DOMDTDEF, MANAKAIDOMEXT]</span>.
296    
297    <p>The parser <em class=rfc2119>MAY</em> continue the parsing of the
298    document even after a fatal error (as defined by the relavant
299    specifications) is encountered.  How the parsing ought to be continued
300    is not defined by this specification.
301    
302    <!--
303      <div class="note memo informative">
304      <p>It is expected that the XML5 specification <span class=ed>@@ ref</span>
305      will define how the parser has to convert any string into DOM tree
306      completely.
307      </div>
308    -->
309    
310    <p class=ed>A future version of this specification might define the
311    entire parser in terms of input stream preprocessor, tokenizer, and
312    tree constructor.
313    
314    <p>In addition, the following requirements are applied to the parser:
315    
316    <dl class=switch>
317    <dt>For each external entity (including the document entity and the external
318    subset entity, if any)
319      <dd>If there is a byte sequence that are not legal in the encoding in use,
320      then the parser <em class=rfc2119>MUST</em> raise an
321      <a href="#xml-misc-error" id=xme-illegal-bytes><code>xml-misc-error</code></a>.
322      <!--
323         <q>It is a fatal error when an XML processor encounters an entity with an
324         encoding that it is unable to process. It is a fatal error if an XML
325         entity is determined (via default, encoding declaration, or higher-level
326         protocol) to be in a certain encoding but contains byte sequences that are
327         not legal in that encoding.</q>
328      -->
329    
330      <dd>If it is the document entity or a general entity, then:
331        <ul>
332        <li>If the input byte sequence for the entity begins with the
333        <abbr title="BYTE ORDER MARK" class=charname>BOM</abbr>, then the parser
334        <em class=rfc2119>MUST</em> set the <span class=ed>BOM flag</span> of
335        the node corresponding to the entity (the <code>Document</code> node
336        for the document entity or an <code>Entity</code> node for a general
337        entity) to <code>true</code>.
338        <!--
339          <q>Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY
340          begin with the Byte Order Mark</q>
341        -->
342        <span class=ed>@@ flag must be checked later</span>
343        <!-- <?xml encoding=""?> must be reflected to xmlEncoding; this should be
344        enforced by DOM Core spec. -->
345        </ul>
346      <dd>If it is a parameter entity or the external subset entity, then:
347        <ul>
348        <li>If the character encoding of the entity is <code>UTF-16</code> but
349        the input byte stream for the entity does not begin with the
350        <abbr title="BYTE ORDER MARK" class=charname>BOM</abbr>, then the parser
351        <em class=rfc2119>MUST</em> raise an
352        <a href="#xml-misc-error" id=xme-pe-bom><code>xml-misc-error</code></a>.
353        <li class=ed>@@ encoding="" preferred name?
354    <!--
355    "In an encoding declaration, the values "UTF-8", "UTF-16", "ISO-10646-UCS-2", and "ISO-10646-UCS-4" SHOULD be used for the various encodings and transformations of Unicode / ISO/IEC 10646, the values "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-n" (where n is the part number) SHOULD be used for the parts of ISO 8859, and the values "ISO-2022-JP", "Shift_JIS", and "EUC-JP" SHOULD be used for the various encoded forms of JIS X-0208-1997. It is RECOMMENDED that character encodings registered (as charsets) with the Internet Assigned Numbers Authority [IANA-CHARSETS], other than those just listed, be referred to using their registered names; other encodings SHOULD use names starting with an "x-" prefix."
356    
357    In addition, this should be checked later for Document and Entity nodes.
358    -->
359        </ul>
360    
361    <dt>For the document
362      <dd>If the <abbr>XML</abbr> document does not begin with an
363      <abbr>XML</abbr> declaration, then the parser <em class=rfc2119>MUST</em>
364      raise an
365      <a href="#xml-misc-recommentation" id=xmr-xml-decl><code>xml-misc-recommendation</code></a>.
366      <dd>If the document does not contain the document type declaration, or
367      if it does but the document type definition does not contain entity
368      declaration for any of <code>amp</code>, <code>lt</code>, <code>gt</code>,
369      <code>apos</code>, or <code>quot</code>, then the parser
370      <em class=rfc2119>MUST</em> raise
371      <a href="#xml-misc-recommentation" id=xmr-predefined-decl><code>xml-misc-recommendation</code></a>(s).
372      <!--
373        <q>For interoperability, valid documents SHOULD declare the entities
374        amp, lt, gt, apos, quot, in the form specified in 4.6 Predefined
375        Entities.</q>
376      -->
377    <dt>For the document type declaration
378      <dd class=ed>@@ read external entity
379      <dd>The <code>entities</code> attribute of the <code>DocumentType</code>
380      node <em class=rfc2119>MUST</em> contain a <code>NamedNodeMap</code> object
381      whose first five items are as follows:
382        <ol start=0>
383        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
384        is <code>amp</code>.  It contains a <code>Text</code> node whose
385        <code>data</code> attribute is set to <code>&amp;</code>.
386        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
387        is <code>lt</code>.  It contains a <code>Text</code> node whose
388        <code>data</code> attribute is set to <code>&lt;</code>.
389        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
390        is <code>gt</code>.  It contains a <code>Text</code> node whose
391        <code>data</code> attribute is set to <code>></code>.
392        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
393        is <code>quot</code>.  It contains a <code>Text</code> node whose
394        <code>data</code> attribute is set to <code>"</code>.
395        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
396        is <code>apos</code>.  It contains a <code>Text</code> node whose
397        <code>data</code> attribute is set to <code>'</code>.
398        </ol>
399    <dt>For each internal general entity declaration being processed by the parser
400      <dd>If the
401      <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-EntityValue"><code>EntityValue</code></a>
402      part of the general entity declaration contains a bare <code>U+003C</code>
403      <code>LESS-THAN SIGN</code> (<code>&lt;</code>) character, then the parser
404      <em class=rfc2119>MUST</em> raise an
405      <a href="#xml-misc-warning" id=xmw-entity-value-lt><code>xml-misc-warning</code></a>.<!--
406    "strongly advised to avoid" in a Note in Section 2.3 of [XML10], [XML11].
407    -->
408    <dt>For each element type declaration being processed by the parser
409      <dd>If there is another processed element type declaration whose
410      <code>Name</code> is equal to the <code>Name</code> of the element type
411      declaration, then the parser <em class=rfc2119>MUST</em> raise an
412      <a href="#xml-validity-error" id=vc-edunique><code>xml-validity-error</code></a>.
413    <dt>For each attribute definition list declaration being processed by the
414    parser
415      <dd>If there is another processed attribute defintion list declaration whose
416      <code>Name</code> is equal to the <code>Name</code> of the attribute
417      definition list declaration, then the parser <em class=rfc2119>MUST</em>
418      raise an
419      <a href="#xml-misc-warning" id=xme-attlist-unique><code>xml-misc-warning</code></a>.
420      <dd>For each attribute definition in the attribute definition list
421      declaration, if there is another processed attribute definition whose
422      <code>Name</code> is equal to the <code>Name</code> of the attribute
423      definition (whether or not in the same attribute definition list
424      declaration), then the parser <em class=rfc2119>MUST</em> raise an
425      <a href="#xml-misc-warning" id=xme-attrdef-unique><code>xml-misc-warning</code></a>.
426      <!--
427        <q>For interoperability, an XML processor <em class=rfc2119>MAY</em> at
428        user option issue a warning when more than one attribute-list declaration
429        is provided for a given element type, or more than one attribute definition
430        is provided for a given attribute, but this is not an error.</q>
431      -->
432    <!--
433      NOTE: <!ATTLIST a xml:space (default) #IMPLIED xml:space CDATA #IMPLIED>
434      will not be warned.
435    -->
436    
437    <dt>For each entity declaration being processed by the parser
438      <dd>Handle as follows:
439        <ol>
440        <li><p>If the entity declaration declares a general entity, the following
441        is applied:
442          <dl>
443          <dt>If the <code>Name</code> is <code>lt</code> or <code>amp</code>
444            <dd><p>If the entity declaration does not declare an internal entity,
445            or if the replacement text of the entity is not the escaped form of
446            <code>&lt;</code> (if <code>lt</code>) or <code>&amp;</code> (if
447            <code>amp</code>), then the parser <em class=rfc2119>MUST</em> raise an
448            <a href="#xml-misc-error" id=xme-double-escape><code>xml-misc-error</code></a>.
449    
450              <div class="note memo informative">
451              <p>In other word, the character in the <code>EntityValue</code>
452              has to be double-escaped.
453              </div>
454          <dt>If the <code>Name</code> is <code>gt</code>, <code>quot</code>, or
455          <code>apos</code>
456            <dd><p>If the entity declaration does not declare an internal entity,
457            or if the replacement text of the entity is not equal to or not the
458            escaped form of <code>></code> (if <code>gt</code>), <code>"</code> (if
459            <code>quot</code>), or <code>'</code> (if <code>apos</code>), then the
460            parser <em class=rfc2119>MUST</em> raise an
461            <a href="#xml-misc-error" id=xme-single-escape><code>xml-misc-error</code></a>.
462    
463              <div class="note memo informative">
464              <p>In other word, the character in the <code>EntityValue</code>
465              has to be single- or double-escaped.
466              </div>
467          </dl>
468          <!--
469            <q>If the entities lt or amp are declared, they MUST be declared as internal entities whose replacement text is a character reference to the respective character (less-than sign or ampersand) being escaped; the double escaping is REQUIRED for these entities so that references to them produce a well-formed result. If the entities gt, apos, or quot are declared, they MUST be declared as internal entities whose replacement text is the single character being escaped (or a character reference to that character; the double escaping here is OPTIONAL but harmless).</q>
470          -->
471    
472        <li><p>If the entity declaration has to be ignored since there has already
473        been declared an entity with the same <code>Name</code> as the declaration,
474        then the parser <em class=rfc2119>MUST</em> raise a
475        <a href="#misc-info" id=mi-ent-unique><code>misc-info</code></a>
476        and abort these steps.
477    
478        <div class="informative note memo">
479        <p>Five predefined entities, i.e. <code>amp</code>, <code>lt</code>,
480        <code>gt</code>, <code>quot</code>, and <code>apos</code>, are always
481        declared implicitly and therefore any declaration for such an entity
482        always raises an
483        <a href="#misc-info" id=mi-ent-unique><code>misc-info</code></a>.
484        </div>  
485    
486        <li><p>If the entity declaration declares a parameter entity and the
487        <code>Name</code> of the entity begins with the string <code>xml</code>
488        (in any combination of upper- and lowercase letters), then the parser
489        <em class=rfc2119>MUST</em> raise an
490        <a href="#xml-misc-warning" id=xmw-reserved-pe-name><code>xml-misc-warning</code></a>.
491    
492        <li><p>If the entity declaration contains the <code>EntityValue</code>,
493        then for each occurence of any references to unparsed entities in the
494        <code>EntityValue</code>, the parser <em class=rfc2119>MUST</em> raise an
495        <a href="#xml-misc-error" id=xme-unparsed-in-ev><code>xml-misc-error</code></a>.
496        <!--
497          <q>It is an error for a reference to an unparsed entity to appear in the
498          EntityValue in an entity declaration.</q>
499        -->
500        <li><p>If the entity declaration declares a general entity, then an
501        <code>Entity</code> node <em class=rfc2119>MUST</em> be created and
502        appended to the <code>NamedNodeMap</code> object in the
503        <code>entities</code> attribute of the <code>DocumentType</code> node.
504        
505        <p class=ed>Read the external entity
506    
507        <p>If the replacement text of the entity is read, then parse the
508        replacement text as if it were referenced from the content of an
509        element (with no namespace bindings).  If no <span class=ed>@@ parse error</span>
510        is raised by the parsing process, then the nodes generated by the
511        parsing <em class=rfc2119>MUST</em> be appended to the <code>Entity</code>
512        node.  The parse error <em class=rfc2119>MUST NOT</em> be propagated to
513        the entire parsing process.  Other kinds of errors
514        <em class=rfc2119>MUST</em> be propagated.  The first parse error
515        <em class=rfc2119>MUST</em> abort the internal parsing process.
516        <span class=ed>@@ better wording</span>
517    
518        <p class=ed>@@ prop
519        
520        <p>Then, the <code>Entity</code> node and its descendant
521        <em class=rfc2119>MUST</em> be marked as read-only.
522      </ol>
523    
524    <dt>For each notation declaration being processed by the parser
525      <dd>If there is another processed notation declaration whose
526      <code>Name</code> is equal to the <code>Name</code> of the notation
527      declaration, then the parser <em class=rfc2119>MUST</em> raise an
528      <a href="#xml-validity-error" id=vc-uniquenotationname><code>xml-validity-error</code></a>.
529      <!-- <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#UniqueNotationName">Validity constraint: Unique Notation Name</a> -->
530    
531    <dt>For each empty-element tag
532      <dd>If the <code>Name</code> of the tag is not declared by a processed
533      element type declaration as <code>EMPTY</code> content, then the parser
534      <em class=rfc2119>MUST</em> raise an
535      <a href="#xml-misc-recommentation" id=xmr-emptyelemtag-not-empty><code>xml-misc-recommendation</code></a>.
536    <dt>For each start-tag
537      <dd>If the <code>Name</code> of the tag is declared by a processed element
538      type declaration as <code>EMPTY</code> content, then the parser
539      <em class=rfc2119>MUST</em> raise an
540      <a href="#xml-misc-recommentation" id=xmr-empty-not-emptyelemtag><code>xml-misc-recommendation</code></a>.
541    <dt>For each attribute
542      <dd><p>The parser <em class=rfc2119>MUST</em> set the normalized value of
543      the attribute to the <code>value</code> attribute of the <code>Attr</code>
544      node created for the attribute.
545    
546        <div class="note memo informative">
547        <p>That is, any entity reference has to be expanded.  Unexpanded entity
548        references in attribute values are discarded.
549        </div>
550    <dt>For each <code>xml:space</code> attribute
551      <dd>The parser <em class=rfc2119>MUST</em> set the normalized value of
552      the <code>xml:space</code> attribute to the <code>value</code> attribute
553      of the <code>Attr</code> node created for the attribute even if the
554      normalized value is different from <code>default</code> or
555      <code>preserve</code>.
556      <!-- In XML 1.0/1.1 specification, the attribute specification MAY be
557      ignored. -->
558    
559    <dt>For each parameter entity reference
560      <dd><p>Process as follows:
561        <ol>
562        <li>If the declaration for the entity is <em>not</em> processed,
563        then:
564          <dl class=switch>
565          <dt>If the document contains no external entity or if the document
566          contains the <code>standalone</code> pseudo-attribute set to
567          <code>yes</code><!-- or the document contains no DTD -->
568            <dd>The parser <em class=rfc2119>MUST</em> raise an
569            <a href="#xml-well-formedness-error" id=wf-entdeclared-pe><code>xml-well-formedness-error</code></a>.
570          <dt>Otherwise
571            <dd>The parser <em class=rfc2119>MUST</em> raise an
572            <a href="#xml-validity-error" id=vc-entdeclared-pe><code>xml-validity-error</code></a>.
573          </dl>
574        <li>If the declaration for the entity <em>is</em> processed but the
575        referenced entity cannot be retrieved, then the parser
576        <em class=rfc2119>MUST</em> raise an
577        <span class=ed>@@ ??-error</span>.
578        </ol>
579    
580        <p>In any of two cases above, process as follows:
581        <ul>
582        <li>If the parameter entity reference is contained in a declaration, then
583        the declaration <em class=rfc2119>MUST</em> be ignored <em>except</em> that
584        any error before the parameter entity <em class=rfc2119>MUST</em> be
585        raised as usual.
586        <li>If the parameter entity reference is contained in the status portion of
587        a conditional section, then the conditional section
588        <em class=rfc2119>MUST</em> be processed as if it were an
589        <code>IGNORE</code>d section.
590        <li>The parser <em class=rfc2119>MUST NOT</em> process any entity or
591        attribute-list declaration after the parameter entity reference in the DTD
592        <em>except</em> when the <code>standalone</code> pseudo-attribute of the
593        XML declaration (if any) is set to <code>yes</code>.
594        <!-- This requirement is enforced for internal DTD subset case in
595        XML 1.0/1.1 specification (section 5.1) but not for any other cases. -->
596        <!-- According to this definition, element type declarations, notation
597        declarations, and PIs ARE processed. -->
598        <li>If the parameter entity reference is the first reference to an entity
599        that is not read, then the parser <em class=rfc2119>MUST</em> raise an
600        <a href="#entity-error" id=ee-unread-pe><code>entity-error</code></a>.
601        <li>The <code>allDeclarationsProcessed</code> <span class=ed>@@ ref</span>
602        attribute of the <code>Document</code> node <em class=rfc2119>MUST</em> be
603        set to <code>false</code>.
604        </ul>
605    <dt>For each general entity reference in an attribute value or in the content
606    of an element
607      <dd><p>Process as follows:
608        <ol>
609        <li>If the <code>Name</code> of the entity reference is either
610        <code>amp</code>, <code>lt</code>, <code>gt</code>, <code>quot</code>,
611        or <code>apos</code>, then abort these steps.
612        <li>If the declaration for the entity is <em>not</em> processed,
613        then:
614          <dl class=switch>
615          <dt>If the document contains no external entity or if the document
616          contains the <code>standalone</code> pseudo-attribute set to
617          <code>yes</code><!-- or the document contains no DTD -->
618            <dd>The parser <em class=rfc2119>MUST</em> raise an
619            <a href="#xml-well-formedness-error" id=wf-entdeclared-ge><code>xml-well-formedness-error</code></a>.
620          <dt>Otherwise
621            <dd>The parser <em class=rfc2119>MUST</em> raise an
622            <a href="#xml-validity-error" id=vc-entdeclared-ge><code>xml-validity-error</code></a>.
623          </dl>
624        <li>If the declaration for the entity <em>is</em> processed but the
625        referenced entity cannot be retrieved, then the parser
626        <em class=rfc2119>MUST</em> raise an
627        <span class=ed>@@ ??-error</span>.
628        </ol>
629    
630        <p>In any of two cases above, process as follows:
631        <ul>
632        <li>If the general entity reference is the first reference to an entity
633        that is not read, then the parser <em class=rfc2119>MUST</em> raise an
634        <a href="#entity-error" id=ee-unread-ge><code>entity-error</code></a>.
635        <span class=ed>@@ entity declared WFC?</span>
636        <li class=ed>An unexpended entity reference node <em class=rfc2119>MUST</em> be inserted to the current node.
637        </ul>
638    
639    <dt>For each comment <em>outside</em> of document type declaration
640      <dd>A <code>Comment</code> node <em class=rfc2119>MUST</em> be created
641      and inserted appropriately.
642      <!-- In XML 1.0/1.1 spec, this is optional. -->
643    </dl>
644    
645    <p>The parser <em class=rfc2119>MUST</em> try to read any entity
646    referenced by general or parameter entity references<!--,--> and the
647    external subset entity, if any<!--, and any general entity declared-->
648    in the document type definition.
649    
650    <p><strong>Well-formedness constraints</strong>.  When the parser
651    detects a voilation to one of certain well-formedness constraints, it
652    <em class=rfc2119>MUST</em> raise an <a
653    href="#xml-well-formedness-error"><code>xml-well-formedness-error</code></a>.
654    The list of such well-formed constraints is as follows:
655    
656    <ul>
657    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#wfc-PEinInternalSubset">Well-formedness constraint: PEs in Internal Subset</a>
658    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#GIMatch">Well-formedness constraint: Element Type Match</a>
659    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#uniqattspec">Well-formedness constraint: Unique Att Spec</a>
660    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NoExternalRefs">Well-formedness constraint: No External Entity References</a>
661    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#CleanAttrVals">Well-formedness constraint: No &lt; in Attribute Values</a>
662    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#wf-Legalchar">Well-formedness constraint: Legal Character</a>
663    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#textent">Well-formedness constraint: Parsed Entity</a>
664    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#norecursion">Well-formedness constraint: No Recursion</a>
665    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#indtd">Well-formedness constraint: In DTD</a>
666    </ul>
667    
668    <p><strong>Validity constraints</strong>.  When the parser detects a
669    violation to one of certain validity contraints, it <em
670    class=rfc2119>MUST</em> raise an <a
671    href="#xml-validity-error"><code>xml-validity-error</code></a>.  The
672    list of such validity constraints is as follows:
673    
674    <ul>
675    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-PEinMarkupDecl">Validity constraint: Proper Declaration/PE Nesting</a>
676    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-PEinGroup">Validity constraint: Proper Group/PE Nesting</a>
677    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#condsec-nesting">Validity constraint: Proper Conditional Section/PE Nesting</a>
678    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-check-rmd">Validity constraint: Standalone Document Declaration</a>
679    </ul>
680    
681    <p><strong>Other creteria</strong>.  If the parser detects a violation
682    to one of certain additional constraints, it <em
683    class=rfc2119>MUST</em> raise an <a
684    href="#xml-misc-recommendation"><code>xml-misc-recommendation</code></a>.
685    The list of such constraints is as follows:
686    
687    <ul>
688    <li><q>For interoperability, if a parameter-entity reference appears in a
689    <code>choice</code>, <code>seq</code>, or <code>Mixed</code> construct, its
690    replacement text <em class=rfc2119>SHOULD</em> contain at least one non-blank
691    character, and neither the first nor last non-blank character of the
692    replacement text <em class=rfc2119>SHOULD</em> be a connector (<code>|</code>
693    or <code>,</code>).</q>
694    <li><q>External parsed entities <em class=rfc2119>SHOULD</em> each begin with a
695    text declaration.</q>
696    </ul>
697    
698    <p>The parser <em class=rfc2119>MUST</em> act as if it is a <a
699    href="http://www.w3.org/TR/2006/REC-xml-20060816/#dt-validating">validating
700    XML processor</a> for the purpose of informing of white space
701    characters appearing in <a
702    href="http://www.w3.org/TR/2006/REC-xml-20060816/#dt-elemcontent">element
703    content</a> (See <a
704    href="http://www.w3.org/TR/2006/REC-xml-20060816/#sec-white-space">Section
705    2.10</a> of the XML specification).
706    
707      <div class="note memo informative">
708      <p>In other word, the <code>isElementContentWhitespace</code> attribute
709      of <code>Text</code> nodes has to be set appropriately.  Note that the
710      value of the attribute will be set to <code>false</code> for any
711      <code>Text</code> node in the content of an element whose declaration
712      is not processed.
713      </div>
714    
715    <p>The parser <em class=rfc2119>MUST</em> raise at least one <a
716    href="#xml-well-formedness-error"
717    id=wfe-syntax><code>xml-well-formedness-error</code></a> if the entity
718    it parses does not match to the appropriate production rule in the XML
719    specification.  As an exception to this requirement, it <em
720    class=rfc2119>MAY</em> choose not to raise such an error if the error
721    will be raised by the conformance checker when the conformance checker
722    <a href="#algorithm-to-check-a-node" title="check a node">checks</a>
723    the <code>Document</code> object produced by the parser.
724    
725    <!--
726      <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#ExtSubset">Well-formedness constraint: External Subset</a>
727      <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#PE-between-Decls">Well-formedness constraint: PE Between Declarations</a>
728    -->
729    
730    <!--
731      Inpossible to test:
732        "In the absence of external character encoding information (such as MIME
733        headers), parsed entities which are stored in an encoding other than UTF-8
734        or UTF-16 MUST begin with a text declaration"
735    -->
736    </div>
737    
738    <div class="section" id=checking-dom>
739    <h2>Checking an <abbr>XML</abbr> <abbr>DOM</abbr> Tree</h2>
740    
741    <p>The following algorithms and definitions are applied to
742    <abbr>XML</abbr> documents; especially, they are not applied
743    to <abbr>HTML</abbr> documents.<!-- TODO: ref to HTML5 --></p>
744    
745  <div class=section id=definitions>  <div class=section id=definitions>
746  <h3>Definitions</h3>  <h3>Definitions</h3>
747    
# Line 213  is that of the <code>Document</code> nod Line 759  is that of the <code>Document</code> nod
759    
760  </div>  </div>
761    
762    
763    <div class=section id=checking-components>
764    <h3>Conformance Checking Algorithms for Components</h3>
765    
766    <p>To
767    <dfn id=algorithm-to-validate-an-xml-character-data title="validate an XML string">to
768    validate an <abbr>XML</abbr> string (<dfn id=var-s><var>s</var></dfn>)</dfn>,
769    the following algorithm <em class=rfc2119>MUST</em> be used:</p>
770    <ol>
771    <li>If <var>s</var> contains a character that is <em>not</em> in
772    the character class <a href="#class-Char10"><code>Char10</code></a>,
773    then raise an
774    <a href="#xml-well-formedness-error" id=wfe-illegal-char><code>xml-well-formedness-error</code></a>.</li>
775    <li>If <var>s</var> contains a character that is in the character
776    class <a href="#class-CompatChar10"><code>CompatChar10</code></a>,
777    then raise an
778    <a href="#xml-misc-warning" id=xmw-compat-char><code>xml-misc-warning</code></a>.</li>
779    <li>If <var>s</var> contains a character that is in the character
780    class <a href="#class-ControlChar10"><code>ControlChar10</code></a>,
781    then raise an
782    <a href="#xml-misc-warning" id=xmw-control-char><code>xml-misc-warning</code></a>.</li>
783    <li class=ed>@@ XML 1.1 support</li>
784    <li>If <var>s</var> contains a <code class=char>U+000D</code>
785    <code class=charname>CARRIAGE RETURN</code> character, then
786    raise a
787    <a href="#round-trip-error" id=rte-cr><code>round-trip-error</code></a>.
788    <span class=ed>@@ We should not raise duplicate errors for U+000D
789    in attribute values.  In addition, we should support a mode where
790    U+000D will be serialized as &#x000D; (so that no round-trip-error
791    will be raised).</span></li>
792    </ol>
793    
794    <p>To
795    <dfn id=algorithm-to-validate-a-name title="validate a Name">validate a
796    <code>Name</code> (<dfn id=var-name-s><var>s</var></dfn>)</dfn>, the following
797    algorithm <em class=rfc2119>MUST</em> be used:</p>
798    <ol>
799    <li>If <var>s</var> is an empty string, then raise an
800    <a href="#xml-well-formedness-error" id=wfe-name-empty><code>xml-well-formedness-error</code></a>.
801    Abort these steps.</li>
802    <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate
803    <var>s</var> as an <abbr>XML</abbr> string</a>.</li>
804    <li>If the first character in <var>s</var> is a character that is
805    <em>not</em> in the character class
806    <a href="#class-NameStartChar10"><code>NameStartChar10</code></a>, then raise
807    an
808    <a href="#xml-well-formedness-error" id=wfe-name-startchar><code>xml-well-formedness-error</code></a>.</li>
809    <li>If a character other than the first character in <var>s</var> is a
810    character that is <em>not</em> in the character class
811    <a href="#class-NameChar10"><code>NameChar10</code></a>, then raise an
812    <a href="#xml-well-formedness-error" id=wfe-name-char><code>xml-well-formedness-error</code></a>.</li>
813    <li>If <var>s</var> begins with the string <code>xml</code> (in any
814    case combination), then raise an
815    <a href="#xml-misc-warning" id=xmw-reserved-name><code>xml-misc-warning</code></a>.
816    <span class=ed>@@ except for attribute names <code>xml:lang</code>,
817    <code>xml:space</code><!--, <code>xml:base</code>, <code>xml:id</code>,
818    <code>xmlns</code>, <code>xmlns:<var>*</var></code>,
819    pi name <code>xml-stylesheet</code>-->.</span><!--
820    "names beginning with a match to (('X'|'x')('M'|'m')('L'|'l')) are reserved for standardization in this or future versions of this specification.":
821    xmlns, xml-stylesheet, xml:base and xml:id specifications violate to this sentense!
822    --></li>
823    <!-- COLON in Name is a lowercase "should not" in a Note of [XML10],
824    [XML11]. -->
825    <li class=ed>@@ XML 1.1 support</li>
826    </ol>
827    
828    <p>To
829    <dfn id=algorithm-to-validate-an-ncname title="validate an NCName">validate
830    an <code>NCName</code> (<dfn id=var-ncname-s><var>s</var></dfn>)</dfn>, the
831    following algorithm <em class=rfc2119>MUST</em> be used:</p>
832    <ol>
833    <li><a href="#algorithm-to-validate-a-name" title="validate a Name">Validate
834    <var>s</var> as a <code>Name</code></a>.</li>
835    <li class=ed>@@</li>
836    </ol>
837    
838    <p>To
839    <dfn id=algorithm-to-validate-a-public-identifier title="validate a public identifier">validate
840    a public identifier (<dfn id=var-pid><var>pid</var></dfn>)</dfn>, the
841    following algorithm <em class=rfc2119>MUST</em> be used:</p>
842    <ol>
843    <li>If <var>pid</var> is <code>null</code>, abort these steps.</li>
844    <li>If <var>pid</var> contains a character that is <em>not</em> in the
845    character class <a href="#class-PubidChar"><code>PubidChar</code></a>, then
846    raise an
847    <a href="#xml-well-formedness-error" id=wfe-pubid-char><code>xml-well-formedness-error</code></a>.</li>
848      <li>If <var>pid</var> contains one of <code class=char>U+0009</code>
849      <code class=charname>CHARACTER TABULATION</code>,
850      <code class=char>U+000A</code> <code class=charname>CARRIAGE RETURN</code>,
851      and <code class=char>U+000D</code> <code class=charname>LINE FEED</code>
852      characters, if the first character of <var>pid</var> is
853      <code class=char>U+0020</code> <code class=charname>SPACE</code> character,
854      if the last character of <var>pid</var> is <code class=char>U+0020</code>
855      <code class=charname>SPACE</code> character, or if there is a
856      <code class=char>U+0020</code> <code class=charname>SPACE</code> character
857      immediately followed by another <code class=char>U+0020</code>
858      <code class=charname>SPACE</code> character in <var>pid</var>, then it is a
859      <a href="#round-trip-error" id=rte-pubid-space><code>round-trip-error</code></a>.
860      <span class=ed>Is this really a roundtripness problem?  XML spec
861      does only define the way to match public identifiers in fact, no
862      canonical form.</span></li>
863    </ol>
864    
865    <p>To
866    <dfn id=algorithm-to-validate-a-system-identifier title="validate a system identifier">validate
867    a system identifier (<dfn id=var-sid><var>sid</var></dfn>)</dfn>, the
868    following algorithm <em class=rfc2119>MUST</em> be used:</p>
869    <ol>
870      <li>If <var>sid</var> is <code>null</code>, abort these steps.</li>
871    <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate
872    <var>sid</var> as an <abbr>XML</abbr> string</a>.</li>
873      <li>If <var>sid</var> contains both <code class=char>U+0022</code>
874      <code class=charname>QUOTATION MARK</code> (<code class=char>"</code>) and
875      <code class=char>U+0027</code> <code class=charname>APOSTROPHE</code>
876      (<code class=char>'</code>) characters, raise an
877      <a href="#xml-well-formedness-error" id=wfe-sid-lit><code>xml-well-formedness-error</code></a>.</li>
878      <li>If <var>sid</var> contains at least one <code class=char>U+0023</code>
879      <code class=charname>NUMBER SIGN</code> (<code class=char>#</code>)
880      character, then raise an
881      <a href="#xml-misc-error" id=xme-sid-fragment><code>xml-misc-error</code></a>.</li>
882      <li class=ed>@@ If <var>sid</var> cannot be converted to a URI
883      reference, then raise a fact-level error (xml-misc-warning?).<!--
884      XML 1.0 has no conformance language for system identifier being
885      a URI reference. --></li>
886    </ol>
887    
888    </div>
889    
890  <div class=section id=checking-node>  <div class=section id=checking-node>
891  <h3>Checking <code>Node</code></h3>  <h3>Checking <code>Node</code></h3>
892    
# Line 223  following:</p> Line 897  following:</p>
897  <dt>If <var>n</var> is an <code>Attr</code> node</dt>  <dt>If <var>n</var> is an <code>Attr</code> node</dt>
898    <dd>    <dd>
899      <ol>      <ol>
900      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
901      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>
902      <li>If the <code>prefix</code> attribute value is different from      <li>If the <code>prefix</code> attribute value is different from
903      <code>null</code>, then <a href="#algorithm-to-validate-a-ncname">validate      <code>null</code>, then <a href="#algorithm-to-validate-an-ncname">validate
904      the <code>prefix</code> attribute value as an <code>NCName</code></a>.</li>      the <code>prefix</code> attribute value as an <code>NCName</code></a>.</li>
905      <li>For each node <dfn id=var-attr-nc><var>n<sub><var>c</var></sub></var></dfn> in the      <li>For each node <dfn id=var-attr-nc><var>n<sub><var>c</var></sub></var></dfn> in the
906      <code>childNodes</code> list of <var>n</var>,      <code>childNodes</code> list of <var>n</var>,
# Line 241  following:</p> Line 915  following:</p>
915        <a href="#algorithm-to-check-a-node" title="check a node">check        <a href="#algorithm-to-check-a-node" title="check a node">check
916        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>
917        </ol></li>        </ol></li>
918        <li>If <code>nodeName</code> attribute of <var>n</var> is
919        <code>xml:space</code> <span class=ed>@@ or {xml namespace}:space ?</span>
920        and <code>value</code> attribute of <var>n</var> is neither
921        <code>default</code> nor <code>preserve</code>, then it is an
922        <a href="#xml-misc-error" id=xme-attr-xml-space><code>xml-misc-error</code></a>.<!--
923        Note that <!ATTLIST e xml:space (default|preserve) "a">...
924        <e xml:space="default"/> is conforming and valid. --></li>
925        <li class=ed>@@ xml:lang value is not a language tag [RFC 3066 or its
926        successor] or an empty string, then xml-misc-warning
927        (a "fact"-level error; not an XML error).</li>
928      <li class=ed>@@ <code>specified</code>,      <li class=ed>@@ <code>specified</code>,
929      <code>manakaiAttributeType</code></li>      <code>manakaiAttributeType</code> (#ValueType Validity constraint: Attribute Value Type)</li>
930        <!-- xml:space MUST be declared to be valid. -->
931        <li>Let <dfn id=var-v><var>v</var></dfn> be the value of the
932        attribute <code>value</code> of <var>n</var>.</li>
933        <li>Validate the <var>n</var> against the <span class=ed>declared
934        type</span> as following:
935          <dl class=switch>
936          <dt class=ed><code>ID_ATTR</code></dt>
937            <dd>
938              <ol>
939              <li><span class=ed>Validate <var>v</var> as an
940              <code>Name</code>.</span>  If it fails, then raise an
941              <a href="#xml-validity-error" id=vc-id-name><code>xml-validity-error</code></a>.</li>
942              <li><span class=ed>If <code>ID</code> <var>v</var> is defined,</span>
943              then raise an  
944              <a href="#xml-validity-error" id=vc-id-duplication><code>xml-validity-error</code></a>.</li>
945              </ol>
946            </dd>
947          <dt class=ed>IDREF_ATTR</dt>
948            <dd>
949              <ol>
950              <li><span class=ed>Validate <var>v</var> as an
951              <code>Name</code>.</span>  If it fails, then raise an
952              <a href="#xml-validity-error" id=vc-idref-name><code>xml-validity-error</code></a>.</li>
953              <li><span class=ed>If <code>ID</code> <var>v</var> is NOT
954              defined,</span> then raise an  
955              <a href="#xml-validity-error" id=vc-idref-match><code>xml-validity-error</code></a>.</li>
956              </ol>
957            </dd>
958          <dt class=ed>IDREFS_ATTR</dt>
959            <dd class=ed>@@</dd>
960          <dt class=ed>ENTITY_ATTR</dt>
961            <dd>
962              <ol>
963              <li><span class=ed>Validate <var>v</var> as an
964              <code>Name</code>.</span>  If it fails, then raise an
965              <a href="#xml-validity-error" id=vc-entname-name><code>xml-validity-error</code></a>.</li>
966              <li><span class=ed>If <code>Entity</code> <var>v</var> is NOT
967              defined,</span> then raise an  
968              <a href="#xml-validity-error" id=vc-entname-match><code>xml-validity-error</code></a>.</li>
969              </ol>
970            </dd>
971          <dt class=ed>ENTITIES_ATTR</dt>
972            <dd class=ed>@@</dd>
973          <dt class=ed>NMTOKEN_ATTR</dt>
974            <dd>
975              <ol>
976              <li><span class=ed>Validate <var>v</var> as an
977              <code>Nmtoken</code>.</span>  If it fails, then raise an
978              <a href="#xml-validity-error" id=vc-nmtok-name><code>xml-validity-error</code></a>.</li>
979              </ol>
980            </dd>
981          <dt class=ed>NMTOKENS_ATTR</dt>
982            <dd class=ed>@@</dd>
983          <dt class=ed>NOTATION_ATTR</dt>
984            <dd class=ed><var>v</var> must be one of enumerated values.
985            If not, then raise an
986            <a href="#xml-validity-error" id=vc-notatn-match><code>xml-validity-error</code></a>.</dd>
987          <dt class=ed>ENUMERATED_ATTR</dt>
988            <dd class=ed><var>v</var> must be one of enumerated values.
989            If not, then raise an
990            <a href="#xml-validity-error" id=vc-enum><code>xml-validity-error</code></a>.</dd>
991          <dt class=ed>@@</dt>
992          </dl>
993        </li>
994        <li>If <span class=ed>type ID and default is NOT #IMPLIED or #REQUIRED</span>, then
995        raise an
996        <a href="#xml-validity-error" id=vc-id-default><code>xml-validity-error</code></a>.</li>
997        <li class=ed>@@ #FixedAttr Validity constraint: Fixed Attribute Default</li>
998        <li class=ed>@@ strict serialization error for U+000D, U+000A, and
999        U+0009 characters, leading/trailing U+0020, and U+0020{2,} string?</li>
1000      </ol>      </ol>
1001    </dd>    </dd>
1002  <dt>If <var>n</var> is an <code>AttributeDefinition</code> node</dt>  <dt>If <var>n</var> is an <code>AttributeDefinition</code> node</dt>
1003    <dd>    <dd>
1004      <ol>      <ol>
1005      <li class=ed></li>      <li class=ed></li>
1006        <li>If <code>nodeName</code> attribute of <var>n</var> is
1007        <code>xml:space</code> <span class=ed>@@ or {xml namespace}:space ?</span>
1008        and <span class=ed>its declared type is different from (default|preserve),
1009        (preserve|default), (default), or (preserve)</span>, then raise an
1010        <a href="#xml-misc-error" id=xme-at-xml-space><code>xml-misc-error</code></a>.</li>
1011      <li>For each node <dfn id=var-ad-nc><var>n<sub><var>c</var></sub></var></dfn> in the      <li>For each node <dfn id=var-ad-nc><var>n<sub><var>c</var></sub></var></dfn> in the
1012      <code>childNodes</code> list of <var>n</var>,      <code>childNodes</code> list of <var>n</var>,
1013        <ol>        <ol>
# Line 262  following:</p> Line 1021  following:</p>
1021        <a href="#algorithm-to-check-a-node" title="check a node">check        <a href="#algorithm-to-check-a-node" title="check a node">check
1022        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>
1023        </ol></li>        </ol></li>
1024        <li class=ed>If <code>NOTATION_ATTR</code>, enumerated values MUST
1025        be declared.  If not, then raise an
1026        <a href="#xml-validity-error" id=vc-notatn-declared><code>xml-validity-error</code></a>.</li>
1027        <li class=ed>If <code>NOTATION_ATTR</code> or <code>ENUMERATED_ATTR</code>,
1028        values MUST all be distinct.  If not, then raise an
1029        <a href="#xml-validity-error" id=vc-no-duplicate-tokens><code>xml-validity-error</code></a>.</li>
1030        <li class=ed>If <code>NOTATION_ATTR</code> on an <code>EMPTY</code>
1031        element, then raise an
1032        <a href="#xml-validity-error" id=vc-no-notation-empty><code>xml-validity-error</code></a>.</li>
1033        <li class=ed>@@ #defattrvalid Validity constraint: Attribute Default Value Syntactically Correct</li>
1034      </ol>      </ol>
1035    </dd>    </dd>
1036  <dt>If <var>n</var> is a <code>CDATASection</code> node</dt>  <dt>If <var>n</var> is a <code>CDATASection</code> node</dt>
1037    <dd>    <dd>
1038      <ol>      <ol>
1039      <li><a href="#algorithm-to-validate-an-xml-character-data">Validate the      <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate the
1040      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
1041      data</a>.</li>      data</a>.</li>
1042      <li>If the <code>data</code> attribute value contains      <li>If the <code>data</code> attribute value contains
1043      a string <code>]]></code>, then it is an      a string <code>]]></code>, then raise an
1044      <a href="#xml-well-formedness-error" id=wfe-cs-mse><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-cs-mse><code>xml-well-formedness-error</code></a>.<!-- "for compatibility" --></li>
1045      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1046      any nodes, they are in      any nodes, they are in
1047      <a href="#xml-well-formedness-error" id=wfe-cs-child><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-cs-child><code>xml-well-formedness-error</code></a>.</li>
# Line 281  following:</p> Line 1050  following:</p>
1050  <dt>If <var>n</var> is a <code>Comment</code> node</dt>  <dt>If <var>n</var> is a <code>Comment</code> node</dt>
1051    <dd>    <dd>
1052      <ol>      <ol>
1053      <li><a href="#algorithm-to-validate-an-xml-character-data">Validate the      <li>Raise an
1054        <a href="#round-trip-warning" id=rtw-comment><code>round-trip-warning</code></a>.</li>
1055        <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate the
1056      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
1057      data</a>.</li>      data</a>.</li>
1058      <li>If the <code>data</code> attribute value contains      <li>If the <code>data</code> attribute value contains
1059      a string <code>--</code>, or if it ends with a character      a string <code>--</code>, or if it ends with a character
1060      <code>-</code>, then it is an      <code>-</code>, then raise an
1061      <a href="#xml-well-formedness-error" id=wfe-comment-com><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-comment-com><code>xml-well-formedness-error</code></a>.<!--
1062        "for compatibility" --></li>
1063      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1064      any nodes, they are in      any nodes, they are in
1065      <a href="#xml-well-formedness-error" id=wfe-comment-child><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-comment-child><code>xml-well-formedness-error</code></a>.</li>
# Line 347  following:</p> Line 1119  following:</p>
1119  <dt>If <var>n</var> is a <code>DocumentType</code> node</dt>  <dt>If <var>n</var> is a <code>DocumentType</code> node</dt>
1120    <dd>    <dd>
1121      <ol>      <ol>
1122      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1123      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1124        <li>Follow the following substeps:
1125          <ol>
1126          <li>If <code>ownerDocument</code> attribute of <var>n</var> is
1127          <code>null</code>, then abort these substeps.</li>
1128          <li>If <code>documentElement</code> attribute of the node
1129          set to <code>ownerDocument</code> attribute of <var>n</var> is
1130          <code>null</code>, then abort these substeps.</li>
1131          <li>If <code>nodeName</code> attribute of the node set to
1132          <code>documentElement</code> attribute of the node set to
1133          <code>ownerDocument</code> attribute of <var>n</var> is
1134          different from <code>nodeName</code> of <var>n</var>,
1135          then raise an
1136          <a href="#xml-validity-error" id=vc-roottype><code>xml-validity-error</code></a>.</li></li>
1137          </ol>
1138        </li>
1139      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate
1140      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1141      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1142      both <code>"</code> and <code>'</code> characters, it is a      the <code>systemId</code> attribute value as a system identifier</a>.</li>
1143      <a href="#xml-well-formedness-error" id=wfe-dt-system-id><code>xml-well-formedness-error</code></a>.</li>      <li>If the <code>publicId</code> attribute value of <var>n</var> is
1144      <!-- publicId = non-null and systemId = null -->      <em>not</em> <code>null</code> and the <code>systemId</code> attribute
1145        value of <var>n</var> is <code>null</code>, then raise an
1146        <a href="#xml-well-formedness-error" id=wfe-dt-sid><code>xml-well-formedness-error</code></a>.
1147        <span class=ed>@@ publicId == null?  Or, publicId == ""</span></li>
1148      <li>For each node <dfn id=var-dt-nc><var>n<sub><var>c</var></sub></var></dfn>      <li>For each node <dfn id=var-dt-nc><var>n<sub><var>c</var></sub></var></dfn>
1149      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
1150        <ol>        <ol>
# Line 366  following:</p> Line 1156  following:</p>
1156        <a href="#algorithm-to-check-a-node" title="check a node">check        <a href="#algorithm-to-check-a-node" title="check a node">check
1157        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>
1158        </ol></li>        </ol></li>
1159      <li class=ed>@@ <code>entities</code>, <code>notations</code>,      <li>For each node in the <code>entities</code>, <code>notations</code>,
1160      <code>elementTypes</code>, externally declared?</li>      and <code>elementTypes</code> lists of <var>n</var>,
1161        <a href="#algorithm-to-check-a-node" title="check a node">check the
1162        node</a> recursively.</li>
1163        <li class=ed>@@ externally declared?</li>
1164        <li>If the <code>NamedNodeMap</code> object in the <code>entities</code>
1165        attribute of <var>n</var> does not contain <code>Entity</code> nodes
1166        whose <code>nodeName</code> attribute are <code>amp</code>,
1167        <code>lt</code>, <code>gt</code>, <code>apos</code>, and <code>quot</code>
1168        then raise
1169        <a href="#xml-misc-recommentation" id=xmr-predefined><code>xml-misc-recommendation</code></a>(s).
1170      </ol>      </ol>
1171    </dd>    </dd>
1172  <dt>If <var>n</var> is an <code>Element</code> node</dt>  <dt>If <var>n</var> is an <code>Element</code> node</dt>
1173    <dd>    <dd>
1174      <ol>      <ol>
1175      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1176      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>
1177      <li>If the <code>prefix</code> attribute value is different from      <li>If the <code>prefix</code> attribute value is different from
1178      <code>null</code>, then <a href="#algorithm-to-validate-a-ncname">validate      <code>null</code>, then <a href="#algorithm-to-validate-an-ncname">validate
1179      the <code>prefix</code> attribute value as an <code>NCName</code></a>.</li>      the <code>prefix</code> attribute value as an <code>NCName</code></a>.</li>
1180      <li>For each node <dfn id=var-element-nc><var>n<sub><var>c</var></sub></var></dfn>      <li>For each node <dfn id=var-element-nc><var>n<sub><var>c</var></sub></var></dfn>
1181      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
# Line 394  following:</p> Line 1193  following:</p>
1193        <a href="#algorithm-to-check-a-node" title="check a node">check        <a href="#algorithm-to-check-a-node" title="check a node">check
1194        <var>n<sub><var>c</var></sub></var></a> recursively.</li>        <var>n<sub><var>c</var></sub></var></a> recursively.</li>
1195        </ol></li>        </ol></li>
1196        <li class=ed>@@ #elementvalid Validity constraint: Element Valid</li>
1197        <li>Let <var>attrs</var> be the value of the <code>attribute</code>
1198        attribute of <var>n</var>.  Check conformance of <var>attrs</var>
1199        as following:
1200          <ol>
1201          <li>If <var>attrs</var> contains an <code>Attr</code> node whose
1202          <code>nodeName</code> attribute value is equal to that of another
1203          <code>Attr</code> node in <var>attrs</var>, then raise an
1204          <a href="#xml-well-formedness-error" id=wfe-uniqattspec><code>xml-well-formedness-error</code></a>.<!--
1205          #uniqattspec Well-formedness constraint: Unique Att Spec --></li>
1206          <li class=ed>@@ #RequiredAttr Validity constraint: Required Attribute</li>
1207          </ol>
1208        </li>
1209      </ol>      </ol>
1210    </dd>    </dd>
1211  <dt>If <var>n</var> is an <code>ElementTypeDefinition</code> node</dt>  <dt>If <var>n</var> is an <code>ElementTypeDefinition</code> node</dt>
# Line 403  following:</p> Line 1215  following:</p>
1215      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1216      any nodes, they are in      any nodes, they are in
1217      <a href="#xml-well-formedness-error" id=wfe-et-child><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-et-child><code>xml-well-formedness-error</code></a>.</li>
1218        <li class=ed>@@ <q cite="http://www.w3.org/TR/2006/REC-xml-20060816/#elemdecls">At user option, an XML processor MAY issue a warning when a declaration mentions an element type for which no declaration is provided, but this is not an error.</q></li>
1219        <li class=ed>@@ <q cite="http://www.w3.org/TR/2006/REC-xml-20060816/#sec-element-content">For compatibility, it is an error if the content model allows an element to match more than one occurrence of an element type in the content model. </q></li>
1220        <li class=ed>@@ #vc-MixedChildrenUnique
1221        Validity constraint: No Duplicate Types</li>
1222        <li class=ed>@@ <q cite="http://www.w3.org/TR/2006/REC-xml-20060816/#attdecls">At user option, an XML processor MAY issue a warning if attributes are declared for an element type not itself declared, but this is not an error.</q></li>
1223        <li>If there is more than one <code>AttributeDefinition</code> node
1224        with <span class=ed>attribute type <code>ID</code></span> in the
1225        <code>NamedNodeMap</code> list contained in the
1226        <code>attributeDefinitions</code> attribute of <var>n</var>, then raise an
1227        <a href="#xml-validity-error" id=vc-one-id-per-el><code>xml-validity-error</code></a>.</li>
1228        <li>If there is more than one <code>AttributeDefinition</code> node
1229        with <span class=ed>attribute type <code>NOTATION</code></span> in the
1230        <code>NamedNodeMap</code> list contained in the
1231        <code>attributeDefinitions</code> attribute of <var>n</var>, then raise an
1232        <a href="#xml-validity-error" id=vc-one-notation-per><code>xml-validity-error</code></a>.</li>
1233        <li class=ed>"For interoperability, the same Nmtoken  SHOULD NOT occur more than once in the enumerated attribute types of a single element type."</li>
1234      </ol>      </ol>
1235    </dd>    </dd>
1236  <dt>If <var>n</var> is an <code>Entity</code> node</dt>  <dt>If <var>n</var> is an <code>Entity</code> node whose
1237    <code>notationName</code> attribute value is <code>null</code> (i.e. a
1238    parsed entity)</dt>
1239    <dd>    <dd>
1240      <ol>      <ol>
1241      <li>An <a href="#entity-error" id=ee-entity-node><code>entity-error</code></a> <span class=ed>@@ if !notationName</span>.</li>      <li>Raise an
1242      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <a href="#entity-error" id=ee-entity-node><code>entity-error</code></a>.</li>
1243        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1244      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1245      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate
1246      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1247      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1248      both <code>"</code> and <code>'</code> characters, it is a      the <code>systemId</code> attribute value as a system identifier</a>.</li>
1249      <a href="#xml-well-formedness-error" id=wfe-dt-system-id><code>xml-well-formedness-error</code></a>.</li>      <li>If the <code>publicId</code> attribute value of <var>n</var> is
1250      <!-- publicId = non-null and systemId = null -->      <em>not</em> <code>null</code> and the <code>systemId</code> attribute
1251      <li class=ed>@@ <code>notationName</code></li>      value of <var>n</var> is <code>null</code>, then raise an
1252        <a href="#xml-well-formedness-error" id=wfe-entity-sid><code>xml-well-formedness-error</code></a>.</li>
1253      <li>For each node <dfn id=var-entity-nc><var>n<sub><var>c</var></sub></var></dfn>      <li>For each node <dfn id=var-entity-nc><var>n<sub><var>c</var></sub></var></dfn>
1254      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
1255        <ol>        <ol>
# Line 436  following:</p> Line 1268  following:</p>
1268        </ol></li>        </ol></li>
1269      </ol>      </ol>
1270    </dd>    </dd>
1271    <dt>If <var>n</var> is an <code>Entity</code> node whose
1272    <code>notationName</code> attribute value is <em>not</em> <code>null</code>
1273    (i.e. an unparsed entity)</dt>
1274      <dd>
1275        <ol>
1276        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1277        <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1278        <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate
1279        the <code>publicId</code> attribute value as a public identifier</a>.</li>
1280        <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1281        the <code>systemId</code> attribute value as a system identifier</a>.</li>
1282        <li>If the <code>systemId</code> attribute value of <var>n</var> is
1283        <code>null</code>, then raise an
1284        <a href="#xml-well-formedness-error" id=wfe-uentity-sid><code>xml-well-formedness-error</code></a>.</li>
1285        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1286        <code>notationName</code> attribute value of <var>n</var> as an
1287        <code>NCName</code></a>.</li>
1288        <li class=ed>@@ #not-declared Validity constraint: Notation Declared</li>
1289        <li>If the <code>childNodes</code> list of <var>n</var> contains
1290        any nodes, they are in
1291        <a href="#xml-well-formedness-error" id=wfe-uentity-child><code>xml-well-formedness-error</code></a>.</li>
1292        </ol>
1293      </dd>
1294  <dt>If <var>n</var> is an <code>EntityReference</code> node</dt>  <dt>If <var>n</var> is an <code>EntityReference</code> node</dt>
1295    <dd>    <dd>
1296      <ol>      <ol>
1297      <li>An <a href="#entity-error" id=ee-er-node><code>entity-error</code></a>.</li>      <li>An <a href="#entity-error" id=ee-er-node><code>entity-error</code></a>.</li>
1298      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1299      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1300      <li>For each node <dfn id=var-er-nc><var>n<sub><var>c</var></sub></var></dfn>      <li>For each node <dfn id=var-er-nc><var>n<sub><var>c</var></sub></var></dfn>
1301      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
# Line 463  following:</p> Line 1318  following:</p>
1318  <dt>If <var>n</var> is a <code>Notation</code> node</dt>  <dt>If <var>n</var> is a <code>Notation</code> node</dt>
1319    <dd>    <dd>
1320      <ol>      <ol>
1321      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1322      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1323      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate      <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate
1324      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1325      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1326      both <code>"</code> and <code>'</code> characters, it is a      the <code>systemId</code> attribute value as a system identifier</a>.</li>
     <a href="#xml-well-formedness-error" id=wfe-dt-system-id><code>xml-well-formedness-error</code></a>.</li>  
1327      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1328      any nodes, they are in      any nodes, they are in
1329      <a href="#xml-well-formedness-error" id=wfe-notation-child><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-notation-child><code>xml-well-formedness-error</code></a>.</li>
# Line 478  following:</p> Line 1332  following:</p>
1332  <dt>If <var>n</var> is a <code>ProcessingInstruction</code> node</dt>  <dt>If <var>n</var> is a <code>ProcessingInstruction</code> node</dt>
1333    <dd>    <dd>
1334      <ol>      <ol>
1335      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li>If the <code>target</code> attribute value matches to the string
1336      <code>target</code> attribute value as an <code>NCName</code></a>.</li>      <code>xml</code> in any case combination, then raise a
     <li>If the <code>target</code> attribute value matches to  
     <code>XML</code> case-insensitively, then it is a  
1337      <a href="#xml-well-formedness-error" id=wfe-pi-xml><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-pi-xml><code>xml-well-formedness-error</code></a>.</li>
1338      <li><a href="#algorithm-to-validate-an-xml-character-data">Validate the      <li>Otherwise, <a href="#algorithm-to-validate-an-ncname">validate the
1339      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>target</code> attribute value as an <code>NCName</code></a>.</li>
1340        <li>Then,
1341        <a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">validate
1342        the <code>data</code> attribute value as an <abbr>XML</abbr> character
1343      data</a>.</li>      data</a>.</li>
1344      <li>If the <code>data</code> attribute value contains      <li>If the <code>data</code> attribute value contains a string
1345      a string <code>?></code>, or starts with either      <code>?></code>, then raise a
1346      <code class=char>U+0009</code>, <code class=char>U+000A</code>,      <a href="#xml-well-formedness-error" id=wfe-pi-pic><code>xml-well-formedness-error</code></a>.</li>
1347      <code class=char>U+000D</code>, or <code class=char>U+0020</code>      <li>If the <code>data</code> attribute value starts with either
1348      character, then it is a      <code class=char>U+0009</code> <code class=charname>CHARACTER
1349      <a href="#round-trip-error" id=rte-pi-data><code>round-trip-error</code></a>.</li>      TABULATION</code>, <code class=char>U+000A</code> <code class=charname>LINE
1350        FEED</code>, <code class=char>U+000D</code> <code class=charname>CARRIAGE
1351        RETURN</code>, or <code class=char>U+0020</code>
1352        <code class=charname>SPACE</code> character, then raise a
1353        <a href="#round-trip-error" id=rte-pi-s><code>round-trip-error</code></a>.</li>
1354      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1355      any nodes, they are in      any nodes, then raise an
1356      <a href="#xml-well-formedness-error" id=wfe-pi-child><code>xml-well-formedness-error</code></a>.</li>      <a href="#xml-well-formedness-error" id=wfe-pi-child><code>xml-well-formedness-error</code></a>.</li>
1357        <li class=ed>@@ Warn if not declared
1358      </ol>      </ol>
1359    </dd>    </dd>
1360  <dt>If <var>n</var> is a <code>Text</code> node</dt>  <dt>If <var>n</var> is a <code>Text</code> node</dt>
1361    <dd>    <dd>
1362      <ol>      <ol>
1363      <li><a href="#algorithm-to-validate-an-xml-character-data">Validate the      <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate the
1364      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
1365      data</a>.</li>      data</a>.</li>
1366      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
# Line 514  following:</p> Line 1374  following:</p>
1374    
1375  </div>  </div>
1376    
1377  <div class=section id=checking-components>  </div>
 <h3>Checking Components</h3>  
1378    
1379  <p>The algorithm  <div id=classes class=section>
1380  <dfn id=algorithm-to-validate-an-xml-character-data title-"to validate an XML character data">to  <h2>Character Classes</h2>
 validate an <abbr>XML</abbr> character data  
 (<dfn id=var-s><var>s</var></dfn>)</dfn> is defined as following:</p>  
 <ol>  
 <li class=ed>@@</li>  
 </ol>  
1381    
1382  <p>The algorithm  <p>This section defines a couple of character classes.
1383  <dfn id=algorithm-to-validate-a-name title="to validate a Name">to validate a  These classes are referred to by algorithms specified above.</p>
 <code>Name</code> (<dfn id=var-name><var>name</var></dfn>)</dfn> is defined  
 as following:</p>  
 <ol>  
 <li class=ed>@@</li>  
 </ol>  
1384    
1385  <p>The algorithm  <p>Character class <dfn id=class-Char10><code>Char10</code></dfn>
1386  <dfn id=algorithm-to-validate-a-ncname title="to validate an NCName">to  contains the following characters:</p>
1387  validate an <code>NCName</code> (<dfn id=var-name><var>name</var></dfn>)</dfn>  <ul>
1388  is defined as following:</p>  <li><code class=char>U+0009</code> <code class=charname>CHARACTER
1389  <ol>  TABULATION</code></li>
1390  <li class=ed>@@</li>  <li><code class=char>U+000A</code> <code class=charname>LINE FEED</code></li>
1391  </ol>  <li><code class=char>U+000D</code> <code class=charname>CARRIAGE
1392    RETURN</code></li>
1393    <li><code class=char>U+0020</code> <code class=charname>SPACE</code>
1394    .. <code class=char>U+D7FF</code></li>
1395    <li><code class=char>U+E000</code> .. <code class=char>U+FFFD</code>
1396    <code class=charname>REPLACEMENT CHARACTER</code></li>
1397    <li><code class=char>U+10000</code> .. <code class=char>U+10FFFF</code></li>
1398    </ul>
1399    <div class="note memo">
1400    <p>This character class contains all characters allowed in the production rule
1401    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Char"><code>Char</code></a>
1402    of <abbr>XML</abbr> 1.0
1403    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1404    </div>
1405    
1406  <p>To <dfn id=algorithm-to-validate-a-public-identifier title="validate a public identifier">validate  <p>Character class <dfn id=class-CompatChar10><code>CompatChar10</code></dfn>
1407  a public identifier (<dfn id=var-pid><var>pid</var></dfn>)</dfn>, the  contains the following characters:</p>
1408  algorithm below <em class=rfc2119>MUST</em> be used:</p>  <ul>
1409  <ol>  <li class=ed>@@ <q>Document authors are encouraged to avoid "compatibility characters", as defined in section 6.8 of [Unicode @@ Unicode 2.0 @@] (see also D21 in section 3.6 of [Unicode3]).</q></li>
1410    <li>If <var>pid</var> contains any character  </ul>
1411    that is outside of the range of <code>#x20 | #xD | #xA |  
1412    [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]</code><!-- @@ TODO: formal def -->,  <p>Character class <dfn id=class-ControlChar10><code>ControlChar10</code></dfn>
1413    then it is an  contains the following characters:</p>
1414    <a href="#xml-well-formedness-error" id=wfe-pubid-char><code>xml-well-formedness-error</code></a>.</li>  <ul>
1415    <li>If <var>pid</var> contains one of <code class=char>U+0009</code>  <li><code class=char>U+007F</code> <code class=charname>DELETE</code> ..
1416    <code class=charname>CHARACTER TABULATION</code>,  <code class=char>U+0084</code> <code class=charname>INDEX</code></li>
1417    <code class=char>U+000A</code> <code class=charname>CARRIAGE RETURN</code>,  <li><code class=char>U+0086</code> <code class=charname>START OF SELECTED
1418    and <code class=char>U+000D</code> <code class=charname>LINE FEED</code>  AREA</code> .. <code class=char>U+009F</code> <code class=charname>APPLICATION
1419    characters, if the first character of <var>pid</var> is  PROGRAM COMMAND</code></li>
1420    <code class=char>U+0020</code> <code class=charname>SPACE</code> character,  <li><code class=char>U+FDD0</code> .. <code class=char>U+FDEF</code></li>
1421    if the last character of <var>pid</var> is <code class=char>U+0020</code>  <li><code class=char>U+1FFFE</code> .. <code class=char>U+1FFFF</code></li>
1422    <code class=charname>SPACE</code> character, or if there is a  <li><code class=char>U+2FFFE</code> .. <code class=char>U+2FFFF</code></li>
1423    <code class=char>U+0020</code> <code class=charname>SPACE</code> character  <li><code class=char>U+3FFFE</code> .. <code class=char>U+3FFFF</code></li>
1424    immediately followed by another <code class=char>U+0020</code>  <li><code class=char>U+4FFFE</code> .. <code class=char>U+4FFFF</code></li>
1425    <code class=charname>SPACE</code> character in <var>pid</var>, then it is a  <li><code class=char>U+5FFFE</code> .. <code class=char>U+5FFFF</code></li>
1426    <a href="#round-trip-error" id=rte-pubid-space><code>round-trip-error</code></a>.</li>  <li><code class=char>U+6FFFE</code> .. <code class=char>U+6FFFF</code></li>
1427    <li class=ed>@@ Should we check formal-public-identifierness?</li>  <li><code class=char>U+7FFFE</code> .. <code class=char>U+7FFFF</code></li>
1428  </ol>  <li><code class=char>U+8FFFE</code> .. <code class=char>U+8FFFF</code></li>
1429    <li><code class=char>U+9FFFE</code> .. <code class=char>U+9FFFF</code></li>
1430    <li><code class=char>U+AFFFE</code> .. <code class=char>U+AFFFF</code></li>
1431    <li><code class=char>U+BFFFE</code> .. <code class=char>U+BFFFF</code></li>
1432    <li><code class=char>U+CFFFE</code> .. <code class=char>U+CFFFF</code></li>
1433    <li><code class=char>U+DFFFE</code> .. <code class=char>U+DFFFF</code></li>
1434    <li><code class=char>U+EFFFE</code> .. <code class=char>U+EFFFF</code></li>
1435    <li><code class=char>U+FFFFE</code> .. <code class=char>U+FFFFF</code></li>
1436    <li><code class=char>U+10FFFE</code> .. <code class=char>U+10FFFF</code></li>
1437    </ul>
1438    <div class="note memo">
1439    <p>This character class contains the characters listed in the Note in
1440    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#charsets">Section 2.2</a>
1441    of <abbr>XML</abbr> 1.0
1442    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>,
1443    as amended by
1444    <a href="http://www.w3.org/XML/xml-V10-4e-errata#E02">errata</a>.</p>
1445    </div>
1446    
1447    <p>The character class <dfn id=class-NameStartChar10><code>NameStartChar10</code></dfn>
1448    contains the following characters:</p>
1449    <ul class=ed>
1450    </ul>
1451    <div class="note memo">
1452    <p>This character class contains all characters allowed as the first character
1453    of a string matching to the production rule
1454    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Name"><code>Name</code></a>
1455    of <abbr>XML</abbr> 1.0
1456    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1457    </div>
1458    
1459    <p>The character class <dfn id=class-NameChar10><code>NameChar10</code></dfn>
1460    contains the following characters:</p>
1461    <ul>
1462    <li>The characters in the character class
1463    <a href="#class-NameStartChar10">NameStartChar10</a>.</li>
1464    <li class=ed></li>
1465    </ul>
1466    <div class="note memo">
1467    <p>This character class contains all characters allowed as the second
1468    character of a string matching to the production rule
1469    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Name"><code>Name</code></a>
1470    of <abbr>XML</abbr> 1.0
1471    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1472    </div>
1473    
1474    <p>The character class <dfn id=class-PubidChar><code>PubidChar</code></dfn>
1475    contains the following characters:</p>
1476    <ul>
1477    <li><code class=char>U+0009</code> <code class=charname>CHARACTER
1478    TABULATION</code></li>
1479    <li><code class=char>U+000A</code> <code class=charname>LINE FEED</code></li>
1480    <li><code class=char>U+000D</code> <code class=charname>CARRIAGE
1481    RETURN</code></li>
1482    <li><code class=char>U+0020</code> <code class=charname>SPACE</code></li>
1483    <li><code class=char>U+0021</code> <code class=charname>EXCLAMATION MARK</code>
1484    (<code class=char>!</code>)</li>
1485    <li><code class=char>U+0023</code> <code class=charname>DOLLAR SIGN</code>
1486    (<code class=char>$</code>)</li>
1487    <li><code class=char>U+0024</code> <code class=charname>NUMBER SIGN</code>
1488    (<code class=char>#</code>)</li>
1489    <li><code class=char>U+0025</code> <code class=charname>PERCENT SIGN</code>
1490    (<code class=char>%</code>)</li>
1491    <li><code class=char>U+0027</code> <code class=charname>APOSTROPHE</code>
1492    (<code class=char>'</code>)</li>
1493    <li><code class=char>U+0028</code> <code class=charname>LEFT PARENTHESIS</code>
1494    (<code class=char>(</code>)</li>
1495    <li><code class=char>U+0029</code> <code class=charname>RIGHT
1496    PARENTHESIS</code> (<code class=char>)</code>)</li>
1497    <li><code class=char>U+002A</code> <code class=charname>ASTERISK</code>
1498    (<code class=char>*</code>)</li>
1499    <li><code class=char>U+002B</code> <code class=charname>PLUS SIGN</code>
1500    (<code class=char>+</code>)</li>
1501    <li><code class=char>U+002C</code> <code class=charname>COMMA</code>
1502    (<code class=char>,</code>)</li>
1503    <li><code class=char>U+002D</code> <code class=charname>HYPHEN-MINUS</code>
1504    (<code class=char>-</code>)</li>
1505    <li><code class=char>U+002E</code> <code class=charname>FULL STOP</code>
1506    (<code class=char>.</code>)</li>
1507    <li><code class=char>U+002F</code> <code class=charname>SOLIDUS</code>
1508    (<code class=char>/</code>)</li>
1509    <li><code class=char>U+0030</code> <code class=charname>DIGIT ZERO</code>
1510    (<code class=char>0</code>) .. <code class=char>U+0039</code>
1511    <code class=charname>DIGIT NINE</code> (<code class=char>9</code>)</li>
1512    <li><code class=char>U+003A</code> <code class=charname>COLON</code>
1513    (<code class=char>:</code>)</li>
1514    <li><code class=char>U+003B</code> <code class=charname>SEMICOLON</code>
1515    (<code class=char>;</code>)</li>
1516    <li><code class=char>U+003D</code> <code class=charname>EQUAL SIGN</code>
1517    (<code class=char>=</code>)</li>
1518    <li><code class=char>U+003F</code> <code class=charname>QUESTION MARK</code>
1519    (<code class=char>?</code>)</li>
1520    <li><code class=char>U+0040</code> <code class=charname>COMMERCIAL AT</code>
1521    (<code class=char>@</code>)</li>
1522    <li><code class=char>U+0041</code> <code class=charname>LATIN CAPITAL LETTER
1523    A</code> (<code class=char>A</code>) .. <code class=char>U+005A</code>
1524    <code class=charname>LATIN CAPITAL LETTER Z</code>
1525    (<code class=char>Z</code>)</li>
1526    <li><code class=char>U+005F</code> <code class=charname>LOW LINE</code>
1527    (<code class=char>_</code>)</li>
1528    <li><code class=char>U+0061</code> <code class=charname>LATIN CAPITAL LETTER
1529    A</code> (<code class=char>A</code>) .. <code class=char>U+007A</code>
1530    <code class=charname>LATIN CAPITAL LETTER Z</code>
1531    (<code class=char>Z</code>)</li>
1532    </ul>
1533    <div class="note memo">
1534    <p>This character class contains all characters allowed in the production rule
1535    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-PubidChar"><code>PubidChar</code></a>
1536    of <abbr>XML</abbr> 1.0
1537    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1538  </div>  </div>
1539    
1540  </div>  </div>

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.29

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24