| 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> | 
|---|
| 2 | <!-- /home/espenr/tmp/qt-3.3.8-espenr-2499/qt-x11-free-3.3.8/doc/xml.doc:36 --> | 
|---|
| 3 | <html> | 
|---|
| 4 | <head> | 
|---|
| 5 | <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | 
|---|
| 6 | <title>XML Module</title> | 
|---|
| 7 | <style type="text/css"><!-- | 
|---|
| 8 | fn { margin-left: 1cm; text-indent: -1cm; } | 
|---|
| 9 | a:link { color: #004faf; text-decoration: none } | 
|---|
| 10 | a:visited { color: #672967; text-decoration: none } | 
|---|
| 11 | body { background: #ffffff; color: black; } | 
|---|
| 12 | --></style> | 
|---|
| 13 | </head> | 
|---|
| 14 | <body> | 
|---|
| 15 |  | 
|---|
| 16 | <table border="0" cellpadding="0" cellspacing="0" width="100%"> | 
|---|
| 17 | <tr bgcolor="#E5E5E5"> | 
|---|
| 18 | <td valign=center> | 
|---|
| 19 | <a href="index.html"> | 
|---|
| 20 | <font color="#004faf">Home</font></a> | 
|---|
| 21 | | <a href="classes.html"> | 
|---|
| 22 | <font color="#004faf">All Classes</font></a> | 
|---|
| 23 | | <a href="mainclasses.html"> | 
|---|
| 24 | <font color="#004faf">Main Classes</font></a> | 
|---|
| 25 | | <a href="annotated.html"> | 
|---|
| 26 | <font color="#004faf">Annotated</font></a> | 
|---|
| 27 | | <a href="groups.html"> | 
|---|
| 28 | <font color="#004faf">Grouped Classes</font></a> | 
|---|
| 29 | | <a href="functions.html"> | 
|---|
| 30 | <font color="#004faf">Functions</font></a> | 
|---|
| 31 | </td> | 
|---|
| 32 | <td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>XML Module</h1> | 
|---|
| 33 |  | 
|---|
| 34 |  | 
|---|
| 35 | <p> | 
|---|
| 36 | <p> <!-- toc --> | 
|---|
| 37 | <ul> | 
|---|
| 38 | <li><a href="#1"> Overview of the XML architecture in Qt | 
|---|
| 39 | </a> | 
|---|
| 40 | <li><a href="#2"> The Qt SAX2 classes | 
|---|
| 41 | </a> | 
|---|
| 42 | <ul> | 
|---|
| 43 | <li><a href="#2-1"> Introduction to SAX2 | 
|---|
| 44 | </a> | 
|---|
| 45 | <li><a href="#2-2"> Features | 
|---|
| 46 | </a> | 
|---|
| 47 | <li><a href="#2-3"> Namespace support via features | 
|---|
| 48 | </a> | 
|---|
| 49 | <ul> | 
|---|
| 50 | <li><a href="#2-3-1"> Summary | 
|---|
| 51 | </a> | 
|---|
| 52 | </ul> | 
|---|
| 53 | <li><a href="#2-4"> Properties | 
|---|
| 54 | </a> | 
|---|
| 55 | <li><a href="#2-5"> Further reading | 
|---|
| 56 | </a> | 
|---|
| 57 | </ul> | 
|---|
| 58 | <li><a href="#3"> The Qt DOM classes | 
|---|
| 59 | </a> | 
|---|
| 60 | <ul> | 
|---|
| 61 | <li><a href="#3-1"> Introduction to DOM | 
|---|
| 62 | </a> | 
|---|
| 63 | <li><a href="#3-2"> Further reading | 
|---|
| 64 | </a> | 
|---|
| 65 | </ul> | 
|---|
| 66 | <li><a href="#4"> An introduction to namespaces | 
|---|
| 67 | </a> | 
|---|
| 68 | <ul> | 
|---|
| 69 | <li><a href="#4-1"> Conventions used in Qt XML documentation | 
|---|
| 70 | </a> | 
|---|
| 71 | </ul> | 
|---|
| 72 | </ul> | 
|---|
| 73 | <!-- endtoc --> | 
|---|
| 74 |  | 
|---|
| 75 | <p> <a name="overview"></a> | 
|---|
| 76 | <h2> Overview of the XML architecture in Qt | 
|---|
| 77 | </h2> | 
|---|
| 78 | <a name="1"></a><p> The XML module provides a well-formed XML parser using the SAX2 | 
|---|
| 79 | (Simple API for XML) interface plus an implementation of the DOM Level | 
|---|
| 80 | 2 (Document Object Model). | 
|---|
| 81 | <p> SAX is an event-based standard interface for XML parsers. | 
|---|
| 82 | The Qt interface follows the design of the SAX2 Java implementation. | 
|---|
| 83 | Its naming scheme was adapted to fit the Qt naming conventions. | 
|---|
| 84 | Details on SAX2 can be found at | 
|---|
| 85 | <a href="http://www.saxproject.org">http://www.saxproject.org</a>. | 
|---|
| 86 | <p> Support for SAX2 filters and the reader factory are under | 
|---|
| 87 | development. The Qt implementation does not include the SAX1 | 
|---|
| 88 | compatibility classes present in the Java interface. | 
|---|
| 89 | <p> For an introduction to Qt's SAX2 classes see | 
|---|
| 90 | "<a href="#sax2">The Qt SAX2 classes</a>". | 
|---|
| 91 | <p> DOM Level 2 is a W3C Recommendation for XML interfaces that maps the | 
|---|
| 92 | constituents of an XML document to a tree structure. Details and the | 
|---|
| 93 | specification of DOM Level 2 can be found at | 
|---|
| 94 | <a href="http://www.w3.org/DOM/">http://www.w3.org/DOM/</a>. | 
|---|
| 95 | More information about the DOM classes in Qt is provided in the | 
|---|
| 96 | <a href="#dom">Qt DOM classes</a>. | 
|---|
| 97 | <p> Qt provides the following XML related classes: | 
|---|
| 98 | <p> <center><table cellpadding="4" cellspacing="2" border="0"> | 
|---|
| 99 | <tr bgcolor="#a2c511"> <th valign="top">Class <th valign="top">Short description | 
|---|
| 100 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomattr.html">QDomAttr</a> | 
|---|
| 101 | <td valign="top">Represents one attribute of a <a href="qdomelement.html">QDomElement</a> | 
|---|
| 102 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomcdatasection.html">QDomCDATASection</a> | 
|---|
| 103 | <td valign="top">Represents an XML CDATA section | 
|---|
| 104 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomcharacterdata.html">QDomCharacterData</a> | 
|---|
| 105 | <td valign="top">Represents a generic string in the DOM | 
|---|
| 106 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomcomment.html">QDomComment</a> | 
|---|
| 107 | <td valign="top">Represents an XML comment | 
|---|
| 108 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomdocument.html">QDomDocument</a> | 
|---|
| 109 | <td valign="top">The representation of an XML document | 
|---|
| 110 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomdocumentfragment.html">QDomDocumentFragment</a> | 
|---|
| 111 | <td valign="top">Tree of QDomNodes which is usually not a complete <a href="qdomdocument.html">QDomDocument</a> | 
|---|
| 112 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomdocumenttype.html">QDomDocumentType</a> | 
|---|
| 113 | <td valign="top">The representation of the DTD in the document tree | 
|---|
| 114 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomelement.html">QDomElement</a> | 
|---|
| 115 | <td valign="top">Represents one element in the DOM tree | 
|---|
| 116 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomentity.html">QDomEntity</a> | 
|---|
| 117 | <td valign="top">Represents an XML entity | 
|---|
| 118 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 119 | <td valign="top">Represents an XML entity reference | 
|---|
| 120 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomimplementation.html">QDomImplementation</a> | 
|---|
| 121 | <td valign="top">Information about the features of the DOM implementation | 
|---|
| 122 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomnamednodemap.html">QDomNamedNodeMap</a> | 
|---|
| 123 | <td valign="top">Collection of nodes that can be accessed by name | 
|---|
| 124 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomnode.html">QDomNode</a> | 
|---|
| 125 | <td valign="top">The base class for all nodes of the DOM tree | 
|---|
| 126 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomnodelist.html">QDomNodeList</a> | 
|---|
| 127 | <td valign="top">List of <a href="qdomnode.html">QDomNode</a> objects | 
|---|
| 128 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomnotation.html">QDomNotation</a> | 
|---|
| 129 | <td valign="top">Represents an XML notation | 
|---|
| 130 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 131 | <td valign="top">Represents an XML processing instruction | 
|---|
| 132 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qdomtext.html">QDomText</a> | 
|---|
| 133 | <td valign="top">Represents textual data in the parsed XML document | 
|---|
| 134 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlattributes.html">QXmlAttributes</a> | 
|---|
| 135 | <td valign="top">XML attributes | 
|---|
| 136 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlcontenthandler.html">QXmlContentHandler</a> | 
|---|
| 137 | <td valign="top">Interface to report logical content of XML data | 
|---|
| 138 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmldeclhandler.html">QXmlDeclHandler</a> | 
|---|
| 139 | <td valign="top">Interface to report declaration content of XML data | 
|---|
| 140 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmldefaulthandler.html">QXmlDefaultHandler</a> | 
|---|
| 141 | <td valign="top">Default implementation of all XML handler classes | 
|---|
| 142 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmldtdhandler.html">QXmlDTDHandler</a> | 
|---|
| 143 | <td valign="top">Interface to report DTD content of XML data | 
|---|
| 144 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlentityresolver.html">QXmlEntityResolver</a> | 
|---|
| 145 | <td valign="top">Interface to resolve extern entities contained in XML data | 
|---|
| 146 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlerrorhandler.html">QXmlErrorHandler</a> | 
|---|
| 147 | <td valign="top">Interface to report errors in XML data | 
|---|
| 148 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlinputsource.html">QXmlInputSource</a> | 
|---|
| 149 | <td valign="top">The input data for the <a href="qxmlreader.html">QXmlReader</a> subclasses | 
|---|
| 150 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmllexicalhandler.html">QXmlLexicalHandler</a> | 
|---|
| 151 | <td valign="top">Interface to report lexical content of XML data | 
|---|
| 152 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmllocator.html">QXmlLocator</a> | 
|---|
| 153 | <td valign="top">The XML handler classes with information about the actual parsing position | 
|---|
| 154 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlnamespacesupport.html">QXmlNamespaceSupport</a> | 
|---|
| 155 | <td valign="top">Helper class for XML readers which want to include namespace support | 
|---|
| 156 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlparseexception.html">QXmlParseException</a> | 
|---|
| 157 | <td valign="top">Used to report errors with the <a href="qxmlerrorhandler.html">QXmlErrorHandler</a> interface | 
|---|
| 158 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlreader.html">QXmlReader</a> | 
|---|
| 159 | <td valign="top">Interface for XML readers (i.e. for SAX2 parsers) | 
|---|
| 160 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlsimplereader.html">QXmlSimpleReader</a> | 
|---|
| 161 | <td valign="top">Implementation of a simple XML reader (a SAX2 parser) | 
|---|
| 162 | </table></center> | 
|---|
| 163 | <p> <a name="sax2"></a> | 
|---|
| 164 | <h2> The Qt SAX2 classes | 
|---|
| 165 | </h2> | 
|---|
| 166 | <a name="2"></a><p> <a name="sax2Intro"></a> | 
|---|
| 167 | <h3> Introduction to SAX2 | 
|---|
| 168 | </h3> | 
|---|
| 169 | <a name="2-1"></a><p> The SAX2 interface is an event-driven mechanism to provide the user with | 
|---|
| 170 | document information. An "event" in this context means something | 
|---|
| 171 | reported by the parser, for example, it has encountered a start tag, | 
|---|
| 172 | or an end tag, etc. | 
|---|
| 173 | <p> To make it less abstract consider the following example: | 
|---|
| 174 | <pre> | 
|---|
| 175 | <quote>A quotation.</quote> | 
|---|
| 176 | </pre> | 
|---|
| 177 |  | 
|---|
| 178 | <p> Whilst reading (a SAX2 parser is usually referred to as "reader") | 
|---|
| 179 | the above document three events would be triggered: | 
|---|
| 180 | <ol type=1> | 
|---|
| 181 | <li> A start tag occurs (<tt><quote></tt>). | 
|---|
| 182 | <li> Character data (i.e. text) is found, "A quotation.". | 
|---|
| 183 | <li> An end tag is parsed (<tt></quote></tt>). | 
|---|
| 184 | </ol> | 
|---|
| 185 | <p> Each time such an event occurs the parser reports it; you can set up | 
|---|
| 186 | event handlers to respond to these events. | 
|---|
| 187 | <p> Whilst this is a fast and simple approach to read XML documents, | 
|---|
| 188 | manipulation is difficult because data is not stored, simply handled | 
|---|
| 189 | and discarded serially. The <a href="#dom">DOM interface</a> reads in and stores the whole document in a tree structure; | 
|---|
| 190 | this takes more memory, but makes it easier to manipulate the | 
|---|
| 191 | document's structure.. | 
|---|
| 192 | <p> The Qt XML module provides an abstract class, <a href="qxmlreader.html">QXmlReader</a>, that | 
|---|
| 193 | defines the interface for potential SAX2 readers. Qt includes a reader | 
|---|
| 194 | implementation, <a href="qxmlsimplereader.html">QXmlSimpleReader</a>, that is easy to adapt through | 
|---|
| 195 | subclassing. | 
|---|
| 196 | <p> The reader reports parsing events through special handler classes: | 
|---|
| 197 | <center><table cellpadding="4" cellspacing="2" border="0"> | 
|---|
| 198 | <tr bgcolor="#a2c511"> <th valign="top">Handler class <th valign="top">Description | 
|---|
| 199 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlcontenthandler.html">QXmlContentHandler</a> | 
|---|
| 200 | <td valign="top">Reports events related to the content of a document (e.g. the start tag | 
|---|
| 201 | or characters). | 
|---|
| 202 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmldtdhandler.html">QXmlDTDHandler</a> | 
|---|
| 203 | <td valign="top">Reports events related to the DTD (e.g. notation declarations). | 
|---|
| 204 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlerrorhandler.html">QXmlErrorHandler</a> | 
|---|
| 205 | <td valign="top">Reports errors or warnings that occurred during parsing. | 
|---|
| 206 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmlentityresolver.html">QXmlEntityResolver</a> | 
|---|
| 207 | <td valign="top">Reports external entities during parsing and allows users to resolve | 
|---|
| 208 | external entities themselves instead of leaving it to the reader. | 
|---|
| 209 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmldeclhandler.html">QXmlDeclHandler</a> | 
|---|
| 210 | <td valign="top">Reports further DTD related events (e.g. attribute declarations). | 
|---|
| 211 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmllexicalhandler.html">QXmlLexicalHandler</a> | 
|---|
| 212 | <td valign="top">Reports events related to the lexical structure of the | 
|---|
| 213 | document (the beginning of the DTD, comments etc.). | 
|---|
| 214 | </table></center> | 
|---|
| 215 | <p> These classes are abstract classes describing the interface. The <a href="qxmldefaulthandler.html">QXmlDefaultHandler</a> class provides a "do nothing" default | 
|---|
| 216 | implementation for all of them. Therefore users only need to overload | 
|---|
| 217 | the <a href="qxmldefaulthandler.html">QXmlDefaultHandler</a> functions they are interested in. | 
|---|
| 218 | <p> To read input XML data a special class <a href="qxmlinputsource.html">QXmlInputSource</a> is used. | 
|---|
| 219 | <p> Apart from those already mentioned, the following SAX2 support classes | 
|---|
| 220 | provide additional useful functionality: | 
|---|
| 221 | <center><table cellpadding="4" cellspacing="2" border="0"> | 
|---|
| 222 | <tr bgcolor="#a2c511"> <th valign="top">Class <th valign="top">Description | 
|---|
| 223 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlattributes.html">QXmlAttributes</a> | 
|---|
| 224 | <td valign="top">Used to pass attributes in a start element event. | 
|---|
| 225 | <tr bgcolor="#f0f0f0"> <td valign="top"><a href="qxmllocator.html">QXmlLocator</a> | 
|---|
| 226 | <td valign="top">Used to obtain the actual parsing position of an event. | 
|---|
| 227 | <tr bgcolor="#d0d0d0"> <td valign="top"><a href="qxmlnamespacesupport.html">QXmlNamespaceSupport</a> | 
|---|
| 228 | <td valign="top">Used to implement <a href="xml.html#namespaces">namespace</a> | 
|---|
| 229 | support for a reader. Note that namespaces do not change the | 
|---|
| 230 | parsing behavior. They are only reported through the handler. | 
|---|
| 231 | </table></center> | 
|---|
| 232 | <p> <a name="sax2Features"></a> | 
|---|
| 233 | <h3> Features | 
|---|
| 234 | </h3> | 
|---|
| 235 | <a name="2-2"></a><p> The behaviour of an XML reader depends on its support for certain | 
|---|
| 236 | optional features. For example, a reader may have the feature "report | 
|---|
| 237 | attributes used for <a href="xml.html#namespaces">namespace</a> | 
|---|
| 238 | declarations and prefixes along with the local name of a tag". Like | 
|---|
| 239 | every other feature this has a unique name represented by a URI: it is | 
|---|
| 240 | called <em>http://xml.org/sax/features/namespace-prefixes</em>. | 
|---|
| 241 | <p> The Qt SAX2 implementation can report whether the reader has | 
|---|
| 242 | particular functionality using the <a href="qxmlreader.html#hasFeature">QXmlReader::hasFeature</a>() | 
|---|
| 243 | function. Available features can be tested with <a href="qxmlreader.html#feature">QXmlReader::feature</a>(), | 
|---|
| 244 | and switched on or off using <a href="qxmlreader.html#setFeature">QXmlReader::setFeature</a>(). | 
|---|
| 245 | <p> Consider the example | 
|---|
| 246 | <pre> | 
|---|
| 247 | <document xmlns:book = 'http://trolltech.com/fnord/book/' | 
|---|
| 248 | xmlns      = 'http://trolltech.com/fnord/' > | 
|---|
| 249 | </pre> | 
|---|
| 250 |  | 
|---|
| 251 | A reader that does not support the <em>http://xml.org/sax/features/namespace-prefixes</em> feature would report | 
|---|
| 252 | the element name <em>document</em> but not its attributes <em>xmlns:book</em> and | 
|---|
| 253 | <em>xmlns</em> with their values. A reader with the feature <em>http://xml.org/sax/features/namespace-prefixes</em> reports the namespace | 
|---|
| 254 | attributes if the <a href="qxmlreader.html#feature">feature</a> is | 
|---|
| 255 | switched on. | 
|---|
| 256 | <p> Other features include <em>http://xml.org/sax/features/namespace</em> | 
|---|
| 257 | (namespace processing, implies <em>http://xml.org/sax/features/namespace-prefixes</em>) and <em>http://xml.org/sax/features/validation</em> (the ability to report | 
|---|
| 258 | validation errors). | 
|---|
| 259 | <p> Whilst SAX2 leaves it to the user to define and implement whatever | 
|---|
| 260 | features are required, support for <em>http://xml.org/sax/features/namespace</em> (and thus <em>http://xml.org/sax/features/namespace-prefixes</em>) is mandantory. | 
|---|
| 261 | The <a href="qxmlsimplereader.html">QXmlSimpleReader</a> implementation of <a href="qxmlreader.html">QXmlReader</a>, | 
|---|
| 262 | supports them, and can do namespace processing. | 
|---|
| 263 | <p> <a href="qxmlsimplereader.html">QXmlSimpleReader</a> is not validating, so it | 
|---|
| 264 | does not support <em>http://xml.org/sax/features/validation</em>. | 
|---|
| 265 | <p> <a name="sax2Namespaces"></a> | 
|---|
| 266 | <h3> Namespace support via features | 
|---|
| 267 | </h3> | 
|---|
| 268 | <a name="2-3"></a><p> As we have seen in the <a href="#sax2Features">previous section</a> | 
|---|
| 269 | we can configure the behavior of the reader when it comes to namespace | 
|---|
| 270 | processing. This is done by setting and unsetting the | 
|---|
| 271 | <em>http://xml.org/sax/features/namespaces</em> and | 
|---|
| 272 | <em>http://xml.org/sax/features/namespace-prefixes</em> features. | 
|---|
| 273 | <p> They influence the reporting behavior in the following way: | 
|---|
| 274 | <ol type=1> | 
|---|
| 275 | <li> Namespace prefixes and local parts of elements and attributes can | 
|---|
| 276 | be reported. | 
|---|
| 277 | <li> The qualified names of elements and attributes are reported. | 
|---|
| 278 | <li> <a href="qxmlcontenthandler.html#startPrefixMapping">QXmlContentHandler::startPrefixMapping</a>() and <a href="qxmlcontenthandler.html#endPrefixMapping">QXmlContentHandler::endPrefixMapping</a>() are called by the reader. | 
|---|
| 279 | <li> Attributes that declare namespaces (i.e. the attribute <em>xmlns</em> and | 
|---|
| 280 | attributes starting with <em>xmlns:</em>) are reported. | 
|---|
| 281 | </ol> | 
|---|
| 282 | <p> Consider the following element: | 
|---|
| 283 | <pre> | 
|---|
| 284 | <author xmlns:fnord = 'http://trolltech.com/fnord/' | 
|---|
| 285 | title="Ms" | 
|---|
| 286 | fnord:title="Goddess" | 
|---|
| 287 | name="Eris Kallisti"/> | 
|---|
| 288 | </pre> | 
|---|
| 289 |  | 
|---|
| 290 | With <em>http://xml.org/sax/features/namespace-prefixes</em> set to TRUE | 
|---|
| 291 | the reader will report four attributes; but with the <em>namespace-prefixes</em> feature set to FALSE only three, with the <em>xmlns:fnord</em> attribute defining a namespace being "invisible" to the | 
|---|
| 292 | reader. | 
|---|
| 293 | <p> The <em>http://xml.org/sax/features/namespaces</em> feature is responsible | 
|---|
| 294 | for reporting local names, namespace prefixes and URIs. With <em>http://xml.org/sax/features/namespaces</em> set to TRUE the parser will | 
|---|
| 295 | report <em>title</em> as the local name of the <em>fnord:title</em> attribute, <em>fnord</em> being the namespace prefix and <em>http://trolltech.com/fnord/</em> as | 
|---|
| 296 | the namespace URI. When <em>http://xml.org/sax/features/namespaces</em> is | 
|---|
| 297 | FALSE none of them are reported. | 
|---|
| 298 | <p> In the current implementation the Qt XML classes follow the definition | 
|---|
| 299 | that the prefix <em>xmlns</em> itself isn't associated with any namespace at all | 
|---|
| 300 | (see <a href="http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-using">http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-using</a>). | 
|---|
| 301 | Therefore even with <em>http://xml.org/sax/features/namespaces</em> and | 
|---|
| 302 | <em>http://xml.org/sax/features/namespace-prefixes</em> both set to TRUE | 
|---|
| 303 | the reader won't return either a local name, a namespace prefix or | 
|---|
| 304 | a namespace URI for <em>xmlns:fnord</em>. | 
|---|
| 305 | <p> This might be changed in the future following the W3C suggestion | 
|---|
| 306 | <a href="http://www.w3.org/2000/xmlns/">http://www.w3.org/2000/xmlns/</a> | 
|---|
| 307 | to associate <em>xmlns</em> with the namespace <em>http://www.w3.org/2000/xmlns</em>. | 
|---|
| 308 | <p> As the SAX2 standard suggests, <a href="qxmlsimplereader.html">QXmlSimpleReader</a> defaults to having | 
|---|
| 309 | <em>http://xml.org/sax/features/namespaces</em> set to TRUE and | 
|---|
| 310 | <em>http://xml.org/sax/features/namespace-prefixes</em> set to FALSE. | 
|---|
| 311 | When changing this behavior using <a href="qxmlsimplereader.html#setFeature">QXmlSimpleReader::setFeature</a>() | 
|---|
| 312 | note that the combination of both features set to | 
|---|
| 313 | FALSE is illegal. | 
|---|
| 314 | <p> For a practical demonstration of how the two features affect the | 
|---|
| 315 | output of the reader run the <a href="tagreader-with-features-example.html">tagreader with features example.</a> | 
|---|
| 316 | <p> <a name="sax2NamespacesSummary"></a> | 
|---|
| 317 | <h4> Summary | 
|---|
| 318 | </h4> | 
|---|
| 319 | <a name="2-3-1"></a><p> <a href="qxmlsimplereader.html">QXmlSimpleReader</a> implements the following behavior: | 
|---|
| 320 | <p> <center><table cellpadding="4" cellspacing="2" border="0"> | 
|---|
| 321 | <tr bgcolor="#a2c511"> <th valign="top">(namespaces, namespace-prefixes) | 
|---|
| 322 | <th valign="top">Namespace prefix and local part | 
|---|
| 323 | <th valign="top">Qualified names | 
|---|
| 324 | <th valign="top">Prefix mapping | 
|---|
| 325 | <th valign="top">xmlns attributes | 
|---|
| 326 | <tr bgcolor="#f0f0f0"> <td valign="top">(TRUE, FALSE) <td valign="top">Yes <td valign="top">Yes* <td valign="top">Yes <td valign="top">No | 
|---|
| 327 | <tr bgcolor="#d0d0d0"> <td valign="top">(TRUE, TRUE) <td valign="top">Yes <td valign="top">Yes <td valign="top">Yes <td valign="top">Yes | 
|---|
| 328 | <tr bgcolor="#f0f0f0"> <td valign="top">(FALSE, TRUE) <td valign="top">No* <td valign="top">Yes <td valign="top">No* <td valign="top">Yes | 
|---|
| 329 | <tr bgcolor="#d0d0d0"> <td valign="top">(FALSE, FALSE) <td valign="top" colspan="4" rowspan="1"> Illegal | 
|---|
| 330 | </table></center> | 
|---|
| 331 | <p> <sup>*</sup> The behavior of these entries is not specified by SAX. | 
|---|
| 332 | <p> <a name="sax2Properties"></a> | 
|---|
| 333 | <h3> Properties | 
|---|
| 334 | </h3> | 
|---|
| 335 | <a name="2-4"></a><p> Properties are a more general concept. They have a unique name, | 
|---|
| 336 | represented as an URI, but their value is <tt>void*</tt>. Thus nearly | 
|---|
| 337 | anything can be used as a property value. This concept involves some | 
|---|
| 338 | danger, though: there is no means of ensuring type-safety; the user | 
|---|
| 339 | must take care that they pass the right type. Properties are | 
|---|
| 340 | useful if a reader supports special handler classes. | 
|---|
| 341 | <p> The URIs used for features and properties often look like URLs, e.g. | 
|---|
| 342 | <a href="http://xml.org/sax/features/namespace">http://xml.org/sax/features/namespace</a>. This does not mean that the | 
|---|
| 343 | data required is at this address. It is simply a way of defining | 
|---|
| 344 | unique names. | 
|---|
| 345 | <p> Anyone can define and use new SAX2 properties for their readers. | 
|---|
| 346 | Property support is not mandatory. | 
|---|
| 347 | <p> To set or query properties the following functions are provided: <a href="qxmlreader.html#setProperty">QXmlReader::setProperty</a>(), <a href="qxmlreader.html#property">QXmlReader::property</a>() and <a href="qxmlreader.html#hasProperty">QXmlReader::hasProperty</a>(). | 
|---|
| 348 | <p> <a name="sax2Reading"></a> | 
|---|
| 349 | <h3> Further reading | 
|---|
| 350 | </h3> | 
|---|
| 351 | <a name="2-5"></a><p> More information about XML (e.g. <a href="xml.html#namespaces">namespaces</a>) | 
|---|
| 352 | can be found in the <a href="xml.html">introduction to the Qt XML module.</a> | 
|---|
| 353 | <p> <a name="dom"></a> | 
|---|
| 354 | <h2> The Qt DOM classes | 
|---|
| 355 | </h2> | 
|---|
| 356 | <a name="3"></a><p> <a name="domIntro"></a> | 
|---|
| 357 | <h3> Introduction to DOM | 
|---|
| 358 | </h3> | 
|---|
| 359 | <a name="3-1"></a><p> DOM provides an interface to access and change the content and | 
|---|
| 360 | structure of an XML file. It makes a hierarchical view of the document | 
|---|
| 361 | (a tree view). Thus -- in contrast to the SAX2 interface -- an object | 
|---|
| 362 | model of the document is resident in memory after parsing which makes | 
|---|
| 363 | manipulation easy. | 
|---|
| 364 | <p> All DOM nodes in the document tree are subclasses of <a href="qdomnode.html">QDomNode</a>. The | 
|---|
| 365 | document itself is represented as a <a href="qdomdocument.html">QDomDocument</a> object. | 
|---|
| 366 | <p> Here are the available node classes and their potential child classes: | 
|---|
| 367 | <p> <ul> | 
|---|
| 368 | <li> <a href="qdomdocument.html">QDomDocument</a>: Possible children are | 
|---|
| 369 | <ul> | 
|---|
| 370 | <li> <a href="qdomelement.html">QDomElement</a> (at most one) | 
|---|
| 371 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 372 | <li> <a href="qdomcomment.html">QDomComment</a> | 
|---|
| 373 | <li> <a href="qdomdocumenttype.html">QDomDocumentType</a> | 
|---|
| 374 | </ul> | 
|---|
| 375 | <li> <a href="qdomdocumentfragment.html">QDomDocumentFragment</a>: Possible children are | 
|---|
| 376 | <ul> | 
|---|
| 377 | <li> <a href="qdomelement.html">QDomElement</a> | 
|---|
| 378 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 379 | <li> <a href="qdomcomment.html">QDomComment</a> | 
|---|
| 380 | <li> <a href="qdomtext.html">QDomText</a> | 
|---|
| 381 | <li> <a href="qdomcdatasection.html">QDomCDATASection</a> | 
|---|
| 382 | <li> <a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 383 | </ul> | 
|---|
| 384 | <li> <a href="qdomdocumenttype.html">QDomDocumentType</a>: No children | 
|---|
| 385 | <li> <a href="qdomentityreference.html">QDomEntityReference</a>: Possible children are | 
|---|
| 386 | <ul> | 
|---|
| 387 | <li> <a href="qdomelement.html">QDomElement</a> | 
|---|
| 388 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 389 | <li> <a href="qdomcomment.html">QDomComment</a> | 
|---|
| 390 | <li> <a href="qdomtext.html">QDomText</a> | 
|---|
| 391 | <li> <a href="qdomcdatasection.html">QDomCDATASection</a> | 
|---|
| 392 | <li> <a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 393 | </ul> | 
|---|
| 394 | <li> <a href="qdomelement.html">QDomElement</a>: Possible children are | 
|---|
| 395 | <ul> | 
|---|
| 396 | <li> <a href="qdomelement.html">QDomElement</a> | 
|---|
| 397 | <li> <a href="qdomtext.html">QDomText</a> | 
|---|
| 398 | <li> <a href="qdomcomment.html">QDomComment</a> | 
|---|
| 399 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 400 | <li> <a href="qdomcdatasection.html">QDomCDATASection</a> | 
|---|
| 401 | <li> <a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 402 | </ul> | 
|---|
| 403 | <li> <a href="qdomattr.html">QDomAttr</a>: Possible children are | 
|---|
| 404 | <ul> | 
|---|
| 405 | <li> <a href="qdomtext.html">QDomText</a> | 
|---|
| 406 | <li> <a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 407 | </ul> | 
|---|
| 408 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a>: No children | 
|---|
| 409 | <li> <a href="qdomcomment.html">QDomComment</a>: No children | 
|---|
| 410 | <li> <a href="qdomtext.html">QDomText</a>: No children | 
|---|
| 411 | <li> <a href="qdomcdatasection.html">QDomCDATASection</a>: No children | 
|---|
| 412 | <li> <a href="qdomentity.html">QDomEntity</a>: Possible children are | 
|---|
| 413 | <ul> | 
|---|
| 414 | <li> <a href="qdomelement.html">QDomElement</a> | 
|---|
| 415 | <li> <a href="qdomprocessinginstruction.html">QDomProcessingInstruction</a> | 
|---|
| 416 | <li> <a href="qdomcomment.html">QDomComment</a> | 
|---|
| 417 | <li> <a href="qdomtext.html">QDomText</a> | 
|---|
| 418 | <li> <a href="qdomcdatasection.html">QDomCDATASection</a> | 
|---|
| 419 | <li> <a href="qdomentityreference.html">QDomEntityReference</a> | 
|---|
| 420 | </ul> | 
|---|
| 421 | <li> <a href="qdomnotation.html">QDomNotation</a>: No children | 
|---|
| 422 | </ul> | 
|---|
| 423 | <p> With <a href="qdomnodelist.html">QDomNodeList</a> and <a href="qdomnamednodemap.html">QDomNamedNodeMap</a> two <a href="collection.html#collection-classes">collection classes</a> | 
|---|
| 424 | are provided: <a href="qdomnodelist.html">QDomNodeList</a> is a list of nodes, | 
|---|
| 425 | and <a href="qdomnamednodemap.html">QDomNamedNodeMap</a> is used to handle unordered sets of nodes | 
|---|
| 426 | (often used for attributes). | 
|---|
| 427 | <p> The <a href="qdomimplementation.html">QDomImplementation</a> class allows the user to query features of the | 
|---|
| 428 | DOM implementation. | 
|---|
| 429 | <p> <h3> Further reading | 
|---|
| 430 | </h3> | 
|---|
| 431 | <a name="3-2"></a><p> To get started please refer to the <a href="qdomdocument.html">QDomDocument</a> documentation. | 
|---|
| 432 | <p> <a name="namespaces"></a> | 
|---|
| 433 | <h2> An introduction to namespaces | 
|---|
| 434 | </h2> | 
|---|
| 435 | <a name="4"></a><p> Parts of the Qt XML module documentation assume that you are familiar | 
|---|
| 436 | with XML namespaces. Here we present a brief introduction; skip to | 
|---|
| 437 | <a href="#namespacesConventions">Qt XML documentation conventions</a> | 
|---|
| 438 | if you already know this material. | 
|---|
| 439 | <p> Namespaces are a concept introduced into XML to allow a more modular | 
|---|
| 440 | design. With their help data processing software can easily resolve | 
|---|
| 441 | naming conflicts in XML documents. | 
|---|
| 442 | <p> Consider the following example: | 
|---|
| 443 | <p> <pre> | 
|---|
| 444 | <document> | 
|---|
| 445 | <book> | 
|---|
| 446 | <title>Practical XML</title> | 
|---|
| 447 | <author title="Ms" name="Eris Kallisti"/> | 
|---|
| 448 | <chapter> | 
|---|
| 449 | <title>A Namespace Called fnord</title> | 
|---|
| 450 | </chapter> | 
|---|
| 451 | </book> | 
|---|
| 452 | </document> | 
|---|
| 453 | </pre> | 
|---|
| 454 |  | 
|---|
| 455 | <p> Here we find three different uses of the name <em>title</em>. If you wish to | 
|---|
| 456 | process this document you will encounter problems because each of the | 
|---|
| 457 | <em>titles</em> should be displayed in a different manner -- even though | 
|---|
| 458 | they have the same name. | 
|---|
| 459 | <p> The solution would be to have some means of identifying the first | 
|---|
| 460 | occurrence of <em>title</em> as the title of a book, i.e. to use the <em>title</em> element of a book namespace to distinguish it from, for example, | 
|---|
| 461 | the chapter title, e.g.: | 
|---|
| 462 | <pre> | 
|---|
| 463 | <book:title>Practical XML</book:title> | 
|---|
| 464 | </pre> | 
|---|
| 465 |  | 
|---|
| 466 | <p> <em>book</em> in this case is a <em>prefix</em> denoting the namespace. | 
|---|
| 467 | <p> Before we can apply a namespace to element or attribute names we must | 
|---|
| 468 | declare it. | 
|---|
| 469 | <p> Namespaces are URIs like <em>http://trolltech.com/fnord/book/</em>. This | 
|---|
| 470 | does not mean that data must be available at this address; the URI is | 
|---|
| 471 | simply used to provide a unique name. | 
|---|
| 472 | <p> We declare namespaces in the same way as attributes; strictly speaking | 
|---|
| 473 | they <em>are</em> attributes. To make for example <em>http://trolltech.com/fnord/</em> the document's default XML namespace <em>xmlns</em> we write | 
|---|
| 474 | <p> <pre> | 
|---|
| 475 | xmlns="http://trolltech.com/fnord/" | 
|---|
| 476 | </pre> | 
|---|
| 477 |  | 
|---|
| 478 | <p> To distinguish the <em>http://trolltech.com/fnord/book/</em> namespace from | 
|---|
| 479 | the default, we must supply it with a prefix: | 
|---|
| 480 | <p> <pre> | 
|---|
| 481 | xmlns:book="http://trolltech.com/fnord/book/" | 
|---|
| 482 | </pre> | 
|---|
| 483 |  | 
|---|
| 484 | <p> A namespace that is declared like this can be applied to element and | 
|---|
| 485 | attribute names by prepending the appropriate prefix and a ":" | 
|---|
| 486 | delimiter. We have already seen this with the <em>book:title</em> element. | 
|---|
| 487 | <p> Element names without a prefix belong to the default namespace. This | 
|---|
| 488 | rule does not apply to attributes: an attribute without a prefix does | 
|---|
| 489 | not belong to any of the declared XML namespaces at all. Attributes | 
|---|
| 490 | always belong to the "traditional" namespace of the element in which | 
|---|
| 491 | they appear. A "traditional" namespace is not an XML namespace, it | 
|---|
| 492 | simply means that all attribute names belonging to one element must be | 
|---|
| 493 | different. Later we will see how to assign an XML namespace to an | 
|---|
| 494 | attribute. | 
|---|
| 495 | <p> Due to the fact that attributes without prefixes are not in any XML | 
|---|
| 496 | namespace there is no collision between the attribute <em>title</em> (that | 
|---|
| 497 | belongs to the <em>author</em> element) and for example the <em>title</em> element | 
|---|
| 498 | within a <em>chapter</em>. | 
|---|
| 499 | <p> Let's clarify this with an example: | 
|---|
| 500 | <pre> | 
|---|
| 501 | <document xmlns:book = 'http://trolltech.com/fnord/book/' | 
|---|
| 502 | xmlns      = 'http://trolltech.com/fnord/' > | 
|---|
| 503 | <book> | 
|---|
| 504 | <book:title>Practical XML</book:title> | 
|---|
| 505 | <book:author xmlns:fnord = 'http://trolltech.com/fnord/' | 
|---|
| 506 | title="Ms" | 
|---|
| 507 | fnord:title="Goddess" | 
|---|
| 508 | name="Eris Kallisti"/> | 
|---|
| 509 | <chapter> | 
|---|
| 510 | <title>A Namespace Called fnord</title> | 
|---|
| 511 | </chapter> | 
|---|
| 512 | </book> | 
|---|
| 513 | </document> | 
|---|
| 514 | </pre> | 
|---|
| 515 |  | 
|---|
| 516 | <p> Within the <em>document</em> element we have two namespaces declared. The | 
|---|
| 517 | default namespace <em>http://trolltech.com/fnord/</em> applies to the <em>book</em> element, the <em>chapter</em> element, the appropriate <em>title</em> element | 
|---|
| 518 | and of course to <em>document</em> itself. | 
|---|
| 519 | <p> The <em>book:author</em> and <em>book:title</em> elements belong to the namespace | 
|---|
| 520 | with the URI <em>http://trolltech.com/fnord/book/</em>. | 
|---|
| 521 | <p> The two <em>book:author</em> attributes <em>title</em> and <em>name</em> have no XML | 
|---|
| 522 | namespace assigned. They are only members of the "traditional" | 
|---|
| 523 | namespace of the element <em>book:author</em>, meaning that for example two | 
|---|
| 524 | <em>title</em> attributes in <em>book:author</em> are forbidden. | 
|---|
| 525 | <p> In the above example we circumvent the last rule by adding a <em>title</em> | 
|---|
| 526 | attribute from the <em>http://trolltech.com/fnord/</em> namespace to <em>book:author</em>: the <em>fnord:title</em> comes from the namespace with the | 
|---|
| 527 | prefix <em>fnord</em> that is declared in the <em>book:author</em> element. | 
|---|
| 528 | <p> Clearly the <em>fnord</em> namespace has the same namespace URI as the | 
|---|
| 529 | default namespace. So why didn't we simply use the default namespace | 
|---|
| 530 | we'd already declared? The answer is quite complex: | 
|---|
| 531 | <ul> | 
|---|
| 532 | <li> attributes without a prefix don't belong to any XML namespace at | 
|---|
| 533 | all, not even to the default namespace; | 
|---|
| 534 | <li> additionally omitting the prefix would lead to a <em>title-title</em> clash; | 
|---|
| 535 | <li> writing it as <em>xmlns:title</em> would declare a new namespace with the | 
|---|
| 536 | prefix <em>title</em> instead of applying the default <em>xmlns</em> namespace. | 
|---|
| 537 | </ul> | 
|---|
| 538 | <p> With the Qt XML classes elements and attributes can be accessed in two | 
|---|
| 539 | ways: either by refering to their qualified names consisting of the | 
|---|
| 540 | namespace prefix and the "real" name (or <em>local</em> name) or by the | 
|---|
| 541 | combination of local name and namespace URI. | 
|---|
| 542 | <p> More information on XML namespaces can be found at | 
|---|
| 543 | <a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a>. | 
|---|
| 544 | <p> <a name="namespacesConventions"></a> | 
|---|
| 545 | <h3> Conventions used in Qt XML documentation | 
|---|
| 546 | </h3> | 
|---|
| 547 | <a name="4-1"></a><p> The following terms are used to distinguish the parts of names within | 
|---|
| 548 | the context of namespaces: | 
|---|
| 549 | <ul> | 
|---|
| 550 | <li>  The <em>qualified name</em> | 
|---|
| 551 | is the name as it appears in the document. (In the above example <em>book:title</em> is a qualified name.) | 
|---|
| 552 | <li>  A <em>namespace prefix</em> in a qualified name | 
|---|
| 553 | is the part to the left of the ":". (<em>book</em> is the namespace prefix in | 
|---|
| 554 | <em>book:title</em>.) | 
|---|
| 555 | <li>  The <em>local part</em> of a name (also refered to as the <em>local name</em>) appears to the right of the ":". (Thus <em>title</em> is the | 
|---|
| 556 | local part of <em>book:title</em>.) | 
|---|
| 557 | <li>  The <em>namespace URI</em> ("Uniform Resource Identifier") is a unique | 
|---|
| 558 | identifier for a namespace. It looks like a URL | 
|---|
| 559 | (e.g. <em>http://trolltech.com/fnord/</em> ) but does not require | 
|---|
| 560 | data to be accessible by the given protocol at the named address. | 
|---|
| 561 | </ul> | 
|---|
| 562 | <p> Elements without a ":" (like <em>chapter</em> in the example) do not have a | 
|---|
| 563 | namespace prefix. In this case the local part and the qualified name | 
|---|
| 564 | are identical (i.e. <em>chapter</em>). | 
|---|
| 565 |  | 
|---|
| 566 | <!-- eof --> | 
|---|
| 567 | <p><address><hr><div align=center> | 
|---|
| 568 | <table width=100% cellspacing=0 border=0><tr> | 
|---|
| 569 | <td>Copyright © 2007 | 
|---|
| 570 | <a href="troll.html">Trolltech</a><td align=center><a href="trademarks.html">Trademarks</a> | 
|---|
| 571 | <td align=right><div align=right>Qt 3.3.8</div> | 
|---|
| 572 | </table></div></address></body> | 
|---|
| 573 | </html> | 
|---|