1//
2// SAXParserTest.cpp
3//
4// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
5// and Contributors.
6//
7// SPDX-License-Identifier: BSL-1.0
8//
9
10
11#include "SAXParserTest.h"
12#include "Poco/CppUnit/TestCaller.h"
13#include "Poco/CppUnit/TestSuite.h"
14#include "Poco/SAX/SAXParser.h"
15#include "Poco/SAX/InputSource.h"
16#include "Poco/SAX/EntityResolver.h"
17#include "Poco/SAX/SAXException.h"
18#include "Poco/SAX/WhitespaceFilter.h"
19#include "Poco/XML/XMLWriter.h"
20#include "Poco/Latin9Encoding.h"
21#include "Poco/FileStream.h"
22#include <sstream>
23
24
25using Poco::XML::SAXParser;
26using Poco::XML::XMLWriter;
27using Poco::XML::XMLReader;
28using Poco::XML::InputSource;
29using Poco::XML::EntityResolver;
30using Poco::XML::XMLString;
31using Poco::XML::SAXParseException;
32using Poco::XML::WhitespaceFilter;
33
34
35class TestEntityResolver: public EntityResolver
36{
37public:
38 InputSource* resolveEntity(const XMLString* publicId, const XMLString& systemId)
39 {
40 if (systemId == "include.xml")
41 {
42 std::istringstream* istr = new std::istringstream(SAXParserTest::INCLUDE);
43 InputSource* pIS = new InputSource(*istr);
44 pIS->setSystemId(systemId);
45 return pIS;
46 }
47 else if (systemId == "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent")
48 {
49 std::istringstream* istr = new std::istringstream(SAXParserTest::XHTML_LATIN1_ENTITIES);
50 InputSource* pIS = new InputSource(*istr);
51 pIS->setSystemId(systemId);
52 return pIS;
53 }
54 return 0;
55 }
56
57 void releaseInputSource(InputSource* pSource)
58 {
59 delete pSource->getByteStream();
60 delete pSource;
61 }
62};
63
64
65SAXParserTest::SAXParserTest(const std::string& name): CppUnit::TestCase(name)
66{
67}
68
69
70SAXParserTest::~SAXParserTest()
71{
72}
73
74
75void SAXParserTest::testSimple1()
76{
77 SAXParser parser;
78 std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE1);
79 assertTrue (xml == "<foo/>");
80}
81
82
83void SAXParserTest::testSimple2()
84{
85 SAXParser parser;
86 std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE2);
87 assertTrue (xml == "<foo/>");
88}
89
90
91void SAXParserTest::testAttributes()
92{
93 SAXParser parser;
94 std::string xml = parse(parser, XMLWriter::CANONICAL, ATTRIBUTES);
95 assertTrue (xml == ATTRIBUTES);
96}
97
98
99void SAXParserTest::testCDATA()
100{
101 SAXParser parser;
102 std::string xml = parse(parser, XMLWriter::CANONICAL, CDATA);
103 assertTrue (xml == CDATA);
104}
105
106
107void SAXParserTest::testComment()
108{
109 SAXParser parser;
110 std::string xml = parse(parser, XMLWriter::CANONICAL, COMMENT);
111 assertTrue (xml == COMMENT);
112}
113
114
115void SAXParserTest::testPI()
116{
117 SAXParser parser;
118 std::string xml = parse(parser, XMLWriter::CANONICAL, PROCESSING_INSTRUCTION);
119 assertTrue (xml == PROCESSING_INSTRUCTION);
120}
121
122
123void SAXParserTest::testDTD()
124{
125 SAXParser parser;
126 std::string xml = parse(parser, XMLWriter::CANONICAL, DTD);
127 assertTrue (xml == "<!DOCTYPE test SYSTEM \"test.dtd\"><foo/>");
128}
129
130
131void SAXParserTest::testInternalEntity()
132{
133 SAXParser parser;
134 std::string xml = parse(parser, XMLWriter::CANONICAL, INTERNAL_ENTITY);
135 assertTrue (xml == "<!DOCTYPE sample><root>\n\t<company>Applied Informatics</company>\n</root>");
136}
137
138
139void SAXParserTest::testNotation()
140{
141 SAXParser parser;
142 std::string xml = parse(parser, XMLWriter::CANONICAL, NOTATION);
143 assertTrue (xml == "<!DOCTYPE test [<!NOTATION mov SYSTEM \"quicktime\">"
144 "<!NOTATION xml PUBLIC \"-//W3C//NOTATION XML 1.0//EN\">]>"
145 "<foo/>");
146}
147
148
149void SAXParserTest::testExternalUnparsed()
150{
151 SAXParser parser;
152 std::string xml = parse(parser, XMLWriter::CANONICAL, EXTERNAL_UNPARSED);
153 assertTrue (xml == "<!DOCTYPE test [<!NOTATION mov SYSTEM \"quicktime\">"
154 "<!ENTITY movie SYSTEM \"movie.mov\" NDATA mov>]>"
155 "<sample/>");
156}
157
158
159void SAXParserTest::testExternalParsed()
160{
161 SAXParser parser;
162 TestEntityResolver resolver;
163 parser.setEntityResolver(&resolver);
164 parser.setFeature(XMLReader::FEATURE_EXTERNAL_GENERAL_ENTITIES, true);
165 std::string xml = parse(parser, XMLWriter::CANONICAL, EXTERNAL_PARSED);
166 assertTrue (xml == "<!DOCTYPE test><sample>\n\t<elem>\n\tAn external entity.\n</elem>\n\n</sample>");
167}
168
169
170void SAXParserTest::testDefaultNamespace()
171{
172 SAXParser parser;
173 std::string xml = parse(parser, XMLWriter::CANONICAL, DEFAULT_NAMESPACE);
174 assertTrue (xml == DEFAULT_NAMESPACE);
175}
176
177
178void SAXParserTest::testNamespaces()
179{
180 SAXParser parser;
181 parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);
182 parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, true);
183 std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);
184 assertTrue (xml == NAMESPACES);
185}
186
187
188void SAXParserTest::testNamespacesNoPrefixes()
189{
190 SAXParser parser;
191 parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);
192 parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, false);
193 std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);
194 assertTrue (xml == NAMESPACES);
195}
196
197
198void SAXParserTest::testNoNamespaces()
199{
200 SAXParser parser;
201 parser.setFeature(XMLReader::FEATURE_NAMESPACES, false);
202 std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);
203 assertTrue (xml == NAMESPACES);
204}
205
206
207void SAXParserTest::testUndeclaredNamespace()
208{
209 SAXParser parser;
210 parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);
211 parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, true);
212 try
213 {
214 std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);
215 fail("undeclared namespace - must throw exception");
216 }
217 catch (SAXParseException&)
218 {
219 }
220}
221
222
223void SAXParserTest::testUndeclaredNamespaceNoPrefixes()
224{
225 SAXParser parser;
226 parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);
227 parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, false);
228 try
229 {
230 std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);
231 fail("undeclared namespace - must throw exception");
232 }
233 catch (SAXParseException&)
234 {
235 }
236}
237
238
239void SAXParserTest::testUndeclaredNoNamespace()
240{
241 SAXParser parser;
242 parser.setFeature(XMLReader::FEATURE_NAMESPACES, false);
243 std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);
244 assertTrue (xml == UNDECLARED_NAMESPACE);
245}
246
247
248void SAXParserTest::testRSS()
249{
250 SAXParser parser;
251 WhitespaceFilter filter(&parser);
252 TestEntityResolver resolver;
253 filter.setEntityResolver(&resolver);
254 parser.setFeature(XMLReader::FEATURE_EXTERNAL_GENERAL_ENTITIES, true);
255 parser.setFeature(XMLReader::FEATURE_EXTERNAL_PARAMETER_ENTITIES, true);
256
257 std::istringstream istr(RSS);
258 Poco::FileOutputStream ostr("rss.xml");
259 XMLWriter writer(ostr, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);
260 filter.setContentHandler(&writer);
261 filter.setDTDHandler(&writer);
262 filter.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));
263 InputSource source(istr);
264 filter.parse(&source);
265}
266
267
268void SAXParserTest::testEncoding()
269{
270 SAXParser parser;
271 Poco::Latin9Encoding encoding;
272 parser.addEncoding("ISO-8859-15", &encoding);
273
274 std::istringstream istr(ENCODING);
275 std::ostringstream ostr;
276 XMLWriter writer(ostr, XMLWriter::WRITE_XML_DECLARATION, "ISO-8859-15", encoding);
277 parser.setContentHandler(&writer);
278 parser.setDTDHandler(&writer);
279 parser.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));
280 InputSource source(istr);
281 parser.parse(&source);
282
283 std::string xml = ostr.str();
284 assertTrue (xml == ENCODING);
285}
286
287
288void SAXParserTest::testCharacters()
289{
290 static const XMLString xml("<textnode> TEXT &amp; AMPERSAND </textnode>");
291 SAXParser parser;
292 parser.setFeature(XMLReader::FEATURE_NAMESPACES, false);
293 std::string result = parse(parser, XMLWriter::CANONICAL, xml);
294 assertTrue (result == xml);
295}
296
297
298void SAXParserTest::testParseMemory()
299{
300 SAXParser parser;
301 std::string xml = parseMemory(parser, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT, WSDL);
302 assertTrue (xml == WSDL);
303}
304
305
306void SAXParserTest::testParsePartialReads()
307{
308 SAXParser parser;
309 parser.setFeature("http://www.appinf.com/features/enable-partial-reads", true);
310
311 std::string xml = parse(parser, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT, WSDL);
312 assertTrue (xml == WSDL);
313}
314
315
316void SAXParserTest::setUp()
317{
318}
319
320
321void SAXParserTest::tearDown()
322{
323}
324
325
326std::string SAXParserTest::parse(XMLReader& reader, int options, const std::string& data)
327{
328 std::istringstream istr(data);
329 std::ostringstream ostr;
330 XMLWriter writer(ostr, options);
331 writer.setNewLine(XMLWriter::NEWLINE_LF);
332 reader.setContentHandler(&writer);
333 reader.setDTDHandler(&writer);
334 reader.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));
335 InputSource source(istr);
336 reader.parse(&source);
337 return ostr.str();
338}
339
340
341std::string SAXParserTest::parseMemory(XMLReader& reader, int options, const std::string& data)
342{
343 std::ostringstream ostr;
344 XMLWriter writer(ostr, options);
345 writer.setNewLine(XMLWriter::NEWLINE_LF);
346 reader.setContentHandler(&writer);
347 reader.setDTDHandler(&writer);
348 reader.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));
349 reader.parseMemoryNP(data.data(), data.size());
350 return ostr.str();
351}
352
353
354CppUnit::Test* SAXParserTest::suite()
355{
356 CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SAXParserTest");
357
358 CppUnit_addTest(pSuite, SAXParserTest, testSimple1);
359 CppUnit_addTest(pSuite, SAXParserTest, testSimple2);
360 CppUnit_addTest(pSuite, SAXParserTest, testAttributes);
361 CppUnit_addTest(pSuite, SAXParserTest, testCDATA);
362 CppUnit_addTest(pSuite, SAXParserTest, testComment);
363 CppUnit_addTest(pSuite, SAXParserTest, testPI);
364 CppUnit_addTest(pSuite, SAXParserTest, testDTD);
365 CppUnit_addTest(pSuite, SAXParserTest, testInternalEntity);
366 CppUnit_addTest(pSuite, SAXParserTest, testNotation);
367 CppUnit_addTest(pSuite, SAXParserTest, testExternalUnparsed);
368 CppUnit_addTest(pSuite, SAXParserTest, testExternalParsed);
369 CppUnit_addTest(pSuite, SAXParserTest, testDefaultNamespace);
370 CppUnit_addTest(pSuite, SAXParserTest, testNamespaces);
371 CppUnit_addTest(pSuite, SAXParserTest, testNamespacesNoPrefixes);
372 CppUnit_addTest(pSuite, SAXParserTest, testNoNamespaces);
373 CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNamespace);
374 CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNamespaceNoPrefixes);
375 CppUnit_addTest(pSuite, SAXParserTest, testUndeclaredNoNamespace);
376 CppUnit_addTest(pSuite, SAXParserTest, testRSS);
377 CppUnit_addTest(pSuite, SAXParserTest, testEncoding);
378 CppUnit_addTest(pSuite, SAXParserTest, testCharacters);
379 CppUnit_addTest(pSuite, SAXParserTest, testParseMemory);
380 CppUnit_addTest(pSuite, SAXParserTest, testParsePartialReads);
381
382 return pSuite;
383}
384
385
386const std::string SAXParserTest::SIMPLE1 =
387 "<foo/>\n";
388
389
390const std::string SAXParserTest::SIMPLE2 =
391 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
392 "<foo/>\n";
393
394
395const std::string SAXParserTest::ATTRIBUTES =
396 "<root a1=\"v1\">\n"
397 "\t<elem a1=\"v1\" a2=\"v2\"/>\n"
398 "</root>";
399
400
401const std::string SAXParserTest::CDATA =
402 "<data>\n"
403 "<![CDATA[\n"
404 "\tThe following <tag attr=\"value\">is inside a CDATA section</tag>.\n"
405 "]]>\n"
406 "</data>";
407
408
409const std::string SAXParserTest::COMMENT =
410 "<!--this is a comment-->"
411 "<root>\n"
412 "\t<!--another comment-->\n"
413 "\t<elem/>\n"
414 "</root>";
415
416
417const std::string SAXParserTest::PROCESSING_INSTRUCTION =
418 "<html>\n"
419 "\t<head>\n"
420 "\t\t<?xml-stylesheet href=\"style.css\" type=\"text/css\"?>\n"
421 "\t\t<title>test</title>\n"
422 "\t</head>\n"
423 "\t<body>\n"
424 "\t\t<p>this is a test</p>\n"
425 "\t</body>\n"
426 "</html>";
427
428
429const std::string SAXParserTest::DTD =
430 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
431 "<!DOCTYPE test SYSTEM \"test.dtd\">\n"
432 "<foo/>";
433
434
435const std::string SAXParserTest::INTERNAL_ENTITY =
436 "<!DOCTYPE sample [\n"
437 "\t<!ENTITY appinf \"Applied Informatics\">\n"
438 "]>\n"
439 "<root>\n"
440 "\t<company>&appinf;</company>\n"
441 "</root>";
442
443
444const std::string SAXParserTest::NOTATION =
445 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
446 "<!DOCTYPE test [\n"
447 "\t<!NOTATION mov SYSTEM \"quicktime\">\n"
448 "\t<!NOTATION xml PUBLIC \"-//W3C//NOTATION XML 1.0//EN\">\n"
449 "]>\n"
450 "<foo/>";
451
452
453const std::string SAXParserTest::EXTERNAL_UNPARSED =
454 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
455 "<!DOCTYPE test [\n"
456 "\t<!NOTATION mov SYSTEM \"quicktime\">\n"
457 "\t<!ENTITY movie SYSTEM \"movie.mov\" NDATA mov>\n"
458 "]>\n"
459 "<sample/>";
460
461
462const std::string SAXParserTest::EXTERNAL_PARSED =
463 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
464 "<!DOCTYPE test [\n"
465 "\t<!ENTITY include SYSTEM \"include.xml\">\n"
466 "]>\n"
467 "<sample>\n"
468 "\t&include;\n"
469 "</sample>\n";
470
471
472const std::string SAXParserTest::INCLUDE =
473 "<elem>\n"
474 "\tAn external entity.\n"
475 "</elem>\n";
476
477
478const std::string SAXParserTest::DEFAULT_NAMESPACE =
479 "<root xmlns=\"urn:ns1\">\n"
480 "\t<elem>data</elem>\n"
481 "</root>";
482
483
484const std::string SAXParserTest::NAMESPACES =
485 "<ns1:root xmlns:ns1=\"urn:ns1\" xmlns:ns2=\"urn:ns2\">\n"
486 "\t<ns2:elem>data</ns2:elem>\n"
487 "\t<ns3:elem a1=\"v1\" ns2:a2=\"v2\" xmlns:ns3=\"urn:ns3\">\n"
488 "\t\tmore data\n"
489 "\t</ns3:elem>\n"
490 "</ns1:root>";
491
492
493const std::string SAXParserTest::UNDECLARED_NAMESPACE =
494 "<ns1:root xmlns:ns1=\"urn:ns1\" xmlns:ns2=\"urn:ns2\">\n"
495 "\t<ns2:elem>data</ns2:elem>\n"
496 "\t<ns3:elem a1=\"v1\" ns2:a2=\"v2\" xmlns:ns3=\"urn:ns3\">\n"
497 "\t\tmore data\n"
498 "\t</ns3:elem>\n"
499 "\t<ns4:elem/>\n"
500 "</ns1:root>";
501
502
503const std::string SAXParserTest::XHTML_LATIN1_ENTITIES =
504 "<!-- Portions (C) International Organization for Standardization 1986\n"
505 " Permission to copy in any form is granted for use with\n"
506 " conforming SGML systems and applications as defined in\n"
507 " ISO 8879, provided this notice is included in all copies.\n"
508 "-->\n"
509 "<!-- Character entity set. Typical invocation:\n"
510 " <!ENTITY % HTMLlat1 PUBLIC\n"
511 " \"-//W3C//ENTITIES Latin 1 for XHTML//EN\"\n"
512 " \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n"
513 " %HTMLlat1;\n"
514 "-->\n"
515 "\n"
516 "<!ENTITY nbsp \"&#160;\"> <!-- no-break space = non-breaking space,\n"
517 " U+00A0 ISOnum -->\n"
518 "<!ENTITY iexcl \"&#161;\"> <!-- inverted exclamation mark, U+00A1 ISOnum -->\n"
519 "<!ENTITY cent \"&#162;\"> <!-- cent sign, U+00A2 ISOnum -->\n"
520 "<!ENTITY pound \"&#163;\"> <!-- pound sign, U+00A3 ISOnum -->\n"
521 "<!ENTITY curren \"&#164;\"> <!-- currency sign, U+00A4 ISOnum -->\n"
522 "<!ENTITY yen \"&#165;\"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->\n"
523 "<!ENTITY brvbar \"&#166;\"> <!-- broken bar = broken vertical bar,\n"
524 " U+00A6 ISOnum -->\n"
525 "<!ENTITY sect \"&#167;\"> <!-- section sign, U+00A7 ISOnum -->\n"
526 "<!ENTITY uml \"&#168;\"> <!-- diaeresis = spacing diaeresis,\n"
527 " U+00A8 ISOdia -->\n"
528 "<!ENTITY copy \"&#169;\"> <!-- copyright sign, U+00A9 ISOnum -->\n"
529 "<!ENTITY ordf \"&#170;\"> <!-- feminine ordinal indicator, U+00AA ISOnum -->\n"
530 "<!ENTITY laquo \"&#171;\"> <!-- left-pointing double angle quotation mark\n"
531 " = left pointing guillemet, U+00AB ISOnum -->\n"
532 "<!ENTITY not \"&#172;\"> <!-- not sign = angled dash,\n"
533 " U+00AC ISOnum -->\n"
534 "<!ENTITY shy \"&#173;\"> <!-- soft hyphen = discretionary hyphen,\n"
535 " U+00AD ISOnum -->\n"
536 "<!ENTITY reg \"&#174;\"> <!-- registered sign = registered trade mark sign,\n"
537 " U+00AE ISOnum -->\n"
538 "<!ENTITY macr \"&#175;\"> <!-- macron = spacing macron = overline\n"
539 " = APL overbar, U+00AF ISOdia -->\n"
540 "<!ENTITY deg \"&#176;\"> <!-- degree sign, U+00B0 ISOnum -->\n"
541 "<!ENTITY plusmn \"&#177;\"> <!-- plus-minus sign = plus-or-minus sign,\n"
542 " U+00B1 ISOnum -->\n"
543 "<!ENTITY sup2 \"&#178;\"> <!-- superscript two = superscript digit two\n"
544 " = squared, U+00B2 ISOnum -->\n"
545 "<!ENTITY sup3 \"&#179;\"> <!-- superscript three = superscript digit three\n"
546 " = cubed, U+00B3 ISOnum -->\n"
547 "<!ENTITY acute \"&#180;\"> <!-- acute accent = spacing acute,\n"
548 " U+00B4 ISOdia -->\n"
549 "<!ENTITY micro \"&#181;\"> <!-- micro sign, U+00B5 ISOnum -->\n"
550 "<!ENTITY para \"&#182;\"> <!-- pilcrow sign = paragraph sign,\n"
551 " U+00B6 ISOnum -->\n"
552 "<!ENTITY middot \"&#183;\"> <!-- middle dot = Georgian comma\n"
553 " = Greek middle dot, U+00B7 ISOnum -->\n"
554 "<!ENTITY cedil \"&#184;\"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->\n"
555 "<!ENTITY sup1 \"&#185;\"> <!-- superscript one = superscript digit one,\n"
556 " U+00B9 ISOnum -->\n"
557 "<!ENTITY ordm \"&#186;\"> <!-- masculine ordinal indicator,\n"
558 " U+00BA ISOnum -->\n"
559 "<!ENTITY raquo \"&#187;\"> <!-- right-pointing double angle quotation mark\n"
560 " = right pointing guillemet, U+00BB ISOnum -->\n"
561 "<!ENTITY frac14 \"&#188;\"> <!-- vulgar fraction one quarter\n"
562 " = fraction one quarter, U+00BC ISOnum -->\n"
563 "<!ENTITY frac12 \"&#189;\"> <!-- vulgar fraction one half\n"
564 " = fraction one half, U+00BD ISOnum -->\n"
565 "<!ENTITY frac34 \"&#190;\"> <!-- vulgar fraction three quarters\n"
566 " = fraction three quarters, U+00BE ISOnum -->\n"
567 "<!ENTITY iquest \"&#191;\"> <!-- inverted question mark\n"
568 " = turned question mark, U+00BF ISOnum -->\n"
569 "<!ENTITY Agrave \"&#192;\"> <!-- latin capital letter A with grave\n"
570 " = latin capital letter A grave,\n"
571 " U+00C0 ISOlat1 -->\n"
572 "<!ENTITY Aacute \"&#193;\"> <!-- latin capital letter A with acute,\n"
573 " U+00C1 ISOlat1 -->\n"
574 "<!ENTITY Acirc \"&#194;\"> <!-- latin capital letter A with circumflex,\n"
575 " U+00C2 ISOlat1 -->\n"
576 "<!ENTITY Atilde \"&#195;\"> <!-- latin capital letter A with tilde,\n"
577 " U+00C3 ISOlat1 -->\n"
578 "<!ENTITY Auml \"&#196;\"> <!-- latin capital letter A with diaeresis,\n"
579 " U+00C4 ISOlat1 -->\n"
580 "<!ENTITY Aring \"&#197;\"> <!-- latin capital letter A with ring above\n"
581 " = latin capital letter A ring,\n"
582 " U+00C5 ISOlat1 -->\n"
583 "<!ENTITY AElig \"&#198;\"> <!-- latin capital letter AE\n"
584 " = latin capital ligature AE,\n"
585 " U+00C6 ISOlat1 -->\n"
586 "<!ENTITY Ccedil \"&#199;\"> <!-- latin capital letter C with cedilla,\n"
587 " U+00C7 ISOlat1 -->\n"
588 "<!ENTITY Egrave \"&#200;\"> <!-- latin capital letter E with grave,\n"
589 " U+00C8 ISOlat1 -->\n"
590 "<!ENTITY Eacute \"&#201;\"> <!-- latin capital letter E with acute,\n"
591 " U+00C9 ISOlat1 -->\n"
592 "<!ENTITY Ecirc \"&#202;\"> <!-- latin capital letter E with circumflex,\n"
593 " U+00CA ISOlat1 -->\n"
594 "<!ENTITY Euml \"&#203;\"> <!-- latin capital letter E with diaeresis,\n"
595 " U+00CB ISOlat1 -->\n"
596 "<!ENTITY Igrave \"&#204;\"> <!-- latin capital letter I with grave,\n"
597 " U+00CC ISOlat1 -->\n"
598 "<!ENTITY Iacute \"&#205;\"> <!-- latin capital letter I with acute,\n"
599 " U+00CD ISOlat1 -->\n"
600 "<!ENTITY Icirc \"&#206;\"> <!-- latin capital letter I with circumflex,\n"
601 " U+00CE ISOlat1 -->\n"
602 "<!ENTITY Iuml \"&#207;\"> <!-- latin capital letter I with diaeresis,\n"
603 " U+00CF ISOlat1 -->\n"
604 "<!ENTITY ETH \"&#208;\"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->\n"
605 "<!ENTITY Ntilde \"&#209;\"> <!-- latin capital letter N with tilde,\n"
606 " U+00D1 ISOlat1 -->\n"
607 "<!ENTITY Ograve \"&#210;\"> <!-- latin capital letter O with grave,\n"
608 " U+00D2 ISOlat1 -->\n"
609 "<!ENTITY Oacute \"&#211;\"> <!-- latin capital letter O with acute,\n"
610 " U+00D3 ISOlat1 -->\n"
611 "<!ENTITY Ocirc \"&#212;\"> <!-- latin capital letter O with circumflex,\n"
612 " U+00D4 ISOlat1 -->\n"
613 "<!ENTITY Otilde \"&#213;\"> <!-- latin capital letter O with tilde,\n"
614 " U+00D5 ISOlat1 -->\n"
615 "<!ENTITY Ouml \"&#214;\"> <!-- latin capital letter O with diaeresis,\n"
616 " U+00D6 ISOlat1 -->\n"
617 "<!ENTITY times \"&#215;\"> <!-- multiplication sign, U+00D7 ISOnum -->\n"
618 "<!ENTITY Oslash \"&#216;\"> <!-- latin capital letter O with stroke\n"
619 " = latin capital letter O slash,\n"
620 " U+00D8 ISOlat1 -->\n"
621 "<!ENTITY Ugrave \"&#217;\"> <!-- latin capital letter U with grave,\n"
622 " U+00D9 ISOlat1 -->\n"
623 "<!ENTITY Uacute \"&#218;\"> <!-- latin capital letter U with acute,\n"
624 " U+00DA ISOlat1 -->\n"
625 "<!ENTITY Ucirc \"&#219;\"> <!-- latin capital letter U with circumflex,\n"
626 " U+00DB ISOlat1 -->\n"
627 "<!ENTITY Uuml \"&#220;\"> <!-- latin capital letter U with diaeresis,\n"
628 " U+00DC ISOlat1 -->\n"
629 "<!ENTITY Yacute \"&#221;\"> <!-- latin capital letter Y with acute,\n"
630 " U+00DD ISOlat1 -->\n"
631 "<!ENTITY THORN \"&#222;\"> <!-- latin capital letter THORN,\n"
632 " U+00DE ISOlat1 -->\n"
633 "<!ENTITY szlig \"&#223;\"> <!-- latin small letter sharp s = ess-zed,\n"
634 " U+00DF ISOlat1 -->\n"
635 "<!ENTITY agrave \"&#224;\"> <!-- latin small letter a with grave\n"
636 " = latin small letter a grave,\n"
637 " U+00E0 ISOlat1 -->\n"
638 "<!ENTITY aacute \"&#225;\"> <!-- latin small letter a with acute,\n"
639 " U+00E1 ISOlat1 -->\n"
640 "<!ENTITY acirc \"&#226;\"> <!-- latin small letter a with circumflex,\n"
641 " U+00E2 ISOlat1 -->\n"
642 "<!ENTITY atilde \"&#227;\"> <!-- latin small letter a with tilde,\n"
643 " U+00E3 ISOlat1 -->\n"
644 "<!ENTITY auml \"&#228;\"> <!-- latin small letter a with diaeresis,\n"
645 " U+00E4 ISOlat1 -->\n"
646 "<!ENTITY aring \"&#229;\"> <!-- latin small letter a with ring above\n"
647 " = latin small letter a ring,\n"
648 " U+00E5 ISOlat1 -->\n"
649 "<!ENTITY aelig \"&#230;\"> <!-- latin small letter ae\n"
650 " = latin small ligature ae, U+00E6 ISOlat1 -->\n"
651 "<!ENTITY ccedil \"&#231;\"> <!-- latin small letter c with cedilla,\n"
652 " U+00E7 ISOlat1 -->\n"
653 "<!ENTITY egrave \"&#232;\"> <!-- latin small letter e with grave,\n"
654 " U+00E8 ISOlat1 -->\n"
655 "<!ENTITY eacute \"&#233;\"> <!-- latin small letter e with acute,\n"
656 " U+00E9 ISOlat1 -->\n"
657 "<!ENTITY ecirc \"&#234;\"> <!-- latin small letter e with circumflex,\n"
658 " U+00EA ISOlat1 -->\n"
659 "<!ENTITY euml \"&#235;\"> <!-- latin small letter e with diaeresis,\n"
660 " U+00EB ISOlat1 -->\n"
661 "<!ENTITY igrave \"&#236;\"> <!-- latin small letter i with grave,\n"
662 " U+00EC ISOlat1 -->\n"
663 "<!ENTITY iacute \"&#237;\"> <!-- latin small letter i with acute,\n"
664 " U+00ED ISOlat1 -->\n"
665 "<!ENTITY icirc \"&#238;\"> <!-- latin small letter i with circumflex,\n"
666 " U+00EE ISOlat1 -->\n"
667 "<!ENTITY iuml \"&#239;\"> <!-- latin small letter i with diaeresis,\n"
668 " U+00EF ISOlat1 -->\n"
669 "<!ENTITY eth \"&#240;\"> <!-- latin small letter eth, U+00F0 ISOlat1 -->\n"
670 "<!ENTITY ntilde \"&#241;\"> <!-- latin small letter n with tilde,\n"
671 " U+00F1 ISOlat1 -->\n"
672 "<!ENTITY ograve \"&#242;\"> <!-- latin small letter o with grave,\n"
673 " U+00F2 ISOlat1 -->\n"
674 "<!ENTITY oacute \"&#243;\"> <!-- latin small letter o with acute,\n"
675 " U+00F3 ISOlat1 -->\n"
676 "<!ENTITY ocirc \"&#244;\"> <!-- latin small letter o with circumflex,\n"
677 " U+00F4 ISOlat1 -->\n"
678 "<!ENTITY otilde \"&#245;\"> <!-- latin small letter o with tilde,\n"
679 " U+00F5 ISOlat1 -->\n"
680 "<!ENTITY ouml \"&#246;\"> <!-- latin small letter o with diaeresis,\n"
681 " U+00F6 ISOlat1 -->\n"
682 "<!ENTITY divide \"&#247;\"> <!-- division sign, U+00F7 ISOnum -->\n"
683 "<!ENTITY oslash \"&#248;\"> <!-- latin small letter o with stroke,\n"
684 " = latin small letter o slash,\n"
685 " U+00F8 ISOlat1 -->\n"
686 "<!ENTITY ugrave \"&#249;\"> <!-- latin small letter u with grave,\n"
687 " U+00F9 ISOlat1 -->\n"
688 "<!ENTITY uacute \"&#250;\"> <!-- latin small letter u with acute,\n"
689 " U+00FA ISOlat1 -->\n"
690 "<!ENTITY ucirc \"&#251;\"> <!-- latin small letter u with circumflex,\n"
691 " U+00FB ISOlat1 -->\n"
692 "<!ENTITY uuml \"&#252;\"> <!-- latin small letter u with diaeresis,\n"
693 " U+00FC ISOlat1 -->\n"
694 "<!ENTITY yacute \"&#253;\"> <!-- latin small letter y with acute,\n"
695 " U+00FD ISOlat1 -->\n"
696 "<!ENTITY thorn \"&#254;\"> <!-- latin small letter thorn,\n"
697 " U+00FE ISOlat1 -->\n"
698 "<!ENTITY yuml \"&#255;\"> <!-- latin small letter y with diaeresis,\n"
699 " U+00FF ISOlat1 -->\n";
700
701const std::string SAXParserTest::RSS =
702 "<?xml version=\"1.0\"?>\n"
703 "\n"
704 "<!DOCTYPE rdf:RDF [\n"
705 "<!ENTITY % HTMLlat1 PUBLIC\n"
706 " \"-//W3C//ENTITIES Latin 1 for XHTML//EN\"\n"
707 " \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n"
708 "%HTMLlat1;\n"
709 "]>\n"
710 "\n"
711 "<rdf:RDF \n"
712 " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" \n"
713 " xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
714 " xmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\"\n"
715 " xmlns=\"http://purl.org/rss/1.0/\"\n"
716 "> \n"
717 "\n"
718 " <channel rdf:about=\"http://meerkat.oreillynet.com/\">\n"
719 " <title>XML.com</title> \n"
720 " <link>http://www.xml.com/</link>\n"
721 " <description>XML.com features a rich mix of information and services for the XML community.</description>\n"
722 " <sy:updatePeriod>hourly</sy:updatePeriod>\n"
723 " <sy:updateFrequency>2</sy:updateFrequency>\n"
724 " <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>\n"
725 "\n"
726 " <image rdf:resource=\"http://meerkat.oreillynet.com/icons/meerkat-powered.jpg\" />\n"
727 "\n"
728 " <items>\n"
729 " <rdf:Seq>\n"
730 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/09/xforms.html\" />\n"
731 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/09/cssorxsl.html\" />\n"
732 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/09/xml-http-request.html\" />\n"
733 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/02/xpath2.html\" />\n"
734 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/02/silent.html\" />\n"
735 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/02/xpath2.html\" />\n"
736 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/02/02/tmapi.html\" />\n"
737 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/26/formtax.html\" />\n"
738 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/26/hacking-ooo.html\" />\n"
739 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/26/simile.html\" />\n"
740 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/19/amara.html\" />\n"
741 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/19/print.html\" />\n"
742 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/19/review.html\" />\n"
743 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/12/saml2.html\" />\n"
744 " <rdf:li rdf:resource=\"http://www.xml.com/pub/a/2005/01/12/comega.html\" />\n"
745 " </rdf:Seq>\n"
746 " </items>\n"
747 " \n"
748 " <textinput rdf:resource=\"http://meerkat.oreillynet.com/\" />\n"
749 "\n"
750 " </channel>\n"
751 "\n"
752 " <image rdf:about=\"http://meerkat.oreillynet.com/icons/meerkat-powered.jpg\">\n"
753 " <title>Meerkat Powered!</title>\n"
754 " <url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg</url>\n"
755 " <link>http://meerkat.oreillynet.com</link>\n"
756 " </image>\n"
757 "\n"
758 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/09/xforms.html\">\n"
759 " <title>Features: Top 10 XForms Engines</title>\n"
760 " <link>http://www.xml.com/pub/a/2005/02/09/xforms.html</link>\n"
761 " <description>\n"
762 " Micah Dubinko, one of the gurus of XForms, offers a rundown on the state of XForms engines for 2005.\n"
763 " </description>\n"
764 " <dc:source>XML.com</dc:source>\n"
765 " <dc:creator>Micah Dubinko</dc:creator>\n"
766 " <dc:subject>Web, Applications</dc:subject>\n"
767 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
768 " <dc:date>2005-02-09</dc:date>\n"
769 " <dc:type>Features</dc:type>\n"
770 " <dc:format>text/html</dc:format>\n"
771 " <dc:language>en-us</dc:language>\n"
772 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
773 " </item>\n"
774 "\n"
775 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/09/cssorxsl.html\">\n"
776 " <title>Features: Comparing CSS and XSL: A Reply from Norm Walsh</title>\n"
777 " <link>http://www.xml.com/pub/a/2005/02/09/cssorxsl.html</link>\n"
778 " <description>\n"
779 " Norm Walsh responds to a recent article about CSS and XSL, explaining how and when and why you'd want to use XSLFO or CSS or XSLT.\n"
780 " </description>\n"
781 " <dc:source>XML.com</dc:source>\n"
782 " <dc:creator>Norman Walsh</dc:creator>\n"
783 " <dc:subject>Style</dc:subject>\n"
784 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
785 " <dc:date>2005-02-09</dc:date>\n"
786 " <dc:type>Features</dc:type>\n"
787 " <dc:format>text/html</dc:format>\n"
788 " <dc:language>en-us</dc:language>\n"
789 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
790 " </item>\n"
791 "\n"
792 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/09/xml-http-request.html\">\n"
793 " <title>Features: Very Dynamic Web Interfaces</title>\n"
794 " <link>http://www.xml.com/pub/a/2005/02/09/xml-http-request.html</link>\n"
795 " <description>\n"
796 " Drew McLellan explains how to use XMLHTTPRequest and Javascript to create web applications with very dynamic, smooth interfaces.\n"
797 " </description>\n"
798 " <dc:source>XML.com</dc:source>\n"
799 " <dc:creator>Drew McLellan</dc:creator>\n"
800 " <dc:subject>Web Development, Instruction</dc:subject>\n"
801 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
802 " <dc:date>2005-02-09</dc:date>\n"
803 " <dc:type>Features</dc:type>\n"
804 " <dc:format>text/html</dc:format>\n"
805 " <dc:language>en-us</dc:language>\n"
806 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
807 " </item>\n"
808 "\n"
809 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/02/xpath2.html\">\n"
810 " <title>Transforming XML: The XPath 2.0 Data Model</title>\n"
811 " <link>http://www.xml.com/pub/a/2005/02/02/xpath2.html</link>\n"
812 " <description>\n"
813 " Bob DuCharme, in his latest Transforming XML column, examines the XPath 2.0, hence the XSLT 2.0, data model.\n"
814 " </description>\n"
815 " <dc:source>XML.com</dc:source>\n"
816 " <dc:creator>Bob DuCharme</dc:creator>\n"
817 " <dc:subject>Style, Style</dc:subject>\n"
818 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
819 " <dc:date>2005-02-02</dc:date>\n"
820 " <dc:type>Transforming XML</dc:type>\n"
821 " <dc:format>text/html</dc:format>\n"
822 " <dc:language>en-us</dc:language>\n"
823 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
824 " </item>\n"
825 "\n"
826 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/02/silent.html\">\n"
827 " <title>XML Tourist: The Silent Soundtrack</title>\n"
828 " <link>http://www.xml.com/pub/a/2005/02/02/silent.html</link>\n"
829 " <description>\n"
830 " In this installation of XML Tourist, John E. Simpson presents an overview of the types of sound-to-text captioning available. Pinpointing closed captioning as the most suitable for use with computerized multimedia, he then explains how XML-based solutions address synchronization issues.\n"
831 " </description>\n"
832 " <dc:source>XML.com</dc:source>\n"
833 " <dc:creator>John E. Simpson</dc:creator>\n"
834 " <dc:subject>Graphics, Vertical Industries</dc:subject>\n"
835 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
836 " <dc:date>2005-02-02</dc:date>\n"
837 " <dc:type>XML Tourist</dc:type>\n"
838 " <dc:format>text/html</dc:format>\n"
839 " <dc:language>en-us</dc:language>\n"
840 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
841 " </item>\n"
842 "\n"
843 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/02/xpath2.html\">\n"
844 " <title>Transforming XML: The XML 2.0 Data Model</title>\n"
845 " <link>http://www.xml.com/pub/a/2005/02/02/xpath2.html</link>\n"
846 " <description>\n"
847 " Bob DuCharme, in his latest Transforming XML column, examines the XPath 2.0, hence the XSLT 2.0, data model.\n"
848 " </description>\n"
849 " <dc:source>XML.com</dc:source>\n"
850 " <dc:creator>Bob DuCharme</dc:creator>\n"
851 " <dc:subject>Style, Style</dc:subject>\n"
852 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
853 " <dc:date>2005-02-02</dc:date>\n"
854 " <dc:type>Transforming XML</dc:type>\n"
855 " <dc:format>text/html</dc:format>\n"
856 " <dc:language>en-us</dc:language>\n"
857 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
858 " </item>\n"
859 "\n"
860 " <item rdf:about=\"http://www.xml.com/pub/a/2005/02/02/tmapi.html\">\n"
861 " <title>Features: An Introduction to TMAPI</title>\n"
862 " <link>http://www.xml.com/pub/a/2005/02/02/tmapi.html</link>\n"
863 " <description>\n"
864 " TMAPI, a Java Topic Map API, is the standard way to interact with XML Topic Maps programmatically from Java. This article provides a tutorial for TMAPI. \n"
865 " </description>\n"
866 " <dc:source>XML.com</dc:source>\n"
867 " <dc:creator>Robert Barta, Oliver Leimig</dc:creator>\n"
868 " <dc:subject>Metadata, Metadata</dc:subject>\n"
869 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
870 " <dc:date>2005-02-02</dc:date>\n"
871 " <dc:type>Features</dc:type>\n"
872 " <dc:format>text/html</dc:format>\n"
873 " <dc:language>en-us</dc:language>\n"
874 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
875 " </item>\n"
876 "\n"
877 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/26/formtax.html\">\n"
878 " <title>Features: Formal Taxonomies for the U.S. Government</title>\n"
879 " <link>http://www.xml.com/pub/a/2005/01/26/formtax.html</link>\n"
880 " <description>\n"
881 " Mike Daconta, Metadata Program Manager at the Department of Homeland Security, introduces the notion of a formal taxonomy in the context of the Federal Enteriprise Architecture's Data Reference Model.\n"
882 " </description>\n"
883 " <dc:source>XML.com</dc:source>\n"
884 " <dc:creator>Michael Daconta</dc:creator>\n"
885 " <dc:subject>Metadata, Metadata</dc:subject>\n"
886 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
887 " <dc:date>2005-01-26</dc:date>\n"
888 " <dc:type>Features</dc:type>\n"
889 " <dc:format>text/html</dc:format>\n"
890 " <dc:language>en-us</dc:language>\n"
891 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
892 " </item>\n"
893 "\n"
894 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/26/hacking-ooo.html\">\n"
895 " <title>Features: Hacking Open Office</title>\n"
896 " <link>http://www.xml.com/pub/a/2005/01/26/hacking-ooo.html</link>\n"
897 " <description>\n"
898 " Peter Sefton shows us how to use XML tools to hack Open Office file formats.\n"
899 " </description>\n"
900 " <dc:source>XML.com</dc:source>\n"
901 " <dc:creator>Peter Sefton</dc:creator>\n"
902 " <dc:subject>Programming, Tools, Publishing</dc:subject>\n"
903 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
904 " <dc:date>2005-01-26</dc:date>\n"
905 " <dc:type>Features</dc:type>\n"
906 " <dc:format>text/html</dc:format>\n"
907 " <dc:language>en-us</dc:language>\n"
908 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
909 " </item>\n"
910 "\n"
911 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/26/simile.html\">\n"
912 " <title>Features: SIMILE: Practical Metadata for the Semantic Web</title>\n"
913 " <link>http://www.xml.com/pub/a/2005/01/26/simile.html</link>\n"
914 " <description>\n"
915 " Digital libraries and generic metadata form part of the background assumptions and forward-looking goals of the Semantic Web. SIMILE is an interesting project aimed at realizing some of those goals.\n"
916 " </description>\n"
917 " <dc:source>XML.com</dc:source>\n"
918 " <dc:creator>Stephen Garland, Ryan Lee, Stefano Mazzocchi</dc:creator>\n"
919 " <dc:subject>Semantic Web, Metadata</dc:subject>\n"
920 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
921 " <dc:date>2005-01-26</dc:date>\n"
922 " <dc:type>Features</dc:type>\n"
923 " <dc:format>text/html</dc:format>\n"
924 " <dc:language>en-us</dc:language>\n"
925 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
926 " </item>\n"
927 "\n"
928 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/19/amara.html\">\n"
929 " <title>Python and XML: Introducing the Amara XML Toolkit</title>\n"
930 " <link>http://www.xml.com/pub/a/2005/01/19/amara.html</link>\n"
931 " <description>\n"
932 " Uche Ogbuji introduces Amara, his new collection of XML tools for Python.\n"
933 " </description>\n"
934 " <dc:source>XML.com</dc:source>\n"
935 " <dc:creator>Uche Ogbuji</dc:creator>\n"
936 " <dc:subject>Programming, Programming</dc:subject>\n"
937 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
938 " <dc:date>2005-01-19</dc:date>\n"
939 " <dc:type>Python and XML</dc:type>\n"
940 " <dc:format>text/html</dc:format>\n"
941 " <dc:language>en-us</dc:language>\n"
942 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
943 " </item>\n"
944 "\n"
945 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/19/print.html\">\n"
946 " <title>Features: Printing XML: Why CSS Is Better than XSL</title>\n"
947 " <link>http://www.xml.com/pub/a/2005/01/19/print.html</link>\n"
948 " <description>\n"
949 " One of the old school debates among XML developers is &amp;quot;CSS versus XSLT.&amp;quot; H&amp;aring;kun Wium Lie and Michael Day revive that debate with a shot across XSL's bow.\n"
950 " </description>\n"
951 " <dc:source>XML.com</dc:source>\n"
952 " <dc:creator>Michael Day, H&amp;aring;kon Wium Lie</dc:creator>\n"
953 " <dc:subject>Style, Publishing</dc:subject>\n"
954 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
955 " <dc:date>2005-01-19</dc:date>\n"
956 " <dc:type>Features</dc:type>\n"
957 " <dc:format>text/html</dc:format>\n"
958 " <dc:language>en-us</dc:language>\n"
959 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
960 " </item>\n"
961 "\n"
962 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/19/review.html\">\n"
963 " <title>Features: Reviewing the Architecture of the World Wide Web</title>\n"
964 " <link>http://www.xml.com/pub/a/2005/01/19/review.html</link>\n"
965 " <description>\n"
966 " Harry Halpin reviews the final published edition of the W3C TAG's Architecture of the World Wide Web document.\n"
967 " </description>\n"
968 " <dc:source>XML.com</dc:source>\n"
969 " <dc:creator>Harry Halpin</dc:creator>\n"
970 " <dc:subject>Web, Perspectives</dc:subject>\n"
971 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
972 " <dc:date>2005-01-19</dc:date>\n"
973 " <dc:type>Features</dc:type>\n"
974 " <dc:format>text/html</dc:format>\n"
975 " <dc:language>en-us</dc:language>\n"
976 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
977 " </item>\n"
978 "\n"
979 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/12/saml2.html\">\n"
980 " <title>Features: SAML 2: The Building Blocks of Federated Identity</title>\n"
981 " <link>http://www.xml.com/pub/a/2005/01/12/saml2.html</link>\n"
982 " <description>\n"
983 " Paul Madsen reports on the developments in web services security, including a new major release of SAML, which provides the basis for building federated identity.\n"
984 " </description>\n"
985 " <dc:source>XML.com</dc:source>\n"
986 " <dc:creator>Paul Madsen</dc:creator>\n"
987 " <dc:subject>Web Services, Specifications</dc:subject>\n"
988 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
989 " <dc:date>2005-01-12</dc:date>\n"
990 " <dc:type>Features</dc:type>\n"
991 " <dc:format>text/html</dc:format>\n"
992 " <dc:language>en-us</dc:language>\n"
993 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
994 " </item>\n"
995 "\n"
996 " <item rdf:about=\"http://www.xml.com/pub/a/2005/01/12/comega.html\">\n"
997 " <title>Features: Introducing Comega</title>\n"
998 " <link>http://www.xml.com/pub/a/2005/01/12/comega.html</link>\n"
999 " <description>\n"
1000 " Dare Obasanjo explains some of the ways in which C&amp;omega;--a new language from Microsoft Research--makes XML processing easier and more natural.\n"
1001 " </description>\n"
1002 " <dc:source>XML.com</dc:source>\n"
1003 " <dc:creator>Dare Obasanjo</dc:creator>\n"
1004 " <dc:subject>Programming, Instruction</dc:subject>\n"
1005 " <dc:publisher>O'Reilly Media, Inc.</dc:publisher>\n"
1006 " <dc:date>2005-01-12</dc:date>\n"
1007 " <dc:type>Features</dc:type>\n"
1008 " <dc:format>text/html</dc:format>\n"
1009 " <dc:language>en-us</dc:language>\n"
1010 " <dc:rights>Copyright 2005, O'Reilly Media, Inc.</dc:rights>\n"
1011 " </item>\n"
1012 "\n"
1013 "\n"
1014 " <textinput rdf:about=\"http://meerkat.oreillynet.com/\">\n"
1015 " <title>Search</title>\n"
1016 " <description>Search Meerkat...</description>\n"
1017 " <name>s</name>\n"
1018 " <link>http://meerkat.oreillynet.com/</link>\n"
1019 " </textinput>\n"
1020 "\n"
1021 "</rdf:RDF>\n";
1022
1023
1024const std::string SAXParserTest::ENCODING =
1025 "<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>"
1026 "<euro-sign>\244</euro-sign>";
1027
1028const std::string SAXParserTest::WSDL =
1029 "<!-- WSDL description of the Google Web APIs.\n"
1030 " The Google Web APIs are in beta release. All interfaces are subject to\n"
1031 " change as we refine and extend our APIs. Please see the terms of use\n"
1032 " for more information. -->\n"
1033 "<!-- Revision 2002-08-16 -->\n"
1034 "<ns1:definitions name=\"GoogleSearch\" targetNamespace=\"urn:GoogleSearch\" xmlns:ns1=\"http://schemas.xmlsoap.org/wsdl/\">\n"
1035 "\t<!-- Types for search - result elements, directory categories -->\n"
1036 "\t<ns1:types>\n"
1037 "\t\t<ns2:schema targetNamespace=\"urn:GoogleSearch\" xmlns:ns2=\"http://www.w3.org/2001/XMLSchema\">\n"
1038 "\t\t\t<ns2:complexType name=\"GoogleSearchResult\">\n"
1039 "\t\t\t\t<ns2:all>\n"
1040 "\t\t\t\t\t<ns2:element name=\"documentFiltering\" type=\"xsd:boolean\"/>\n"
1041 "\t\t\t\t\t<ns2:element name=\"searchComments\" type=\"xsd:string\"/>\n"
1042 "\t\t\t\t\t<ns2:element name=\"estimatedTotalResultsCount\" type=\"xsd:int\"/>\n"
1043 "\t\t\t\t\t<ns2:element name=\"estimateIsExact\" type=\"xsd:boolean\"/>\n"
1044 "\t\t\t\t\t<ns2:element name=\"resultElements\" type=\"typens:ResultElementArray\"/>\n"
1045 "\t\t\t\t\t<ns2:element name=\"searchQuery\" type=\"xsd:string\"/>\n"
1046 "\t\t\t\t\t<ns2:element name=\"startIndex\" type=\"xsd:int\"/>\n"
1047 "\t\t\t\t\t<ns2:element name=\"endIndex\" type=\"xsd:int\"/>\n"
1048 "\t\t\t\t\t<ns2:element name=\"searchTips\" type=\"xsd:string\"/>\n"
1049 "\t\t\t\t\t<ns2:element name=\"directoryCategories\" type=\"typens:DirectoryCategoryArray\"/>\n"
1050 "\t\t\t\t\t<ns2:element name=\"searchTime\" type=\"xsd:double\"/>\n"
1051 "\t\t\t\t</ns2:all>\n"
1052 "\t\t\t</ns2:complexType>\n"
1053 "\t\t\t<ns2:complexType name=\"ResultElement\">\n"
1054 "\t\t\t\t<ns2:all>\n"
1055 "\t\t\t\t\t<ns2:element name=\"summary\" type=\"xsd:string\"/>\n"
1056 "\t\t\t\t\t<ns2:element name=\"URL\" type=\"xsd:string\"/>\n"
1057 "\t\t\t\t\t<ns2:element name=\"snippet\" type=\"xsd:string\"/>\n"
1058 "\t\t\t\t\t<ns2:element name=\"title\" type=\"xsd:string\"/>\n"
1059 "\t\t\t\t\t<ns2:element name=\"cachedSize\" type=\"xsd:string\"/>\n"
1060 "\t\t\t\t\t<ns2:element name=\"relatedInformationPresent\" type=\"xsd:boolean\"/>\n"
1061 "\t\t\t\t\t<ns2:element name=\"hostName\" type=\"xsd:string\"/>\n"
1062 "\t\t\t\t\t<ns2:element name=\"directoryCategory\" type=\"typens:DirectoryCategory\"/>\n"
1063 "\t\t\t\t\t<ns2:element name=\"directoryTitle\" type=\"xsd:string\"/>\n"
1064 "\t\t\t\t</ns2:all>\n"
1065 "\t\t\t</ns2:complexType>\n"
1066 "\t\t\t<ns2:complexType name=\"ResultElementArray\">\n"
1067 "\t\t\t\t<ns2:complexContent>\n"
1068 "\t\t\t\t\t<ns2:restriction base=\"soapenc:Array\">\n"
1069 "\t\t\t\t\t\t<ns2:attribute ns1:arrayType=\"typens:ResultElement[]\" ref=\"soapenc:arrayType\"/>\n"
1070 "\t\t\t\t\t</ns2:restriction>\n"
1071 "\t\t\t\t</ns2:complexContent>\n"
1072 "\t\t\t</ns2:complexType>\n"
1073 "\t\t\t<ns2:complexType name=\"DirectoryCategoryArray\">\n"
1074 "\t\t\t\t<ns2:complexContent>\n"
1075 "\t\t\t\t\t<ns2:restriction base=\"soapenc:Array\">\n"
1076 "\t\t\t\t\t\t<ns2:attribute ns1:arrayType=\"typens:DirectoryCategory[]\" ref=\"soapenc:arrayType\"/>\n"
1077 "\t\t\t\t\t</ns2:restriction>\n"
1078 "\t\t\t\t</ns2:complexContent>\n"
1079 "\t\t\t</ns2:complexType>\n"
1080 "\t\t\t<ns2:complexType name=\"DirectoryCategory\">\n"
1081 "\t\t\t\t<ns2:all>\n"
1082 "\t\t\t\t\t<ns2:element name=\"fullViewableName\" type=\"xsd:string\"/>\n"
1083 "\t\t\t\t\t<ns2:element name=\"specialEncoding\" type=\"xsd:string\"/>\n"
1084 "\t\t\t\t</ns2:all>\n"
1085 "\t\t\t</ns2:complexType>\n"
1086 "\t\t</ns2:schema>\n"
1087 "\t</ns1:types>\n"
1088 "\t<!-- Messages for Google Web APIs - cached page, search, spelling. -->\n"
1089 "\t<ns1:message name=\"doGetCachedPage\">\n"
1090 "\t\t<ns1:part name=\"key\" type=\"xsd:string\"/>\n"
1091 "\t\t<ns1:part name=\"url\" type=\"xsd:string\"/>\n"
1092 "\t</ns1:message>\n"
1093 "\t<ns1:message name=\"doGetCachedPageResponse\">\n"
1094 "\t\t<ns1:part name=\"return\" type=\"xsd:base64Binary\"/>\n"
1095 "\t</ns1:message>\n"
1096 "\t<ns1:message name=\"doSpellingSuggestion\">\n"
1097 "\t\t<ns1:part name=\"key\" type=\"xsd:string\"/>\n"
1098 "\t\t<ns1:part name=\"phrase\" type=\"xsd:string\"/>\n"
1099 "\t</ns1:message>\n"
1100 "\t<ns1:message name=\"doSpellingSuggestionResponse\">\n"
1101 "\t\t<ns1:part name=\"return\" type=\"xsd:string\"/>\n"
1102 "\t</ns1:message>\n"
1103 "\t<!-- note, ie and oe are ignored by server; all traffic is UTF-8. -->\n"
1104 "\t<ns1:message name=\"doGoogleSearch\">\n"
1105 "\t\t<ns1:part name=\"key\" type=\"xsd:string\"/>\n"
1106 "\t\t<ns1:part name=\"q\" type=\"xsd:string\"/>\n"
1107 "\t\t<ns1:part name=\"start\" type=\"xsd:int\"/>\n"
1108 "\t\t<ns1:part name=\"maxResults\" type=\"xsd:int\"/>\n"
1109 "\t\t<ns1:part name=\"filter\" type=\"xsd:boolean\"/>\n"
1110 "\t\t<ns1:part name=\"restrict\" type=\"xsd:string\"/>\n"
1111 "\t\t<ns1:part name=\"safeSearch\" type=\"xsd:boolean\"/>\n"
1112 "\t\t<ns1:part name=\"lr\" type=\"xsd:string\"/>\n"
1113 "\t\t<ns1:part name=\"ie\" type=\"xsd:string\"/>\n"
1114 "\t\t<ns1:part name=\"oe\" type=\"xsd:string\"/>\n"
1115 "\t</ns1:message>\n"
1116 "\t<ns1:message name=\"doGoogleSearchResponse\">\n"
1117 "\t\t<ns1:part name=\"return\" type=\"typens:GoogleSearchResult\"/>\n"
1118 "\t</ns1:message>\n"
1119 "\t<!-- Port for Google Web APIs, \"GoogleSearch\" -->\n"
1120 "\t<ns1:portType name=\"GoogleSearchPort\">\n"
1121 "\t\t<ns1:operation name=\"doGetCachedPage\">\n"
1122 "\t\t\t<ns1:input message=\"typens:doGetCachedPage\"/>\n"
1123 "\t\t\t<ns1:output message=\"typens:doGetCachedPageResponse\"/>\n"
1124 "\t\t</ns1:operation>\n"
1125 "\t\t<ns1:operation name=\"doSpellingSuggestion\">\n"
1126 "\t\t\t<ns1:input message=\"typens:doSpellingSuggestion\"/>\n"
1127 "\t\t\t<ns1:output message=\"typens:doSpellingSuggestionResponse\"/>\n"
1128 "\t\t</ns1:operation>\n"
1129 "\t\t<ns1:operation name=\"doGoogleSearch\">\n"
1130 "\t\t\t<ns1:input message=\"typens:doGoogleSearch\"/>\n"
1131 "\t\t\t<ns1:output message=\"typens:doGoogleSearchResponse\"/>\n"
1132 "\t\t</ns1:operation>\n"
1133 "\t</ns1:portType>\n"
1134 "\t<!-- Binding for Google Web APIs - RPC, SOAP over HTTP -->\n"
1135 "\t<ns1:binding name=\"GoogleSearchBinding\" type=\"typens:GoogleSearchPort\">\n"
1136 "\t\t<ns3:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" xmlns:ns3=\"http://schemas.xmlsoap.org/wsdl/soap/\"/>\n"
1137 "\t\t<ns1:operation name=\"doGetCachedPage\" xmlns:ns3=\"http://schemas.xmlsoap.org/wsdl/soap/\">\n"
1138 "\t\t\t<ns3:operation soapAction=\"urn:GoogleSearchAction\"/>\n"
1139 "\t\t\t<ns1:input>\n"
1140 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1141 "\t\t\t</ns1:input>\n"
1142 "\t\t\t<ns1:output>\n"
1143 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1144 "\t\t\t</ns1:output>\n"
1145 "\t\t</ns1:operation>\n"
1146 "\t\t<ns1:operation name=\"doSpellingSuggestion\" xmlns:ns3=\"http://schemas.xmlsoap.org/wsdl/soap/\">\n"
1147 "\t\t\t<ns3:operation soapAction=\"urn:GoogleSearchAction\"/>\n"
1148 "\t\t\t<ns1:input>\n"
1149 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1150 "\t\t\t</ns1:input>\n"
1151 "\t\t\t<ns1:output>\n"
1152 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1153 "\t\t\t</ns1:output>\n"
1154 "\t\t</ns1:operation>\n"
1155 "\t\t<ns1:operation name=\"doGoogleSearch\" xmlns:ns3=\"http://schemas.xmlsoap.org/wsdl/soap/\">\n"
1156 "\t\t\t<ns3:operation soapAction=\"urn:GoogleSearchAction\"/>\n"
1157 "\t\t\t<ns1:input>\n"
1158 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1159 "\t\t\t</ns1:input>\n"
1160 "\t\t\t<ns1:output>\n"
1161 "\t\t\t\t<ns3:body encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" namespace=\"urn:GoogleSearch\" use=\"encoded\"/>\n"
1162 "\t\t\t</ns1:output>\n"
1163 "\t\t</ns1:operation>\n"
1164 "\t</ns1:binding>\n"
1165 "\t<!-- Endpoint for Google Web APIs -->\n"
1166 "\t<ns1:service name=\"GoogleSearchService\">\n"
1167 "\t\t<ns1:port binding=\"typens:GoogleSearchBinding\" name=\"GoogleSearchPort\">\n"
1168 "\t\t\t<ns4:address location=\"http://api.google.com/search/beta2\" xmlns:ns4=\"http://schemas.xmlsoap.org/wsdl/soap/\"/>\n"
1169 "\t\t</ns1:port>\n"
1170 "\t</ns1:service>\n"
1171 "</ns1:definitions>\n";
1172