| Introduction | xix |
Part I | Oracle and the XML Standards | |
1 | Introducing XML | 3 |
| What Is an XML Document? | 4 |
| Well-Formed XML Documents | 7 |
| Valid XML Documents | 8 |
| XML Namespaces | 9 |
| XML and the Database | 11 |
| Database Schema and XML Documents | 11 |
| Summary | 14 |
2 | Accessing XML with DOM, SAX, JAXB, and StAX | 15 |
| Parsing and Binding an XML Document | 16 |
| Accessing XML Using the DOM | 17 |
| Accessing XML with SAX | 28 |
| Accessing XML with Java Binding | 42 |
| Accessing XML with StAX | 45 |
| Best Practices | 47 |
3 | Transforming XML with XSLT and XPath | 49 |
| Programmatic Invocation of the XSLT Processor | 51 |
| Navigating XML with XPath | 54 |
| Introducing XSLT Stylesheets | 55 |
| XSL Templates | 56 |
| The XSLT Process Model | 56 |
| Introducing XSLT 2.0 | 57 |
| The Oracle XSLT Extensions | 59 |
| The XSLT Virtual Machine | 60 |
| XSLT and the Database | 61 |
| Best Practices | 61 |
4 | Validating XML with DTDs and XML Schemas | 63 |
| Introducing the DTD | 64 |
| Validating XML Against DTDs | 66 |
| Introducing the XML Schema Language | 66 |
| Simple and Complex Datatypes | 68 |
| Validating XML with XML Schemas (XSDs) | 73 |
| XML Document Models and the Database | 75 |
| Best Practices | 79 |
5 | XML Operations with XQuery | 83 |
| Introducing XQuery | 84 |
| The Oracle XQuery Engine | 89 |
| Querying XML Documents | 91 |
| XQuery and the Oracle Database | 92 |
| Best Practices | 93 |
6 | XML Messaging and RPC with SOAP | 95 |
| Introducing SOAP | 96 |
| Using SOAP and the Oracle XDK | 99 |
| Using SOAP and the Oracle Database | 100 |
| Best Practices | 104 |
7 | Putting It All Together with XML Pipeline, JSPs, and XSQL | 105 |
| Introducing the XML Pipeline Processor | 106 |
| Processing XML with JSPs and XML Beans | 108 |
| Introducing the XSQL Page Publishing Framework | 116 |
| Best Practices | 125 |
Part II | Oracle XML Management for DBAs | |
8 | Getting Started with the Oracle XML Database | 129 |
| A Brief History of XML Support in Oracle Database | 130 |
| Setting Up the Oracle XML Database | 132 |
| What Is the Oracle XML Database? | 140 |
| XML Database and Standards | 148 |
| Designing the XML Database | 149 |
| Summary | 156 |
9 | Storing XML Data | 157 |
| Storing XML Documents in CLOB XML Types | 158 |
| Storing XML Documents in XML Schema-based XML Types | 159 |
| Storing XML Documents in Relational Tables | 176 |
| Using External Tables | 184 |
| Schema Evolution | 185 |
| Best Practices | 186 |
| Summary | 188 |
10 | Generating and Retrieving XML | 189 |
| Generating XML from SQL Data with SQL XML Functions | 190 |
| Generating XML from SQL Data with DBM XMLGEN | 199 |
| Retrieving Using XML Type and SQL/XML Functions | 206 |
| Generating XML Schemas | 209 |
| Creating XML Type Views | 211 |
| Processing XML | 212 |
| Best Practices | 216 |
| Summary | 218 |
11 | Searching XML Data | 219 |
| XPath-Based Searches | 220 |
| Full Text Search | 230 |
| Best Practices | 239 |
| Summary | 240 |
12 | Managing the Oracle XML Database | 241 |
| Installed Oracle XML DB Components | 242 |
| Configuring the Oracle XML DB | 244 |
| Security Management | 248 |
| Summary | 251 |
Part III | Oracle XML for Java Developers | |
13 | Getting Started with Oracle XML and Java | 255 |
| The Oracle XDK Java Libraries | 256 |
| The JDK Environment | 258 |
| Using the XDK with Oracle JDeveloper | 260 |
| Summary | 266 |
14 | Building an XML-Powered Web Site | 267 |
| An XML-Enabled FAQ Web Site | 268 |
| Designing the Framework | 268 |
| Creating the FAQ Database | 269 |
| Connecting the FAQ Web Site to the XML Database | 274 |
| Adding Pagination to the FAQ Listing | 277 |
| Displaying the FAQ and Answers | 280 |
| Creating a Glossary | 283 |
| Searching the FAQs | 287 |
| Summary | 288 |
15 | Creating a Portal Site with XML and Web Services | 289 |
| Designing the Framework | 290 |
| Designing the Static and Dynamic Areas | 293 |
| Adding the Portal Functionality | 301 |
| Creating an Administration Page | 307 |
| Summary | 311 |
16 | Developing an XML Gateway Application with SOAP and AQ | 313 |
| Designing the Framework | 314 |
| Creating the Framework | 317 |
| Creating the XML Messaging Gateway | 323 |
| Extending the Application's Functionality | 341 |
| Summary | 342 |
17 | Developing XML-Based Reusable Components | 343 |
| Designing the Framework | 344 |
| Simple Pipeline Examples | 345 |
| Building the Pipeline Application | 352 |
| Running the Pipeline Application | 360 |
| Summary | 362 |
Part IV | Oracle XML for C Developers | |
18 | Getting Started with Oracle XML and C | 365 |
| The Oracle XDK C Libraries | 366 |
| Setting Up Your C XML Development Environment | 367 |
| Summary | 374 |
19 | Building an XML-Managed Application | 375 |
| Designing the Framework | 376 |
| The XML Media Files | 377 |
| Creating an XML Configuration File | 378 |
| Creating the XSL Stylesheets | 383 |
| Creating the publishcat Application | 386 |
| Summary | 391 |
20 | Build an XML Database OCI Application | 393 |
| Designing the Framework | 394 |
| Setting Up the OCI Application Environment | 395 |
| The Update Application | 397 |
| Initializing the OCI Application | 398 |
| Retrieving a DOM of the Record List via OCI | 401 |
| Performing Unified DOM Operations | 406 |
| Running the xmlupdate Application | 407 |
| Summary | 408 |
21 | Create an XML-Configured High-Performance Transformation Engine | 409 |
| Designing the Framework | 410 |
| Compiling Stylesheets with xslcompile | 411 |
| Running the XSLT Virtual Machine with xsbtransform | 414 |
| Summary | 418 |
Part V | Oracle XML for C++ Developers | |
22 | Getting Started with Oracle XML and C++ | 421 |
| The Oracle XDK C++ Libraries | 422 |
| Setting Up Your C++ XML Development Environment | 423 |
| Summary | 431 |
23 | Build an XML Database OCI C++ Application | 433 |
| Designing the Framework | 434 |
| Setting Up the C++ OCI XML Application Environment | 435 |
| Creating the C++ OCI Helper Class | 437 |
| Initializing the C++ Database XML Application | 438 |
| Handling OCI Errors | 439 |
| Connecting to the Database | 440 |
| Disconnecting from the Database and Cleaning Up | 441 |
| Creating the C++ Query Application | 443 |
| Selecting into an XML Type | 444 |
| Initializing the XDK for XML Type XOB Access | 446 |
| Querying an XML Type with the C++ XDK APIs | 447 |
| Running the Application | 449 |
| Summary | 450 |
24 | Building an XML Data-Retrieval Application | 451 |
| Designing the Framework | 452 |
| Building the cppextract Application | 452 |
| Running the cppextract Application | 459 |
| Extending the Framework | 460 |
| Summary | 462 |
Part VI | Oracle XML for PL/SQL Developers | |
25 | Getting Started with Oracle XML and PL/SQL | 465 |
| Setting Up the Environment | 466 |
| PL/SQL XML Processing Techniques | 466 |
| Setting Up Oracle JVM | 480 |
| Summary | 480 |
26 | Building PL/SQL Web Services | 481 |
| Building and Publishing the First Database Web Service | 482 |
| Consuming a Web Service Within the Oracle Database | 492 |
| Extending the Application | 497 |
| Summary | 499 |
27 | Extending PL/SQL XML Functionality with Java | 501 |
| Creating the Java Stored Procedure to Process XML | 502 |
| Running the Java Stored Procedure | 504 |
| Simplifying Deployment of Java Stored Procedures Using Oracle JDeveloper 10g | 505 |
| Processing XML in the Oracle JVM | 507 |
| Developing Your Own Java Stored Procedures | 515 |
| Summary | 517 |
28 | Putting It All Together | 519 |
| The Oracle XML Platform | 520 |
| XML Processing Tier Decisions | 521 |
| Database Design Decisions for XML | 522 |
| Java, C, C++, and PL/SQL Decisions | 524 |
| Extending the Oracle XML Platform | 527 |
A | XML Standards Bodies and Open Specifications | 529 |
| Introducing the W3C Specifications | 530 |
| W3C XML Specification | 530 |
| W3C DOM Specification | 531 |
| SAX Specification | 531 |
| W3C Namespace Specifications | 532 |
| W3C XML Schema Specification | 532 |
| W3C XML Query Specification | 532 |
| W3C XSLT and XPath Specification | 533 |
| W3C XML Pipeline Definition Language Specification | 533 |
| W3C XML Protocol | 533 |
| Java Community Process Specifications | 534 |
| Sun JAXB Specification | 534 |
| Sun JAXP Specification | 534 |
| Sun StAX Specification | 534 |
| ISO SQL/XML Specification | 534 |
| Oracle Technical Resources | 535 |
| Other Helpful Resources | 535 |
| Glossary | 537 |
| Index | 549 |