/[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.17 by wakaba, Sat Dec 1 12:19:41 2007 UTC revision 1.28 by wakaba, Sat Mar 29 11:46:02 2008 UTC
# Line 18  Line 18 
18    
19  <div class="header">  <div class="header">
20  <h1>manakai's <abbr>XML</abbr> Conformance Checking</h1>  <h1>manakai's <abbr>XML</abbr> Conformance Checking</h1>
21  <h2>Working Draft <time datetime=2007-12-01>1 December 2007</time></h2>  <h2>Working Draft <time datetime=2008-03-29>29 March 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 92  normative version.</p> Line 92  normative version.</p>
92    
93  <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>
94    
95  <div class="issue ed">...</div>  <div class="issue ed">...
96    
97    <p>Much of invalid (well-formed or not) XML document parsing and XML document
98    / XML DOM conformance is left undefined so that this document provides a
99    guideline for conformance checkers.
100    </div>
101    
102    
103  </div>  </div>
# Line 118  else in this specification is normative. Line 123  else in this specification is normative.
123  <p><span class=ed>Algorithm is normative but non-normative</span>.  <p><span class=ed>Algorithm is normative but non-normative</span>.
124  In addition, the order in which <a href="#errors">errors</a> are  In addition, the order in which <a href="#errors">errors</a> are
125  raised is undefined.</p>  raised is undefined.</p>
126    
127    <p>This document sometimes cites parts of <abbr>XML</abbr> 1.0 specification
128    by hyperlinks.  When the document being processed is an <abbr>XML</abbr> 1.1
129    document, however, corresponding parts of the <abbr>XML</abbr> 1.1
130    specification should be consulted instead.</p>
131  </div>  </div>
132    
133    
# Line 205  can be easily serialized into a valid XM Line 215  can be easily serialized into a valid XM
215    violate to any well$B!>(Bformedness constraint in XML    violate to any well$B!>(Bformedness constraint in XML
216    specification <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>,    specification <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>,
217    <a href="#ref-XML11">XML11</a>]</cite>.</p></dd>    <a href="#ref-XML11">XML11</a>]</cite>.</p></dd>
218    <dt><dfn id=misc-info><code>misc-info</code></dfn>
219      <dd><p>A <code>misc-info</code> is raised when some status information
220      on parsing or checking process that are considered useful for debugging
221      and so on is available.  It by no means implies the non-conformance of
222      the document.
223  </dl>  </dl>
224    
225  <div class=ed><p>@@ TODO: #dt-atuseroption at user option  <div class=ed><p>@@ TODO: #dt-atuseroption at user option
226  (MAY or MUST), #dt-compat for compatibility,  (MAY or MUST), #dt-compat for compatibility,
227  #dt-interop for interoperability</p></div>  #dt-interop for interoperability</p>
228    
229    <p>TODO: XML 1.1, XML Namespace 1.0/1.1, xml:base, xml:id
230    
231    <p>TODO: XML "error"/"fatal error" is not always non-conforming (only
232    when MUST or SHOULD).
233    </div>
234    
235    <p>The parser <em class=rfc2119>MAY</em> continue the parsing of the document
236    even after a fatal error (as defined by the relavant specification) is
237    encountered.  How the parsing ought to be continued is not defined by this
238    specification.
239    
240      <div class="note memo informative">
241      <p>It is expected that the XML5 specification <span class=ed>@@ ref</span>
242      will define how the parser has to convert any string into DOM tree
243      completely.
244      </div>
245    
246  </div>  </div>
247    
248  <div class=section id=parsing-xml>  <div class=section id=parsing-xml>
249  <h2>Parsing <abbr>XML</abbr> Document</h2>  <h2>Parsing <abbr>XML</abbr> Document</h2>
250    
251  <ul>  <p>When an <abbr>XML</abbr> document is parsed, the following clauses
252  <li>If the <abbr>XML</abbr> document does not begin with an  are applied:</p>
253  <abbr>XML</abbr> declaration, then raise an  <dl class=switch>
254  <a href="#xml-misc-recommentation" id=xmr-xml-decl><code>xml-misc-recommendation</code></a>.</li>  <dt>For each external entity (including the document entity and the external
255  <li>If the replacement text of an entity declaration is  subset entity, if any)
256  <code>&lt;</code>, then raise an    <dd>If there is a byte sequence that are not legal in the encoding in use,
257  <a href="#xml-misc-warning" id=xmw-entity-value-lt><code>xml-misc-warning</code></a>.<!--    then the parser <em class=rfc2119>MUST</em> raise an
258      <a href="#xml-misc-error" id=xme-illegal-bytes><code>xml-misc-error</code></a>.
259      <!--
260         <q>It is a fatal error when an XML processor encounters an entity with an
261         encoding that it is unable to process. It is a fatal error if an XML
262         entity is determined (via default, encoding declaration, or higher-level
263         protocol) to be in a certain encoding but contains byte sequences that are
264         not legal in that encoding.</q>
265      -->
266    
267      <dd>If it is the document entity or a general entity, then:
268        <ul>
269        <li>If the input byte sequence for the entity begins with the
270        <abbr title="BYTE ORDER MARK" class=charname>BOM</abbr>, then the parser
271        <em class=rfc2119>MUST</em> set the <span class=ed>BOM flag</span> of
272        the node corresponding to the entity (the <code>Document</code> node
273        for the document entity or an <code>Entity</code> node for a general
274        entity) to <code>true</code>.
275        <!--
276          <q>Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY
277          begin with the Byte Order Mark</q>
278        -->
279        <span class=ed>@@ flag must be checked later</span>
280        <!-- <?xml encoding=""?> must be reflected to xmlEncoding; this should be
281        enforced by DOM Core spec. -->
282        </ul>
283      <dd>If it is a parameter entity or the external subset entity, then:
284        <ul>
285        <li>If the character encoding of the entity is <code>UTF-16</code> but
286        the input byte stream for the entity does not begin with the
287        <abbr title="BYTE ORDER MARK" class=charname>BOM</abbr>, then the parser
288        <em class=rfc2119>MUST</em> raise an
289        <a href="#xml-misc-error" id=xme-pe-bom><code>xml-misc-error</code></a>.
290        <li class=ed>@@ encoding="" preferred name?
291    <!--
292    "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."
293    
294    In addition, this should be checked later for Document and Entity nodes.
295    -->
296        </ul>
297    
298    <dt>For the document
299      <dd>If the <abbr>XML</abbr> document does not begin with an
300      <abbr>XML</abbr> declaration, then the parser <em class=rfc2119>MUST</em>
301      raise an
302      <a href="#xml-misc-recommentation" id=xmr-xml-decl><code>xml-misc-recommendation</code></a>.
303      <dd>If the document does not contain the document type declaration, or
304      if it does but the document type definition does not contain entity
305      declaration for any of <code>amp</code>, <code>lt</code>, <code>gt</code>,
306      <code>apos</code>, or <code>quot</code>, then the parser
307      <em class=rfc2119>MUST</em> raise
308      <a href="#xml-misc-recommentation" id=xmr-predefined-decl><code>xml-misc-recommendation</code></a>(s).
309      <!--
310        <q>For interoperability, valid documents SHOULD declare the entities
311        amp, lt, gt, apos, quot, in the form specified in 4.6 Predefined
312        Entities.</q>
313      -->
314    <dt>For the document type declaration
315      <dd class=ed>@@ read external entity
316      <dd>The <code>entities</code> attribute of the <code>DocumentType</code>
317      node <em class=rfc2119>MUST</em> contain a <code>NamedNodeMap</code> object
318      whose first five items are as follows:
319        <ol start=0>
320        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
321        is <code>amp</code>.  It contains a <code>Text</code> node whose
322        <code>data</code> attribute is set to <code>&amp;</code>.
323        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
324        is <code>lt</code>.  It contains a <code>Text</code> node whose
325        <code>data</code> attribute is set to <code>&lt;</code>.
326        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
327        is <code>gt</code>.  It contains a <code>Text</code> node whose
328        <code>data</code> attribute is set to <code>></code>.
329        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
330        is <code>quot</code>.  It contains a <code>Text</code> node whose
331        <code>data</code> attribute is set to <code>"</code>.
332        <li>An <code>Entity</code> node whose <code>nodeName</code> attribute
333        is <code>apos</code>.  It contains a <code>Text</code> node whose
334        <code>data</code> attribute is set to <code>'</code>.
335        </ol>
336    <dt>For each internal general entity declaration being processed by the parser
337      <dd>If the
338      <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-EntityValue"><code>EntityValue</code></a>
339      part of the general entity declaration contains a bare <code>U+003C</code>
340      <code>LESS-THAN SIGN</code> (<code>&lt;</code>) character, then the parser
341      <em class=rfc2119>MUST</em> raise an
342      <a href="#xml-misc-warning" id=xmw-entity-value-lt><code>xml-misc-warning</code></a>.<!--
343  "strongly advised to avoid" in a Note in Section 2.3 of [XML10], [XML11].  "strongly advised to avoid" in a Note in Section 2.3 of [XML10], [XML11].
344  --></li>  -->
345  <li>If there is an element type declaration whose <code>Name</code>  <dt>For each element type declaration being processed by the parser
346  value is already declared, then raise an    <dd>If there is another processed element type declaration whose
347  <a href="#xml-validity-error" id=vc-edunique><code>xml-validity-error</code></a>.</li>    <code>Name</code> is equal to the <code>Name</code> of the element type
348  <li>If attribute definition whose <code>Name</code> is    declaration, then the parser <em class=rfc2119>MUST</em> raise an
349  <code>xml:space</code> has <span class=ed>declared type different from    <a href="#xml-validity-error" id=vc-edunique><code>xml-validity-error</code></a>.
350  (default|preserve), (default), or (preserve)</span>, then raise an  <dt>For each attribute definition list declaration being processed by the
351  <a href="#xml-misc-error" id=xme-ad-xml-space><code>xml-misc-error</code></a>.  parser
352  <span class=ed>@@ duplication with    <dd>If there is another processed attribute defintion list declaration whose
353  <a href="#xml-at-xml-space">#xml-at-xml-space</a>.<!--    <code>Name</code> is equal to the <code>Name</code> of the attribute
354  <!ATTLIST e xml:space CDATA #IMPLIED xml:space CDATA #IMPLIED> --></span></li>    definition list declaration, then the parser <em class=rfc2119>MUST</em>
355  <li>If an empty-element tag is used for an element which is <em>not</em>    raise an
356  declared <code>EMPTY</code>, then raise an    <a href="#xml-misc-warning" id=xme-attlist-unique><code>xml-misc-warning</code></a>.
357  <a href="#xml-misc-recommentation" id=xmr-emptyelemtag-not-empty><code>xml-misc-recommendation</code></a>.</li>    <dd>For each attribute definition in the attribute definition list
358  <li>If an empty-element tag is <em>not</em> used for an element which is    declaration, if there is another processed attribute definition whose
359  declared <code>EMPTY</code>, then raise an    <code>Name</code> is equal to the <code>Name</code> of the attribute
360  <a href="#xml-misc-recommentation" id=xmr-empty-not-emptyelemtag><code>xml-misc-recommendation</code></a>.</li>    definition (whether or not in the same attribute definition list
361      declaration), then the parser <em class=rfc2119>MUST</em> raise an
362      <a href="#xml-misc-warning" id=xme-attrdef-unique><code>xml-misc-warning</code></a>.
363      <!--
364        <q>For interoperability, an XML processor <em class=rfc2119>MAY</em> at
365        user option issue a warning when more than one attribute-list declaration
366        is provided for a given element type, or more than one attribute definition
367        is provided for a given attribute, but this is not an error.</q>
368      -->
369  <!--  <!--
370      NOTE: <!ATTLIST a xml:space (default) #IMPLIED xml:space CDATA #IMPLIED>
371      will not be warned.
372    -->
373    
374    <dt>For each entity declaration being processed by the parser
375      <dd>Handle as follows:
376        <ol>
377        <li><p>If the entity declaration declares a general entity, the following
378        is applied:
379          <dl>
380          <dt>If the <code>Name</code> is <code>lt</code> or <code>amp</code>
381            <dd><p>If the entity declaration does not declare an internal entity,
382            or if the replacement text of the entity is not the escaped form of
383            <code>&lt;</code> (if <code>lt</code>) or <code>&amp;</code> (if
384            <code>amp</code>), then the parser <em class=rfc2119>MUST</em> raise an
385            <a href="#xml-misc-error" id=xme-double-escape><code>xml-misc-error</code></a>.
386    
387              <div class="note memo informative">
388              <p>In other word, the character in the <code>EntityValue</code>
389              has to be double-escaped.
390              </div>
391          <dt>If the <code>Name</code> is <code>gt</code>, <code>quot</code>, or
392          <code>apos</code>
393            <dd><p>If the entity declaration does not declare an internal entity,
394            or if the replacement text of the entity is not equal to or not the
395            escaped form of <code>></code> (if <code>gt</code>), <code>"</code> (if
396            <code>quot</code>), or <code>'</code> (if <code>apos</code>), then the
397            parser <em class=rfc2119>MUST</em> raise an
398            <a href="#xml-misc-error" id=xme-single-escape><code>xml-misc-error</code></a>.
399    
400              <div class="note memo informative">
401              <p>In other word, the character in the <code>EntityValue</code>
402              has to be single- or double-escaped.
403              </div>
404          </dl>
405          <!--
406            <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>
407          -->
408    
409        <li><p>If the entity declaration has to be ignored since there has already
410        been declared an entity with the same <code>Name</code> as the declaration,
411        then the parser <em class=rfc2119>MUST</em> raise a
412        <a href="#misc-info" id=mi-ent-unique><code>misc-info</code></a>
413        and abort these steps.
414    
415        <div class="informative note memo">
416        <p>Five predefined entities, i.e. <code>amp</code>, <code>lt</code>,
417        <code>gt</code>, <code>quot</code>, and <code>apos</code>, are always
418        declared implicitly and therefore any declaration for such an entity
419        always raises an
420        <a href="#misc-info" id=mi-ent-unique><code>misc-info</code></a>.
421        </div>  
422    
423        <li><p>If the entity declaration declares a parameter entity and the
424        <code>Name</code> of the entity begins with the string <code>xml</code>
425        (in any combination of upper- and lowercase letters), then the parser
426        <em class=rfc2119>MUST</em> raise an
427        <a href="#xml-misc-warning" id=xmw-reserved-pe-name><code>xml-misc-warning</code></a>.
428    
429        <li><p>If the entity declaration contains the <code>EntityValue</code>,
430        then for each occurence of any references to unparsed entities in the
431        <code>EntityValue</code>, the parser <em class=rfc2119>MUST</em> raise an
432        <a href="#xml-misc-error" id=xme-unparsed-in-ev><code>xml-misc-error</code></a>.
433        <!--
434          <q>It is an error for a reference to an unparsed entity to appear in the
435          EntityValue in an entity declaration.</q>
436        -->
437        <li><p>If the entity declaration declares a general entity, then an
438        <code>Entity</code> node <em class=rfc2119>MUST</em> be created and
439        appended to the <code>NamedNodeMap</code> object in the
440        <code>entities</code> attribute of the <code>DocumentType</code> node.
441        
442        <p class=ed>Read the external entity
443    
444        <p>If the replacement text of the entity is read, then parse the
445        replacement text as if it were referenced from the content of an
446        element (with no namespace bindings).  If no <span class=ed>@@ parse error</span>
447        is raised by the parsing process, then the nodes generated by the
448        parsing <em class=rfc2119>MUST</em> be appended to the <code>Entity</code>
449        node.  The parse error <em class=rfc2119>MUST NOT</em> be propagated to
450        the entire parsing process.  Other kinds of errors
451        <em class=rfc2119>MUST</em> be propagated.  The first parse error
452        <em class=rfc2119>MUST</em> abort the internal parsing process.
453        <span class=ed>@@ better wording</span>
454    
455        <p class=ed>@@ prop
456        
457        <p>Then, the <code>Entity</code> node and its descendant
458        <em class=rfc2119>MUST</em> be marked as read-only.
459      </ol>
460    
461    <dt>For each notation declaration being processed by the parser
462      <dd>If there is another processed notation declaration whose
463      <code>Name</code> is equal to the <code>Name</code> of the notation
464      declaration, then the parser <em class=rfc2119>MUST</em> raise an
465      <a href="#xml-validity-error" id=vc-uniquenotationname><code>xml-validity-error</code></a>.
466      <!-- <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#UniqueNotationName">Validity constraint: Unique Notation Name</a> -->
467    
468    <dt>For each empty-element tag
469      <dd>If the <code>Name</code> of the tag is not declared by a processed
470      element type declaration as <code>EMPTY</code> content, then the parser
471      <em class=rfc2119>MUST</em> raise an
472      <a href="#xml-misc-recommentation" id=xmr-emptyelemtag-not-empty><code>xml-misc-recommendation</code></a>.
473    <dt>For each start-tag
474      <dd>If the <code>Name</code> of the tag is declared by a processed element
475      type declaration as <code>EMPTY</code> content, then the parser
476      <em class=rfc2119>MUST</em> raise an
477      <a href="#xml-misc-recommentation" id=xmr-empty-not-emptyelemtag><code>xml-misc-recommendation</code></a>.
478    <dt>For each attribute
479      <dd><p>The parser <em class=rfc2119>MUST</em> set the normalized value of
480      the attribute to the <code>value</code> attribute of the <code>Attr</code>
481      node created for the attribute.
482    
483        <div class="note memo informative">
484        <p>That is, any entity reference has to be expanded.  Unexpanded entity
485        references in attribute values are discarded.
486        </div>
487    <dt>For each <code>xml:space</code> attribute
488      <dd>The parser <em class=rfc2119>MUST</em> set the normalized value of
489      the <code>xml:space</code> attribute to the <code>value</code> attribute
490      of the <code>Attr</code> node created for the attribute even if the
491      normalized value is different from <code>default</code> or
492      <code>preserve</code>.
493      <!-- In XML 1.0/1.1 specification, the attribute specification MAY be
494      ignored. -->
495    
496    <dt>For each parameter entity reference
497      <dd><p>Process as follows:
498        <ol>
499        <li>If the declaration for the entity is <em>not</em> processed,
500        then:
501          <dl class=switch>
502          <dt>If the document contains no external entity or if the document
503          contains the <code>standalone</code> pseudo-attribute set to
504          <code>yes</code><!-- or the document contains no DTD -->
505            <dd>The parser <em class=rfc2119>MUST</em> raise an
506            <a href="#xml-well-formedness-error" id=wf-entdeclared-pe><code>xml-well-formedness-error</code></a>.
507          <dt>Otherwise
508            <dd>The parser <em class=rfc2119>MUST</em> raise an
509            <a href="#xml-validity-error" id=vc-entdeclared-pe><code>xml-validity-error</code></a>.
510          </dl>
511        <li>If the declaration for the entity <em>is</em> processed but the
512        referenced entity cannot be retrieved, then the parser
513        <em class=rfc2119>MUST</em> raise an
514        <span class=ed>@@ ??-error</span>.
515        </ol>
516    
517  #vc-PEinMarkupDecl Validity constraint: Proper Declaration/PE Nesting      <p>In any of two cases above, process as follows:
518  #wfc-PEinInternalSubset Well-formedness constraint: PEs in Internal Subset      <ul>
519  #ExtSubset Well-formedness constraint: External Subset      <li>If the parameter entity reference is contained in a declaration, then
520  #PE-between-Decls Well-formedness constraint: PE Between Declarations      the declaration <em class=rfc2119>MUST</em> be ignored <em>except</em> that
521  #GIMatch Well-formedness constraint: Element Type Match      any error before the parameter entity <em class=rfc2119>MUST</em> be
522  #uniqattspec Well-formedness constraint: Unique Att Spec      raised as usual.
523  #NoExternalRefs Well-formedness constraint: No External Entity References      <li>If the parameter entity reference is contained in the status portion of
524  #CleanAttrVals Well-formedness constraint: No < in Attribute Values      a conditional section, then the conditional section
525  #vc-PEinGroup Validity constraint: Proper Group/PE Nesting      <em class=rfc2119>MUST</em> be processed as if it were an
526  "For interoperability, if a parameter-entity reference appears in a choice, seq, or Mixed construct, its replacement text SHOULD contain at least one non-blank character, and neither the first nor last non-blank character of the replacement text SHOULD be a connector (| or ,)."      <code>IGNORE</code>d section.
527  "For interoperability, an XML processor MAY at user option issue a warning when more than one attribute-list declaration is provided for a given element type, or more than one attribute definition is provided for a given attribute, but this is not an error."      <li>The parser <em class=rfc2119>MUST NOT</em> process any entity or
528  #condsec-nesting Validity constraint: Proper Conditional Section/PE Nesting      attribute-list declaration after the parameter entity reference in the DTD
529  #wf-Legalchar Well-formedness constraint: Legal Character      <em>except</em> when the <code>standalone</code> pseudo-attribute of the
530  #textent Well-formedness constraint: Parsed Entity      XML declaration (if any) is set to <code>yes</code>.
531  #norecursion Well-formedness constraint: No Recursion      <!-- This requirement is enforced for internal DTD subset case in
532  #indtd Well-formedness constraint: In DTD      XML 1.0/1.1 specification (section 5.1) but not for any other cases. -->
533  "External parsed entities SHOULD each begin with a text declaration."      <!-- According to this definition, element type declarations, notation
534  "It is an error for a reference to an unparsed entity to appear in the EntityValue in an entity declaration."      declarations, and PIs ARE processed. -->
535  #UniqueNotationName Validity constraint: Unique Notation Name      <li>If the parameter entity reference is the first reference to an entity
536        that is not read, then the parser <em class=rfc2119>MUST</em> raise an
537  @@ Need detailed review, but maybe should be in parsing phase      <a href="#entity-error" id=ee-unread-pe><code>entity-error</code></a>.
538        <li>The <code>allDeclarationsProcessed</code> <span class=ed>@@ ref</span>
539  #vc-check-rmd Validity constraint: Standalone Document Declaration      attribute of the <code>Document</code> node <em class=rfc2119>MUST</em> be
540        set to <code>false</code>.
541  @@ Need dtailed review      </ul>
542    <dt>For each general entity reference in an attribute value or in the content
543  #wf-entdeclared Well-formedness constraint: Entity Declared  of an element
544  #vc-entdeclared Validity constraint: Entity Declared    <dd><p>Process as follows:
545  "For interoperability, valid documents SHOULD declare the entities amp, lt, gt, apos, quot, in the form specified in 4.6 Predefined Entities."      <ol>
546  "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)."      <li>If the <code>Name</code> of the entity reference is either
547        <code>amp</code>, <code>lt</code>, <code>gt</code>, <code>quot</code>,
548        or <code>apos</code>, then abort these steps.
549        <li>If the declaration for the entity is <em>not</em> processed,
550        then:
551          <dl class=switch>
552          <dt>If the document contains no external entity or if the document
553          contains the <code>standalone</code> pseudo-attribute set to
554          <code>yes</code><!-- or the document contains no DTD -->
555            <dd>The parser <em class=rfc2119>MUST</em> raise an
556            <a href="#xml-well-formedness-error" id=wf-entdeclared-ge><code>xml-well-formedness-error</code></a>.
557          <dt>Otherwise
558            <dd>The parser <em class=rfc2119>MUST</em> raise an
559            <a href="#xml-validity-error" id=vc-entdeclared-ge><code>xml-validity-error</code></a>.
560          </dl>
561        <li>If the declaration for the entity <em>is</em> processed but the
562        referenced entity cannot be retrieved, then the parser
563        <em class=rfc2119>MUST</em> raise an
564        <span class=ed>@@ ??-error</span>.
565        </ol>
566    
567  @@ flaged and then reported in DOM check phase      <p>In any of two cases above, process as follows:
568        <ul>
569        <li>If the general entity reference is the first reference to an entity
570        that is not read, then the parser <em class=rfc2119>MUST</em> raise an
571        <a href="#entity-error" id=ee-unread-ge><code>entity-error</code></a>.
572        <span class=ed>@@ entity declared WFC?</span>
573        <li class=ed>An unexpended entity reference node <em class=rfc2119>MUST</em> be inserted to the current node.
574        </ul>
575    
576    <dt>For each comment <em>outside</em> of document type declaration
577      <dd>A <code>Comment</code> node <em class=rfc2119>MUST</em> be created
578      and inserted appropriately.
579      <!-- In XML 1.0/1.1 spec, this is optional. -->
580    </dl>
581    
582  "Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY begin with the Byte Order Mark"  <p>The parser <em class=rfc2119>MUST</em> try to read any entity referenced
583  "In the absence of external character encoding information (such as MIME headers), parsed entities which are stored in an encoding other than UTF-8 or UTF-16 MUST begin with a text declaration"  by general or parameter entity references, the external subset entity, if any,
584  "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."  and any general entity declared in the document type definition.
585    
586    <p>In addition, the parser has to check whether the
587    following constraints are met.
588    
589    <p><strong>Well-formedness constraints</strong>.  For each violation to
590    one of constraints below, an
591    <a href="#xml-well-formedness-error"><code>xml-well-formedness-error</code></a>
592    <em class=rfc2119>MUST</em> be raised.  The list of well-formedness
593    constraints is below:
594    <ul>
595    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#wfc-PEinInternalSubset">Well-formedness constraint: PEs in Internal Subset</a>
596    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#GIMatch">Well-formedness constraint: Element Type Match</a>
597    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#uniqattspec">Well-formedness constraint: Unique Att Spec</a>
598    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NoExternalRefs">Well-formedness constraint: No External Entity References</a>
599    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#CleanAttrVals">Well-formedness constraint: No &lt; in Attribute Values</a>
600    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#wf-Legalchar">Well-formedness constraint: Legal Character</a>
601    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#textent">Well-formedness constraint: Parsed Entity</a>
602    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#norecursion">Well-formedness constraint: No Recursion</a>
603    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#indtd">Well-formedness constraint: In DTD</a>
604    </ul>
605    
606  @@ in parsing phase  <p><strong>Validity constraints</strong>.  For each violation to
607    one of constraints below, an
608    <a href="#xml-validity-error"><code>xml-validity-error</code></a>.
609    <em class=rfc2119>MUST</em> be raised.  The list of validity
610    constraints is below:
611    <ul>
612    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-PEinMarkupDecl">Validity constraint: Proper Declaration/PE Nesting</a>
613    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-PEinGroup">Validity constraint: Proper Group/PE Nesting</a>
614    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#condsec-nesting">Validity constraint: Proper Conditional Section/PE Nesting</a>
615    <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#vc-check-rmd">Validity constraint: Standalone Document Declaration</a>
616    </ul>
617    
618  "It is a fatal error when an XML processor encounters an entity with an encoding that it is unable to process. It is a fatal error if an XML entity is determined (via default, encoding declaration, or higher-level protocol) to be in a certain encoding but contains byte sequences that are not legal in that encoding."  <p><strong>Other creteria</strong>.  For each violation to
619    one of constraints below, an
620    <a href="#xml-misc-recommendation"><code>xml-misc-recommendation</code></a>
621    <em class=rfc2119>MUST</em> be raised.  The list of constraints is below:
622    <ul>
623    <li><q>For interoperability, if a parameter-entity reference appears in a
624    <code>choice</code>, <code>seq</code>, or <code>Mixed</code> construct, its
625    replacement text <em class=rfc2119>SHOULD</em> contain at least one non-blank
626    character, and neither the first nor last non-blank character of the
627    replacement text <em class=rfc2119>SHOULD</em> be a connector (<code>|</code>
628    or <code>,</code>).</q>
629    <li><q>External parsed entities <em class=rfc2119>SHOULD</em> each begin with a
630    text declaration.</q>
631    </ul>
632    
633    <p>The parser <em class=rfc2119>MUST</em> act as if it is a
634    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#dt-validating">validating
635    XML processor</a> for the informing of white space appearing in
636    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#dt-elemcontent">element
637    content</a> (See
638    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#sec-white-space">Section
639    2.10</a> of the XML specification).
640    
641      <div class="note memo informative">
642      <p>In other word, the <code>isElementContentWhitespace</code> attribute
643      of <code>Text</code> nodes has to be set appropriately.  Note that the
644      value of the attribute will be set to <code>false</code> for any
645      <code>Text</code> node in the content of an element whose declaration
646      is not processed.
647      </div>
648    
649    <p>The parser <em class=rfc2119>MUST</em> raise an
650    <a href="#xml-well-formedness-error" id=wfe-syntax><code>xml-well-formedness-error</code></a>
651    for any failure for matching to a production rule in the XML specification.
652    <!--
653      <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#ExtSubset">Well-formedness constraint: External Subset</a>
654      <li><a href="http://www.w3.org/TR/2006/REC-xml-20060816/#PE-between-Decls">Well-formedness constraint: PE Between Declarations</a>
655    -->
656    
657    <!--
658      Inpossible to test:
659        "In the absence of external character encoding information (such as MIME
660        headers), parsed entities which are stored in an encoding other than UTF-8
661        or UTF-16 MUST begin with a text declaration"
662  -->  -->
 </ul>  
663  </div>  </div>
664    
665  <div class="section" id=checking-dom>  <div class="section" id=checking-dom>
# Line 314  is that of the <code>Document</code> nod Line 688  is that of the <code>Document</code> nod
688    
689    
690  <div class=section id=checking-components>  <div class=section id=checking-components>
691  <h3>Checking Components</h3>  <h3>Conformance Checking Algorithms for Components</h3>
692    
693  <p>The algorithm  <p>To
694  <dfn id=algorithm-to-validate-an-xml-character-data title-"to validate an XML character data">to  <dfn id=algorithm-to-validate-an-xml-character-data title="validate an XML string">to
695  validate an <abbr>XML</abbr> character data  validate an <abbr>XML</abbr> string (<dfn id=var-s><var>s</var></dfn>)</dfn>,
696  (<dfn id=var-s><var>s</var></dfn>)</dfn> is defined as following:</p>  the following algorithm <em class=rfc2119>MUST</em> be used:</p>
697  <ol>  <ol>
698  <li>If <var>s</var> contains a character that is <em>not</em> in  <li>If <var>s</var> contains a character that is <em>not</em> in
699  the character class <a href="#class-Char10"><code>Char10</code></a>,  the character class <a href="#class-Char10"><code>Char10</code></a>,
# Line 344  U+000D will be serialized as &#x000D; (s Line 718  U+000D will be serialized as &#x000D; (s
718  will be raised).</span></li>  will be raised).</span></li>
719  </ol>  </ol>
720    
721  <p>The algorithm  <p>To
722  <dfn id=algorithm-to-validate-a-name title="to validate a Name">to validate a  <dfn id=algorithm-to-validate-a-name title="validate a Name">validate a
723  <code>Name</code> (<dfn id=var-name-s><var>s</var></dfn>)</dfn> is defined  <code>Name</code> (<dfn id=var-name-s><var>s</var></dfn>)</dfn>, the following
724  as following:</p>  algorithm <em class=rfc2119>MUST</em> be used:</p>
725  <ol>  <ol>
726    <li>If <var>s</var> is an empty string, then raise an
727    <a href="#xml-well-formedness-error" id=wfe-name-empty><code>xml-well-formedness-error</code></a>.
728    Abort these steps.</li>
729    <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate
730    <var>s</var> as an <abbr>XML</abbr> string</a>.</li>
731    <li>If the first character in <var>s</var> is a character that is
732    <em>not</em> in the character class
733    <a href="#class-NameStartChar10"><code>NameStartChar10</code></a>, then raise
734    an
735    <a href="#xml-well-formedness-error" id=wfe-name-startchar><code>xml-well-formedness-error</code></a>.</li>
736    <li>If a character other than the first character in <var>s</var> is a
737    character that is <em>not</em> in the character class
738    <a href="#class-NameChar10"><code>NameChar10</code></a>, then raise an
739    <a href="#xml-well-formedness-error" id=wfe-name-char><code>xml-well-formedness-error</code></a>.</li>
740  <li>If <var>s</var> begins with the string <code>xml</code> (in any  <li>If <var>s</var> begins with the string <code>xml</code> (in any
741  case combination), then raise an  case combination), then raise an
742  <a href="#xml-misc-warning" id=xmw-reserved-name><code>xml-misc-warning</code></a>.  <a href="#xml-misc-warning" id=xmw-reserved-name><code>xml-misc-warning</code></a>.
743  <span class=ed>@@ except for attribute names <code>xml:lang</code>,  <span class=ed>@@ except for attribute names <code>xml:lang</code>,
744  <code>xml:space</code>, <code>xml:base</code>, <code>xml:id</code>,  <code>xml:space</code><!--, <code>xml:base</code>, <code>xml:id</code>,
745  <code>xmlns</code>, <code>xmlns:<var>*</var></code>,  <code>xmlns</code>, <code>xmlns:<var>*</var></code>,
746  pi name <code>xml-stylesheet</code>.</span><!--  pi name <code>xml-stylesheet</code>-->.</span><!--
747  "names beginning with a match to (('X'|'x')('M'|'m')('L'|'l')) are reserved for standardization in this or future versions of this specification.":  "names beginning with a match to (('X'|'x')('M'|'m')('L'|'l')) are reserved for standardization in this or future versions of this specification.":
748  xml:base and xml:id specifications violate to this sentense!  xmlns, xml-stylesheet, xml:base and xml:id specifications violate to this sentense!
749  --></li>  --></li>
750  <!-- COLON in Name is a lowercase "should not" in a Note of [XML10],  <!-- COLON in Name is a lowercase "should not" in a Note of [XML10],
751  [XML11]. -->  [XML11]. -->
752  <li class=ed>@@</li>  <li class=ed>@@ XML 1.1 support</li>
753  </ol>  </ol>
754    
755  <p>The algorithm  <p>To
756  <dfn id=algorithm-to-validate-a-ncname title="to validate an NCName">to  <dfn id=algorithm-to-validate-an-ncname title="validate an NCName">validate
757  validate an <code>NCName</code> (<dfn id=var-name><var>name</var></dfn>)</dfn>  an <code>NCName</code> (<dfn id=var-ncname-s><var>s</var></dfn>)</dfn>, the
758  is defined as following:</p>  following algorithm <em class=rfc2119>MUST</em> be used:</p>
759  <ol>  <ol>
760    <li><a href="#algorithm-to-validate-a-name" title="validate a Name">Validate
761    <var>s</var> as a <code>Name</code></a>.</li>
762  <li class=ed>@@</li>  <li class=ed>@@</li>
763  </ol>  </ol>
764    
765  <p>To <dfn id=algorithm-to-validate-a-public-identifier title="validate a public identifier">validate  <p>To
766    <dfn id=algorithm-to-validate-a-public-identifier title="validate a public identifier">validate
767  a public identifier (<dfn id=var-pid><var>pid</var></dfn>)</dfn>, the  a public identifier (<dfn id=var-pid><var>pid</var></dfn>)</dfn>, the
768  algorithm below <em class=rfc2119>MUST</em> be used:</p>  following algorithm <em class=rfc2119>MUST</em> be used:</p>
769  <ol>  <ol>
770    <li>If <var>pid</var> contains any character  <li>If <var>pid</var> is <code>null</code>, abort these steps.</li>
771    that is outside of the range of <code>#x20 | #xD | #xA |  <li>If <var>pid</var> contains a character that is <em>not</em> in the
772    [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]</code><!-- @@ TODO: formal def -->,  character class <a href="#class-PubidChar"><code>PubidChar</code></a>, then
773    then it is an  raise an
774    <a href="#xml-well-formedness-error" id=wfe-pubid-char><code>xml-well-formedness-error</code></a>.</li>  <a href="#xml-well-formedness-error" id=wfe-pubid-char><code>xml-well-formedness-error</code></a>.</li>
775    <li>If <var>pid</var> contains one of <code class=char>U+0009</code>    <li>If <var>pid</var> contains one of <code class=char>U+0009</code>
776    <code class=charname>CHARACTER TABULATION</code>,    <code class=charname>CHARACTER TABULATION</code>,
777    <code class=char>U+000A</code> <code class=charname>CARRIAGE RETURN</code>,    <code class=char>U+000A</code> <code class=charname>CARRIAGE RETURN</code>,
# Line 392  algorithm below <em class=rfc2119>MUST</ Line 783  algorithm below <em class=rfc2119>MUST</
783    <code class=char>U+0020</code> <code class=charname>SPACE</code> character    <code class=char>U+0020</code> <code class=charname>SPACE</code> character
784    immediately followed by another <code class=char>U+0020</code>    immediately followed by another <code class=char>U+0020</code>
785    <code class=charname>SPACE</code> character in <var>pid</var>, then it is a    <code class=charname>SPACE</code> character in <var>pid</var>, then it is a
786    <a href="#round-trip-error" id=rte-pubid-space><code>round-trip-error</code></a>.</li>    <a href="#round-trip-error" id=rte-pubid-space><code>round-trip-error</code></a>.
787    <li class=ed>@@ Should we check formal-public-identifierness?</li>    <span class=ed>Is this really a roundtripness problem?  XML spec
788      does only define the way to match public identifiers in fact, no
789      canonical form.</span></li>
790    </ol>
791    
792    <p>To
793    <dfn id=algorithm-to-validate-a-system-identifier title="validate a system identifier">validate
794    a system identifier (<dfn id=var-sid><var>sid</var></dfn>)</dfn>, the
795    following algorithm <em class=rfc2119>MUST</em> be used:</p>
796    <ol>
797      <li>If <var>sid</var> is <code>null</code>, abort these steps.</li>
798    <li><a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">Validate
799    <var>sid</var> as an <abbr>XML</abbr> string</a>.</li>
800      <li>If <var>sid</var> contains both <code class=char>U+0022</code>
801      <code class=charname>QUOTATION MARK</code> (<code class=char>"</code>) and
802      <code class=char>U+0027</code> <code class=charname>APOSTROPHE</code>
803      (<code class=char>'</code>) characters, raise an
804      <a href="#xml-well-formedness-error" id=wfe-sid-lit><code>xml-well-formedness-error</code></a>.</li>
805      <li>If <var>sid</var> contains at least one <code class=char>U+0023</code>
806      <code class=charname>NUMBER SIGN</code> (<code class=char>#</code>)
807      character, then raise an
808      <a href="#xml-misc-error" id=xme-sid-fragment><code>xml-misc-error</code></a>.</li>
809      <li class=ed>@@ If <var>sid</var> cannot be converted to a URI
810      reference, then raise a fact-level error (xml-misc-warning?).<!--
811      XML 1.0 has no conformance language for system identifier being
812      a URI reference. --></li>
813  </ol>  </ol>
814    
815  </div>  </div>
# Line 408  following:</p> Line 824  following:</p>
824  <dt>If <var>n</var> is an <code>Attr</code> node</dt>  <dt>If <var>n</var> is an <code>Attr</code> node</dt>
825    <dd>    <dd>
826      <ol>      <ol>
827      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
828      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>
829      <li>If the <code>prefix</code> attribute value is different from      <li>If the <code>prefix</code> attribute value is different from
830      <code>null</code>, then <a href="#algorithm-to-validate-a-ncname">validate      <code>null</code>, then <a href="#algorithm-to-validate-an-ncname">validate
831      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>
832      <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
833      <code>childNodes</code> list of <var>n</var>,      <code>childNodes</code> list of <var>n</var>,
# Line 517  following:</p> Line 933  following:</p>
933      <li>If <code>nodeName</code> attribute of <var>n</var> is      <li>If <code>nodeName</code> attribute of <var>n</var> is
934      <code>xml:space</code> <span class=ed>@@ or {xml namespace}:space ?</span>      <code>xml:space</code> <span class=ed>@@ or {xml namespace}:space ?</span>
935      and <span class=ed>its declared type is different from (default|preserve),      and <span class=ed>its declared type is different from (default|preserve),
936      (default), or (preserve)</span>, then raise an      (preserve|default), (default), or (preserve)</span>, then raise an
937      <a href="#xml-misc-error" id=xme-at-xml-space><code>xml-misc-error</code></a>.</li>      <a href="#xml-misc-error" id=xme-at-xml-space><code>xml-misc-error</code></a>.</li>
938      <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
939      <code>childNodes</code> list of <var>n</var>,      <code>childNodes</code> list of <var>n</var>,
# Line 547  following:</p> Line 963  following:</p>
963  <dt>If <var>n</var> is a <code>CDATASection</code> node</dt>  <dt>If <var>n</var> is a <code>CDATASection</code> node</dt>
964    <dd>    <dd>
965      <ol>      <ol>
966      <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
967      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
968      data</a>.</li>      data</a>.</li>
969      <li>If the <code>data</code> attribute value contains      <li>If the <code>data</code> attribute value contains
# Line 563  following:</p> Line 979  following:</p>
979      <ol>      <ol>
980      <li>Raise an      <li>Raise an
981      <a href="#round-trip-warning" id=rtw-comment><code>round-trip-warning</code></a>.</li>      <a href="#round-trip-warning" id=rtw-comment><code>round-trip-warning</code></a>.</li>
982      <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
983      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
984      data</a>.</li>      data</a>.</li>
985      <li>If the <code>data</code> attribute value contains      <li>If the <code>data</code> attribute value contains
# Line 630  following:</p> Line 1046  following:</p>
1046  <dt>If <var>n</var> is a <code>DocumentType</code> node</dt>  <dt>If <var>n</var> is a <code>DocumentType</code> node</dt>
1047    <dd>    <dd>
1048      <ol>      <ol>
1049      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1050      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1051      <li>Follow the following substeps:      <li>Follow the following substeps:
1052        <ol>        <ol>
# Line 649  following:</p> Line 1065  following:</p>
1065      </li>      </li>
1066      <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
1067      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1068      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1069      both <code>"</code> and <code>'</code> characters, it is a      the <code>systemId</code> attribute value as a system identifier</a>.</li>
1070      <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
1071      <!-- @@ "It is an error for a fragment identifier (beginning with a # character) to be part of a system identifier." -->      <em>not</em> <code>null</code> and the <code>systemId</code> attribute
1072      <!-- publicId = non-null and systemId = null -->      value of <var>n</var> is <code>null</code>, then raise an
1073        <a href="#xml-well-formedness-error" id=wfe-dt-sid><code>xml-well-formedness-error</code></a>.
1074        <span class=ed>@@ publicId == null?  Or, publicId == ""</span></li>
1075      <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>
1076      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
1077        <ol>        <ol>
# Line 665  following:</p> Line 1083  following:</p>
1083        <a href="#algorithm-to-check-a-node" title="check a node">check        <a href="#algorithm-to-check-a-node" title="check a node">check
1084        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>        <var>n<sub><var>c</var></sub></var></a> recusrively.</li>
1085        </ol></li>        </ol></li>
1086      <li class=ed>@@ <code>entities</code>, <code>notations</code>,      <li>For each node in the <code>entities</code>, <code>notations</code>,
1087      <code>elementTypes</code>, externally declared?</li>      and <code>elementTypes</code> lists of <var>n</var>,
1088        <a href="#algorithm-to-check-a-node" title="check a node">check the
1089        node</a> recursively.</li>
1090        <li class=ed>@@ externally declared?</li>
1091        <li>If the <code>NamedNodeMap</code> object in the <code>entities</code>
1092        attribute of <var>n</var> does not contain <code>Entity</code> nodes
1093        whose <code>nodeName</code> attribute are <code>amp</code>,
1094        <code>lt</code>, <code>gt</code>, <code>apos</code>, and <code>quot</code>
1095        then raise
1096        <a href="#xml-misc-recommentation" id=xmr-predefined><code>xml-misc-recommendation</code></a>(s).
1097      </ol>      </ol>
1098    </dd>    </dd>
1099  <dt>If <var>n</var> is an <code>Element</code> node</dt>  <dt>If <var>n</var> is an <code>Element</code> node</dt>
1100    <dd>    <dd>
1101      <ol>      <ol>
1102      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1103      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>      <code>localName</code> attribute value as an <code>NCName</code></a>.</li>
1104      <li>If the <code>prefix</code> attribute value is different from      <li>If the <code>prefix</code> attribute value is different from
1105      <code>null</code>, then <a href="#algorithm-to-validate-a-ncname">validate      <code>null</code>, then <a href="#algorithm-to-validate-an-ncname">validate
1106      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>
1107      <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>
1108      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
# Line 694  following:</p> Line 1121  following:</p>
1121        <var>n<sub><var>c</var></sub></var></a> recursively.</li>        <var>n<sub><var>c</var></sub></var></a> recursively.</li>
1122        </ol></li>        </ol></li>
1123      <li class=ed>@@ #elementvalid Validity constraint: Element Valid</li>      <li class=ed>@@ #elementvalid Validity constraint: Element Valid</li>
1124      <li class=ed>@@ #uniqattspec Well-formedness constraint: Unique Att Spec</li>      <li>Let <var>attrs</var> be the value of the <code>attribute</code>
1125      <li class=ed>@@ #RequiredAttr Validity constraint: Required Attribute</li>      attribute of <var>n</var>.  Check conformance of <var>attrs</var>
1126        as following:
1127          <ol>
1128          <li>If <var>attrs</var> contains an <code>Attr</code> node whose
1129          <code>nodeName</code> attribute value is equal to that of another
1130          <code>Attr</code> node in <var>attrs</var>, then raise an
1131          <a href="#xml-well-formedness-error" id=wfe-uniqattspec><code>xml-well-formedness-error</code></a>.<!--
1132          #uniqattspec Well-formedness constraint: Unique Att Spec --></li>
1133          <li class=ed>@@ #RequiredAttr Validity constraint: Required Attribute</li>
1134          </ol>
1135        </li>
1136      </ol>      </ol>
1137    </dd>    </dd>
1138  <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 723  following:</p> Line 1160  following:</p>
1160      <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>      <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>
1161      </ol>      </ol>
1162    </dd>    </dd>
1163  <dt>If <var>n</var> is an <code>Entity</code> node</dt>  <dt>If <var>n</var> is an <code>Entity</code> node whose
1164    <code>notationName</code> attribute value is <code>null</code> (i.e. a
1165    parsed entity)</dt>
1166    <dd>    <dd>
1167      <ol>      <ol>
1168      <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
1169      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <a href="#entity-error" id=ee-entity-node><code>entity-error</code></a>.</li>
1170        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1171      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1172      <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
1173      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1174      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1175      both <code>"</code> and <code>'</code> characters, it is a      the <code>systemId</code> attribute value as a system identifier</a>.</li>
1176      <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
1177      <!-- publicId = non-null and systemId = null -->      <em>not</em> <code>null</code> and the <code>systemId</code> attribute
1178      <li class=ed>@@ <code>notationName</code></li>      value of <var>n</var> is <code>null</code>, then raise an
1179      <li class=ed>@@ #not-declared Validity constraint: Notation Declared</li>      <a href="#xml-well-formedness-error" id=wfe-entity-sid><code>xml-well-formedness-error</code></a>.</li>
1180      <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>
1181      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
1182        <ol>        <ol>
# Line 755  following:</p> Line 1195  following:</p>
1195        </ol></li>        </ol></li>
1196      </ol>      </ol>
1197    </dd>    </dd>
1198    <dt>If <var>n</var> is an <code>Entity</code> node whose
1199    <code>notationName</code> attribute value is <em>not</em> <code>null</code>
1200    (i.e. an unparsed entity)</dt>
1201      <dd>
1202        <ol>
1203        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1204        <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1205        <li><a href="#algorithm-to-validate-a-public-identifier" title="validate a public identifier">Validate
1206        the <code>publicId</code> attribute value as a public identifier</a>.</li>
1207        <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1208        the <code>systemId</code> attribute value as a system identifier</a>.</li>
1209        <li>If the <code>systemId</code> attribute value of <var>n</var> is
1210        <code>null</code>, then raise an
1211        <a href="#xml-well-formedness-error" id=wfe-uentity-sid><code>xml-well-formedness-error</code></a>.</li>
1212        <li><a href="#algorithm-to-validate-an-ncname">Validate the
1213        <code>notationName</code> attribute value of <var>n</var> as an
1214        <code>NCName</code></a>.</li>
1215        <li class=ed>@@ #not-declared Validity constraint: Notation Declared</li>
1216        <li>If the <code>childNodes</code> list of <var>n</var> contains
1217        any nodes, they are in
1218        <a href="#xml-well-formedness-error" id=wfe-uentity-child><code>xml-well-formedness-error</code></a>.</li>
1219        </ol>
1220      </dd>
1221  <dt>If <var>n</var> is an <code>EntityReference</code> node</dt>  <dt>If <var>n</var> is an <code>EntityReference</code> node</dt>
1222    <dd>    <dd>
1223      <ol>      <ol>
1224      <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>
1225      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1226      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1227      <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>
1228      in the <code>childNodes</code> list of <var>n</var>,      in the <code>childNodes</code> list of <var>n</var>,
# Line 782  following:</p> Line 1245  following:</p>
1245  <dt>If <var>n</var> is a <code>Notation</code> node</dt>  <dt>If <var>n</var> is a <code>Notation</code> node</dt>
1246    <dd>    <dd>
1247      <ol>      <ol>
1248      <li><a href="#algorithm-to-validate-a-ncname">Validate the      <li><a href="#algorithm-to-validate-an-ncname">Validate the
1249      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>      <code>nodeName</code> attribute value as an <code>NCName</code></a>.</li>
1250      <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
1251      the <code>publicId</code> attribute value as a public identifier</a>.</li>      the <code>publicId</code> attribute value as a public identifier</a>.</li>
1252      <li>If the <code>systemId</code> attribute value contains      <li><a href="#algorithm-to-validate-a-system-identifier" title="validate a system identifier">Validate
1253      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>  
1254      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1255      any nodes, they are in      any nodes, they are in
1256      <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 800  following:</p> Line 1262  following:</p>
1262      <li>If the <code>target</code> attribute value matches to the string      <li>If the <code>target</code> attribute value matches to the string
1263      <code>xml</code> in any case combination, then raise a      <code>xml</code> in any case combination, then raise a
1264      <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>
1265      <li>Otherwise, <a href="#algorithm-to-validate-a-ncname">validate the      <li>Otherwise, <a href="#algorithm-to-validate-an-ncname">validate the
1266      <code>target</code> attribute value as an <code>NCName</code></a>.</li>      <code>target</code> attribute value as an <code>NCName</code></a>.</li>
1267      <li>Then,      <li>Then,
1268      <a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML character data">validate      <a href="#algorithm-to-validate-an-xml-character-data" title="validate an XML string">validate
1269      the <code>data</code> attribute value as an <abbr>XML</abbr> character      the <code>data</code> attribute value as an <abbr>XML</abbr> character
1270      data</a>.</li>      data</a>.</li>
1271      <li>If the <code>data</code> attribute value contains a string      <li>If the <code>data</code> attribute value contains a string
# Line 819  following:</p> Line 1281  following:</p>
1281      <li>If the <code>childNodes</code> list of <var>n</var> contains      <li>If the <code>childNodes</code> list of <var>n</var> contains
1282      any nodes, then raise an      any nodes, then raise an
1283      <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>
1284        <li class=ed>@@ Warn if not declared
1285      </ol>      </ol>
1286    </dd>    </dd>
1287  <dt>If <var>n</var> is a <code>Text</code> node</dt>  <dt>If <var>n</var> is a <code>Text</code> node</dt>
1288    <dd>    <dd>
1289      <ol>      <ol>
1290      <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
1291      <code>data</code> attribute value as an <abbr>XML</abbr> character      <code>data</code> attribute value as an <abbr>XML</abbr> character
1292      data</a>.</li>      data</a>.</li>
1293      <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 908  as amended by Line 1371  as amended by
1371  <a href="http://www.w3.org/XML/xml-V10-4e-errata#E02">errata</a>.</p>  <a href="http://www.w3.org/XML/xml-V10-4e-errata#E02">errata</a>.</p>
1372  </div>  </div>
1373    
1374    <p>The character class <dfn id=class-NameStartChar10><code>NameStartChar10</code></dfn>
1375    contains the following characters:</p>
1376    <ul class=ed>
1377    </ul>
1378    <div class="note memo">
1379    <p>This character class contains all characters allowed as the first character
1380    of a string matching to the production rule
1381    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Name"><code>Name</code></a>
1382    of <abbr>XML</abbr> 1.0
1383    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1384    </div>
1385    
1386    <p>The character class <dfn id=class-NameChar10><code>NameChar10</code></dfn>
1387    contains the following characters:</p>
1388    <ul>
1389    <li>The characters in the character class
1390    <a href="#class-NameStartChar10">NameStartChar10</a>.</li>
1391    <li class=ed></li>
1392    </ul>
1393    <div class="note memo">
1394    <p>This character class contains all characters allowed as the second
1395    character of a string matching to the production rule
1396    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Name"><code>Name</code></a>
1397    of <abbr>XML</abbr> 1.0
1398    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1399    </div>
1400    
1401    <p>The character class <dfn id=class-PubidChar><code>PubidChar</code></dfn>
1402    contains the following characters:</p>
1403    <ul>
1404    <li><code class=char>U+0009</code> <code class=charname>CHARACTER
1405    TABULATION</code></li>
1406    <li><code class=char>U+000A</code> <code class=charname>LINE FEED</code></li>
1407    <li><code class=char>U+000D</code> <code class=charname>CARRIAGE
1408    RETURN</code></li>
1409    <li><code class=char>U+0020</code> <code class=charname>SPACE</code></li>
1410    <li><code class=char>U+0021</code> <code class=charname>EXCLAMATION MARK</code>
1411    (<code class=char>!</code>)</li>
1412    <li><code class=char>U+0023</code> <code class=charname>DOLLAR SIGN</code>
1413    (<code class=char>$</code>)</li>
1414    <li><code class=char>U+0024</code> <code class=charname>NUMBER SIGN</code>
1415    (<code class=char>#</code>)</li>
1416    <li><code class=char>U+0025</code> <code class=charname>PERCENT SIGN</code>
1417    (<code class=char>%</code>)</li>
1418    <li><code class=char>U+0027</code> <code class=charname>APOSTROPHE</code>
1419    (<code class=char>'</code>)</li>
1420    <li><code class=char>U+0028</code> <code class=charname>LEFT PARENTHESIS</code>
1421    (<code class=char>(</code>)</li>
1422    <li><code class=char>U+0029</code> <code class=charname>RIGHT
1423    PARENTHESIS</code> (<code class=char>)</code>)</li>
1424    <li><code class=char>U+002A</code> <code class=charname>ASTERISK</code>
1425    (<code class=char>*</code>)</li>
1426    <li><code class=char>U+002B</code> <code class=charname>PLUS SIGN</code>
1427    (<code class=char>+</code>)</li>
1428    <li><code class=char>U+002C</code> <code class=charname>COMMA</code>
1429    (<code class=char>,</code>)</li>
1430    <li><code class=char>U+002D</code> <code class=charname>HYPHEN-MINUS</code>
1431    (<code class=char>-</code>)</li>
1432    <li><code class=char>U+002E</code> <code class=charname>FULL STOP</code>
1433    (<code class=char>.</code>)</li>
1434    <li><code class=char>U+002F</code> <code class=charname>SOLIDUS</code>
1435    (<code class=char>/</code>)</li>
1436    <li><code class=char>U+0030</code> <code class=charname>DIGIT ZERO</code>
1437    (<code class=char>0</code>) .. <code class=char>U+0039</code>
1438    <code class=charname>DIGIT NINE</code> (<code class=char>9</code>)</li>
1439    <li><code class=char>U+003A</code> <code class=charname>COLON</code>
1440    (<code class=char>:</code>)</li>
1441    <li><code class=char>U+003B</code> <code class=charname>SEMICOLON</code>
1442    (<code class=char>;</code>)</li>
1443    <li><code class=char>U+003D</code> <code class=charname>EQUAL SIGN</code>
1444    (<code class=char>=</code>)</li>
1445    <li><code class=char>U+003F</code> <code class=charname>QUESTION MARK</code>
1446    (<code class=char>?</code>)</li>
1447    <li><code class=char>U+0040</code> <code class=charname>COMMERCIAL AT</code>
1448    (<code class=char>@</code>)</li>
1449    <li><code class=char>U+0041</code> <code class=charname>LATIN CAPITAL LETTER
1450    A</code> (<code class=char>A</code>) .. <code class=char>U+005A</code>
1451    <code class=charname>LATIN CAPITAL LETTER Z</code>
1452    (<code class=char>Z</code>)</li>
1453    <li><code class=char>U+005F</code> <code class=charname>LOW LINE</code>
1454    (<code class=char>_</code>)</li>
1455    <li><code class=char>U+0061</code> <code class=charname>LATIN CAPITAL LETTER
1456    A</code> (<code class=char>A</code>) .. <code class=char>U+007A</code>
1457    <code class=charname>LATIN CAPITAL LETTER Z</code>
1458    (<code class=char>Z</code>)</li>
1459    </ul>
1460    <div class="note memo">
1461    <p>This character class contains all characters allowed in the production rule
1462    <a href="http://www.w3.org/TR/2006/REC-xml-20060816/#NT-PubidChar"><code>PubidChar</code></a>
1463    of <abbr>XML</abbr> 1.0
1464    <cite class="bibref normative">[<a href="#ref-XML10">XML10</a>]</cite>.</p>
1465    </div>
1466    
1467  </div>  </div>
1468    
1469  <div id="references" class="section reference">  <div id="references" class="section reference">

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.28

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24