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 | |
25 | using Poco::XML::SAXParser; |
26 | using Poco::XML::XMLWriter; |
27 | using Poco::XML::XMLReader; |
28 | using Poco::XML::InputSource; |
29 | using Poco::XML::EntityResolver; |
30 | using Poco::XML::XMLString; |
31 | using Poco::XML::SAXParseException; |
32 | using Poco::XML::WhitespaceFilter; |
33 | |
34 | |
35 | class TestEntityResolver: public EntityResolver |
36 | { |
37 | public: |
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 | |
65 | SAXParserTest::SAXParserTest(const std::string& name): CppUnit::TestCase(name) |
66 | { |
67 | } |
68 | |
69 | |
70 | SAXParserTest::~SAXParserTest() |
71 | { |
72 | } |
73 | |
74 | |
75 | void SAXParserTest::testSimple1() |
76 | { |
77 | SAXParser parser; |
78 | std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE1); |
79 | assertTrue (xml == "<foo/>" ); |
80 | } |
81 | |
82 | |
83 | void SAXParserTest::testSimple2() |
84 | { |
85 | SAXParser parser; |
86 | std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE2); |
87 | assertTrue (xml == "<foo/>" ); |
88 | } |
89 | |
90 | |
91 | void SAXParserTest::testAttributes() |
92 | { |
93 | SAXParser parser; |
94 | std::string xml = parse(parser, XMLWriter::CANONICAL, ATTRIBUTES); |
95 | assertTrue (xml == ATTRIBUTES); |
96 | } |
97 | |
98 | |
99 | void SAXParserTest::testCDATA() |
100 | { |
101 | SAXParser parser; |
102 | std::string xml = parse(parser, XMLWriter::CANONICAL, CDATA); |
103 | assertTrue (xml == CDATA); |
104 | } |
105 | |
106 | |
107 | void SAXParserTest::() |
108 | { |
109 | SAXParser parser; |
110 | std::string xml = parse(parser, XMLWriter::CANONICAL, COMMENT); |
111 | assertTrue (xml == COMMENT); |
112 | } |
113 | |
114 | |
115 | void SAXParserTest::testPI() |
116 | { |
117 | SAXParser parser; |
118 | std::string xml = parse(parser, XMLWriter::CANONICAL, PROCESSING_INSTRUCTION); |
119 | assertTrue (xml == PROCESSING_INSTRUCTION); |
120 | } |
121 | |
122 | |
123 | void 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 | |
131 | void 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 | |
139 | void 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 | |
149 | void 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 | |
159 | void 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 | |
170 | void SAXParserTest::testDefaultNamespace() |
171 | { |
172 | SAXParser parser; |
173 | std::string xml = parse(parser, XMLWriter::CANONICAL, DEFAULT_NAMESPACE); |
174 | assertTrue (xml == DEFAULT_NAMESPACE); |
175 | } |
176 | |
177 | |
178 | void 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 | |
188 | void 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 | |
198 | void 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 | |
207 | void 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 | |
223 | void 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 | |
239 | void 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 | |
248 | void SAXParserTest::() |
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 | |
268 | void 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 | |
288 | void SAXParserTest::testCharacters() |
289 | { |
290 | static const XMLString xml("<textnode> TEXT & 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 | |
298 | void 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 | |
306 | void 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 | |
316 | void SAXParserTest::setUp() |
317 | { |
318 | } |
319 | |
320 | |
321 | void SAXParserTest::tearDown() |
322 | { |
323 | } |
324 | |
325 | |
326 | std::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 | |
341 | std::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 | |
354 | CppUnit::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 | |
386 | const std::string SAXParserTest::SIMPLE1 = |
387 | "<foo/>\n" ; |
388 | |
389 | |
390 | const std::string SAXParserTest::SIMPLE2 = |
391 | "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
392 | "<foo/>\n" ; |
393 | |
394 | |
395 | const std::string SAXParserTest::ATTRIBUTES = |
396 | "<root a1=\"v1\">\n" |
397 | "\t<elem a1=\"v1\" a2=\"v2\"/>\n" |
398 | "</root>" ; |
399 | |
400 | |
401 | const 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 | |
409 | const std::string SAXParserTest:: = |
410 | "<!--this is a comment-->" |
411 | "<root>\n" |
412 | "\t<!--another comment-->\n" |
413 | "\t<elem/>\n" |
414 | "</root>" ; |
415 | |
416 | |
417 | const 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 | |
429 | const std::string SAXParserTest::DTD = |
430 | "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
431 | "<!DOCTYPE test SYSTEM \"test.dtd\">\n" |
432 | "<foo/>" ; |
433 | |
434 | |
435 | const 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 | |
444 | const 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 | |
453 | const 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 | |
462 | const 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 | |
472 | const std::string SAXParserTest::INCLUDE = |
473 | "<elem>\n" |
474 | "\tAn external entity.\n" |
475 | "</elem>\n" ; |
476 | |
477 | |
478 | const std::string SAXParserTest::DEFAULT_NAMESPACE = |
479 | "<root xmlns=\"urn:ns1\">\n" |
480 | "\t<elem>data</elem>\n" |
481 | "</root>" ; |
482 | |
483 | |
484 | const 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 | |
493 | const 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 | |
503 | const 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 \" \"> <!-- no-break space = non-breaking space,\n" |
517 | " U+00A0 ISOnum -->\n" |
518 | "<!ENTITY iexcl \"¡\"> <!-- inverted exclamation mark, U+00A1 ISOnum -->\n" |
519 | "<!ENTITY cent \"¢\"> <!-- cent sign, U+00A2 ISOnum -->\n" |
520 | "<!ENTITY pound \"£\"> <!-- pound sign, U+00A3 ISOnum -->\n" |
521 | "<!ENTITY curren \"¤\"> <!-- currency sign, U+00A4 ISOnum -->\n" |
522 | "<!ENTITY yen \"¥\"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->\n" |
523 | "<!ENTITY brvbar \"¦\"> <!-- broken bar = broken vertical bar,\n" |
524 | " U+00A6 ISOnum -->\n" |
525 | "<!ENTITY sect \"§\"> <!-- section sign, U+00A7 ISOnum -->\n" |
526 | "<!ENTITY uml \"¨\"> <!-- diaeresis = spacing diaeresis,\n" |
527 | " U+00A8 ISOdia -->\n" |
528 | "<!ENTITY copy \"©\"> <!-- copyright sign, U+00A9 ISOnum -->\n" |
529 | "<!ENTITY ordf \"ª\"> <!-- feminine ordinal indicator, U+00AA ISOnum -->\n" |
530 | "<!ENTITY laquo \"«\"> <!-- left-pointing double angle quotation mark\n" |
531 | " = left pointing guillemet, U+00AB ISOnum -->\n" |
532 | "<!ENTITY not \"¬\"> <!-- not sign = angled dash,\n" |
533 | " U+00AC ISOnum -->\n" |
534 | "<!ENTITY shy \"­\"> <!-- soft hyphen = discretionary hyphen,\n" |
535 | " U+00AD ISOnum -->\n" |
536 | "<!ENTITY reg \"®\"> <!-- registered sign = registered trade mark sign,\n" |
537 | " U+00AE ISOnum -->\n" |
538 | "<!ENTITY macr \"¯\"> <!-- macron = spacing macron = overline\n" |
539 | " = APL overbar, U+00AF ISOdia -->\n" |
540 | "<!ENTITY deg \"°\"> <!-- degree sign, U+00B0 ISOnum -->\n" |
541 | "<!ENTITY plusmn \"±\"> <!-- plus-minus sign = plus-or-minus sign,\n" |
542 | " U+00B1 ISOnum -->\n" |
543 | "<!ENTITY sup2 \"²\"> <!-- superscript two = superscript digit two\n" |
544 | " = squared, U+00B2 ISOnum -->\n" |
545 | "<!ENTITY sup3 \"³\"> <!-- superscript three = superscript digit three\n" |
546 | " = cubed, U+00B3 ISOnum -->\n" |
547 | "<!ENTITY acute \"´\"> <!-- acute accent = spacing acute,\n" |
548 | " U+00B4 ISOdia -->\n" |
549 | "<!ENTITY micro \"µ\"> <!-- micro sign, U+00B5 ISOnum -->\n" |
550 | "<!ENTITY para \"¶\"> <!-- pilcrow sign = paragraph sign,\n" |
551 | " U+00B6 ISOnum -->\n" |
552 | "<!ENTITY middot \"·\"> <!-- middle dot = Georgian comma\n" |
553 | " = Greek middle dot, U+00B7 ISOnum -->\n" |
554 | "<!ENTITY cedil \"¸\"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->\n" |
555 | "<!ENTITY sup1 \"¹\"> <!-- superscript one = superscript digit one,\n" |
556 | " U+00B9 ISOnum -->\n" |
557 | "<!ENTITY ordm \"º\"> <!-- masculine ordinal indicator,\n" |
558 | " U+00BA ISOnum -->\n" |
559 | "<!ENTITY raquo \"»\"> <!-- right-pointing double angle quotation mark\n" |
560 | " = right pointing guillemet, U+00BB ISOnum -->\n" |
561 | "<!ENTITY frac14 \"¼\"> <!-- vulgar fraction one quarter\n" |
562 | " = fraction one quarter, U+00BC ISOnum -->\n" |
563 | "<!ENTITY frac12 \"½\"> <!-- vulgar fraction one half\n" |
564 | " = fraction one half, U+00BD ISOnum -->\n" |
565 | "<!ENTITY frac34 \"¾\"> <!-- vulgar fraction three quarters\n" |
566 | " = fraction three quarters, U+00BE ISOnum -->\n" |
567 | "<!ENTITY iquest \"¿\"> <!-- inverted question mark\n" |
568 | " = turned question mark, U+00BF ISOnum -->\n" |
569 | "<!ENTITY Agrave \"À\"> <!-- latin capital letter A with grave\n" |
570 | " = latin capital letter A grave,\n" |
571 | " U+00C0 ISOlat1 -->\n" |
572 | "<!ENTITY Aacute \"Á\"> <!-- latin capital letter A with acute,\n" |
573 | " U+00C1 ISOlat1 -->\n" |
574 | "<!ENTITY Acirc \"Â\"> <!-- latin capital letter A with circumflex,\n" |
575 | " U+00C2 ISOlat1 -->\n" |
576 | "<!ENTITY Atilde \"Ã\"> <!-- latin capital letter A with tilde,\n" |
577 | " U+00C3 ISOlat1 -->\n" |
578 | "<!ENTITY Auml \"Ä\"> <!-- latin capital letter A with diaeresis,\n" |
579 | " U+00C4 ISOlat1 -->\n" |
580 | "<!ENTITY Aring \"Å\"> <!-- latin capital letter A with ring above\n" |
581 | " = latin capital letter A ring,\n" |
582 | " U+00C5 ISOlat1 -->\n" |
583 | "<!ENTITY AElig \"Æ\"> <!-- latin capital letter AE\n" |
584 | " = latin capital ligature AE,\n" |
585 | " U+00C6 ISOlat1 -->\n" |
586 | "<!ENTITY Ccedil \"Ç\"> <!-- latin capital letter C with cedilla,\n" |
587 | " U+00C7 ISOlat1 -->\n" |
588 | "<!ENTITY Egrave \"È\"> <!-- latin capital letter E with grave,\n" |
589 | " U+00C8 ISOlat1 -->\n" |
590 | "<!ENTITY Eacute \"É\"> <!-- latin capital letter E with acute,\n" |
591 | " U+00C9 ISOlat1 -->\n" |
592 | "<!ENTITY Ecirc \"Ê\"> <!-- latin capital letter E with circumflex,\n" |
593 | " U+00CA ISOlat1 -->\n" |
594 | "<!ENTITY Euml \"Ë\"> <!-- latin capital letter E with diaeresis,\n" |
595 | " U+00CB ISOlat1 -->\n" |
596 | "<!ENTITY Igrave \"Ì\"> <!-- latin capital letter I with grave,\n" |
597 | " U+00CC ISOlat1 -->\n" |
598 | "<!ENTITY Iacute \"Í\"> <!-- latin capital letter I with acute,\n" |
599 | " U+00CD ISOlat1 -->\n" |
600 | "<!ENTITY Icirc \"Î\"> <!-- latin capital letter I with circumflex,\n" |
601 | " U+00CE ISOlat1 -->\n" |
602 | "<!ENTITY Iuml \"Ï\"> <!-- latin capital letter I with diaeresis,\n" |
603 | " U+00CF ISOlat1 -->\n" |
604 | "<!ENTITY ETH \"Ð\"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->\n" |
605 | "<!ENTITY Ntilde \"Ñ\"> <!-- latin capital letter N with tilde,\n" |
606 | " U+00D1 ISOlat1 -->\n" |
607 | "<!ENTITY Ograve \"Ò\"> <!-- latin capital letter O with grave,\n" |
608 | " U+00D2 ISOlat1 -->\n" |
609 | "<!ENTITY Oacute \"Ó\"> <!-- latin capital letter O with acute,\n" |
610 | " U+00D3 ISOlat1 -->\n" |
611 | "<!ENTITY Ocirc \"Ô\"> <!-- latin capital letter O with circumflex,\n" |
612 | " U+00D4 ISOlat1 -->\n" |
613 | "<!ENTITY Otilde \"Õ\"> <!-- latin capital letter O with tilde,\n" |
614 | " U+00D5 ISOlat1 -->\n" |
615 | "<!ENTITY Ouml \"Ö\"> <!-- latin capital letter O with diaeresis,\n" |
616 | " U+00D6 ISOlat1 -->\n" |
617 | "<!ENTITY times \"×\"> <!-- multiplication sign, U+00D7 ISOnum -->\n" |
618 | "<!ENTITY Oslash \"Ø\"> <!-- latin capital letter O with stroke\n" |
619 | " = latin capital letter O slash,\n" |
620 | " U+00D8 ISOlat1 -->\n" |
621 | "<!ENTITY Ugrave \"Ù\"> <!-- latin capital letter U with grave,\n" |
622 | " U+00D9 ISOlat1 -->\n" |
623 | "<!ENTITY Uacute \"Ú\"> <!-- latin capital letter U with acute,\n" |
624 | " U+00DA ISOlat1 -->\n" |
625 | "<!ENTITY Ucirc \"Û\"> <!-- latin capital letter U with circumflex,\n" |
626 | " U+00DB ISOlat1 -->\n" |
627 | "<!ENTITY Uuml \"Ü\"> <!-- latin capital letter U with diaeresis,\n" |
628 | " U+00DC ISOlat1 -->\n" |
629 | "<!ENTITY Yacute \"Ý\"> <!-- latin capital letter Y with acute,\n" |
630 | " U+00DD ISOlat1 -->\n" |
631 | "<!ENTITY THORN \"Þ\"> <!-- latin capital letter THORN,\n" |
632 | " U+00DE ISOlat1 -->\n" |
633 | "<!ENTITY szlig \"ß\"> <!-- latin small letter sharp s = ess-zed,\n" |
634 | " U+00DF ISOlat1 -->\n" |
635 | "<!ENTITY agrave \"à\"> <!-- latin small letter a with grave\n" |
636 | " = latin small letter a grave,\n" |
637 | " U+00E0 ISOlat1 -->\n" |
638 | "<!ENTITY aacute \"á\"> <!-- latin small letter a with acute,\n" |
639 | " U+00E1 ISOlat1 -->\n" |
640 | "<!ENTITY acirc \"â\"> <!-- latin small letter a with circumflex,\n" |
641 | " U+00E2 ISOlat1 -->\n" |
642 | "<!ENTITY atilde \"ã\"> <!-- latin small letter a with tilde,\n" |
643 | " U+00E3 ISOlat1 -->\n" |
644 | "<!ENTITY auml \"ä\"> <!-- latin small letter a with diaeresis,\n" |
645 | " U+00E4 ISOlat1 -->\n" |
646 | "<!ENTITY aring \"å\"> <!-- latin small letter a with ring above\n" |
647 | " = latin small letter a ring,\n" |
648 | " U+00E5 ISOlat1 -->\n" |
649 | "<!ENTITY aelig \"æ\"> <!-- latin small letter ae\n" |
650 | " = latin small ligature ae, U+00E6 ISOlat1 -->\n" |
651 | "<!ENTITY ccedil \"ç\"> <!-- latin small letter c with cedilla,\n" |
652 | " U+00E7 ISOlat1 -->\n" |
653 | "<!ENTITY egrave \"è\"> <!-- latin small letter e with grave,\n" |
654 | " U+00E8 ISOlat1 -->\n" |
655 | "<!ENTITY eacute \"é\"> <!-- latin small letter e with acute,\n" |
656 | " U+00E9 ISOlat1 -->\n" |
657 | "<!ENTITY ecirc \"ê\"> <!-- latin small letter e with circumflex,\n" |
658 | " U+00EA ISOlat1 -->\n" |
659 | "<!ENTITY euml \"ë\"> <!-- latin small letter e with diaeresis,\n" |
660 | " U+00EB ISOlat1 -->\n" |
661 | "<!ENTITY igrave \"ì\"> <!-- latin small letter i with grave,\n" |
662 | " U+00EC ISOlat1 -->\n" |
663 | "<!ENTITY iacute \"í\"> <!-- latin small letter i with acute,\n" |
664 | " U+00ED ISOlat1 -->\n" |
665 | "<!ENTITY icirc \"î\"> <!-- latin small letter i with circumflex,\n" |
666 | " U+00EE ISOlat1 -->\n" |
667 | "<!ENTITY iuml \"ï\"> <!-- latin small letter i with diaeresis,\n" |
668 | " U+00EF ISOlat1 -->\n" |
669 | "<!ENTITY eth \"ð\"> <!-- latin small letter eth, U+00F0 ISOlat1 -->\n" |
670 | "<!ENTITY ntilde \"ñ\"> <!-- latin small letter n with tilde,\n" |
671 | " U+00F1 ISOlat1 -->\n" |
672 | "<!ENTITY ograve \"ò\"> <!-- latin small letter o with grave,\n" |
673 | " U+00F2 ISOlat1 -->\n" |
674 | "<!ENTITY oacute \"ó\"> <!-- latin small letter o with acute,\n" |
675 | " U+00F3 ISOlat1 -->\n" |
676 | "<!ENTITY ocirc \"ô\"> <!-- latin small letter o with circumflex,\n" |
677 | " U+00F4 ISOlat1 -->\n" |
678 | "<!ENTITY otilde \"õ\"> <!-- latin small letter o with tilde,\n" |
679 | " U+00F5 ISOlat1 -->\n" |
680 | "<!ENTITY ouml \"ö\"> <!-- latin small letter o with diaeresis,\n" |
681 | " U+00F6 ISOlat1 -->\n" |
682 | "<!ENTITY divide \"÷\"> <!-- division sign, U+00F7 ISOnum -->\n" |
683 | "<!ENTITY oslash \"ø\"> <!-- latin small letter o with stroke,\n" |
684 | " = latin small letter o slash,\n" |
685 | " U+00F8 ISOlat1 -->\n" |
686 | "<!ENTITY ugrave \"ù\"> <!-- latin small letter u with grave,\n" |
687 | " U+00F9 ISOlat1 -->\n" |
688 | "<!ENTITY uacute \"ú\"> <!-- latin small letter u with acute,\n" |
689 | " U+00FA ISOlat1 -->\n" |
690 | "<!ENTITY ucirc \"û\"> <!-- latin small letter u with circumflex,\n" |
691 | " U+00FB ISOlat1 -->\n" |
692 | "<!ENTITY uuml \"ü\"> <!-- latin small letter u with diaeresis,\n" |
693 | " U+00FC ISOlat1 -->\n" |
694 | "<!ENTITY yacute \"ý\"> <!-- latin small letter y with acute,\n" |
695 | " U+00FD ISOlat1 -->\n" |
696 | "<!ENTITY thorn \"þ\"> <!-- latin small letter thorn,\n" |
697 | " U+00FE ISOlat1 -->\n" |
698 | "<!ENTITY yuml \"ÿ\"> <!-- latin small letter y with diaeresis,\n" |
699 | " U+00FF ISOlat1 -->\n" ; |
700 | |
701 | const std::string SAXParserTest:: = |
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 &quot;CSS versus XSLT.&quot; H&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&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&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 | |
1024 | const std::string SAXParserTest::ENCODING = |
1025 | "<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>" |
1026 | "<euro-sign>\244</euro-sign>" ; |
1027 | |
1028 | const 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 | |