W3C home > Mailing lists > Public > www-dom@w3.org > April to June 2001

Content Models updated

From: Philippe Le Hegaret <plh@w3.org>
Date: Thu, 19 Apr 2001 13:06:14 -0400
Message-ID: <3ADF1B06.BF19695F@w3.org>
To: WWW DOM <www-dom@w3.org>

This is an update for the Content Models module:

http://www.w3.org/TR/2001/WD-DOM-Level-3-CMLS-20010419/

Philippe

PS: I included a CVS diff from the XML sources. Let me know if you
find it useful.
Index: content-models.xml
===================================================================
RCS file: /w3ccvs/WWW/DOM/Group/drafts/level-3-src/xml/cm-ls/content-models.xml,v
retrieving revision 1.19
retrieving revision 1.35
diff -r1.19 -r1.35
2c2
< <!-- $Id: content-models.xml,v 1.19 2001/02/08 03:55:42 plehegar Exp $ -->
---
> <!-- $Id: content-models.xml,v 1.35 2001/04/18 21:29:56 plehegar Exp $ -->
11c11
<   <head>Content Models and Validation</head> 
---
>   <head> Content Models and Validation</head> 
28c28
<   EARLY DRAFT! Last known edit 02/02/2001
---
>   EARLY DRAFT! Last known edit 04/11/2001
30c30
<   proposed revisions already marked up as per spec.dtd!
---
>   proposed revisions already marked up as per spec.dtd! 
35c35
<   | OVERVIEW                                           |
---
>   | OVERVIEW                                            |
46,50c46,48
< 		including Namespace well-formedness. A DOM application can use the
< 		<code>hasFeature</code> method of the<code>DOMImplementation</code> interface
< 		to determine whether a given DOM supports these capabilities or not. One
< 		feature string for the CM-editing interfaces listed in this section is
< 		"CM-EDIT" and another feature string for document-editing interfaces is
---
> 		including Namespace well-formedness. A DOM application can use the <code>hasFeature</code> method of the<code>DOMImplementation</code> interface to determine whether a given DOM supports these capabilities
> 		or not. One feature string for the CM-editing interfaces listed in this section
> 		is "CM-EDIT" and another feature string for document-editing interfaces is
128c126,127
< 			 <p>CR5. Associate a CM with a document and make it the active CM.</p> 
---
> 			 <p>CR5. Associate a CM with a document and make it the active CM.</p>
> 			 
231,236c230,231
< 				the former will report the element's <code>QName</code>, e.g.,
< 				<code>foo:bar</code>, whereas the latter will report its namespace and local
< 				name, e.g., <code>{http://my.namespace}bar</code>. We have added the
< 				<code>isNamespaceAware</code> attribute to the generic CM object to help
< 				applications determine which of these fields are important, but we are still
< 				analyzing this challenge.</p> 
---
> 				the former will report the element's <code>QName</code>, e.g., <code>foo:bar</code>, whereas the latter will report its namespace and local name, e.g., <code>{http://my.namespace}bar</code>. We have added the <code>isNamespaceAware</code> attribute to the generic CM object to help applications determine which
> 				of these fields are important, but we are still analyzing this challenge.</p> 
274c269,270
< 			 follow, starting off with the data structures and "CM-editing" methods. </p><definitions> 
---
> 		follow, starting off with the data structures and "CM-editing" methods. </p> 
> 	 <definitions> 
283,289c279,287
< 			 <p><code>CMModel</code> is an abstract object that could map to a
< 					 DTD, an XML Schema, a database schema, etc. It's a generalized content model
< 					 object, that has both an internal and external subset. The internal subset
< 					 would always exist, even if empty, with the external subset (if present) being
< 					 represented as a link to one or more <code>CMExternalModel</code>s. It is
< 					 possible, however, that none of these <code>CMExternalModel</code>s are
< 					 active.</p> 
---
> 			 <p><code>CMModel</code> is an abstract object that could map to a DTD, an XML Schema, a
> 				database schema, etc. It's a generalized content model object, that has both an
> 				internal and external subset. The internal subset would always exist, even if
> 				empty, with the external subset (if present) being represented as by an
> 				"active" <code>CMExternalModel</code>. Many <code>CMExternalModel</code>s could exist, but only one can be specified as "active"; it is also
> 				possible that none are "active". The issue of multiple content models is
> 				misleading since in this architecture, only one <code>CMModel</code> exists, with an internal subset that references the external subset. If
> 				the external subset changes to another "acitve" <code>CMExternalModel</code>, the internal subset is "fixed up." The CMModel also contains the
> 				factory methods needed to create a various types of CMNodes like <code>CMElementDeclaration</code>, <code>CMAttributeDeclaration</code>, etc. </p> 
295,296c293,294
< 						terms of namespaces and local names; false if the document structure is defined
< 						only in terms of <code>QNames</code>.</p> 
---
> 				  terms of namespaces and local names; false if the document structure is defined
> 				  only in terms of <code>QNames</code>.</p> 
299,300c297,298
< 		  <attribute name="rootElementDecl" type="ElementDeclaration"
< 			id="CMModel-topLevelElementDecl" readonly="yes"> 
---
> 		  <attribute name="rootElementDecl" type="CMElementDeclaration"
> 			id="CMModel-topLevelElementDecl" readonly="no"> 
302c300,309
< 				<p>The root element declaration for the content model. </p> 
---
> 				<p>The root element declaration for the content model. Although a
> 				  root element is specified in the document instance, when a content model is
> 				  generated, a user should be able to chose the root element for editing purpose.
> 				  This is just a placeholder for that element. It could also be null. For
> 				  validating an XML document, root element must be defined in its active content
> 				  model. CMModel.rootElementDecl provides access to that root element
> 				  declaration. This recommendation does not say how to fill in the
> 				  rootElementdecl. It could be manually done by the user before validating a
> 				  document, in some cases where possible, the CMModle loader may be able to fill
> 				  it in etc.</p> 
306,307c313,314
< 				<p>Location of the document describing the content model
< 						defined in this CMModel.</p> 
---
> 				<p>Location of the document describing the content model defined in
> 				  this CMModel.</p> 
313,314c320,321
< 				  <p>This method returns a DOMString defining the absolute
< 						  location from which this document is retrieved including the document name.</p> 
---
> 				  <p>This method returns a DOMString defining the absolute location
> 					 from which this document is retrieved including the document name.</p> 
319c326
< 		  </method>
---
> 		  </method> 
337,338c344
< 				<p>Returns <code>CMNode</code> list of all the constituent
< 						nodes in the content model. </p> 
---
> 				<p>Returns <code>CMNode</code> list of all the constituent nodes in the content model. </p> 
396,397c402,403
< 						i.e., confirming that it's well-formed and valid per its own formal grammar.
< 						Note that within a CMModel, a pointer to a CMExternalModel can exist.</p> 
---
> 				  i.e., confirming that it's well-formed and valid per its own formal grammar.
> 				  Note that within a CMModel, a pointer to a CMExternalModel can exist.</p> 
408a415,565
> 		<!--===================================================
> ==                                                  Factory Methods                                      ==
> =======================================================-->
> 		  <method id="CM-Interfaces-CMModel-createCMElementDeclaration"
> 		  name="createCMElementDeclaration"> 
> 			 <descr> 
> 				<p>Creates an element declaration for the element type specified.
> 				  The returned object implements CMElementDeclaration interface. </p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="namespaceURI" type="DOMString"> 
> 				  <descr> 
> 					 <p></p> 
> 				  </descr> 
> 				</param> 
> 				<param name="qualifiedElementName" type="DOMString" attr="in"> 
> 				  <descr> 
> 					 <p>The qualified name of the element type being declared.</p> 
> 				  </descr> 
> 				</param> 
> 				<param name="contentSpec" type="int" attr="in"> 
> 				  <descr> 
> 					 <p>Constant for MIXED, EMPTY, ANY and CHILDREN.</p> 
> 					 <p></p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMElementDeclaration"> 
> 				<descr> 
> 				  <p>A new CMElementDeclaration object with <code>name</code> attribute set to qualifiedElementName and the <code>contentType</code> set to contentSpec. Other attributes of the element declaration are set
> 					 through CMElementDeclaration interface methods.</p> 
> 				</descr></returns><raises><exception name="DOMException"> 
> 				  <descr> 
> 					 <p>INVALID_CHARACTER_ERR: Raised if the specified name contains
> 						an illegal character.</p> 
> 					 <p>DUPLICATE_NAME_ERR:Raised if an element declaration already
> 						exists with the same name for a given CMModel.</p> 
> 				  </descr></exception></raises> 
> 		  </method> 
> 		  <method id="CM-Interfaces-CMModel-createCMAttributeDeclaration"
> 		  name="createCMAttributeDeclaration"> 
> 			 <descr> 
> 				<p>Creates an attribute declaration. The returned object implements
> 				  CMAttributeDeclaration interface. </p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="namespaceURI" type="DOMString"> 
> 				  <descr> 
> 					 <p></p> 
> 				  </descr> 
> 				</param> 
> 				<param name="qualifiedName" type="DOMString" attr="in"> 
> 				  <descr> 
> 					 <p>The name of the attribute being declared.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMAttributeDeclaration"> 
> 				<descr> 
> 				  <p>A new CMAttributeDeclaration object with <code>attributeName</code> attribute set to input qualifiedname parameter.</p> 
> 				</descr></returns><raises><exception name="DOMException"> 
> 				  <descr> 
> 					 <p>INVALID_CHARACTER_ERR: Raised if the specified name contains
> 						an illegal character.</p> 
> 				  </descr></exception></raises> 
> 		  </method> 
> 		  <method id="CM-Interfaces-CMModel-createCMNotationDeclaration"
> 		  name="createCMNotationDeclaration"> 
> 			 <descr> 
> 				<p>Creates a new notation declaration. The returned object
> 				  implements CMNotationDeclaration interface. </p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="name" type="DOMString" attr="in"> 
> 				  <descr> 
> 					 <p>The name of the notation being declared.</p> 
> 				  </descr> 
> 				</param> 
> 				<param attr="in" name="systemIdentifier" type="DOMString"> 
> 				  <descr> 
> 					 <p>The system identifier for the notation declaration.</p> 
> 				  </descr> 
> 				</param> 
> 				<param name="publicIdentifier" type="DOMString"> 
> 				  <descr> 
> 					 <p>The public identifier for the notation declaraiton.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMNotationDeclaration"> 
> 				<descr> 
> 				  <p>A new CMNotationDeclaration object with <code>notationName</code> attribute set to name.</p> 
> 				</descr></returns><raises><exception name="DOMException"> 
> 				  <descr> 
> 					 <p>INVALID_CHARACTER_ERR: Raised if the specified name contains
> 						an illegal character.</p> 
> 					 <p>DUPLICATE_NAME_ERR:Raised if a notation declaration already
> 						exists with the same name for a given CMModel.</p> 
> 				  </descr></exception></raises> 
> 		  </method> 
> 		  <method id="CM-Interfaces-CMModel-createCMEntityDeclaration"
> 		  name="createCMEntityDeclaration"> 
> 			 <descr> 
> 				<p>Creates a new entity declaration. The returned object implements
> 				  CMEntityDeclaration interface. </p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="name" type="DOMString" attr="in"> 
> 				  <descr> 
> 					 <p>The name of the entity being declared.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMEntityDeclaration"> 
> 				<descr> 
> 				  <p>A new CMNotationDeclaration object with <code>entityName</code> attribute set to name.</p> 
> 				</descr></returns><raises><exception name="DOMException"> 
> 				  <descr> 
> 					 <p>INVALID_CHARACTER_ERR: Raised if the specified name contains
> 						an illegal character.</p> 
> 				  </descr></exception></raises> 
> 		  </method> 
> 		  <method id="CM-Interfaces-CMModel-createCMChildren"
> 		  name="createCMChildren"> 
> 			 <descr> 
> 				<p>Creates a new CMChildren object. The subModels of the CMChildren
> 				  is build using CMChildren interface methods.</p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="minOccurs" type="unsigned long" attr="in"> 
> 				  <descr> 
> 					 <p>The minimum occurance for the subModels of this
> 						CMChildren.</p> 
> 				  </descr> 
> 				</param> 
> 				<param name="maxOccurs" type="unsigned long" attr="in"> 
> 				  <descr> 
> 					 <p>The maximum occurance for the subModels of this
> 						CMChildren.</p> 
> 				  </descr> 
> 				</param> 
> 				<param name="operator" type="unsigned short"> 
> 				  <descr> 
> 					 <p>operator of type CHOICE, SEQ or NONE</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMChildren"> 
> 				<descr> 
> 				  <p>A new CMChildren object.</p> 
> 				</descr></returns><raises><exception name="DOMException"> 
> 				  <descr> 
> 					 <p>INVALID_CHARACTER_ERR: Raised if the specified name contains
> 						an illegal character.</p> 
> 				  </descr></exception></raises> 
> 		  </method> 
420,422c577,579
< 			 <p><code>CMExternalModel</code> is an abstract object that could
< 					 map to a DTD, an XML Schema, a database schema, etc. It's a generalized content
< 					 model object that is not bound to a particular XML document.</p> 
---
> 			 <p><code>CMExternalModel</code> is an abstract object that could map to a DTD, an XML Schema, a
> 				database schema, etc. It's a generalized content model object that is not bound
> 				to a particular XML document.</p> 
432,460c589,608
< 			 <p><code>CMNode</code>is analogous to a
< 					 <code>Node</code> in the Core DOM, e.g., an element declaration. This can exist
< 					 for both <code>CMExternalModel</code> (include/ignore must be handled here) and
< 					 <code>CMModel</code>. It should handle the following: </p> 
< 			 <p> <code> interface CommentsPIsDeclaration { attribute
< 					 ProcessingInstruction pis; attribute Comment comments; }; interface Conditional
< 					 Declaration { attribute boolean includeIgnore; };</code> </p> 
< 			 <p>Opaque. </p> 
< 		  </descr> 
< 		  <constant name="ELEMENT_DECLARATION" type="unsigned short" value="1"
<                   id='CMNode-ELEMENT_DECLARATION'>
< 			 <descr>
< 				<p>The node is an <code>ElementDeclaration</code>.</p>
< 			 </descr></constant><constant
< 						      name="ATTRIBUTE_DECLARATION"
<                   id='CMNode-ATTRIBUTE_DECLARATION'
< 		  type="unsigned short" value="2">
< 			 <descr>
< 				<p>The node is an <code>AttributeDeclaration</code>.</p>
< 			 </descr></constant><constant name="CM_NOTATION_DECLARATION"	
<                   id='CMNode-NOTATION_DECLARATION'
< 	          type="unsigned short" value="3">
< 			 <descr>
< 				<p>The node is a <code>CMNotationDeclaration</code>.</p>
< 			 </descr></constant><constant name="ENTITY_DECLARATION"
<                   id='CMNode-ENTITY_DECLARATION'
< 		  type="unsigned short" value="4">
< 			 <descr>
< 				<p>The node is an <code>EntityDeclaration</code>.</p>
---
> 			 <p><code>CMNode</code>is analogous to a <code>Node</code> in the Core DOM, e.g., an element declaration. This can exist for both <code>CMExternalModel</code> and <code>CMModel</code>. It should be able to handle constructs such as comments and processing
> 				instructions.</p> 
> 			 <p>Opaque.</p> 
> 		  </descr> 
> 		  <constant name="CM_ELEMENT_DECLARATION" type="unsigned short" value="1"
> 			id="CMNode-ELEMENT_DECLARATION"> 
> 			 <descr> 
> 				<p>The node is an <code>CMElementDeclaration</code>.</p> 
> 			 </descr></constant><constant name="CM_ATTRIBUTE_DECLARATION"
> 		  id="CMNode-ATTRIBUTE_DECLARATION" type="unsigned short" value="2"> 
> 			 <descr> 
> 				<p>The node is an <code>CMAttributeDeclaration</code>.</p> 
> 			 </descr></constant><constant name="CM_NOTATION_DECLARATION"
> 		  id="CMNode-NOTATION_DECLARATION" type="unsigned short" value="3"> 
> 			 <descr> 
> 				<p>The node is a <code>CMNotationDeclaration</code>.</p> 
> 			 </descr></constant><constant name="CM_ENTITY_DECLARATION"
> 		  id="CMNode-ENTITY_DECLARATION" type="unsigned short" value="4"> 
> 			 <descr> 
> 				<p>The node is an <code>CMEntityDeclaration</code>.</p> 
462,469c610,616
<                   id='CMNode-CM_CHILDREN'
< 		  value="5">
< 			 <descr>
< 				<p>The node is a <code>CMChildren</code>.</p>
< 			 </descr></constant><constant id='CMNode-CM_MODEL' name="CM_MODEL" type="unsigned short"
< 		  value="6">
< 			 <descr>
< 				<p>The node is a <code>CMModel</code>.</p>
---
> 		  id="CMNode-CM_CHILDREN" value="5"> 
> 			 <descr> 
> 				<p>The node is a <code>CMChildren</code>.</p> 
> 			 </descr></constant><constant id="CMNode-CM_MODEL" name="CM_MODEL"
> 		  type="unsigned short" value="6"> 
> 			 <descr> 
> 				<p>The node is a <code>CMModel</code>.</p> 
471,474c618,620
<                   id='CMNode-CM_EXTERNALMODEL'
< 		  type="unsigned short" value="7">
< 			 <descr>
< 				<p>The node is a <code>CMExternalModel</code>.</p>
---
> 		  id="CMNode-CM_EXTERNALMODEL" type="unsigned short" value="7"> 
> 			 <descr> 
> 				<p>The node is a <code>CMExternalModel</code>.</p> 
476,480c622
< 		  readonly="yes" id="CMNodeType-nodeType">
< 			 <descr>
< 				<p>A code representing the underlying object as defined above.</p>
< 			 </descr></attribute>
< 		  <method name="cloneCM" id="CM-Interfaces-CMNode-cloneCM"> 
---
> 		  readonly="yes" id="CMNode-nodeType"> 
482,496c624,645
< 				<p>Creates a copy of <code>CMModel</code>. No document refers
< 						to the <code>CMNode</code> returned.</p> 
< 			 </descr> 
< 			 <parameters> 
< 			 </parameters> 
< 			 <returns type="CMNode"> 
< 				<descr> 
< 				  <p>Cloned <code>CMNode</code>.</p> 
< 				</descr> 
< 			 </returns> 
< 			 <raises> 
< 			 </raises> 
< 		  </method> 
< 		  <method name="cloneExternalCM"
< 			id="CM-Interfaces-CMNode-cloneExternalCM"> 
---
> 				<p>A code representing the underlying object as defined above.</p> 
> 			 </descr></attribute> 
> 		  <attribute name="ownerCMModel" type="CMModel" id="CMNode-ownerCMModel">
> 			 
> 			 <descr> 
> 				<p>The <code>CMModel</code> object associated with this CMNode. For a node of type <code>CM_MODEL</code>, this is <code>null</code>. </p> 
> 			 </descr></attribute> 
> 		  <attribute name="nodeName" type="DOMString" readonly="no"
> 			id="CMNode-nodeName"> 
> 			 <descr> 
> 				<p>The <code> qualified name</code> of this CMNode depending on the CMNode type.</p> 
> 			 </descr></attribute> 
> 		  <attribute name="prefix" type="DOMString" id="CMNode-prefix"> 
> 			 <descr> 
> 				<p>The namespace prefix of this node, or null if it is
> 				  unspecified.</p> 
> 			 </descr></attribute><attribute name="localName" type="DOMString"
> 		  id="CMNode-localName"> 
> 			 <descr> 
> 				<p>Returns the local part of the <code>qualified name</code> of this CMNode.</p> 
> 			 </descr></attribute><attribute name="namespaceURI" type="DOMString"
> 		  id="CMNode-namespaceURI"> 
498,500c647,652
< 				<p>Creates a copy of <code>CMExternalModel</code>. It is
< 						possible that a document would not refer to the <code>CMNode</code>
< 						returned.</p> 
---
> 				<p>The namespace URI of this node, or null if it is
> 				  unspecified.</p> 
> 			 </descr></attribute> 
> 		  <method name="clone" id="CM-Interfaces-CMNode-cloneCM"> 
> 			 <descr> 
> 				<p>Creates a copy of <code>CMNode</code>.</p> 
521,522c673
< 					 NodeList</code>; the document order is meaningful, as opposed to
< 					 <code>CMNamedNodeMap</code>. </p> 
---
> 					 NodeList</code>; the document order is meaningful, as opposed to <code>CMNamedNodeMap</code>. </p> 
541c692,693
< 		<interface name="CMDataType" id="CM-Interfaces-CMDataType"> 
---
> 		<interface name="CMDataType" id="CM-Interfaces-CMDataType-PrimitiveType">
> 		  
543,545c695,696
< 			 <p>The primitive datatypes supported currently are:
< 					 <code>string</code>, <code>boolean</code>, <code>float</code>,
< 					 <code>double</code>, <code>decimal</code>.</p> 
---
> 			 <p>The primitive datatypes supported by base DOM CM implementation
> 				is: <code>string</code> type only. </p> 
550,552c701,703
< 				<p>code representing the <code>string</code> data
< 						type as defined in <loc
< 									    href="&xml-schema-2;/#string">XML Schema Datatypes</loc>.</p> 
---
> 				<p>code representing the <code>string</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#string">XML Schema
> 					 Datatypes</loc>.</p> 
555,556c706,736
< 		  <constant id="CMDataType-BOOLEAN_DATATYPE"
< 			name="BOOLEAN_DATATYPE" type="short" value="2"> 
---
> 		  <method name="getCMPrimitiveType" id="CMDataType-getPrimitiveType"> 
> 			 <descr> 
> 				<p>Returns one of the enumerated code representing the primitive
> 				  data type.</p> 
> 			 </descr> 
> 			 <parameters> 
> 			 </parameters> 
> 			 <returns type="short"> 
> 				<descr> 
> 				  <p>code representing the primitive type of the attached data
> 					 item.</p> 
> 				</descr> 
> 			 </returns> 
> 			 <raises> 
> 			 </raises> 
> 		  </method> 
> 		</interface><!--=====================================================================
> =                                                                       =
> =      CMPrimitiveType                                                       =
> =                                                                       =
> ======================================================================-->
> 		<interface name="CMPrimitiveType" inherits="CMDataType"
> 		 id="CM-interface-CMPrimitiveType"> 
> 		  <descr> 
> 			 <p>The primitive types supported by optional DOM CM
> 				implelementations. A DOM application can use the hasFeature method of the
> 				DOMImplementation interface to determine whether this interface is supported or
> 				not. The feature string for all the interfaces listed in this section is
> 				"CMPTYPES" and the version is "3.0". </p> 
> 		  </descr><constant id="CMDataType-BOOLEAN_DATATYPE"
> 		  name="BOOLEAN_DATATYPE" type="short" value="2"> 
558,559c738,740
< 				<p>code representing the <code>boolean</code> data
< 						type as defined in <loc href="&xml-schema-2;/#boolean">XML Schema Datatypes</loc>.</p> 
---
> 				<p>code representing the <code>boolean</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#boolean">XML Schema
> 					 Datatypes</loc>.</p> 
565,566c746,748
< 				<p>code representing the <code>float</code> data
< 						type as defined in <loc href="&xml-schema-2;/#float">XML Schema Datatypes</loc>.</p> 
---
> 				<p>code representing the <code>float</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#float">XML Schema Datatypes</loc>.</p>
> 				
572,573c754,756
< 				<p>code representing the <code>double</code> data
< 						type as defined in <loc href="&xml-schema-2;/#double">XML Schema Datatypes</loc>.</p> 
---
> 				<p>code representing the <code>double</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#double">XML Schema
> 					 Datatypes</loc>.</p> 
576,585c759,760
< 		  <constant id="CMDataType-LONG_DATATYPE" name="LONG_DATATYPE" type="short" value="5"> 
< 			 <descr> 
< 				<p>code representing a long data type as defined in <loc href="&xml-schema-2;/#long">XML Schema Datatypes</loc>.</p> 
< 			 </descr></constant><constant id="CMDataType-DECIMAL_DATATYPE"
< 		  name="INT_DATATYPE" type="short" value="6"> 
< 			 <descr> 
< 				<p>code representing an <code>integer</code> data
< 						type as defined in <loc href="&xml-schema-2;/#int">XML Schema Datatypes</loc>.</p> 
< 			 </descr> 
< 		  </constant><constant name="SHORT_DATATYPE" id="CMDataType-SHORT_DATATYPE" type="short" value="7"> 
---
> 		  <constant id="CMDataType-DECIMAL_DATATYPE"
> 			name="DECIMAL_DATATYPE" type="short" value="5"> 
587,592c762,841
< 				<p>code representing a short data type as defined in <loc href="&xml-schema-2;/#short">XML Schema Datatypes</loc>.</p> 
< 			 </descr></constant><constant id="CMDataType-BYTE_DATATYPE"
<                   name="BYTE_DATATYPE" type="short" value="8"> 
< 			 <descr> 
< 				<p>code representing a byte data type as defined in <loc href="&xml-schema-2;/#byte">XML Schema Datatypes</loc>.</p> 
< 			 </descr></constant><attribute readonly="no" type="int"
---
> 				<p>code representing a <code>decimal</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#decimal">XML Schema
> 					 Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-HEXBINARY_DATATYPE"
> 		  name="HEXBINARY_DATATYPE" type="short" value="6"> 
> 			 <descr> 
> 				<p>code representing a <code>hexbinary</code> data type as defined in 
> 				  <loc href="&xml-schema-2;"> XML Schema Datatypes</loc>.</p> 
> 			 </descr> 
> 		  </constant><constant name="BASE64BINARY_DATATYPE"
> 		  id="CMDataType-BASE64BINARY_DATATYPE" type="short" value="7"> 
> 			 <descr> 
> 				<p>code representing a <code>base64binary</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-URI_REFERENCE_DATATYPE"
> 		  name="ANYURI_DATATYPE" type="short" value="8"> 
> 			 <descr> 
> 				<p>code representing an <code>uri reference</code> data type as defined in 
> 				  XML Schema
> 					 Datatypes.</p>
> 	    <note role='editor'>
>               <p>@@uriReference is no longer part of the XML Schema PR draft.</p>
> 	    </note>
> 			 </descr></constant><constant id="CMDataType-QNAME_DATATYPE"
> 		  name="QNAME_DATATYPE" type="short" value="9"> 
> 			 <descr> 
> 				<p>code representing an <code>XML qualified name</code> data type as defined in 
> 				  <loc href="&xml-schema-2;/#QName">XML Schema Datatypes</loc>.</p>
> 				
> 			 </descr></constant><constant id="CMDataType-DURATION_DATATYPE"
> 		  name="DURATION_DATATYPE" type="short" value="10"> 
> 			 <descr> 
> 				<p>code representing a <code>duration</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-DATETIME_DATATYPE"
> 		  name="DATETIME_DATATYPE" type="short" value="11"> 
> 			 <descr> 
> 				<p>code representing a<code>datetime</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-DATE_DATATYPE"
> 		  name="DATE_DATATYPE" type="short" value="12"> 
> 			 <descr> 
> 				<p>code representing a<code>date</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-TIME_DATATYPE"
> 		  name="TIME_DATATYPE" type="short" value="13"> 
> 			 <descr> 
> 				<p>code representing a <code>time</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-YEARMONTH_DATATYPE"
> 		  name="YEARMONTH_DATATYPE" type="short" value="14"> 
> 			 <descr> 
> 				<p>code representing a <code>yearmonth</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-YEAR_DATATYPE"
> 		  name="YEAR_DATATYPE" type="short" value="15"> 
> 			 <descr> 
> 				<p>code representing a <code>year</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-MONTHDAY_DATATYPE"
> 		  name="MONTHDAY_DATATYPE" type="short" value="16"> 
> 			 <descr> 
> 				<p>code representing a <code>monthday</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-DAY_DATATYPE"
> 		  name="DAY_DATATYPE" type="short" value="17"> 
> 			 <descr> 
> 				<p>code representing a <code>day</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-MONTH_DATATYPE"
> 		  name="MONTH_DATATYPE" type="short" value="18"> 
> 			 <descr> 
> 				<p>code representing a <code>month</code> data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><constant id="CMDataType-NOTATION_DATATYPE"
> 		  name="NOTATION_DATATYPE" type="short" value="19"> 
> 			 <descr> 
> 				<p>code representing a<code>NOTATION</code>data type as defined in 
> 				  <loc href="&xml-schema-2;">XML Schema Datatypes</loc>.</p> 
> 			 </descr></constant><attribute readonly="no" type="decimal"
595c844,845
< 				<p>The low value for the data type in the value range.</p> 
---
> 				<p>The low value for a primitive DECIMAL_DATATYPE in the value
> 				  range. </p> 
598c848
< 		  <attribute readonly="no" type="int" name="highValue"
---
> 		  <attribute readonly="no" type="decimal" name="highValue"
601c851,852
< 				<p>The high value for the data type in the value range.</p> 
---
> 				<p>The high value for a primitive DECIMAL_DATATYPE in the value
> 				  range.</p> 
604,620c855
< 		  <method name="getPrimitiveType" id="CMDataType-getPrimitiveType"> 
< 			 <descr> 
< 				<p>Returns one of the enumerated code representing the
< 						primitive data type.</p> 
< 			 </descr> 
< 			 <parameters> 
< 			 </parameters> 
< 			 <returns type="short"> 
< 				<descr> 
< 				  <p>code representing the primitive type of the attached data
< 						  item.</p> 
< 				</descr> 
< 			 </returns> 
< 			 <raises> 
< 			 </raises> 
< 		  </method> 
< 		</interface>                    
---
> 		</interface>		                    
624c859
< =      ElementDeclaration                                                           =
---
> =      CMElementDeclaration                                                           =
627,628c862,863
< 		<interface name="ElementDeclaration"
< 		 id="CM-Interfaces-CMNodeType-ElementDeclaration"> 
---
> 		<interface name="CMElementDeclaration"
> 		 id="CM-Interfaces-CMElementDeclaration" inherits="CMNode"> 
631c866
< 					 context of a <code>CMNode</code>.</p> 
---
> 				context of a <code>CMNode</code>.</p> 
632a868,886
> 		  <attribute readonly="no" type="CMDataType" name="elementType"
> 			id="CM-Interfaces-CMNodeType-ElementDeclaration-elementType"> 
> 			 <descr> 
> 				<p>Datatype of the element.</p> 
> 			 </descr> 
> 		  </attribute> 
> 		  <attribute readonly="yes" type="boolean" name="isPCDataOnly"
> 			id="CM-Interfaces-CMNodeType-ElementDeclaration-isPCDataOnly"> 
> 			 <descr> 
> 				<p>Boolean defining whether the element type contains child
> 				  elements and PCDATA or PCDATA only for mixed element types. True if the element
> 				  is of type PCDATA only. Relevant only for mixed content type elements. </p> 
> 			 </descr> 
> 		  </attribute> 
> 		  <attribute name="tagName" type="DOMString" readonly="no"
> 			id="ElementDeclaratoin-name"> 
> 			 <descr> 
> 				<p>tagName of the element being declared.</p> 
> 			 </descr></attribute> 
636,637c890,891
< 				<p>Gets content type, e.g., empty, any, mixed, elements,
< 						PCDATA, of an element.</p> 
---
> 				<p>Gets content type, e.g., empty, any, mixed, elements, PCDATA, of
> 				  an element.</p> 
667,669c921
< 				<p>Returns a <code>CMNamedNodeMap</code> containing
< 						<code>AttributeDeclarations</code> for all the attributes that can appear on
< 						this type of element.</p> 
---
> 				<p>Returns a <code>CMNamedNodeMap</code> containing <code>CMAttributeDeclarations</code> for all the attributes that can appear on this type of element.</p> 
684,687c936,937
< 				<p>Returns a <code>CMNamedNodeMap</code> containing
< 						<code>ElementDeclarations</code> for all the <code>Element</code>s that can
< 						appear as children of this type of element. Note that which ones can actually
< 						appear, and in what order, is defined by the <code>CMChildren</code>.</p> 
---
> 				<p>Returns a <code>CMNamedNodeMap</code> containing <code>CMElementDeclarations</code> for all the <code>Element</code>s that can appear as children of this type of element. Note that which
> 				  ones can actually appear, and in what order, is defined by the <code>CMChildren</code>.</p> 
706c956,957
< 		<interface name="CMChildren" id="CM-Interfaces-CMNodeType-CMChildren"> 
---
> 		<interface name="CMChildren" id="CM-Interfaces-CMNodeType-CMChildren"
> 		 inherits="CMNode"> 
708c959
< 			 <p>An element in the context of a <code>CMNode</code>.</p> 
---
> 			 <p>The content model of a declared element.</p> 
710,711c961,968
< 		  <attribute readonly="no" type="DOMString" name="listOperator"
< 			id="CM-Interfaces-CMNodeType-CMChildren-listOperator"> 
---
> 		  <constant id="CM-Interfaces-CMNodeType-CMChildren-UNBOUNDED"
> 			name="UNBOUNDED" type="unsigned long" value="MAX_LONG"> 
> 			 <descr> 
> 				<p>Signifies unbounded upper limit. The MAX_LONG value is the
> 				  maximum value of an unsigned long integer for a given language binding.</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-CMNodeType-CMChildren-NONE" name="NONE" type="unsigned short"
> 		  value="0"> 
713c970,988
< 				<p>Operator list.</p> 
---
> 				<p>No operators defined on the <code>subModels</code>. This is usually the case where the subModels contain a single element
> 				  declaration.</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-CMNodeType-CMChildren-SEQUENCE" name="SEQUENCE"
> 		  type="unsigned short" value="1"> 
> 			 <descr> 
> 				<p>This constant value signifies a sequence operator ",".</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-CMNodeType-CMChildren-CHOICE" name="CHOICE"
> 		  type="unsigned short" value="2"> 
> 			 <descr> 
> 				<p>This constant value signifies a choice operator "|". </p> 
> 			 </descr></constant><attribute readonly="no" type="unsigned short"
> 		  name="listOperator" id="CM-Interfaces-CMNodeType-CMChildren-listOperator"> 
> 			 <descr> 
> 				<p>One of CHOICE or SEQUENCE. The operator is applied to all the
> 				  components(CMNodes) in the the <code>subModels</code>. For example, if the list operator is CHOICE and the components in
> 				  subModels are a, b and c then the content model for the element being declared
> 				  is (a|b|c)</p> 
716,717c991,992
< 		  <attribute readonly="no" type="CMDataType" name="elementType"
< 			id="CM-Interfaces-CMNodeType-CMChildren-elementType"> 
---
> 		  <attribute readonly="no" type="unsigned long" name="minOccurs"
> 			id="CM-Interfaces-CMNodeType-CMChildren-minOccurs"> 
719c994,995
< 				<p>Datatype of the element.</p> 
---
> 				<p>min occurrence for this content particle. Valid values are from
> 				  0 to UNBOUNDED.</p> 
722,723c998,1004
< 		  <attribute readonly="no" type="int" name="multiplicity"
< 			id="CM-Interfaces-CMNodeType-CMChildren-multiplicty"> 
---
> 		  <attribute name="maxOccurs" type="unsigned long"
> 			id="CM-Interfaces-CMNodeType-CMChildren-maxOccurs"> 
> 			 <descr> 
> 				<p>maximum occurrence for this content particle. Valid values are
> 				  from 0 to UNBOUNDED.</p> 
> 			 </descr></attribute><attribute readonly="no" type="CMNodeList"
> 		  name="subModels" id="CM-Interfaces-CMNodeType-CMChildren-subModels"> 
725c1006
< 				<p>0 or 1 or many.</p> 
---
> 				<p>Additional <code>CMNode</code>s in which the element can be defined.</p> 
728,729c1009,1010
< 		  <attribute readonly="no" type="CMNamedNodeMap" name="subModels"
< 			id="CM-Interfaces-CMNodeType-CMChildren-subModels"> 
---
> 		  <method name="removeCMNode" id="CM-Interfaces-CMChildren-removeCMNode">
> 			 
731,732c1012,1013
< 				<p>Additional <code>CMNode</code>s in which the element can be
< 						defined.</p> 
---
> 				<p>Removes the CMNode at the indicated index position in the
> 				  submodel.</p> 
734,736c1015,1028
< 		  </attribute> 
< 		  <attribute readonly="yes" type="boolean" name="isPCDataOnly"
< 			id="CM-Interfaces-CMNodeType-CMChildren-isPCDataOnly"> 
---
> 			 <parameters> 
> 				<param name="nodeIndex" type="unsigned long" attr="in"> 
> 				  <descr> 
> 					 <p>Index of the node being removed.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="CMNode"> 
> 				<descr> 
> 				  <p>The node removed is returned as a result of this method call.
> 					 The method returns <code>null</code> if the index is outside the bounds of the <code>subModels</code> list.</p> 
> 				</descr></returns><raises></raises> 
> 		  </method> 
> 		  <method name="insertCMNode" id="CM-Interfaces-CMChildren-insertCMNode">
> 			 
738,742c1030,1031
< 				<p>Boolean defining whether the element type contains child
< 						elements and PCDATA or PCDATA only for mixed element types. True if the element
< 						is of type PCDATA only. Relevant only for mixed content type elements. 
< 						<ednote><edtext>Do we really need this attribute ?</edtext> 
< 						</ednote></p> 
---
> 				<p>Inserts a new node at a position in the submodel referred to by
> 				  the nodeIndex. Node already exisiting in the list is moved as needed.</p> 
744c1033,1065
< 		  </attribute> 
---
> 			 <parameters> 
> 				<param name="nodeIndex" type="unsigned long" attr="in"> 
> 				  <descr> 
> 					 <p>The position of where the newNode is inserted.</p> 
> 				  </descr> 
> 				</param> 
> 				<param name="newNode" type="CMNode" attr="in"> 
> 				  <descr> 
> 					 <p>The new node to be inserted.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="int"> 
> 				<descr> 
> 				  <p>The index value at which it is inserted. If the nodeIndex is
> 					 outside the bound of the <code>subModels</code> list, the item is inserted at the back of the list. </p> 
> 				</descr></returns><raises></raises> 
> 		  </method> 
> 		  <method name="appendCMNode" id="CM-Interfaces-CMChildren-appendCMNode">
> 			 
> 			 <descr> 
> 				<p>Appends a new node to the end of the list representing the<code>subModels</code>.</p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param name="newNode" type="CMNode" attr="in"> 
> 				  <descr> 
> 					 <p>The new node to be appended.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters><returns type="int"> 
> 				<descr> 
> 				  <p>the length of the <code>subModels</code>.</p> 
> 				</descr></returns><raises></raises> 
> 		  </method> 
748c1069
< =     AttributeDeclaration                                                           =
---
> =     CMAttributeDeclaration                                                       =
751,752c1072,1073
< 		<interface name="AttributeDeclaration"
< 		 id="CM-Interfaces-CMNodeType-AttributeDeclaration"> 
---
> 		<interface name="CMAttributeDeclaration"
> 		 id="CM-Interfaces-CMNodeType-AttributeDeclaration" inherits="CMNode"> 
754c1075
< 			 <p>An attribute in the context of a <code>CMNode</code>.</p> 
---
> 			 <p>An attribute declaration in the context of a <code>CMNode</code>.</p> 
757c1078
<                   id="AttributeDeclaration-NO_VALUE_CONSTRAINT">
---
> 			id="AttributeDeclaration-NO_VALUE_CONSTRAINT"> 
760c1081
< 						constraint.</p> 
---
> 				  constraint.</p> 
762,763c1083
<                   id="AttributeDeclaration-DEFAULT_VALUE_CONSTRAINT"
< 		  type="short" value="1"> 
---
> 		  id="AttributeDeclaration-DEFAULT_VALUE_CONSTRAINT" type="short" value="1"> 
767,768c1087
<                   id="AttributeDeclaration-FIXED_VALUE_CONSTRAINT"
< 		  type="short" value="2"> 
---
> 		  id="AttributeDeclaration-FIXED_VALUE_CONSTRAINT" type="short" value="2"> 
771,772c1090,1091
< 						attribute.</p> 
< 			 </descr></constant><attribute readonly="yes" type="DOMString"
---
> 				  attribute.</p> 
> 			 </descr></constant><attribute readonly="no" type="DOMString"
775c1094
< 				<p>Name of attribute.</p> 
---
> 				<p>Name of the attribute.</p> 
806c1125,1126
< 			 </descr></attribute></interface> 
---
> 			 </descr></attribute> 
> 		</interface> 
809c1129
< =      EntityDeclaration                                                           =
---
> =      CMEntityDeclaration                                                           =
812,813c1132,1133
< 		<interface name="EntityDeclaration"
< 		 id="CM-Interfaces-CMNodeType-EntityDeclaration"> 
---
> 		<interface name="CMEntityDeclaration"
> 		 id="CM-Interfaces-CMNodeType-EntityDeclaration" inherits="CMNode"> 
815c1135,1139
< 			 <p>As in current DOM.</p> 
---
> 			 <p>Models a general entity declaration in a content model. 
> 				<ednote><edtext>The content model does not handle any parameter
> 					 entity. It is assumed that the parameter entiites are expanded by the
> 					 implementation as the content model is built.</edtext> 
> 				</ednote></p> 
816a1141,1180
> 		  <constant
> 			id="CM-Interfaces-CMNodeType-EntityDeclaration-INTERNAL_ENTITY"
> 			name="INTERNAL_ENTITY" type="short" value="1"> 
> 			 <descr> 
> 				<p>constant defining an internal entity.</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-CMNodeType-EntityDeclaration-EXTERNAL_ENTITY"
> 		  name="EXTERNAL_ENTITY" type="short" value="2"> 
> 			 <descr> 
> 				<p>constant defining an external entity.</p> 
> 			 </descr></constant><attribute name="entityType" type="short"
> 		  id="CM-Interfaces-CMEntityDeclaration-entityType"> 
> 			 <descr> 
> 				<p>One of the INTERNAL_ENTITY or EXTERNAL_ENTITY.</p> 
> 			 </descr></attribute><attribute name="entityName" type="DOMString"
> 		  id="CM-Interfaces-CMEntityDeclaration-entityName"> 
> 			 <descr> 
> 				<p>The name of the declared general entity.</p> 
> 			 </descr></attribute><attribute name="entityValue"
> 		  type="DOMString" id="CM-Interfaces-CMEntityDeclaration-entityValue"> 
> 			 <descr> 
> 				<p>The replacement text for the internal entity. The entity
> 				  references within the replacement text is kept intact. For entity of type
> 				  EXTERNAL_ENTITY this is <code>null</code>.</p> 
> 			 </descr></attribute><attribute name="systemId" type="DOMString"
> 		  id="CM-Interfaces-CMEntityDeclaration-systemId"> 
> 			 <descr> 
> 				<p>The system identifier associated with the entity, if specified.
> 				  If the system identifier was not specified, this is <code>null</code>.</p> 
> 			 </descr></attribute><attribute name="publicId" type="DOMString"
> 		  id="CM-Interfaces-CMEntityDeclaration-publicId"> 
> 			 <descr> 
> 				<p>The public identifier associated with the entity, if specified.
> 				  If the public identifier was not specified, this is <code>null</code>.</p> 
> 			 </descr></attribute><attribute name="notationName" type="DOMString"
> 		  id="CM-Interfaces-CMEntityDeclaration-notationName"> 
> 			 <descr> 
> 				<p>For unparsed entities, the name of the notation declaration for
> 				  the entity. For parsed entities, this is <code>null</code>. </p> 
> 			 </descr></attribute> 
824c1188
< 		 id="CM-Interfaces-CMNotationDeclaration"> 
---
> 		 id="CM-Interfaces-CMNotationDeclaration" inherits="CMNode"> 
828,829c1192,1197
< 		  <attribute name="strSystemIdentifier" type="DOMString"
< 			id="CMNotationDeclaration-strSystemIdentifier"> 
---
> 		  <attribute name="notationName" type="DOMString"
> 			id="CM-Interfaces-CMNotationDeclaration-notationName"> 
> 			 <descr> 
> 				<p>The name of this notation declaration.</p> 
> 			 </descr></attribute><attribute name="systemId" type="DOMString"
> 		  id="CMNotationDeclaration-strSystemIdentifier"> 
832,838c1200,1207
< 						declaration, if present, null otherwise.</p> 
< 			 </descr></attribute><attribute name="strPublicIdentifier"
< 		  type="DOMString" id="CMNotationDeclaration-strPublicIdentifier"> 
< 			 <descr> 
< 				<p>The string representing the public identifier for this
< 						notation declaration.</p> 
< 			 </descr></attribute></interface> 
---
> 				  declaration, if present, null otherwise.</p> 
> 			 </descr></attribute><attribute name="publicId" type="DOMString"
> 		  id="CMNotationDeclaration-strPublicIdentifier"> 
> 			 <descr> 
> 				<p>The string representing the public identifier for this notation
> 				  declaration.</p> 
> 			 </descr></attribute> 
> 		</interface> 
842,844c1211,1213
< 	 <p>This section contains "Validation and Other" methods common to both
< 			 the document-editing and CM-editing worlds (includes <code>Document</code>,
< 			 <code>DOMImplementation</code>, and <code>DOMErrorHandler</code> methods). </p><definitions> 
---
> 	 <p>This section contains "Validation and Other" methods common to both the
> 		document-editing and CM-editing worlds (includes <code>Document</code>, <code>DOMImplementation</code>, and <code>DOMErrorHandler</code> methods). </p> 
> 	 <definitions> 
853,854c1222
< 			 <p>The <code>setErrorHandler</code> method is off of the
< 					 <code>Document</code> interface.</p> 
---
> 			 <p>The <code>setErrorHandler</code> method is off of the <code>Document</code> interface.</p> 
859,860c1227
< 				<p>Allow an application to register an error event handler.
< 						</p> 
---
> 				<p>Allow an application to register an error event handler. </p> 
885,886c1252,1253
< 			 <p>This interface extends the <code>Document</code> interface
< 					 with additional methods for both document and CM editing.</p> 
---
> 			 <p>This interface extends the <code>Document</code> interface with additional methods for both document and CM editing.</p>
> 			 
887a1255,1301
> 		  <constant id="CM-Interfaces-DocumentCM-WF_CHECK" name="WF_CHECK"
> 			type="short" value="1"> 
> 			 <descr> 
> 				<p>Check for well-formedness of the document.</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-DocumentCM-NS_WF_CHECK" name="NS_WF_CHECK"
> 		  type="short" value="2"> 
> 			 <descr> 
> 				<p>Check for namespace well-formedness includes WF_CHECK.</p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-DocumentCM-PARTIAL_VALIDATY_CHECK"
> 		  name="PARTIAL_VALIDITY_CHECK" type="short" value="3"> 
> 			 <descr> 
> 				<p>Checks for whether the document is partially valid. It includes
> 				  NS_WF_CHECK.
>                                 </p>
>                                 <p>
> 	                        <termdef id="partially-valid" term="Partially valid">A document is said to be <term>partially valid</term> if it contains
> 						elments/attributes for which an element/attribute declaration has not been made
> 						in the active content model. However, if the element or the attribute has a
> 						declaration in the content model, it must be valid with respect to those
> 						declarations.
>                                 </termdef>
>                                 </p> 
> 			 </descr></constant><constant
> 		  id="CM-Interfaces-DocumentCM-STRICT_VALIDATY_CHECK"
> 		  name="STRICT_VALIDITY_CHECK" type="short" value="4"> 
> 			 <descr> 
> 				<p>Checks for strict validity of the document with respect to
> 				  active CM which by defiition includes NS_WF_CHECK.</p> 
> 			 </descr></constant><attribute name="continuousValidityChecking"
> 		  type="boolean" id="DocumentCM-continuousValidityChecking"> 
> 			 <descr> 
> 				<p>An attribute specifying whether continuous checking for the
> 				  validity of the document is enforced or not. When set to true the
> 				  implementation is free to raise the VALIDATION_ERR exception on DOM operations
> 				  that would make the document invalid with respect to "partial validity". This
> 				  attribute is false by default.</p> 
> 				<ednote><edtext>Add VALIDATION_ERR code to the list of constants in
> 					 DOMException.</edtext> 
> 				</ednote> 
> 			 </descr></attribute><attribute id="DocumentCM-ValidityChecking"
> 		  name="wfValidityCheckLevel" type="short"> 
> 			 <descr> 
> 				<p>This attribute defines the level at which the validity and
> 				  welformedness testing is done by the <code>isValid</code> method.</p> 
> 			 </descr></attribute> 
890,893c1304
< 				<p>Determines number of <code>CMExternalModel</code>s
< 						associated with the document. Only one <code>CMModel</code> can be associated
< 						with the document, but it may point to a list of
< 						<code>CMExternalModel</code>s.</p> 
---
> 				<p>Determines number of <code>CMExternalModel</code>s associated with the document. Only one <code>CMModel</code> can be associated with the document, but it may point to a list of <code>CMExternalModel</code>s.</p> 
907,908c1318
< 				<p>Find the sole <code>CMModel</code> of a document. Only one
< 						<code>CMModel</code> may be associated with the document.</p> 
---
> 				<p>Find the sole <code>CMModel</code> of a document. Only one <code>CMModel</code> may be associated with the document.</p> 
922,924c1332
< 				<p>Obtains a list of <code>CMExternalModel</code>s associated
< 						with a document from the <code>CMModel</code>. This list arises when
< 						<code>addCM()</code> is invoked.</p> 
---
> 				<p>Obtains list of <code>CMNodes</code> of type<code>CM_EXTERNALMODEL</code>s associated with the document.This list arises when <code>addCM()</code> is invoked.</p> 
928c1336
< 			 <returns type="CMExternalModel *"> 
---
> 			 <returns type="CMNodeList"> 
930,931c1338
< 				  <p>A list of <code>CMExternalModel</code>s associated with a
< 						  document.</p> 
---
> 				  <p>A list of <code>CMExternalModel</code>s associated with a document.</p> 
939,940c1346
< 				<p>Find the active <code>CMExternalModel</code> for a
< 						document.</p> 
---
> 				<p>Find the active <code>CMExternalModel</code> for a document.</p> 
946,947c1352
< 				  <p><code>CMModel</code> with a pointer to the active
< 						  <code>CMExternalModel</code> of document.</p> 
---
> 				  <p><code>CMModel</code> with a pointer to the active <code>CMExternalModel</code> of document.</p> 
955,959c1360,1361
< 				<p>Associate a <code>CMModel</code> with a document. Can be
< 						invoked multiple times to result in a list of <code>CMExternalModel</code>s.
< 						Note that only one sole internal <code>CMModel</code> is associated with the
< 						document, however, and that only one of the possible list of
< 						<code>CMExternalModel</code>s is active at any one time.</p> 
---
> 				<p>Associate a <code>CMModel</code> with a document. Can be invoked multiple times to result in a list of <code>CMExternalModel</code>s. Note that only one sole internal <code>CMModel</code> is associated with the document, however, and that only one of the
> 				  possible list of <code>CMExternalModel</code>s is active at any one time.</p> 
977,979c1379,1380
< 				<p>Removes a CM associated with a document; actually removes a
< 						<code>CMExternalModel</code>. Can be invoked multiple times to remove a number
< 						of these in the list of <code>CMExternalModel</code>s.</p> 
---
> 				<p>Removes a CM associated with a document; actually removes a <code>CMExternalModel</code>. Can be invoked multiple times to remove a number of these in the list
> 				  of <code>CMExternalModel</code>s.</p> 
997,1000c1398,1402
< 				<p>Make the given <code>CMModel</code> active. Note that if a
< 						user wants to activate one CM to get default attribute values and then activate
< 						another to do validation, a user can do that; however, only one CM is active at
< 						a time.</p> 
---
> 				<p>Make the given <code>CMModel</code> active. Note that if a user wants to activate one CM to get default
> 				  attribute values and then activate another to do validation, a user can do
> 				  that; however, only one CM is active at a time. In case where an attribute is
> 				  declared in an internal subset and corresponding <code>ownerElement</code> points to <code>CMElementDeclaration</code> defined in an external subset, changing active CM will cause the <code>ownerElement</code> to be re-computed. If the owner element is not defined in the newly
> 				  active CM, the <code>ownerElement</code> will be an empty node list.</p> 
1005,1007c1407
< 					 <p>CM to be active for the document. The
< 							 <code>CMModel</code> points to a list of <code>CMExternalModel</code>s; with
< 							 this call, only the specified CM will be active.</p> 
---
> 					 <p>CM to be active for the document. The <code>CMModel</code> points to a list of <code>CMExternalModel</code>s; with this call, only the specified CM will be active.</p> 
1013,1014c1413
< 				  <p>True if the <code>CMModel</code> has already been
< 						  associated with the document using <code>addCM()</code>; false if not.</p> 
---
> 				  <p>True if the <code>CMModel</code> has already been associated with the document using <code>addCM()</code>; false if not.</p> 
1029,1030c1428
< 			 <p>This interface extends the <code>DOMImplementation</code>
< 					 interface with additional methods.</p> 
---
> 			 <p>This interface extends the <code>DOMImplementation</code> interface with additional methods.</p> 
1065,1067c1463,1464
< 	 <p>This section contains "Document-editing" methods (includes
< 			 <code>Node</code>, <code>Element</code>, <code>Text</code> and
< 			 <code>Document</code> methods).</p><definitions> 
---
> 	 <p>This section contains "Document-editing" methods (includes <code>Node</code>, <code>Element</code>, <code>Text</code> and <code>Document</code> methods).</p> 
> 	 <definitions> 
1075,1076c1472
< 			 <p>This interface extends the <code>Node</code> interface with
< 					 additional methods for guided document editing.</p> 
---
> 			 <p>This interface extends the <code>Node</code> interface with additional methods for guided document editing.</p> 
1081,1084c1477,1479
< 				<p>Determines whether the <code>Node::InsertBefore</code>
< 						operation would make this document invalid with respect to the currently active
< 						CM. ISSUE: Describe "valid" when referring to partially completed
< 						documents.</p> 
---
> 				<p>Determines whether the <code>Node::InsertBefore</code> operation would make this document invalid with respect to the
> 				  currently active CM. ISSUE: Describe "valid" when referring to partially
> 				  completed documents.</p> 
1100,1101c1495
< 				  <p>A boolean that is true if the
< 						  <code>Node::InsertBefore</code> operation is allowed.</p> 
---
> 				  <p>A boolean that is true if the <code>Node::InsertBefore</code> operation is allowed.</p> 
1195c1589
< 						CM.</p> 
---
> 				  CM.</p> 
1201,1202c1595,1596
< 				  <p>True if the node is valid in the current context, false if
< 						  not.</p> 
---
> 				  <p>True if the node is valid/well-formed in the current context
> 					 and check level defined by wfValidityCheckLevel, false if not.</p> 
1206c1600,1605
< 			 </raises> 
---
> 				<exception name="DOMException"> 
> 				  <descr> 
> 					 <p>NO_CM_AVAILABLE: Exception is raised if the DocumentCM
> 						related to this node does not have any activeCM and wfValidityCheckLevel is set
> 						to STRICT_VALIDITY_CHECK.</p> 
> 				  </descr></exception></raises> 
1214c1613
< 		<interface name="ElementCM" inherits="Element"
---
> 		<interface name="ElementCM" inherits="Element,NodeCM"
1217,1218c1616
< 			 <p>This interface extends the <code>Element</code> interface with
< 					 additional methods for guided document editing.</p> 
---
> 			 <p>This interface extends the <code>Element</code> interface with additional methods for guided document editing.</p> 
1242c1640
< 			 <returns type="ElementDeclaration"> 
---
> 			 <returns type="CMElementDeclaration"> 
1244c1642
< 				  <p>ElementDeclaration object</p> 
---
> 				  <p>CMElementDeclaration object</p> 
1258c1656
< 				<p>Sets value for specified attribute.</p> 
---
> 				<p>Determines if the value for specified attribute can be set.</p> 
1274c1672
< 				  <p>Success or failure.</p> 
---
> 				  <p>true or false.</p> 
1283c1681
< 				<p>Determines if attribute can be set.</p> 
---
> 				<p>Determines if attribute node can be added.</p> 
1288,1289c1686
< 					 <p><code>Node</code> in which the attribute can possibly be
< 							 set.</p> 
---
> 					 <p><code>Node</code> in which the attribute can possibly be set.</p> 
1304c1701,1702
< 				<p>Determines if namespace of attribute's node can be set.</p> 
---
> 				<p>Determines if the attribute node with the given namespace can be
> 				  added.</p> 
1309,1310c1707,1736
< 					 <p>Attribute's <code>Node</code> in which to set the
< 							 namespace.</p> 
---
> 					 <p>The <code>Attr</code> to be added to the attribute list.</p> 
> 				  </descr> 
> 				</param> 
> 			 </parameters> 
> 			 <returns type="boolean"> 
> 				<descr> 
> 				  <p>Success or failure.</p> 
> 				</descr> 
> 			 </returns> 
> 			 <raises> 
> 			 </raises> 
> 		  </method> 
> 		  <method name="canSetAttributeNS"
> 			id="CM-Interfaces-ElementCM-ElementCM-canSetAttributeNS"> 
> 			 <descr> 
> 				<p>Determines if the attribute with given namespace and local name
> 				  can be created if not already present in the attribute list of the element. If
> 				  the attribute with same local name and namespaceURI is already present in the
> 				  elements attribute list it sets the value of the attribute and its prefix to
> 				  the new value. See DOM core <code>setAttributeNS</code>.</p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param attr="in" type="DOMString" name="attrname"> 
> 				  <descr> 
> 					 <p>Name of attribute.</p> 
> 				  </descr> 
> 				</param> 
> 				<param attr="in" type="DOMString" name="attrval"> 
> 				  <descr> 
> 					 <p>Value to be assigned to the attribute.</p> 
1332,1333c1758,1759
< 		  <method name="canSetAttributeNS"
< 			id="CM-Interfaces-ElementCM-ElementCM-canSetAttributeNS"> 
---
> 		  <method name="canRemoveAttribute"
> 			id="CM-Interfaces-ElementCM-ElementCM-canRemoveAttribute"> 
1335c1761
< 				<p>Determines if namespace of attribute can be set.</p> 
---
> 				<p>Verifies if an attribute by the given name can be removed.</p> 
1343c1769,1785
< 				<param attr="in" type="DOMString" name="attrval"> 
---
> 			 </parameters> 
> 			 <returns type="boolean"> 
> 				<descr> 
> 				  <p>true or false.</p> 
> 				</descr> 
> 			 </returns> 
> 			 <raises> 
> 			 </raises> 
> 		  </method> 
> 		  <method name="canRemoveAttributeNS"
> 			id="CM-Interfaces-ElementCM-ElementCM-canRemoveAttributeNS"> 
> 			 <descr> 
> 				<p>Verifies if an attribute by the given name and namespace can be
> 				  removed.</p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param attr="in" type="DOMString" name="attrname"> 
1345c1787
< 					 <p>Value to be assigned to the attribute.</p> 
---
> 					 <p>Qualified name of the attribute to be removed.</p> 
1348c1790
< 				<param attr="in" type="DOMString" name="namespaceURI"> 
---
> 				<param name="namespaceURI" type="DOMString"> 
1350c1792
< 					 <p><code>namespaceURI</code> of namespace.</p> 
---
> 					 <p>The namespace URI of the attribute to remove.</p> 
1353c1795,1810
< 				<param attr="in" type="DOMString" name="localName"> 
---
> 			 </parameters> 
> 			 <returns type="boolean"> 
> 				<descr> 
> 				  <p>true or false.</p> 
> 				</descr> 
> 			 </returns> 
> 			 <raises> 
> 			 </raises> 
> 		  </method> 
> 		  <method name="canRemoveAttributeNode"
> 			id="CM-Interfaces-ElementCM-canRemoveAttributeNode"> 
> 			 <descr> 
> 				<p>Determines if an attribute node can be removed.</p> 
> 			 </descr> 
> 			 <parameters> 
> 				<param attr="in" type="Node" name="node"> 
1355c1812
< 					 <p><code>localName</code> of namespace.</p> 
---
> 					 <p>The <code>Attr</code> node to remove from the attribute list.</p> 
1361c1818
< 				  <p>Success or failure.</p> 
---
> 				  <p>true or false.</p> 
1373c1830
< 		<interface name="CharacterDataCM" inherits="Text"
---
> 		<interface name="CharacterDataCM" inherits="Text,NodeCM"
1376,1377c1833
< 			 <p>This interface extends the <code>CharacterData</code>
< 					 interface with additional methods for document editing.</p> 
---
> 			 <p>This interface extends the <code>CharacterData</code> interface with additional methods for document editing.</p> 
1388,1389c1844,1845
< 				  <p>True if content only whitespace; false for non-whitespace
< 						  if it is a text node in element content.</p> 
---
> 				  <p>True if content only whitespace; false for non-whitespace if
> 					 it is a text node in element content.</p> 
1551c2007
< 		<interface name="DocumentTypeCM" inherits="DocumentType"
---
> 		<interface name="DocumentTypeCM" inherits="DocumentType,NodeCM"
1554,1555c2010
< 			 <p>This interface extends the <code>DocumentType</code> interface
< 					 with additional methods for document editing.</p> 
---
> 			 <p>This interface extends the <code>DocumentType</code> interface with additional methods for document editing.</p> 
1559,1560c2014,2015
< 				<p>Determines if this element is defined in the currently
< 						active CM.</p> 
---
> 				<p>Determines if this element is defined in the currently active
> 				  CM.</p> 
1581c2036
< 						currently active CM.</p> 
---
> 				  currently active CM.</p> 
1611,1612c2066,2067
< 				<p>Determines if this attribute is defined for this element in
< 						the currently active CM.</p> 
---
> 				<p>Determines if this attribute is defined for this element in the
> 				  currently active CM.</p> 
1617c2072
< 					 <p>Name of element.</p> 
---
> 					 <p>Name of the element.</p> 
1622c2077
< 					 <p>Name of attribute.</p> 
---
> 					 <p>Name of the attribute.</p> 
1638c2093
< 						currently active CM.</p> 
---
> 				  currently active CM.</p> 
1674,1676c2129,2131
< 						complete list of defined elements and for a particular element type, the
< 						complete list of defined attributes. These two methods might return a list of
< 						strings which is a type not yet described in the DOM spec. </p> 
---
> 				  complete list of defined elements and for a particular element type, the
> 				  complete list of defined attributes. These two methods might return a list of
> 				  strings which is a type not yet described in the DOM spec. </p> 
1699c2154,2155
< 		<interface name="AttributeCM" id="CM-Interfaces-AttributeCM"> 
---
> 		<interface name="AttributeCM" id="CM-Interfaces-AttributeCM"
> 		 inherits="Attr,NodeCM"> 
1701,1702c2157
< 			 <p>This interface extends <code>Attr</code> to provide guided
< 					 editing of an XML document.</p> 
---
> 			 <p>This interface extends <code>Attr</code> to provide guided editing of an XML document.</p> 
1707,1708c2162,2163
< 				<p>returns the corresponding attribute declaration in the
< 						content model.</p> 
---
> 				<p>returns the corresponding attribute declaration in the content
> 				  model.</p> 
1712c2167
< 			 <returns type="AttributeDeclaration"> 
---
> 			 <returns type="CMAttributeDeclaration"> 
1714,1715c2169
< 				  <p>The attribute declaration corresponding to this
< 						  attribute</p> 
---
> 				  <p>The attribute declaration corresponding to this attribute</p> 
1723,1724c2177,2178
< 				<p>Returns the notation declaration for the attributes defined
< 						of type NOTATION.</p> 
---
> 				<p>Returns the notation declaration for the attributes defined of
> 				  type NOTATION.</p> 
1731c2185
< 						  type is of notation type, null otherwise.</p> 
---
> 					 type is of notation type, null otherwise.</p> 
1746c2200,2201
< 	 <p>This section contains DOM error handling interfaces.</p><definitions><!--=====================================================================
---
> 	 <p>This section contains DOM error handling interfaces.</p> 
> 	 <definitions><!--=====================================================================
1753,1758c2208,2212
< 			 <p>Basic interface for DOM error handlers. If an application
< 					 needs to implement customized error handling for DOM such as CM or Load/Save,
< 					 it must implement this interface and then register an instance using the
< 					 <code>setErrorHandler</code> method. All errors and warnings will then be
< 					 reported through this interface. Application writers can override the methods
< 					 in a subclass to take user-specified actions.</p> 
---
> 			 <p>Basic interface for DOM error handlers. If an application needs to
> 				implement customized error handling for DOM such as CM or Load/Save, it must
> 				implement this interface and then register an instance using the <code>setErrorHandler</code> method. All errors and warnings will then be reported through this
> 				interface. Application writers can override the methods in a subclass to take
> 				user-specified actions.</p> 
1763,1765c2217,2219
< 						recommendation. The default behavior if the user doesn't register a handler is
< 						to report conditions that are not errors or fatal errors, and then allow the
< 						calling application to continue even after invoking this method.</p> 
---
> 				  recommendation. The default behavior if the user doesn't register a handler is
> 				  to report conditions that are not errors or fatal errors, and then allow the
> 				  calling application to continue even after invoking this method.</p> 
1771,1773c2225,2227
< 							 position in the case of loading, or a node reference for later validation. The
< 							 public ID and system ID for the error location could be some of the
< 							 information. </p> 
---
> 						position in the case of loading, or a node reference for later validation. The
> 						public ID and system ID for the error location could be some of the
> 						information. </p> 
1802,1804c2256,2258
< 						section 1.2 of the W3C XML 1.0 recommendation. The default behavior if the user
< 						doesn't register a handler is to throw a DOMSystemException and stop all
< 						further processing.</p> 
---
> 				  section 1.2 of the W3C XML 1.0 recommendation. The default behavior if the user
> 				  doesn't register a handler is to throw a DOMSystemException and stop all
> 				  further processing.</p> 
1809,1812c2263,2266
< 					 <p>Location of the fatal error, which could be either a
< 							 source position in the case of loading, or a node reference for later
< 							 validation. The public ID and system ID for the error location could be some of
< 							 the information. </p> 
---
> 					 <p>Location of the fatal error, which could be either a source
> 						position in the case of loading, or a node reference for later validation. The
> 						public ID and system ID for the error location could be some of the
> 						information. </p> 
1840,1843c2294,2297
< 				<p>Receive notification of a recoverable error per section 1.2
< 						of the W3C XML 1.0 recommendation. The default behavior if the user doesn't
< 						register a handler is to report conditions that are not fatal errors, and allow
< 						the calling application to continue processing.</p> 
---
> 				<p>Receive notification of a recoverable error per section 1.2 of
> 				  the W3C XML 1.0 recommendation. The default behavior if the user doesn't
> 				  register a handler is to report conditions that are not fatal errors, and allow
> 				  the calling application to continue processing.</p> 
1849,1851c2303,2305
< 							 position in the case of loading, or a node reference for later validation. The
< 							 public ID and system ID for the error location could be some of the
< 							 information. </p> 
---
> 						position in the case of loading, or a node reference for later validation. The
> 						public ID and system ID for the error location could be some of the
> 						information. </p> 
1887c2341
< 					 similar to a SAX locator object.</p> 
---
> 				similar to a SAX locator object.</p> 
1925,1926c2379,2380
< 				  <p>A string containing the public identifier, or null if none
< 						  is available.</p> 
---
> 				  <p>A string containing the public identifier, or null if none is
> 					 available.</p> 
1940,1941c2394,2395
< 				  <p>A string containing the system identifier, or null if none
< 						  is available. </p> 
---
> 				  <p>A string containing the system identifier, or null if none is
> 					 available. </p> 
1966,1985c2420,2439
< 	 <p>Editing and generating a content model falls in the CM-editing
< 			 world. The most obvious requirement for this set of requirements is for tools
< 			 that author content models, either under user control, i.e., explicitly
< 			 designed document types, or generated from other representations. The latter
< 			 class includes transcoding tools, e.g., synthesizing an XML representation to
< 			 match a database schema.</p> 
< 	 <p>It's important to note here that a DTD's "internal subset" is part
< 			 of the Content Model, yet is loaded, stored, and maintained as part of the
< 			 individual document instance. This implies that even tools which do not want to
< 			 let users change the definition of the Document Type may need to support
< 			 editing operations upon this portion of the CM. It also means that our
< 			 representation of the CM must be aware of where each portion of its content
< 			 resides, so that when the serializer processes this document it can write out
< 			 just the internal subset. A similar issue may arise with external parsed
< 			 entities, or if schemas introduce the ability to reference other schemas.
< 			 Finally, the internal-subset case suggests that we may want at least a
< 			 two-level representation of content models, so a single DOM representation of a
< 			 DTD can be shared among several documents, each potentially also having its own
< 			 internal subset; it's possible that entity layering may be represented the same
< 			 way.</p> 
---
> 	 <p>Editing and generating a content model falls in the CM-editing world.
> 		The most obvious requirement for this set of requirements is for tools that
> 		author content models, either under user control, i.e., explicitly designed
> 		document types, or generated from other representations. The latter class
> 		includes transcoding tools, e.g., synthesizing an XML representation to match a
> 		database schema.</p> 
> 	 <p>It's important to note here that a DTD's "internal subset" is part of
> 		the Content Model, yet is loaded, stored, and maintained as part of the
> 		individual document instance. This implies that even tools which do not want to
> 		let users change the definition of the Document Type may need to support
> 		editing operations upon this portion of the CM. It also means that our
> 		representation of the CM must be aware of where each portion of its content
> 		resides, so that when the serializer processes this document it can write out
> 		just the internal subset. A similar issue may arise with external parsed
> 		entities, or if schemas introduce the ability to reference other schemas.
> 		Finally, the internal-subset case suggests that we may want at least a
> 		two-level representation of content models, so a single DOM representation of a
> 		DTD can be shared among several documents, each potentially also having its own
> 		internal subset; it's possible that entity layering may be represented the same
> 		way.</p> 
1987,2008c2441,2462
< 			 interface with parsers. One of the ongoing problems in the DOM is that there is
< 			 some information which must currently be created via completely undocumented
< 			 mechanisms, which limits the ability to mix and match DOMs and parsers. Given
< 			 that specialized DOMs are going to become more common (sub-classed, or wrappers
< 			 around other kinds of storage, or optimized for specific tasks), we must avoid
< 			 that situation and provide a "builder" API. Particular pairs of DOMs and
< 			 parsers may bypass it, but it's required as a portability mechanism.</p> 
< 	 <p>Note that several of these applications require that a CM be able to
< 			 be created, loaded, and manipulated without/before being bound to a specific
< 			 Document. A related issue is that we'd want to be able to share a single
< 			 representation of a CM among several documents, both for storage efficiency and
< 			 so that changes in the CM can quickly be tested by validating it against a set
< 			 of known-good documents. Similarly, there is a known problem in DOM Level 2
< 			 where we assume that the DocumentType will be created before the Document,
< 			 which is fine for newly-constructed documents but not a good match for the
< 			 order in which an XML parser encounters this data; being able to "rebind" a
< 			 Document to a new CM, after it has been created may be desirable.</p> 
< 	 <p>As noted earlier, questions about whether one can alter the content
< 			 of the CM via its syntax, via higher-level abstractions, or both, exist. It's
< 			 also worth noting that many of the editing concepts from the Document tree
< 			 still apply; users should probably be able to clone part of a CM, remove and
< 			 re-insert parts, and so on.</p> 
---
> 		interface with parsers. One of the ongoing problems in the DOM is that there is
> 		some information which must currently be created via completely undocumented
> 		mechanisms, which limits the ability to mix and match DOMs and parsers. Given
> 		that specialized DOMs are going to become more common (sub-classed, or wrappers
> 		around other kinds of storage, or optimized for specific tasks), we must avoid
> 		that situation and provide a "builder" API. Particular pairs of DOMs and
> 		parsers may bypass it, but it's required as a portability mechanism.</p> 
> 	 <p>Note that several of these applications require that a CM be able to be
> 		created, loaded, and manipulated without/before being bound to a specific
> 		Document. A related issue is that we'd want to be able to share a single
> 		representation of a CM among several documents, both for storage efficiency and
> 		so that changes in the CM can quickly be tested by validating it against a set
> 		of known-good documents. Similarly, there is a known problem in DOM Level 2
> 		where we assume that the DocumentType will be created before the Document,
> 		which is fine for newly-constructed documents but not a good match for the
> 		order in which an XML parser encounters this data; being able to "rebind" a
> 		Document to a new CM, after it has been created may be desirable.</p> 
> 	 <p>As noted earlier, questions about whether one can alter the content of
> 		the CM via its syntax, via higher-level abstractions, or both, exist. It's also
> 		worth noting that many of the editing concepts from the Document tree still
> 		apply; users should probably be able to clone part of a CM, remove and
> 		re-insert parts, and so on.</p> 
2012,2026c2466,2480
< 	 <p>In addition to using the content model to validate a document
< 			 instance, applications would like to be able to use it to guide construction
< 			 and editing of documents, which falls into the document-editing world. Examples
< 			 of this sort of guided editing already exist, and are becoming more common. The
< 			 necessary queries can be phrased in several ways, the most useful of which may
< 			 be a combination of "what does the DTD allow me to insert here" and "if I
< 			 insert this here, will the document still be valid". The former is better
< 			 suited to presentation to humans via a user interface, and when taken together
< 			 with sub-tree validation may subsume the latter. </p> 
< 	 <p>It has been proposed that in addition to asking questions about
< 			 specific parts of the content model, there should be a reasonable way to obtain
< 			 a list of all the defined symbols of a given type (element, attribute, entity)
< 			 independent of whether they're valid in a given location; that might be useful
< 			 in building a list in a user-interface, which could then be updated to reflect
< 			 which of these are relevant for the program's current state.</p> 
---
> 	 <p>In addition to using the content model to validate a document instance,
> 		applications would like to be able to use it to guide construction and editing
> 		of documents, which falls into the document-editing world. Examples of this
> 		sort of guided editing already exist, and are becoming more common. The
> 		necessary queries can be phrased in several ways, the most useful of which may
> 		be a combination of "what does the DTD allow me to insert here" and "if I
> 		insert this here, will the document still be valid". The former is better
> 		suited to presentation to humans via a user interface, and when taken together
> 		with sub-tree validation may subsume the latter. </p> 
> 	 <p>It has been proposed that in addition to asking questions about specific
> 		parts of the content model, there should be a reasonable way to obtain a list
> 		of all the defined symbols of a given type (element, attribute, entity)
> 		independent of whether they're valid in a given location; that might be useful
> 		in building a list in a user-interface, which could then be updated to reflect
> 		which of these are relevant for the program's current state.</p> 
2028,2031c2482,2485
< 			 attributes, a "can-this-go-there" may prompt a namespace-well-formedness check
< 			 and warn you if you're about to conflict with or overwrite another attribute
< 			 with the same namespaceURI/localName but different prefix... or same nodeName but
< 			 different namespaceURI. </p> 
---
> 		attributes, a "can-this-go-there" may prompt a namespace-well-formedness check
> 		and warn you if you're about to conflict with or overwrite another attribute
> 		with the same namespaceURI/localName but different prefix... or same nodeName
> 		but different namespaceURI. </p> 
2033,2038c2487,2492
< 			 distance between two valid documents may be through an invalid one. Users may
< 			 want to know several levels of detail (all the possible children, those which
< 			 would be valid given what precedes this point, those which would be valid given
< 			 both preceding and following siblings). Also, once XML Schemas introduce
< 			 context sensitive validity, we may have to consider the effect of children as
< 			 well as the individual node being inserted.</p> 
---
> 		distance between two valid documents may be through an invalid one. Users may
> 		want to know several levels of detail (all the possible children, those which
> 		would be valid given what precedes this point, those which would be valid given
> 		both preceding and following siblings). Also, once XML Schemas introduce
> 		context sensitive validity, we may have to consider the effect of children as
> 		well as the individual node being inserted.</p> 
2043,2069c2497,2523
< 			 Content Model) is to use it to validate that a given XML document is in fact a
< 			 properly constructed instance of the document type described by this CM. This
< 			 again falls into the document-editing world. The XML spec only discusses
< 			 performing this test at the time the document is loaded into the "processor",
< 			 which most of us have taken to mean that this check should be performed at
< 			 parse time. But it is obviously desirable to be able to validate again a document
< 			 -- or selected subtrees -- at other times. One such case would be validating an
< 			 edited or newly constructed document before serializing it or otherwise passing
< 			 it to other users. This issue also arises if the "internal subset" is altered
< 			 -- or if the whole Content Model changes.</p> 
< 	 <p> In the past, the DOM has allowed users to create invalid documents,
< 			 and assumed the serializer would accept the task of detecting problems and
< 			 announcing/repairing them when the document was written out in XML syntax... or
< 			 that they would be checked for validity when read back in. We considered adding
< 			 validity checks to the DOM's existing editing operations to prevent creation of
< 			 invalid documents, but are currently inclined against this for several reasons.
< 			 First, it would impose a significant amount of computational overhead to the
< 			 DOM, which might be unnecessary in many situations, e.g., if the change is
< 			 occurring in a context where we know the result will be valid. Second, "the
< 			 shortest distance between two good documents may be through a bad document".
< 			 Preventing a document from becoming temporarily invalid may impose a
< 			 considerable amount of additional work on higher-level code and users Hence our
< 			 current plan is to continue to permit editing to produce invalid DOMs, but
< 			 provide operations which permit a user to check the validity of a node on
< 			 demand.</p> 
< 	 <p>Note that validation includes checking that ID attributes are
< 			 unique, and that IDREFs point to IDs which actually exist.</p> 
---
> 		Content Model) is to use it to validate that a given XML document is in fact a
> 		properly constructed instance of the document type described by this CM. This
> 		again falls into the document-editing world. The XML spec only discusses
> 		performing this test at the time the document is loaded into the "processor",
> 		which most of us have taken to mean that this check should be performed at
> 		parse time. But it is obviously desirable to be able to validate again a
> 		document -- or selected subtrees -- at other times. One such case would be
> 		validating an edited or newly constructed document before serializing it or
> 		otherwise passing it to other users. This issue also arises if the "internal
> 		subset" is altered -- or if the whole Content Model changes.</p> 
> 	 <p> In the past, the DOM has allowed users to create invalid documents, and
> 		assumed the serializer would accept the task of detecting problems and
> 		announcing/repairing them when the document was written out in XML syntax... or
> 		that they would be checked for validity when read back in. We considered adding
> 		validity checks to the DOM's existing editing operations to prevent creation of
> 		invalid documents, but are currently inclined against this for several reasons.
> 		First, it would impose a significant amount of computational overhead to the
> 		DOM, which might be unnecessary in many situations, e.g., if the change is
> 		occurring in a context where we know the result will be valid. Second, "the
> 		shortest distance between two good documents may be through a bad document".
> 		Preventing a document from becoming temporarily invalid may impose a
> 		considerable amount of additional work on higher-level code and users Hence our
> 		current plan is to continue to permit editing to produce invalid DOMs, but
> 		provide operations which permit a user to check the validity of a node on
> 		demand.</p> 
> 	 <p>Note that validation includes checking that ID attributes are unique,
> 		and that IDREFs point to IDs which actually exist.</p> 
2073,2080c2527,2534
< 			 which are parsed without reference to their DTDs. Knowing that a document is
< 			 well-formed may be useful by itself even when a DTD is available. For example,
< 			 users may wish to deliberately save an invalid document, perhaps as a
< 			 checkpoint before further editing. Hence, the CM feature will permit both full
< 			 validity checking (see next section) and "lightweight" WF checking, as
< 			 requested by the caller, as well as processing entity declarations in the CM
< 			 even if validation is not turned on. This falls within the document-editing
< 			 world.</p> 
---
> 		which are parsed without reference to their DTDs. Knowing that a document is
> 		well-formed may be useful by itself even when a DTD is available. For example,
> 		users may wish to deliberately save an invalid document, perhaps as a
> 		checkpoint before further editing. Hence, the CM feature will permit both full
> 		validity checking (see previous section) and "lightweight" WF checking, as
> 		requested by the caller, as well as processing entity declarations in the CM
> 		even if validation is not turned on. This falls within the document-editing
> 		world.</p> 
2082,2084c2536,2538
< 			 conditions (proper nesting of elements, constraints on which children may be
< 			 placed within each node), there are some checks that are not yet performed.
< 			 These include:</p> 
---
> 		conditions (proper nesting of elements, constraints on which children may be
> 		placed within each node), there are some checks that are not yet performed.
> 		These include:</p> 
2087,2089c2541,2543
< 		  <p>Character restrictions for text content and attribute values.
< 				  Some characters aren't permitted even when expressed as numeric character
< 				  entities</p> 
---
> 		  <p>Character restrictions for text content and attribute values. Some
> 			 characters aren't permitted even when expressed as numeric character
> 			 entities</p> 
2095,2096c2549,2550
< 		  <p>The two-character sequence "--" in comments. (Which, be it
< 				  noted, some XML validators don't currently remember to test...)</p> 
---
> 		  <p>The two-character sequence "--" in comments. (Which, be it noted,
> 			 some XML validators don't currently remember to test...)</p> 
2099,2100c2553,2554
< 	 <p>In addition, Namespaces introduce their own concepts of
< 			 well-formedness. Specifically:</p> 
---
> 	 <p>In addition, Namespaces introduce their own concepts of well-formedness.
> 		Specifically:</p> 
2103,2105c2557,2559
< 		  <p>No two attributes on a single Element may have the same
< 				  combination of namespaceURI and localName, even if their prefixes are different
< 				  and hence they don't conflict under XML 1.0 rules.</p> 
---
> 		  <p>No two attributes on a single Element may have the same combination
> 			 of namespaceURI and localName, even if their prefixes are different and hence
> 			 they don't conflict under XML 1.0 rules.</p> 
2108,2110c2562,2564
< 		  <p>NamespaceURIs must be legal URI syntax. (Note that once we have
< 				  this code, it may be reusable for the URI "datatype" in document content; see
< 				  discussion of datatypes.)</p> 
---
> 		  <p>NamespaceURIs must be legal URI syntax. (Note that once we have this
> 			 code, it may be reusable for the URI "datatype" in document content; see
> 			 discussion of datatypes.)</p> 
2113,2124c2567,2576
< 		  <p>The mapping of namespace prefixes to their URIs must be declared
< 				  and consistent. That isn't required during normal DOM operation, since we
< 				  perform "early binding" and thereafter refer to nodes primarily via their namespaceURIs
< 				  and localName. But it does become an issue when we want to serialize the DOM to
< 				  XML syntax, and may be an issue if an application is assuming that all the
< 				  declarations are present and correct. This may imply that we should provide a
< 				  <code>namespaceNormalize</code> operation, which would create the implied
< 				  declarations and reconcile conflicts in some reasonably standardized manner.
< 				  This may be a major undertaking, since some DOMs may be using the namespace to
< 				  direct subclassing of the nodes or similar special treatment; as with the
< 				  existing <code>normalize</code> method, you may be left with a
< 				  different-but-equivalent set of node objects.</p> 
---
> 		  <p>The mapping of namespace prefixes to their URIs must be declared and
> 			 consistent. That isn't required during normal DOM operation, since we perform
> 			 "early binding" and thereafter refer to nodes primarily via their namespaceURIs
> 			 and localName. But it does become an issue when we want to serialize the DOM to
> 			 XML syntax, and may be an issue if an application is assuming that all the
> 			 declarations are present and correct. This may imply that we should provide a <code>namespaceNormalize</code> operation, which would create the implied declarations and reconcile
> 			 conflicts in some reasonably standardized manner. This may be a major
> 			 undertaking, since some DOMs may be using the namespace to direct subclassing
> 			 of the nodes or similar special treatment; as with the existing <code>normalize</code> method, you may be left with a different-but-equivalent set of node
> 			 objects.</p> 
2128,2145c2580,2598
< 			 violate these rules, and assumed the serializer would accept the task of
< 			 detecting problems and announcing/repairing them when the document was written
< 			 out in XML syntax. We considered adding WF checks to the DOM's existing editing
< 			 operations to prevent WF violations from arising, but are currently inclined
< 			 against this for two reasons. First, it would impose a significant amount of
< 			 computational overhead to the DOM, which might be unnecessary in many
< 			 situations (for example, if the change is occurring in a context where we know
< 			 the illegal characters have already been prevented from arising). Second, "the
< 			 shortest distance between two good documents may be through a bad document" --
< 			 preventing a document from becoming temporarily ill-formed may impose a
< 			 considerable amount of additional work on higher-level code and users. (Note
< 			 possible issue for Serialization: In some applications, being able to save and
< 			 reload marginally poorly-formed DOMs might be useful -- editor checkpoint
< 			 files, for example.) Hence our current plan is to continue to permit editing to
< 			 produce ill-formed DOMs, but provide operations which permit a user to check
< 			 the well-formedness of a node on demand, and possibly provide some of the
< 			 primitive (e.g., string-checking) functions directly.</p> 
<   </div2></div1><!--
---
> 		violate these rules, and assumed the serializer would accept the task of
> 		detecting problems and announcing/repairing them when the document was written
> 		out in XML syntax. We considered adding WF checks to the DOM's existing editing
> 		operations to prevent WF violations from arising, but are currently inclined
> 		against this for two reasons. First, it would impose a significant amount of
> 		computational overhead to the DOM, which might be unnecessary in many
> 		situations (for example, if the change is occurring in a context where we know
> 		the illegal characters have already been prevented from arising). Second, "the
> 		shortest distance between two good documents may be through a bad document" --
> 		preventing a document from becoming temporarily ill-formed may impose a
> 		considerable amount of additional work on higher-level code and users. (Note
> 		possible issue for Serialization: In some applications, being able to save and
> 		reload marginally poorly-formed DOMs might be useful -- editor checkpoint
> 		files, for example.) Hence our current plan is to continue to permit editing to
> 		produce ill-formed DOMs, but provide operations which permit a user to check
> 		the well-formedness of a node on demand, and possibly provide some of the
> 		primitive (e.g., string-checking) functions directly.</p> 
>   </div2>
> </div1><!--
Received on Thursday, 19 April 2001 13:06:18 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 22 June 2012 06:13:48 GMT