| Acknowledgments | xvii |
| Introduction | xix |
| PART I GETTING STARTED | |
| 1 An Architectural Overview of XML | 3 |
| How Computing Started and Has Evolved | 4 |
| System Design Issues | 4 |
| Client/Server Development | 5 |
| Needs of These Systems | 5 |
| Introducing XML | 6 |
| XML Compared to XTML | 7 |
| The Core of XML | 7 |
| Why XML? | 8 |
| XML Documents | 8 |
| Document Type Declarations | 10 |
| How Is XML Relevant? | 12 |
| What Problem Does XML Solve? | 12 |
| Why Is XML a Good Choice? | 14 |
| What Can It Help? | 17 |
| Working with Objects | 17 |
| Application Messaging | 25 |
| Process Modeling | 28 |
| Microsoft .NET | 29 |
| Back to Fundamentals | 29 |
| Using XML within .NET | 31 |
| What Are the Next Steps? | 31 |
| Necessary Knowledge | 31 |
| XML Software | 32 |
| Where to Get Help | 33 |
| Where Do You Want to Go? | 35 |
| 2 XML Basics | 37 |
| The Goals of XML | 37 |
| The XML Language | 38 |
| Elements | 39 |
| Entities | 45 |
| Comments | 50 |
| Processing Instructions | 50 |
| Document Instances | 51 |
| Well-Formed Documents | 51 |
| Valid and Non-Valid Documents | 55 |
| Moving Forward | 56 |
| 3 Parsing XML Documents | 57 |
| What Does an XML Parser Do? | 58 |
| Validating and Non-Validating Parsers | 59 |
| Stream-Based and Tree-Based Parsers | 59 |
| Tree-Based Parsing with the DOM | 60 |
| Important Interfaces in the DOM | 62 |
| Other DOM Interfaces | 65 |
| Stream-Based Parsing with SAX | 67 |
| The Behavior of a SAX Parser | 67 |
| Three Steps to Using SAX | 68 |
| Choosing a Parsing Method | 68 |
| The DOM Method | 69 |
| The SAX Method | 70 |
| Example Scenarios | 71 |
| Available Parsers | 72 |
| MSXML | 72 |
| Xerces | 77 |
| Other Parsers | 80 |
| Parsing XML Within the .NET Framework | 80 |
| Conclusion | 82 |
| PART II APPLICATION DEVELOPMENT | |
| 4 Database Integration | 85 |
| Databases and XML | 85 |
| Types of DBMS | 86 |
| Why XML? | 89 |
| The Challenges of Using XML with a DBMS | 89 |
| Using XML with Relational Database Management Systems | 94 |
| Retrieving and Storing Data-Centric XML Documents | 94 |
| Storing and Retrieving Document-Centric XML Documents | 108 |
| XML Support in Commercial Relational Database Management Systems | 109 |
| Microsoft SQL Server 2000 | 110 |
| Oracle 9i | 131 |
| Conclusion | 143 |
| 5 Web Development | 145 |
| The Web Publishing Process | 145 |
| An XML Navigation Example | 147 |
| Using a New Publishing Technique with XML | 149 |
| Cascading Style Sheets | 150 |
| When to Use CSS to Style XML | 151 |
| When Not to Use CSS | 153 |
| CSS Browser Compliance | 154 |
| Extensible Stylesheet Language Transformation | 154 |
| XSL Formatting Objects | 154 |
| XSL Transformations | 155 |
| When to Use XSLT | 156 |
| XSLT Browser Compliance | 156 |
| Using XSL Transformations | 157 |
| XSL Transformation Examples | 158 |
| An Example Application | 168 |
| The Requirements | 169 |
| Requirement Analysis | 170 |
| The Controller | 172 |
| Building the Pages | 175 |
| Bringing it All Together | 197 |
| Final Thoughts | 200 |
| 6 Building User Interfaces | 201 |
| Modeling a User Interface in XML | 202 |
| XML Benefits | 204 |
| The Controller Pattern Revisited | 204 |
| The User Interface Schema | 207 |
| Two Approaches to User Interface Schemas | 207 |
| Layout Management | 211 |
| A Simple Detail View | 211 |
| A More Detailed View | 217 |
| List Views | 223 |
| Navigation | 237 |
| A Simple Navigation Schema | 239 |
| A Navigation Example | 240 |
| Creating a Tab Menu | 242 |
| Creating a Navigation Tree | 247 |
| Input Controls | 251 |
| Consistency | 252 |
| The <form> Element | 253 |
| The Text <input> Element | 254 |
| The TextArea <input> Element | 256 |
| Field Validation | 258 |
| WYSIWYG Editing | 262 |
| Dynamic XSL Transformations | 264 |
| The <choice> Element | 267 |
| Putting it All Together | 270 |
| 7 XML-Based Messaging | 271 |
| Messaging Overview | 271 |
| The Beginnings of Messaging | 272 |
| The Need for Messaging | 272 |
| XML-Based Messaging | 276 |
| The SOAP Messaging Framework | 277 |
| The Message Structure | 277 |
| Encoding Rules | 278 |
| The SOAP RPC Mechanism | 279 |
| Web Services | 279 |
| Describing Web Services with WSDL | 280 |
| Creating a Web Service | 289 |
| Discovering Web Services with UDDI | 305 |
| The BizTalk Framework Initiative | 313 |
| The BizTalk Framework | 314 |
| BizTalk.org | 316 |
| BizTalk Server | 317 |
| Conclusion | 331 |
| 8 Creating Metadata | 333 |
| Metadata and XML | 334 |
| Uses for Metadata | 334 |
| Using XML for Comments | 335 |
| Elements | 337 |
| Schemas and DTDs | 338 |
| Using XML for Metadata Definition | 340 |
| Describing an Object | 341 |
| Describing a Service | 344 |
| Web ServicesAn Introduction | 346 |
| Describing a Web Service | 347 |
| Obtaining Metadata | 351 |
| Using a Web Service | 352 |
| HelloWorld via SOAP | 353 |
| HelloWorld via HTTP GET | 354 |
| HelloWorld via HTTP POST | 354 |
| .NET Support for Metadata and Web Services | 355 |
| The createPerson() Web Service | 355 |
| The createPerson() Web Service Client | 365 |
| Generating a Client Proxy from XML Metadata | 369 |
| An Overview of .NET Remoting | 373 |
| Remote Web Services | 374 |
| .NET Remoting Overview | 375 |
| An Introduction to Remote Objects | 376 |
| Remoting Examples | 381 |
| Creating Remote Objects | 382 |
| Remoting Events | 394 |
| Remoting Object Model Overview | 402 |
| Remoting Object Model Concepts | 403 |
| Remoting Object Model Architecture | 408 |
| Conclusion | 410 |
| 9 Building a Server Application | 411 |
| Application Overview | 411 |
| Database Requirements | 412 |
| Business Logic Requirements | 413 |
| User Requirements | 416 |
| The Golf Reservation System Server Application | 417 |
| The Database | 417 |
| Data Sets and Data Adapters | 421 |
| Data Views | 426 |
| Business Objects | 427 |
| The GolfCourseService XML Web service | 439 |
| Conclusion | 446 |
| 10 Creating A Client | 449 |
| Client Application Overview | 449 |
| User Requirements | 450 |
| Web Services | 451 |
| Golf Reservation System Client | 453 |
| The Controller Design Pattern | 455 |
| Procedure Flow | 456 |
| Client Code | 457 |
| Web Form Code | 458 |
| The Controller and ie5.xsl | 485 |
| Where to From Here? | 509 |
| PART III INTEROPERABILITY | |
| 11 Platform Development | 513 |
| Legacy Mechanisms for Cross-Platform Development | 514 |
| UNIX Sockets | 514 |
| Distributed Computing Environment | 515 |
| CORBA | 515 |
| Java RMI | 516 |
| DCOM | 516 |
| Building Cross-Platform Applications Using Web Services | 516 |
| Building Servers | 517 |
| Building Clients | 520 |
| Accessing Objects Across Platforms | 521 |
| Writing Objects for Multiple Platforms | 522 |
| Issues in Object Development and Multiple-Platform Design | 523 |
| Object Development | 523 |
| A Simple Example: GolfCourseService | 523 |
| Platform Issues and Limitations | 525 |
| Other Platform Issues: Security, Scalability, and State | 526 |
| Why Not Use Web Services? | 528 |
| Conclusion | 530 |
| 12 Legacy Systems Integration | 531 |
| A Definition of Legacy Systems Integration | 532 |
| Challenges to Integration | 532 |
| Documentation | 533 |
| Interfacing | 533 |
| Availability | 533 |
| Scalability | 534 |
| Creating Interfaces to Legacy Systems | 534 |
| Data-Level Interfacing | 535 |
| Process-Level Interfacing | 535 |
| API-Level Interfacing | 536 |
| User Interface-Level Interfacing | 536 |
| Middleware | 537 |
| An Architecture for Legacy Systems Integration | 537 |
| Core Criteria | 537 |
| The Layered Approach | 538 |
| Availability and Scalability Considerations | 543 |
| Conclusion | 544 |
| 13 Cross Device Development | 545 |
| Applications for the Web and Beyond | 546 |
| The Separation of Church (Presentation) and State (Data) | 546 |
| Application Design Concepts | 547 |
| The Challenges of Developing for Small Devices | 551 |
| Related Specifications | 553 |
| Extending the Golf Reservation System Application to Wireless Devices | 557 |
| Application Requirements | 557 |
| Using the Mobile Explorer Developer's Toolkit | 557 |
| Using The Golf Reservation System Skin Architecture | 568 |
| Conclusion | 575 |
| PART IV XML AND MICROSOFT .NET | |
| 14 More About SOAP | 579 |
| The SOAP <Envelope> | 579 |
| The encodingStyle Global Attribute | 580 |
| <Header> | 581 |
| <Body> | 583 |
| Encoding | 587 |
| Developing SOAP Applications | 589 |
| Using Web Services | 589 |
| Using Components | 591 |
| Conclusion | 594 |
| 15 Exploring BizTalk Server | 595 |
| Getting Started with BizTalk | 596 |
| The BizTalk Server Suite of Tools | 596 |
| Preparing Your System | 597 |
| Applying BizTalk | 598 |
| Schema Creation with BizTalk Editor | 600 |
| Transformations in BizTalk Mapper | 604 |
| Process Design with BizTalk Orchestration Designer | 610 |
| Defining Work Flow | 611 |
| Referencing Processing Applications | 613 |
| Attaching Steps to Processing | 616 |
| Conclusion | 619 |
| 16 .NET Development | 621 |
| Data Access and XML | 621 |
| OLEDB and ADO | 622 |
| ADO.NET | 624 |
| Parsing and Producing XML Documents | 631 |
| XmlReader | 631 |
| XmlWriter | 637 |
| Languages Built on the .NET Framework | 638 |
| C# | 639 |
| Visual Basic .NET | 640 |
| Jscript .NET | 641 |
| C++ | 641 |
| Other Languages | 642 |
| Conclusion | 642 |
| PART V APPENDICES | |
| A Related Standards | 645 |
| Structured Standards | 645 |
| Namespaces in XML | 646 |
| XML Schema | 650 |
| Resource Description Framework | 652 |
| Linking-Based Standards | 653 |
| The XML Linking Language | 654 |
| The XML Path Language | 655 |
| The XML Pointer Language | 656 |
| The XML Base | 657 |
| Transformation and Remote Object Access | 658 |
| Extensible Stylesheet Language Transformations | 658 |
| The Simple Object Access Protocol | 661 |
| Other Standards | 661 |
| XML Inclusions | 662 |
| XML Query | 664 |
| Final Thought | 665 |
| B XML Software | 667 |
| Development Tools | 668 |
| Schema and DTD Tools | 668 |
| Document Editors | 675 |
| Servers and Document Management | 679 |
| Microsoft | 679 |
| TIBCO Extensibility | 681 |
| Software Development Kits (SDKs) | 682 |
| Conclusion | 684 |
| INDEX | 685 |