Introduction |
|
xxv | |
|
|
1 | (88) |
|
|
3 | (20) |
|
|
3 | (4) |
|
|
4 | (1) |
|
|
5 | (1) |
|
A Brief History of Markup |
|
|
6 | (1) |
|
|
7 | (11) |
|
|
10 | (3) |
|
HTML and XML: Apples and Red Delicious Apples |
|
|
13 | (1) |
|
Hierarchies of Information |
|
|
14 | (3) |
|
|
17 | (1) |
|
What Is the World Wide Web Consortium? |
|
|
18 | (2) |
|
What Are the Pieces That Make Up XML? |
|
|
19 | (1) |
|
Where Is XML Used, and Where Can It Be Used? |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
21 | (2) |
|
|
21 | (1) |
|
|
21 | (2) |
|
|
23 | (42) |
|
|
23 | (1) |
|
Tags and Text and Elements, Oh My! |
|
|
24 | (14) |
|
|
30 | (8) |
|
|
38 | (6) |
|
|
41 | (3) |
|
|
44 | (3) |
|
|
47 | (2) |
|
|
49 | (5) |
|
|
49 | (3) |
|
|
52 | (2) |
|
|
54 | (3) |
|
Is the XML Declaration a Processing Instruction? |
|
|
55 | (2) |
|
Illegal PCDATA Characters |
|
|
57 | (5) |
|
|
58 | (1) |
|
|
59 | (3) |
|
|
62 | (1) |
|
|
63 | (1) |
|
|
63 | (2) |
|
|
64 | (1) |
|
|
64 | (1) |
|
|
65 | (24) |
|
Why Do We Need Namespaces? |
|
|
65 | (4) |
|
|
66 | (2) |
|
So Why Doesn't XML Just Use These Prefixes? |
|
|
68 | (1) |
|
|
69 | (13) |
|
|
72 | (6) |
|
Do Different Notations Make Any Difference? |
|
|
78 | (2) |
|
Namespaces and Attributes |
|
|
80 | (2) |
|
|
82 | (4) |
|
|
83 | (1) |
|
|
84 | (1) |
|
Why Use URLs for Namespaces, Not URNs? |
|
|
84 | (1) |
|
What Do Namespace URIs Really Mean? |
|
|
85 | (1) |
|
|
85 | (1) |
|
When Should I Use Namespaces? |
|
|
86 | (1) |
|
|
87 | (1) |
|
|
87 | (2) |
|
|
87 | (1) |
|
|
87 | (1) |
|
|
88 | (1) |
|
|
89 | (168) |
|
Document Type Definitions |
|
|
91 | (58) |
|
|
92 | (9) |
|
|
92 | (5) |
|
The Document Type Declaration |
|
|
97 | (4) |
|
|
101 | (1) |
|
|
102 | (43) |
|
|
103 | (14) |
|
|
117 | (12) |
|
|
129 | (13) |
|
|
142 | (3) |
|
|
145 | (1) |
|
|
146 | (1) |
|
|
146 | (1) |
|
|
146 | (1) |
|
|
146 | (1) |
|
Limited Content Model Descriptions |
|
|
147 | (1) |
|
|
147 | (1) |
|
|
147 | (2) |
|
|
147 | (1) |
|
|
148 | (1) |
|
|
148 | (1) |
|
|
149 | (72) |
|
|
150 | (1) |
|
XML Schemas Use XML Syntax |
|
|
150 | (1) |
|
XML Schema Namespace Support |
|
|
150 | (1) |
|
|
150 | (1) |
|
XML Schema Content Models |
|
|
151 | (1) |
|
|
151 | (1) |
|
|
151 | (56) |
|
|
152 | (1) |
|
|
152 | (5) |
|
|
157 | (2) |
|
|
159 | (10) |
|
<complexType> Declarations |
|
|
169 | (1) |
|
|
170 | (2) |
|
|
172 | (10) |
|
|
182 | (6) |
|
<attributeGroup> Declarations |
|
|
188 | (4) |
|
|
192 | (8) |
|
<simpleType> Declarations |
|
|
200 | (6) |
|
Creating Elements with <simpleType> Content and Attributes |
|
|
206 | (1) |
|
Creating a Schema from Multiple Documents |
|
|
207 | (9) |
|
|
208 | (4) |
|
|
212 | (4) |
|
|
216 | (3) |
|
|
216 | (1) |
|
Attributes from Other Namespaces |
|
|
217 | (1) |
|
|
218 | (1) |
|
|
219 | (1) |
|
|
220 | (1) |
|
|
220 | (1) |
|
|
220 | (1) |
|
|
220 | (1) |
|
|
221 | (36) |
|
|
222 | (12) |
|
Introduction to Patterns and Element Patterns |
|
|
222 | (3) |
|
|
225 | (2) |
|
|
227 | (1) |
|
Co-Occurrence Constraints |
|
|
228 | (1) |
|
|
229 | (1) |
|
|
229 | (1) |
|
Connector Patterns and Grouping |
|
|
230 | (1) |
|
|
231 | (3) |
|
Combining and Reusing Patterns and Grammars |
|
|
234 | (13) |
|
|
234 | (3) |
|
assignMethod and Combining Named Pattern Definitions |
|
|
237 | (1) |
|
Schema Modularization Using the Include Directive |
|
|
238 | (1) |
|
Redefining Included Named Patterns |
|
|
239 | (1) |
|
Removing Patterns with the notAllowed Pattern |
|
|
240 | (1) |
|
Extending Schemas with Composition |
|
|
241 | (1) |
|
Extensibility in RELAX NG |
|
|
242 | (1) |
|
Nested Grammars and the RELAX NG Grammar Pattern |
|
|
243 | (4) |
|
Additional RELAX NG Features |
|
|
247 | (8) |
|
|
247 | (2) |
|
|
249 | (3) |
|
|
252 | (2) |
|
|
254 | (1) |
|
|
255 | (1) |
|
|
255 | (1) |
|
|
256 | (1) |
|
|
256 | (1) |
|
|
256 | (1) |
|
|
256 | (1) |
|
|
257 | (72) |
|
|
259 | (32) |
|
Ways of Looking at an XML Document |
|
|
260 | (1) |
|
|
260 | (1) |
|
|
261 | (1) |
|
The Document Object Model |
|
|
261 | (1) |
|
|
261 | (1) |
|
|
261 | (6) |
|
|
262 | (1) |
|
|
263 | (3) |
|
|
266 | (1) |
|
Abbreviated and Unabbreviated Syntax |
|
|
267 | (1) |
|
|
268 | (14) |
|
|
269 | (1) |
|
|
270 | (2) |
|
|
272 | (1) |
|
|
273 | (1) |
|
|
273 | (1) |
|
|
274 | (1) |
|
|
274 | (2) |
|
|
276 | (1) |
|
|
276 | (3) |
|
|
279 | (1) |
|
|
279 | (1) |
|
|
280 | (1) |
|
|
281 | (1) |
|
|
282 | (2) |
|
|
282 | (1) |
|
|
283 | (1) |
|
|
283 | (1) |
|
|
284 | (1) |
|
|
284 | (1) |
|
Structure of XPath Expressions |
|
|
285 | (2) |
|
Looking Forward to XPath 2.0 |
|
|
287 | (1) |
|
|
288 | (1) |
|
W3C XML Schema Data Types |
|
|
288 | (1) |
|
Additional XPath 2.0 Functions |
|
|
288 | (1) |
|
|
288 | (1) |
|
|
288 | (3) |
|
|
289 | (1) |
|
|
289 | (2) |
|
|
291 | (38) |
|
|
291 | (1) |
|
|
292 | (1) |
|
|
292 | (1) |
|
How Does an XSLT Processor Work? |
|
|
292 | (1) |
|
|
293 | (2) |
|
Introducing the Saxon XSLT Processor |
|
|
293 | (1) |
|
Installing the Saxon XSLT Processor |
|
|
293 | (2) |
|
Procedural versus Declarative Programming |
|
|
295 | (2) |
|
|
296 | (1) |
|
|
296 | (1) |
|
Foundational XSLT Elements |
|
|
297 | (4) |
|
The <xsl:stylesheet> Element |
|
|
299 | (1) |
|
The <xsl:template> Element |
|
|
300 | (1) |
|
The <xsl:apply-templates> Element |
|
|
300 | (1) |
|
Getting Information from the Source Tree |
|
|
301 | (8) |
|
The <xsl:value-of> Element |
|
|
301 | (2) |
|
|
303 | (4) |
|
The <xsl:copy-of> Element |
|
|
307 | (2) |
|
Influencing the Output with the <xsl:output> Element |
|
|
309 | (1) |
|
|
310 | (4) |
|
|
310 | (1) |
|
|
311 | (3) |
|
The <xsl:for-each> Element |
|
|
314 | (2) |
|
|
316 | (2) |
|
|
318 | (5) |
|
XSLT Variables and Parameters |
|
|
323 | (2) |
|
Named Templates and the <xsl:call-template> Element |
|
|
325 | (1) |
|
|
325 | (1) |
|
Looking Forward to XSLT 2.0 |
|
|
326 | (1) |
|
|
326 | (1) |
|
|
326 | (3) |
|
|
327 | (1) |
|
|
327 | (2) |
|
|
329 | (72) |
|
XQuery, the XML Query Language |
|
|
331 | (34) |
|
|
332 | (3) |
|
|
332 | (1) |
|
|
333 | (1) |
|
|
333 | (2) |
|
|
335 | (3) |
|
|
336 | (1) |
|
|
337 | (1) |
|
|
338 | (1) |
|
|
338 | (1) |
|
|
338 | (1) |
|
|
338 | (1) |
|
|
338 | (14) |
|
|
339 | (1) |
|
|
340 | (3) |
|
|
343 | (4) |
|
|
347 | (2) |
|
|
349 | (2) |
|
|
351 | (1) |
|
|
352 | (1) |
|
Shared Data Model with XPath 2.0 and XSLT 2.0 |
|
|
352 | (1) |
|
|
352 | (1) |
|
|
352 | (1) |
|
|
353 | (1) |
|
Comparing Items and Nodes |
|
|
353 | (1) |
|
|
353 | (1) |
|
|
353 | (1) |
|
|
353 | (7) |
|
|
353 | (7) |
|
|
360 | (1) |
|
|
360 | (1) |
|
|
361 | (1) |
|
Using Parameters with XQuery |
|
|
361 | (1) |
|
Proprietary Extensions to XQuery |
|
|
362 | (1) |
|
|
362 | (1) |
|
|
363 | (1) |
|
|
363 | (1) |
|
|
363 | (1) |
|
Update Functionality (as Part of XQuery) |
|
|
363 | (1) |
|
|
364 | (1) |
|
|
364 | (1) |
|
|
364 | (1) |
|
|
364 | (1) |
|
|
364 | (1) |
|
|
365 | (36) |
|
The Need for Efficient XML Data Stores |
|
|
365 | (3) |
|
Increase in Amount of XML |
|
|
366 | (1) |
|
Comparing XML-Based Data and Relational Data |
|
|
367 | (1) |
|
Approaches to Storing XML |
|
|
368 | (1) |
|
Producing XML from Relational Databases |
|
|
368 | (1) |
|
Moving XML to Relational Databases |
|
|
368 | (1) |
|
|
368 | (1) |
|
Using Native XML Databases |
|
|
369 | (11) |
|
Obtaining and Installing Xindice |
|
|
370 | (4) |
|
|
374 | (4) |
|
|
378 | (1) |
|
Searching for Information |
|
|
379 | (1) |
|
|
380 | (1) |
|
|
380 | (19) |
|
XML Functionality in SQL Server 2000 |
|
|
381 | (8) |
|
XML Functionality in SQL Server ``Yukon'' |
|
|
389 | (10) |
|
Choosing a Database to Store XML |
|
|
399 | (1) |
|
|
399 | (1) |
|
|
399 | (1) |
|
|
400 | (1) |
|
|
400 | (1) |
|
|
400 | (1) |
|
|
401 | (78) |
|
The XML Document Object Model (DOM) |
|
|
403 | (36) |
|
What Is an XML Document Object Model For? |
|
|
403 | (2) |
|
|
404 | (1) |
|
The Document Object Model at the W3C |
|
|
405 | (1) |
|
|
406 | (1) |
|
Two Ways to View DOM Nodes |
|
|
406 | (1) |
|
|
407 | (1) |
|
Tools to Run the Examples |
|
|
408 | (4) |
|
|
412 | (22) |
|
Properties of the Node Object |
|
|
413 | (4) |
|
Methods of the Node Object |
|
|
417 | (1) |
|
|
418 | (9) |
|
|
427 | (5) |
|
|
432 | (1) |
|
|
432 | (2) |
|
|
434 | (2) |
|
How the XML DOM Is Used in InfoPath 2003 |
|
|
436 | (1) |
|
|
437 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
439 | (40) |
|
What Is SAX and Why Was It Invented? |
|
|
439 | (2) |
|
|
440 | (1) |
|
|
440 | (1) |
|
|
441 | (1) |
|
|
442 | (1) |
|
|
442 | (32) |
|
|
443 | (19) |
|
|
462 | (5) |
|
|
467 | (1) |
|
|
467 | (1) |
|
|
468 | (4) |
|
|
472 | (2) |
|
|
474 | (1) |
|
Consumers, Producers, and Filters |
|
|
475 | (1) |
|
|
475 | (1) |
|
|
476 | (1) |
|
|
476 | (3) |
|
|
477 | (1) |
|
|
477 | (2) |
|
|
479 | (122) |
|
RSS and Content Syndication |
|
|
481 | (50) |
|
Syndication and Meta Data |
|
|
481 | (15) |
|
|
482 | (2) |
|
The Origin of RSS Species |
|
|
484 | (5) |
|
|
489 | (3) |
|
|
492 | (2) |
|
|
494 | (2) |
|
|
496 | (2) |
|
|
497 | (1) |
|
|
497 | (1) |
|
|
498 | (30) |
|
|
498 | (3) |
|
|
501 | (1) |
|
|
501 | (17) |
|
Transforming RSS with XSLT |
|
|
518 | (10) |
|
|
528 | (1) |
|
|
529 | (1) |
|
|
530 | (1) |
|
|
530 | (1) |
|
|
530 | (1) |
|
|
531 | (28) |
|
|
531 | (2) |
|
|
533 | (2) |
|
|
533 | (1) |
|
|
534 | (1) |
|
|
535 | (1) |
|
The New RPC Protocol: Web Services |
|
|
535 | (14) |
|
|
536 | (3) |
|
|
539 | (10) |
|
|
549 | (3) |
|
|
552 | (5) |
|
|
552 | (1) |
|
|
553 | (1) |
|
|
554 | (1) |
|
Surrounding Specifications |
|
|
555 | (2) |
|
|
557 | (1) |
|
|
557 | (2) |
|
|
557 | (1) |
|
|
558 | (1) |
|
|
559 | (42) |
|
|
559 | (3) |
|
The New RPC Protocol: SOAP |
|
|
562 | (6) |
|
|
568 | (1) |
|
|
568 | (8) |
|
|
569 | (1) |
|
|
570 | (1) |
|
|
570 | (6) |
|
More Complex SOAP Interactions |
|
|
576 | (11) |
|
|
576 | (2) |
|
|
578 | (9) |
|
Defining Web Services: WSDL |
|
|
587 | (11) |
|
|
588 | (8) |
|
|
596 | (2) |
|
|
598 | (1) |
|
|
599 | (2) |
|
|
599 | (1) |
|
|
599 | (2) |
|
|
601 | (144) |
|
|
603 | (26) |
|
Separating Style from Content |
|
|
604 | (1) |
|
|
605 | (17) |
|
The Strict, Transitional, and Frameset DTDs of XHTML 1.0 |
|
|
606 | (1) |
|
Basic Changes in Writing XHTML |
|
|
607 | (11) |
|
Stricter Documents Make Faster and Lighter Processors |
|
|
618 | (1) |
|
|
618 | (1) |
|
Validating XHTML Documents |
|
|
619 | (1) |
|
|
620 | (2) |
|
|
622 | (4) |
|
|
624 | (1) |
|
|
624 | (1) |
|
|
625 | (1) |
|
|
626 | (1) |
|
|
627 | (2) |
|
|
628 | (1) |
|
|
628 | (1) |
|
Cascading Style Sheets (CSS) |
|
|
629 | (42) |
|
|
630 | (1) |
|
|
631 | (6) |
|
|
632 | (1) |
|
|
633 | (4) |
|
Using CSS with XHTML versus Other XML Vocabularies |
|
|
637 | (1) |
|
Attaching the Style Sheet to an XML Document |
|
|
637 | (1) |
|
|
638 | (1) |
|
Using CSS for Layout of XML Documents |
|
|
639 | (17) |
|
Understanding the Box Model |
|
|
640 | (4) |
|
|
644 | (12) |
|
|
656 | (2) |
|
|
658 | (4) |
|
XLink Support in Netscape |
|
|
659 | (3) |
|
Forcing Links Using the HTML Namespace |
|
|
662 | (1) |
|
|
662 | (1) |
|
Using CSS to Add Content to Documents |
|
|
663 | (3) |
|
|
666 | (2) |
|
|
666 | (1) |
|
Using Attribute Values in Documents |
|
|
666 | (2) |
|
|
668 | (1) |
|
|
669 | (2) |
|
|
669 | (1) |
|
|
670 | (1) |
|
|
670 | (1) |
|
|
670 | (1) |
|
Scalable Vector Graphics (SVG) |
|
|
671 | (38) |
|
|
671 | (3) |
|
Scalable, Vector, Graphics |
|
|
672 | (1) |
|
|
672 | (1) |
|
|
673 | (1) |
|
|
674 | (14) |
|
|
677 | (2) |
|
|
679 | (1) |
|
|
679 | (1) |
|
|
680 | (3) |
|
|
683 | (1) |
|
|
683 | (1) |
|
Comments, Annotation, and Meta Data |
|
|
684 | (2) |
|
|
686 | (2) |
|
|
688 | (1) |
|
Tangram: A Simple Application |
|
|
688 | (14) |
|
|
689 | (1) |
|
|
690 | (4) |
|
|
694 | (8) |
|
|
702 | (4) |
|
|
706 | (1) |
|
|
706 | (1) |
|
|
707 | (2) |
|
|
707 | (1) |
|
|
708 | (1) |
|
|
709 | (36) |
|
How Does XForms Improve on HTML Forms? |
|
|
709 | (1) |
|
|
710 | (4) |
|
|
710 | (3) |
|
|
713 | (1) |
|
An Illustrative XForms Example |
|
|
714 | (8) |
|
|
716 | (5) |
|
XML Namespaces in XForms Documents |
|
|
721 | (1) |
|
|
722 | (10) |
|
|
722 | (1) |
|
The xforms:secret Element |
|
|
723 | (1) |
|
The xforms:textarea Element |
|
|
723 | (1) |
|
The xforms:output Element |
|
|
723 | (1) |
|
The xforms:upload Element |
|
|
724 | (1) |
|
|
724 | (1) |
|
The xforms:trigger Element |
|
|
724 | (1) |
|
The xforms:submit Element |
|
|
724 | (1) |
|
The xforms:select Element |
|
|
725 | (1) |
|
The xforms:select1 Element |
|
|
726 | (6) |
|
XForms Model Item Properties |
|
|
732 | (5) |
|
|
732 | (5) |
|
|
737 | (1) |
|
|
737 | (4) |
|
The xforms:action Element |
|
|
738 | (1) |
|
The xforms:dispatch Element |
|
|
738 | (1) |
|
|
738 | (1) |
|
The xforms:message Element |
|
|
738 | (1) |
|
The xforms:rebuild Element |
|
|
739 | (1) |
|
The xforms:recalculate Element |
|
|
739 | (1) |
|
The xforms:refresh Element |
|
|
739 | (1) |
|
|
739 | (1) |
|
The xforms:revalidate Element |
|
|
739 | (1) |
|
|
740 | (1) |
|
The xforms:setfocus Element |
|
|
740 | (1) |
|
The xforms:setvalue Element |
|
|
740 | (1) |
|
Developing and Debugging XForms |
|
|
740 | (1) |
|
Commercial Alternatives to XForms |
|
|
741 | (2) |
|
|
741 | (1) |
|
Adobe XML/PDF Forms Designer |
|
|
742 | (1) |
|
|
743 | (1) |
|
|
743 | (2) |
|
|
743 | (1) |
|
|
743 | (2) |
|
|
745 | (54) |
|
Case Study 1: .NET XML Web Services |
|
|
747 | (24) |
|
|
747 | (10) |
|
Consuming the Web Service |
|
|
757 | (11) |
|
|
757 | (8) |
|
|
765 | (3) |
|
|
768 | (3) |
|
Case Study 2: XML and PHP |
|
|
771 | (28) |
|
Elementary Programming in PHP |
|
|
772 | (1) |
|
Basic Information about PHP |
|
|
773 | (14) |
|
|
773 | (4) |
|
|
777 | (2) |
|
|
779 | (3) |
|
Getting Data from the Browser Screen |
|
|
782 | (3) |
|
|
785 | (2) |
|
|
787 | (10) |
|
|
797 | (1) |
|
|
798 | (1) |
|
|
799 | (162) |
|
Appendix A: Exercise Solutions |
|
|
801 | (56) |
|
Appendix B: The XML Document Object Model |
|
|
857 | (14) |
|
Appendix C: XPath 1.0 Reference |
|
|
871 | (12) |
|
Appendix D: XSLT 1.0 Reference |
|
|
883 | (28) |
|
Appendix E: XML Schema Element and Attribute Reference |
|
|
911 | (30) |
|
Appendix F: Schema Data Types Reference |
|
|
941 | (20) |
Index |
|
961 | |