blob: b97d97221361db6b0a56011a9a2b790d230b7bc9 [file] [log] [blame]
Fred Drakeeaf57aa2000-11-29 06:10:22 +00001\section{\module{xml.dom} ---
2 The Document Object Model API}
Fred Drake669d36f2000-10-24 02:34:45 +00003
Fred Drakeeaf57aa2000-11-29 06:10:22 +00004\declaremodule{standard}{xml.dom}
5\modulesynopsis{Document Object Model API for Python.}
Fred Drake669d36f2000-10-24 02:34:45 +00006\sectionauthor{Paul Prescod}{paul@prescod.net}
7\sectionauthor{Martin v. L\"owis}{loewis@informatik.hu-berlin.de}
8
9\versionadded{2.0}
10
Fred Drakeeaf57aa2000-11-29 06:10:22 +000011The Document Object Model, or ``DOM,'' is a cross-language API from
12the World Wide Web Consortium (W3C) for accessing and modifying XML
13documents. A DOM implementation presents an XML document as a tree
14structure, or allows client code to build such a structure from
15scratch. It then gives access to the structure through a set of
16objects which provided well-known interfaces.
Fred Drake669d36f2000-10-24 02:34:45 +000017
Fred Drakeeaf57aa2000-11-29 06:10:22 +000018The DOM is extremely useful for random-access applications. SAX only
19allows you a view of one bit of the document at a time. If you are
20looking at one SAX element, you have no access to another. If you are
21looking at a text node, you have no access to a containing element.
22When you write a SAX application, you need to keep track of your
23program's position in the document somewhere in your own code. SAX
24does not do it for you. Also, if you need to look ahead in the XML
25document, you are just out of luck.
Fred Drake669d36f2000-10-24 02:34:45 +000026
27Some applications are simply impossible in an event driven model with
Fred Drakeeaf57aa2000-11-29 06:10:22 +000028no access to a tree. Of course you could build some sort of tree
Fred Drake669d36f2000-10-24 02:34:45 +000029yourself in SAX events, but the DOM allows you to avoid writing that
Fred Drakeeaf57aa2000-11-29 06:10:22 +000030code. The DOM is a standard tree representation for XML data.
Fred Drake669d36f2000-10-24 02:34:45 +000031
Fred Drakeeaf57aa2000-11-29 06:10:22 +000032%What if your needs are somewhere between SAX and the DOM? Perhaps
33%you cannot afford to load the entire tree in memory but you find the
34%SAX model somewhat cumbersome and low-level. There is also a module
35%called xml.dom.pulldom that allows you to build trees of only the
36%parts of a document that you need structured access to. It also has
37%features that allow you to find your way around the DOM.
Fred Drake669d36f2000-10-24 02:34:45 +000038% See http://www.prescod.net/python/pulldom
39
Fred Drakeeaf57aa2000-11-29 06:10:22 +000040The Document Object Model is being defined by the W3C in stages, or
41``levels'' in their terminology. The Python mapping of the API is
42substantially based on the DOM Level 2 recommendation. Some aspects
Fred Drake66f98b42001-01-26 20:51:32 +000043of the API will only become available in Python 2.1, or may only be
Fred Drakeeaf57aa2000-11-29 06:10:22 +000044available in particular DOM implementations.
Fred Drake669d36f2000-10-24 02:34:45 +000045
Fred Drakeeaf57aa2000-11-29 06:10:22 +000046DOM applications typically start by parsing some XML into a DOM. How
47this is accomplished is not covered at all by DOM Level 1, and Level 2
48provides only limited improvements. There is a
49\class{DOMImplementation} object class which provides access to
50\class{Document} creation methods, but these methods were only added
51in DOM Level 2 and were not implemented in time for Python 2.0. There
Fred Drake66f98b42001-01-26 20:51:32 +000052is also no well-defined way to access these methods without an
Fred Drakeeaf57aa2000-11-29 06:10:22 +000053existing \class{Document} object. For Python 2.0, consult the
54documentation for each particular DOM implementation to determine the
55bootstrap procedure needed to create and initialize \class{Document}
Fred Drake66f98b42001-01-26 20:51:32 +000056and \class{DocumentType} instances.
Fred Drake669d36f2000-10-24 02:34:45 +000057
58Once you have a DOM document object, you can access the parts of your
59XML document through its properties and methods. These properties are
Fred Drakeeaf57aa2000-11-29 06:10:22 +000060defined in the DOM specification; this portion of the reference manual
61describes the interpretation of the specification in Python.
Fred Drake669d36f2000-10-24 02:34:45 +000062
Fred Drakeeaf57aa2000-11-29 06:10:22 +000063The specification provided by the W3C defines the DOM API for Java,
64ECMAScript, and OMG IDL. The Python mapping defined here is based in
65large part on the IDL version of the specification, but strict
66compliance is not required (though implementations are free to support
67the strict mapping from IDL). See section \ref{dom-conformance},
68``Conformance,'' for a detailed discussion of mapping requirements.
Fred Drake669d36f2000-10-24 02:34:45 +000069
Fred Drake669d36f2000-10-24 02:34:45 +000070
71\begin{seealso}
Fred Drakeeaf57aa2000-11-29 06:10:22 +000072 \seetitle[http://www.w3.org/TR/DOM-Level-2-Core/]{Document Object
73 Model (DOM) Level 2 Specification}
74 {The W3C recommendation upon which the Python DOM API is
75 based.}
76 \seetitle[http://www.w3.org/TR/REC-DOM-Level-1/]{Document Object
77 Model (DOM) Level 1 Specification}
78 {The W3C recommendation for the
Fred Drake669d36f2000-10-24 02:34:45 +000079 DOM supported by \module{xml.dom.minidom}.}
80 \seetitle[http://pyxml.sourceforge.net]{PyXML}{Users that require a
81 full-featured implementation of DOM should use the PyXML
82 package.}
Fred Drakeeaf57aa2000-11-29 06:10:22 +000083 \seetitle[http://cgi.omg.org/cgi-bin/doc?orbos/99-08-02.pdf]{CORBA
84 Scripting with Python}
85 {This specifies the mapping from OMG IDL to Python.}
Fred Drake669d36f2000-10-24 02:34:45 +000086\end{seealso}
87
Martin v. Löwis7edbd4f2001-02-22 14:05:50 +000088\subsection{Module Contents}
89
90The \module{xml.dom} contains the following functions:
91
92\begin{funcdesc}{registerDOMImplementation}{name, factory}
Fred Drake07e6c502001-02-23 19:15:56 +000093Register the \var{factory} function with the name \var{name}. The
94factory function should return an object which implements the
95\class{DOMImplementation} interface. The factory function can return
96the same object every time, or a new one for each call, as appropriate
97for the specific implementation (e.g. if that implementation supports
Martin v. Löwis7edbd4f2001-02-22 14:05:50 +000098some customization).
99\end{funcdesc}
100
101\begin{funcdesc}{getDOMImplementation}{name = None, features = ()}
102Return a suitable DOM implementation. The \var{name} is either
103well-known, the module name of a DOM implementation, or
104\code{None}. If it is not \code{None}, imports the corresponding module and
105returns a \class{DOMImplementation} object if the import succeeds. If
Fred Drake07e6c502001-02-23 19:15:56 +0000106no name is given, and if the environment variable \envvar{PYTHON_DOM} is
Martin v. Löwis7edbd4f2001-02-22 14:05:50 +0000107set, this variable is used to find the implementation.
108
109If name is not given, consider the available implementations to find
110one with the required feature set. If no implementation can be found,
111raise an \exception{ImportError}. The features list must be a sequence of
112(feature, version) pairs which are passed to hasFeature.
113\end{funcdesc}
114
115% Should the Node documentation go here?
116
Fred Drakee21e2bb2001-10-26 20:09:49 +0000117In addition, \module{xml.dom} contains a base \class{Node} class and
118the DOM exception classes. The \class{Node} class provided by this
119module does not implement any of the methods or attributes defined by
120the DOM specification; concrete DOM implementations must provide
121those. The \class{Node} class provided as part of this module does
122provide the constants used for the \member{nodeType} attribute on
123concrete \class{Node} objects; they are located within the class
124rather than at the module level to conform with the DOM
125specifications.
Fred Drake669d36f2000-10-24 02:34:45 +0000126
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000127\subsection{Objects in the DOM \label{dom-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000128
129The definitive documentation for the DOM is the DOM specification from
Fred Drake16942f22000-12-07 04:47:51 +0000130the W3C.
Fred Drake669d36f2000-10-24 02:34:45 +0000131
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000132Note that DOM attributes may also be manipulated as nodes instead of
133as simple strings. It is fairly rare that you must do this, however,
134so this usage is not yet documented.
135
136
137\begin{tableiii}{l|l|l}{class}{Interface}{Section}{Purpose}
Fred Drake16942f22000-12-07 04:47:51 +0000138 \lineiii{DOMImplementation}{\ref{dom-implementation-objects}}
139 {Interface to the underlying implementation.}
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000140 \lineiii{Node}{\ref{dom-node-objects}}
141 {Base interface for most objects in a document.}
Fred Drake16942f22000-12-07 04:47:51 +0000142 \lineiii{NodeList}{\ref{dom-nodelist-objects}}
143 {Interface for a sequence of nodes.}
144 \lineiii{DocumentType}{\ref{dom-documenttype-objects}}
145 {Information about the declarations needed to process a document.}
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000146 \lineiii{Document}{\ref{dom-document-objects}}
147 {Object which represents an entire document.}
148 \lineiii{Element}{\ref{dom-element-objects}}
149 {Element nodes in the document hierarchy.}
150 \lineiii{Attr}{\ref{dom-attr-objects}}
151 {Attribute value nodes on element nodes.}
152 \lineiii{Comment}{\ref{dom-comment-objects}}
153 {Representation of comments in the source document.}
154 \lineiii{Text}{\ref{dom-text-objects}}
155 {Nodes containing textual content from the document.}
156 \lineiii{ProcessingInstruction}{\ref{dom-pi-objects}}
157 {Processing instruction representation.}
158\end{tableiii}
159
Fred Drakebc9c1b12000-12-13 17:38:02 +0000160An additional section describes the exceptions defined for working
161with the DOM in Python.
162
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000163
Fred Drake16942f22000-12-07 04:47:51 +0000164\subsubsection{DOMImplementation Objects
165 \label{dom-implementation-objects}}
166
167The \class{DOMImplementation} interface provides a way for
168applications to determine the availability of particular features in
169the DOM they are using. DOM Level 2 added the ability to create new
170\class{Document} and \class{DocumentType} objects using the
171\class{DOMImplementation} as well.
172
173\begin{methoddesc}[DOMImplementation]{hasFeature}{feature, version}
174\end{methoddesc}
175
176
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000177\subsubsection{Node Objects \label{dom-node-objects}}
178
Fred Drake669d36f2000-10-24 02:34:45 +0000179All of the components of an XML document are subclasses of
180\class{Node}.
181
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000182\begin{memberdesc}[Node]{nodeType}
Fred Drake669d36f2000-10-24 02:34:45 +0000183An integer representing the node type. Symbolic constants for the
Fred Drake66f98b42001-01-26 20:51:32 +0000184types are on the \class{Node} object:
Fred Drake669d36f2000-10-24 02:34:45 +0000185\constant{ELEMENT_NODE}, \constant{ATTRIBUTE_NODE},
186\constant{TEXT_NODE}, \constant{CDATA_SECTION_NODE},
187\constant{ENTITY_NODE}, \constant{PROCESSING_INSTRUCTION_NODE},
188\constant{COMMENT_NODE}, \constant{DOCUMENT_NODE},
189\constant{DOCUMENT_TYPE_NODE}, \constant{NOTATION_NODE}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000190This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000191\end{memberdesc}
192
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000193\begin{memberdesc}[Node]{parentNode}
Fred Drake16942f22000-12-07 04:47:51 +0000194The parent of the current node, or \code{None} for the document node.
195The value is always a \class{Node} object or \code{None}. For
196\class{Element} nodes, this will be the parent element, except for the
197root element, in which case it will be the \class{Document} object.
198For \class{Attr} nodes, this is always \code{None}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000199This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000200\end{memberdesc}
201
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000202\begin{memberdesc}[Node]{attributes}
Fred Drake61f79492001-10-25 20:42:57 +0000203A \class{NamedNodeMap} of attribute objects. Only elements have
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000204actual values for this; others provide \code{None} for this attribute.
Fred Drake9a29dd62000-12-08 06:54:51 +0000205This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000206\end{memberdesc}
207
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000208\begin{memberdesc}[Node]{previousSibling}
Fred Drake669d36f2000-10-24 02:34:45 +0000209The node that immediately precedes this one with the same parent. For
210instance the element with an end-tag that comes just before the
211\var{self} element's start-tag. Of course, XML documents are made
212up of more than just elements so the previous sibling could be text, a
Fred Drake16942f22000-12-07 04:47:51 +0000213comment, or something else. If this node is the first child of the
214parent, this attribute will be \code{None}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000215This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000216\end{memberdesc}
217
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000218\begin{memberdesc}[Node]{nextSibling}
Fred Drake669d36f2000-10-24 02:34:45 +0000219The node that immediately follows this one with the same parent. See
Fred Drake16942f22000-12-07 04:47:51 +0000220also \member{previousSibling}. If this is the last child of the
221parent, this attribute will be \code{None}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000222This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000223\end{memberdesc}
224
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000225\begin{memberdesc}[Node]{childNodes}
Fred Drake669d36f2000-10-24 02:34:45 +0000226A list of nodes contained within this node.
Fred Drake9a29dd62000-12-08 06:54:51 +0000227This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000228\end{memberdesc}
229
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000230\begin{memberdesc}[Node]{firstChild}
231The first child of the node, if there are any, or \code{None}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000232This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000233\end{memberdesc}
234
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000235\begin{memberdesc}[Node]{lastChild}
236The last child of the node, if there are any, or \code{None}.
Fred Drake9a29dd62000-12-08 06:54:51 +0000237This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000238\end{memberdesc}
239
Fred Drake9a29dd62000-12-08 06:54:51 +0000240\begin{memberdesc}[Node]{localName}
241The part of the \member{tagName} following the colon if there is one,
242else the entire \member{tagName}. The value is a string.
243\end{memberdesc}
244
245\begin{memberdesc}[Node]{prefix}
246The part of the \member{tagName} preceding the colon if there is one,
247else the empty string. The value is a string, or \code{None}
248\end{memberdesc}
249
250\begin{memberdesc}[Node]{namespaceURI}
Fred Drake16942f22000-12-07 04:47:51 +0000251The namespace associated with the element name. This will be a
Fred Drake9a29dd62000-12-08 06:54:51 +0000252string or \code{None}. This is a read-only attribute.
Fred Drake16942f22000-12-07 04:47:51 +0000253\end{memberdesc}
254
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000255\begin{memberdesc}[Node]{nodeName}
Fred Drake9a29dd62000-12-08 06:54:51 +0000256This has a different meaning for each node type; see the DOM
257specification for details. You can always get the information you
258would get here from another property such as the \member{tagName}
259property for elements or the \member{name} property for attributes.
260For all node types, the value of this attribute will be either a
261string or \code{None}. This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000262\end{memberdesc}
263
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000264\begin{memberdesc}[Node]{nodeValue}
Fred Drake9a29dd62000-12-08 06:54:51 +0000265This has a different meaning for each node type; see the DOM
266specification for details. The situation is similar to that with
267\member{nodeName}. The value is a string or \code{None}.
Fred Drake669d36f2000-10-24 02:34:45 +0000268\end{memberdesc}
269
Fred Drake9a29dd62000-12-08 06:54:51 +0000270\begin{methoddesc}[Node]{hasAttributes}{}
271Returns true if the node has any attributes.
272\end{methoddesc}
273
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000274\begin{methoddesc}[Node]{hasChildNodes}{}
275Returns true if the node has any child nodes.
Fred Drake669d36f2000-10-24 02:34:45 +0000276\end{methoddesc}
277
Fred Drake40e43bf2001-02-03 01:20:01 +0000278\begin{methoddesc}[Node]{isSameNode}{other}
279Returns true if \var{other} refers to the same node as this node.
280This is especially useful for DOM implementations which use any sort
281of proxy architecture (because more than one object can refer to the
282same node).
Fred Drake15862f52001-02-14 20:39:15 +0000283
Fred Drake0aa811c2001-10-20 04:24:09 +0000284\note{This is based on a proposed DOM Level 3 API which is
Fred Drake15862f52001-02-14 20:39:15 +0000285still in the ``working draft'' stage, but this particular interface
286appears uncontroversial. Changes from the W3C will not necessarily
287affect this method in the Python DOM interface (though any new W3C
Fred Drake0aa811c2001-10-20 04:24:09 +0000288API for this would also be supported).}
Fred Drake40e43bf2001-02-03 01:20:01 +0000289\end{methoddesc}
290
Fred Drake9a29dd62000-12-08 06:54:51 +0000291\begin{methoddesc}[Node]{appendChild}{newChild}
292Add a new child node to this node at the end of the list of children,
293returning \var{newChild}.
294\end{methoddesc}
295
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000296\begin{methoddesc}[Node]{insertBefore}{newChild, refChild}
Fred Drake669d36f2000-10-24 02:34:45 +0000297Insert a new child node before an existing child. It must be the case
298that \var{refChild} is a child of this node; if not,
Fred Drake9a29dd62000-12-08 06:54:51 +0000299\exception{ValueError} is raised. \var{newChild} is returned.
Fred Drake669d36f2000-10-24 02:34:45 +0000300\end{methoddesc}
301
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000302\begin{methoddesc}[Node]{removeChild}{oldChild}
Fred Drake669d36f2000-10-24 02:34:45 +0000303Remove a child node. \var{oldChild} must be a child of this node; if
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000304not, \exception{ValueError} is raised. \var{oldChild} is returned on
305success. If \var{oldChild} will not be used further, its
306\method{unlink()} method should be called.
Fred Drake669d36f2000-10-24 02:34:45 +0000307\end{methoddesc}
308
Fred Drake9a29dd62000-12-08 06:54:51 +0000309\begin{methoddesc}[Node]{replaceChild}{newChild, oldChild}
310Replace an existing node with a new node. It must be the case that
311\var{oldChild} is a child of this node; if not,
312\exception{ValueError} is raised.
Fred Drake669d36f2000-10-24 02:34:45 +0000313\end{methoddesc}
314
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000315\begin{methoddesc}[Node]{normalize}{}
316Join adjacent text nodes so that all stretches of text are stored as
317single \class{Text} instances. This simplifies processing text from a
318DOM tree for many applications.
319\versionadded{2.1}
Fred Drake669d36f2000-10-24 02:34:45 +0000320\end{methoddesc}
321
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000322\begin{methoddesc}[Node]{cloneNode}{deep}
323Clone this node. Setting \var{deep} means to clone all child nodes as
Fred Drake16942f22000-12-07 04:47:51 +0000324well. This returns the clone.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000325\end{methoddesc}
Fred Drake669d36f2000-10-24 02:34:45 +0000326
327
Fred Drake16942f22000-12-07 04:47:51 +0000328\subsubsection{NodeList Objects \label{dom-nodelist-objects}}
329
330A \class{NodeList} represents a sequence of nodes. These objects are
331used in two ways in the DOM Core recommendation: the
332\class{Element} objects provides one as it's list of child nodes, and
333the \method{getElementsByTagName()} and
334\method{getElementsByTagNameNS()} methods of \class{Node} return
335objects with this interface to represent query results.
336
337The DOM Level 2 recommendation defines one method and one attribute
338for these objects:
339
340\begin{methoddesc}[NodeList]{item}{i}
341 Return the \var{i}'th item from the sequence, if there is one, or
342 \code{None}. The index \var{i} is not allowed to be less then zero
343 or greater than or equal to the length of the sequence.
344\end{methoddesc}
345
346\begin{memberdesc}[NodeList]{length}
347 The number of nodes in the sequence.
348\end{memberdesc}
349
350In addition, the Python DOM interface requires that some additional
351support is provided to allow \class{NodeList} objects to be used as
352Python sequences. All \class{NodeList} implementations must include
353support for \method{__len__()} and \method{__getitem__()}; this allows
354iteration over the \class{NodeList} in \keyword{for} statements and
355proper support for the \function{len()} built-in function.
356
357If a DOM implementation supports modification of the document, the
358\class{NodeList} implementation must also support the
359\method{__setitem__()} and \method{__delitem__()} methods.
360
361
362\subsubsection{DocumentType Objects \label{dom-documenttype-objects}}
363
364Information about the notations and entities declared by a document
365(including the external subset if the parser uses it and can provide
366the information) is available from a \class{DocumentType} object. The
367\class{DocumentType} for a document is available from the
Fred Drakee21e2bb2001-10-26 20:09:49 +0000368\class{Document} object's \member{doctype} attribute; if there is no
369\code{DOCTYPE} declaration for the document, the document's
370\member{doctype} attribute will be set to \code{None} instead of an
371instance of this interface.
Fred Drake16942f22000-12-07 04:47:51 +0000372
373\class{DocumentType} is a specialization of \class{Node}, and adds the
374following attributes:
375
376\begin{memberdesc}[DocumentType]{publicId}
377 The public identifier for the external subset of the document type
378 definition. This will be a string or \code{None}.
379\end{memberdesc}
380
381\begin{memberdesc}[DocumentType]{systemId}
382 The system identifier for the external subset of the document type
383 definition. This will be a URI as a string, or \code{None}.
384\end{memberdesc}
385
386\begin{memberdesc}[DocumentType]{internalSubset}
387 A string giving the complete internal subset from the document.
Fred Drakef459d852001-04-05 18:30:04 +0000388 This does not include the brackets which enclose the subset. If the
389 document has no internal subset, this should be \code{None}.
Fred Drake16942f22000-12-07 04:47:51 +0000390\end{memberdesc}
391
392\begin{memberdesc}[DocumentType]{name}
393 The name of the root element as given in the \code{DOCTYPE}
Fred Drakee21e2bb2001-10-26 20:09:49 +0000394 declaration, if present.
Fred Drake16942f22000-12-07 04:47:51 +0000395\end{memberdesc}
396
397\begin{memberdesc}[DocumentType]{entities}
398 This is a \class{NamedNodeMap} giving the definitions of external
399 entities. For entity names defined more than once, only the first
400 definition is provided (others are ignored as required by the XML
401 recommendation). This may be \code{None} if the information is not
402 provided by the parser, or if no entities are defined.
403\end{memberdesc}
404
405\begin{memberdesc}[DocumentType]{notations}
406 This is a \class{NamedNodeMap} giving the definitions of notations.
407 For notation names defined more than once, only the first definition
408 is provided (others are ignored as required by the XML
409 recommendation). This may be \code{None} if the information is not
410 provided by the parser, or if no notations are defined.
411\end{memberdesc}
412
413
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000414\subsubsection{Document Objects \label{dom-document-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000415
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000416A \class{Document} represents an entire XML document, including its
417constituent elements, attributes, processing instructions, comments
418etc. Remeber that it inherits properties from \class{Node}.
419
420\begin{memberdesc}[Document]{documentElement}
Fred Drake669d36f2000-10-24 02:34:45 +0000421The one and only root element of the document.
422\end{memberdesc}
423
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000424\begin{methoddesc}[Document]{createElement}{tagName}
Fred Drake16942f22000-12-07 04:47:51 +0000425Create and return a new element node. The element is not inserted
426into the document when it is created. You need to explicitly insert
427it with one of the other methods such as \method{insertBefore()} or
Fred Drake669d36f2000-10-24 02:34:45 +0000428\method{appendChild()}.
429\end{methoddesc}
430
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000431\begin{methoddesc}[Document]{createElementNS}{namespaceURI, tagName}
Fred Drake16942f22000-12-07 04:47:51 +0000432Create and return a new element with a namespace. The
433\var{tagName} may have a prefix. The element is not inserted into the
434document when it is created. You need to explicitly insert it with
435one of the other methods such as \method{insertBefore()} or
436\method{appendChild()}.
Fred Drake669d36f2000-10-24 02:34:45 +0000437\end{methoddesc}
438
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000439\begin{methoddesc}[Document]{createTextNode}{data}
Fred Drake16942f22000-12-07 04:47:51 +0000440Create and return a text node containing the data passed as a
441parameter. As with the other creation methods, this one does not
442insert the node into the tree.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000443\end{methoddesc}
Fred Drake669d36f2000-10-24 02:34:45 +0000444
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000445\begin{methoddesc}[Document]{createComment}{data}
Fred Drake16942f22000-12-07 04:47:51 +0000446Create and return a comment node containing the data passed as a
447parameter. As with the other creation methods, this one does not
448insert the node into the tree.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000449\end{methoddesc}
450
451\begin{methoddesc}[Document]{createProcessingInstruction}{target, data}
Fred Drake16942f22000-12-07 04:47:51 +0000452Create and return a processing instruction node containing the
453\var{target} and \var{data} passed as parameters. As with the other
454creation methods, this one does not insert the node into the tree.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000455\end{methoddesc}
456
457\begin{methoddesc}[Document]{createAttribute}{name}
Fred Drake16942f22000-12-07 04:47:51 +0000458Create and return an attribute node. This method does not associate
459the attribute node with any particular element. You must use
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000460\method{setAttributeNode()} on the appropriate \class{Element} object
461to use the newly created attribute instance.
462\end{methoddesc}
463
464\begin{methoddesc}[Document]{createAttributeNS}{namespaceURI, qualifiedName}
Fred Drake16942f22000-12-07 04:47:51 +0000465Create and return an attribute node with a namespace. The
466\var{tagName} may have a prefix. This method does not associate the
467attribute node with any particular element. You must use
468\method{setAttributeNode()} on the appropriate \class{Element} object
469to use the newly created attribute instance.
Fred Drake669d36f2000-10-24 02:34:45 +0000470\end{methoddesc}
471
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000472\begin{methoddesc}[Document]{getElementsByTagName}{tagName}
Fred Drake669d36f2000-10-24 02:34:45 +0000473Search for all descendants (direct children, children's children,
474etc.) with a particular element type name.
475\end{methoddesc}
476
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000477\begin{methoddesc}[Document]{getElementsByTagNameNS}{namespaceURI, localName}
Fred Drake669d36f2000-10-24 02:34:45 +0000478Search for all descendants (direct children, children's children,
479etc.) with a particular namespace URI and localname. The localname is
480the part of the namespace after the prefix.
481\end{methoddesc}
482
Fred Drake669d36f2000-10-24 02:34:45 +0000483
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000484\subsubsection{Element Objects \label{dom-element-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000485
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000486\class{Element} is a subclass of \class{Node}, so inherits all the
487attributes of that class.
488
489\begin{memberdesc}[Element]{tagName}
Fred Drake669d36f2000-10-24 02:34:45 +0000490The element type name. In a namespace-using document it may have
Fred Drake16942f22000-12-07 04:47:51 +0000491colons in it. The value is a string.
Fred Drake669d36f2000-10-24 02:34:45 +0000492\end{memberdesc}
493
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000494\begin{methoddesc}[Element]{getElementsByTagName}{tagName}
Fred Drake669d36f2000-10-24 02:34:45 +0000495Same as equivalent method in the \class{Document} class.
496\end{methoddesc}
497
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000498\begin{methoddesc}[Element]{getElementsByTagNameNS}{tagName}
Fred Drake669d36f2000-10-24 02:34:45 +0000499Same as equivalent method in the \class{Document} class.
500\end{methoddesc}
501
Fred Drake9a29dd62000-12-08 06:54:51 +0000502\begin{methoddesc}[Element]{getAttribute}{attname}
503Return an attribute value as a string.
504\end{methoddesc}
505
506\begin{methoddesc}[Element]{getAttributeNode}{attrname}
507Return the \class{Attr} node for the attribute named by
508\var{attrname}.
509\end{methoddesc}
510
511\begin{methoddesc}[Element]{getAttributeNS}{namespaceURI, localName}
512Return an attribute value as a string, given a \var{namespaceURI} and
513\var{localName}.
514\end{methoddesc}
515
516\begin{methoddesc}[Element]{getAttributeNodeNS}{namespaceURI, localName}
517Return an attribute value as a node, given a \var{namespaceURI} and
518\var{localName}.
519\end{methoddesc}
520
521\begin{methoddesc}[Element]{removeAttribute}{attname}
522Remove an attribute by name. No exception is raised if there is no
523matching attribute.
524\end{methoddesc}
525
526\begin{methoddesc}[Element]{removeAttributeNode}{oldAttr}
527Remove and return \var{oldAttr} from the attribute list, if present.
528If \var{oldAttr} is not present, \exception{NotFoundErr} is raised.
529\end{methoddesc}
530
531\begin{methoddesc}[Element]{removeAttributeNS}{namespaceURI, localName}
532Remove an attribute by name. Note that it uses a localName, not a
533qname. No exception is raised if there is no matching attribute.
534\end{methoddesc}
535
536\begin{methoddesc}[Element]{setAttribute}{attname, value}
537Set an attribute value from a string.
538\end{methoddesc}
539
540\begin{methoddesc}[Element]{setAttributeNode}{newAttr}
541Add a new attibute node to the element, replacing an existing
542attribute if necessary if the \member{name} attribute matches. If a
543replacement occurs, the old attribute node will be returned. If
544\var{newAttr} is already in use, \exception{InuseAttributeErr} will be
545raised.
546\end{methoddesc}
547
548\begin{methoddesc}[Element]{setAttributeNodeNS}{newAttr}
549Add a new attibute node to the element, replacing an existing
550attribute if necessary if the \member{namespaceURI} and
551\member{localName} attributes match. If a replacement occurs, the old
552attribute node will be returned. If \var{newAttr} is already in use,
553\exception{InuseAttributeErr} will be raised.
554\end{methoddesc}
555
556\begin{methoddesc}[Element]{setAttributeNS}{namespaceURI, qname, value}
557Set an attribute value from a string, given a \var{namespaceURI} and a
558\var{qname}. Note that a qname is the whole attribute name. This is
559different than above.
560\end{methoddesc}
561
Fred Drake669d36f2000-10-24 02:34:45 +0000562
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000563\subsubsection{Attr Objects \label{dom-attr-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000564
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000565\class{Attr} inherits from \class{Node}, so inherits all its
566attributes.
Fred Drake669d36f2000-10-24 02:34:45 +0000567
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000568\begin{memberdesc}[Attr]{name}
Fred Drake669d36f2000-10-24 02:34:45 +0000569The attribute name. In a namespace-using document it may have colons
570in it.
571\end{memberdesc}
572
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000573\begin{memberdesc}[Attr]{localName}
Fred Drake669d36f2000-10-24 02:34:45 +0000574The part of the name following the colon if there is one, else the
Fred Drake9a29dd62000-12-08 06:54:51 +0000575entire name. This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000576\end{memberdesc}
577
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000578\begin{memberdesc}[Attr]{prefix}
Fred Drake669d36f2000-10-24 02:34:45 +0000579The part of the name preceding the colon if there is one, else the
580empty string.
581\end{memberdesc}
582
Fred Drake669d36f2000-10-24 02:34:45 +0000583
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000584\subsubsection{NamedNodeMap Objects \label{dom-attributelist-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000585
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000586\class{NamedNodeMap} does \emph{not} inherit from \class{Node}.
Fred Drake669d36f2000-10-24 02:34:45 +0000587
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000588\begin{memberdesc}[NamedNodeMap]{length}
Fred Drake669d36f2000-10-24 02:34:45 +0000589The length of the attribute list.
590\end{memberdesc}
591
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000592\begin{methoddesc}[NamedNodeMap]{item}{index}
Fred Drake669d36f2000-10-24 02:34:45 +0000593Return an attribute with a particular index. The order you get the
594attributes in is arbitrary but will be consistent for the life of a
595DOM. Each item is an attribute node. Get its value with the
596\member{value} attribbute.
597\end{methoddesc}
598
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000599There are also experimental methods that give this class more mapping
600behavior. You can use them or you can use the standardized
Fred Drakee21e2bb2001-10-26 20:09:49 +0000601\method{getAttribute*()} family of methods on the \class{Element}
602objects.
Fred Drake669d36f2000-10-24 02:34:45 +0000603
604
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000605\subsubsection{Comment Objects \label{dom-comment-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000606
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000607\class{Comment} represents a comment in the XML document. It is a
Fred Drake9a29dd62000-12-08 06:54:51 +0000608subclass of \class{Node}, but cannot have child nodes.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000609
610\begin{memberdesc}[Comment]{data}
Fred Drake9a29dd62000-12-08 06:54:51 +0000611The content of the comment as a string. The attribute contains all
612characters between the leading \code{<!-}\code{-} and trailing
613\code{-}\code{->}, but does not include them.
Fred Drake669d36f2000-10-24 02:34:45 +0000614\end{memberdesc}
Fred Drake669d36f2000-10-24 02:34:45 +0000615
616
Fred Drake9a29dd62000-12-08 06:54:51 +0000617\subsubsection{Text and CDATASection Objects \label{dom-text-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000618
Fred Drake9a29dd62000-12-08 06:54:51 +0000619The \class{Text} interface represents text in the XML document. If
620the parser and DOM implementation support the DOM's XML extension,
621portions of the text enclosed in CDATA marked sections are stored in
622\class{CDATASection} objects. These two interfaces are identical, but
623provide different values for the \member{nodeType} attribute.
624
625These interfaces extend the \class{Node} interface. They cannot have
626child nodes.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000627
628\begin{memberdesc}[Text]{data}
Fred Drake9a29dd62000-12-08 06:54:51 +0000629The content of the text node as a string.
Fred Drake669d36f2000-10-24 02:34:45 +0000630\end{memberdesc}
Fred Drake669d36f2000-10-24 02:34:45 +0000631
Fred Drake0aa811c2001-10-20 04:24:09 +0000632\note{The use of a \class{CDATASection} node does not
Fred Drake9a29dd62000-12-08 06:54:51 +0000633indicate that the node represents a complete CDATA marked section,
634only that the content of the node was part of a CDATA section. A
635single CDATA section may be represented by more than one node in the
636document tree. There is no way to determine whether two adjacent
Fred Drake0aa811c2001-10-20 04:24:09 +0000637\class{CDATASection} nodes represent different CDATA marked sections.}
Fred Drake9a29dd62000-12-08 06:54:51 +0000638
Fred Drake669d36f2000-10-24 02:34:45 +0000639
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000640\subsubsection{ProcessingInstruction Objects \label{dom-pi-objects}}
Fred Drake669d36f2000-10-24 02:34:45 +0000641
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000642Represents a processing instruction in the XML document; this inherits
Fred Drake9a29dd62000-12-08 06:54:51 +0000643from the \class{Node} interface and cannot have child nodes.
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000644
645\begin{memberdesc}[ProcessingInstruction]{target}
Fred Drake669d36f2000-10-24 02:34:45 +0000646The content of the processing instruction up to the first whitespace
Fred Drake9a29dd62000-12-08 06:54:51 +0000647character. This is a read-only attribute.
Fred Drake669d36f2000-10-24 02:34:45 +0000648\end{memberdesc}
649
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000650\begin{memberdesc}[ProcessingInstruction]{data}
Fred Drake669d36f2000-10-24 02:34:45 +0000651The content of the processing instruction following the first
652whitespace character.
653\end{memberdesc}
Fred Drake669d36f2000-10-24 02:34:45 +0000654
655
Fred Drakebc9c1b12000-12-13 17:38:02 +0000656\subsubsection{Exceptions \label{dom-exceptions}}
657
658\versionadded{2.1}
659
660The DOM Level 2 recommendation defines a single exception,
661\exception{DOMException}, and a number of constants that allow
662applications to determine what sort of error occurred.
663\exception{DOMException} instances carry a \member{code} attribute
664that provides the appropriate value for the specific exception.
665
666The Python DOM interface provides the constants, but also expands the
667set of exceptions so that a specific exception exists for each of the
668exception codes defined by the DOM. The implementations must raise
669the appropriate specific exception, each of which carries the
670appropriate value for the \member{code} attribute.
671
672\begin{excdesc}{DOMException}
673 Base exception class used for all specific DOM exceptions. This
674 exception class cannot be directly instantiated.
675\end{excdesc}
676
677\begin{excdesc}{DomstringSizeErr}
678 Raised when a specified range of text does not fit into a string.
679 This is not known to be used in the Python DOM implementations, but
680 may be received from DOM implementations not written in Python.
681\end{excdesc}
682
683\begin{excdesc}{HierarchyRequestErr}
684 Raised when an attempt is made to insert a node where the node type
685 is not allowed.
686\end{excdesc}
687
688\begin{excdesc}{IndexSizeErr}
689 Raised when an index or size parameter to a method is negative or
690 exceeds the allowed values.
691\end{excdesc}
692
693\begin{excdesc}{InuseAttributeErr}
694 Raised when an attempt is made to insert an \class{Attr} node that
695 is already present elsewhere in the document.
696\end{excdesc}
697
698\begin{excdesc}{InvalidAccessErr}
699 Raised if a parameter or an operation is not supported on the
700 underlying object.
701\end{excdesc}
702
703\begin{excdesc}{InvalidCharacterErr}
704 This exception is raised when a string parameter contains a
705 character that is not permitted in the context it's being used in by
706 the XML 1.0 recommendation. For example, attempting to create an
707 \class{Element} node with a space in the element type name will
708 cause this error to be raised.
709\end{excdesc}
710
711\begin{excdesc}{InvalidModificationErr}
712 Raised when an attempt is made to modify the type of a node.
713\end{excdesc}
714
715\begin{excdesc}{InvalidStateErr}
716 Raised when an attempt is made to use an object that is not or is no
717 longer usable.
718\end{excdesc}
719
720\begin{excdesc}{NamespaceErr}
721 If an attempt is made to change any object in a way that is not
722 permitted with regard to the
723 \citetitle[http://www.w3.org/TR/REC-xml-names/]{Namespaces in XML}
724 recommendation, this exception is raised.
725\end{excdesc}
726
727\begin{excdesc}{NotFoundErr}
728 Exception when a node does not exist in the referenced context. For
729 example, \method{NamedNodeMap.removeNamedItem()} will raise this if
730 the node passed in does not exist in the map.
731\end{excdesc}
732
733\begin{excdesc}{NotSupportedErr}
734 Raised when the implementation does not support the requested type
735 of object or operation.
736\end{excdesc}
737
738\begin{excdesc}{NoDataAllowedErr}
739 This is raised if data is specified for a node which does not
740 support data.
741 % XXX a better explanation is needed!
742\end{excdesc}
743
744\begin{excdesc}{NoModificationAllowedErr}
745 Raised on attempts to modify an object where modifications are not
746 allowed (such as for read-only nodes).
747\end{excdesc}
748
749\begin{excdesc}{SyntaxErr}
750 Raised when an invalid or illegal string is specified.
751 % XXX how is this different from InvalidCharacterErr ???
752\end{excdesc}
753
754\begin{excdesc}{WrongDocumentErr}
755 Raised when a node is inserted in a different document than it
756 currently belongs to, and the implementation does not support
757 migrating the node from one document to the other.
758\end{excdesc}
759
760The exception codes defined in the DOM recommendation map to the
761exceptions described above according to this table:
762
763\begin{tableii}{l|l}{constant}{Constant}{Exception}
764 \lineii{DOMSTRING_SIZE_ERR}{\exception{DomstringSizeErr}}
765 \lineii{HIERARCHY_REQUEST_ERR}{\exception{HierarchyRequestErr}}
766 \lineii{INDEX_SIZE_ERR}{\exception{IndexSizeErr}}
767 \lineii{INUSE_ATTRIBUTE_ERR}{\exception{InuseAttributeErr}}
768 \lineii{INVALID_ACCESS_ERR}{\exception{InvalidAccessErr}}
769 \lineii{INVALID_CHARACTER_ERR}{\exception{InvalidCharacterErr}}
770 \lineii{INVALID_MODIFICATION_ERR}{\exception{InvalidModificationErr}}
771 \lineii{INVALID_STATE_ERR}{\exception{InvalidStateErr}}
772 \lineii{NAMESPACE_ERR}{\exception{NamespaceErr}}
773 \lineii{NOT_FOUND_ERR}{\exception{NotFoundErr}}
774 \lineii{NOT_SUPPORTED_ERR}{\exception{NotSupportedErr}}
775 \lineii{NO_DATA_ALLOWED_ERR}{\exception{NoDataAllowedErr}}
776 \lineii{NO_MODIFICATION_ALLOWED_ERR}{\exception{NoModificationAllowedErr}}
777 \lineii{SYNTAX_ERR}{\exception{SyntaxErr}}
778 \lineii{WRONG_DOCUMENT_ERR}{\exception{WrongDocumentErr}}
779\end{tableii}
780
781
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000782\subsection{Conformance \label{dom-conformance}}
Fred Drake669d36f2000-10-24 02:34:45 +0000783
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000784This section describes the conformance requirements and relationships
785between the Python DOM API, the W3C DOM recommendations, and the OMG
786IDL mapping for Python.
Fred Drake669d36f2000-10-24 02:34:45 +0000787
Fred Drake16942f22000-12-07 04:47:51 +0000788
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000789\subsubsection{Type Mapping \label{dom-type-mapping}}
Fred Drake669d36f2000-10-24 02:34:45 +0000790
Fred Drake16942f22000-12-07 04:47:51 +0000791The primitive IDL types used in the DOM specification are mapped to
792Python types according to the following table.
793
794\begin{tableii}{l|l}{code}{IDL Type}{Python Type}
795 \lineii{boolean}{\code{IntegerType} (with a value of \code{0} or \code{1})}
796 \lineii{int}{\code{IntegerType}}
797 \lineii{long int}{\code{IntegerType}}
798 \lineii{unsigned int}{\code{IntegerType}}
799\end{tableii}
800
801Additionally, the \class{DOMString} defined in the recommendation is
802mapped to a Python string or Unicode string. Applications should
803be able to handle Unicode whenever a string is returned from the DOM.
804
805The IDL \keyword{null} value is mapped to \code{None}, which may be
806accepted or provided by the implementation whenever \keyword{null} is
807allowed by the API.
808
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000809
810\subsubsection{Accessor Methods \label{dom-accessor-methods}}
811
812The mapping from OMG IDL to Python defines accessor functions for IDL
813\keyword{attribute} declarations in much the way the Java mapping
814does. Mapping the IDL declarations
Fred Drake669d36f2000-10-24 02:34:45 +0000815
816\begin{verbatim}
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000817readonly attribute string someValue;
818 attribute string anotherValue;
Fred Drake669d36f2000-10-24 02:34:45 +0000819\end{verbatim}
820
Andrew M. Kuchlinge7e03cd2001-06-23 16:26:44 +0000821yields three accessor functions: a ``get'' method for
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000822\member{someValue} (\method{_get_someValue()}), and ``get'' and
823``set'' methods for
824\member{anotherValue} (\method{_get_anotherValue()} and
825\method{_set_anotherValue()}). The mapping, in particular, does not
826require that the IDL attributes are accessible as normal Python
827attributes: \code{\var{object}.someValue} is \emph{not} required to
828work, and may raise an \exception{AttributeError}.
Fred Drake669d36f2000-10-24 02:34:45 +0000829
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000830The Python DOM API, however, \emph{does} require that normal attribute
831access work. This means that the typical surrogates generated by
832Python IDL compilers are not likely to work, and wrapper objects may
833be needed on the client if the DOM objects are accessed via CORBA.
834While this does require some additional consideration for CORBA DOM
835clients, the implementers with experience using DOM over CORBA from
836Python do not consider this a problem. Attributes that are declared
837\keyword{readonly} may not restrict write access in all DOM
838implementations.
Fred Drake669d36f2000-10-24 02:34:45 +0000839
Fred Drakeeaf57aa2000-11-29 06:10:22 +0000840Additionally, the accessor functions are not required. If provided,
841they should take the form defined by the Python IDL mapping, but
842these methods are considered unnecessary since the attributes are
Fred Drake16942f22000-12-07 04:47:51 +0000843accessible directly from Python. ``Set'' accessors should never be
844provided for \keyword{readonly} attributes.