Skip Headers

Oracle® Application Developer's Guide - XML 10g (9.0.4) Part Number B12099-01 |
Home | Contents | Index

# 27
Using XML Schema Processor for C++

This chapter contains the following sections:

- Oracle XML Schema Processor for C++ Features

- Invoking XML Schema Processor for C++

- XML Schema Processor for C++ Usage Diagram

- Running the Provided XML Schema Sample Application

## Oracle XML Schema Processor for C++ Features

The XML Schema Processor for C++ is a companion component to the XML Parser for C++ that allows support to simple and complex datatypes into XML applications with Oracle. The Schema Processor supports the XML Schema Working Draft, with the goal being that it be 100% fully conformant when XML Schema becomes a W3C Recommendation. This makes writing custom applications that process XML documents straightforward in the Oracle environment, and means that a standards-compliant XML Schema Processor is part of the Oracle platform on every operating system where Oracle is ported.

See Also: Chapter 20, "Using XML Parser for Java", for more information about XML Schema and why you would want to use XML Schema.

XML Schema Processor for C++ has the following features:

- Supports simple and complex types

- Built upon the XML Parser for C++ v2

- The Schema processor is based on the April 7, 2000 version of the XML Schema Working Draft (in three parts):

The XML Schema Processor for C++ class is `XMLSchema`. The version described here is Oracle XML Schema Processor 1.0.1.0.0 (C++). The Oracle XML Schema Processor is an early adopter release and is written in C with a C++ wrapper. It includes the production release of the XML Parser for C v2.

See Also: Oracle9i XML Reference

### Requirements

XML Schema Processor for C++ runs on the following operating systems:

- Linux

- Solaris

- HP-UX

- NT 4 / Service Pack 3 (and above)

#### Online Documentation

Documentation for Oracle XML Schema Processor for C++ is located in the doc directory in your install area.

### Standards Conformance

The parser conforms to the following standards:

- W3C recommendation for Extensible Markup Language (XML) 1.0

- W3C recommendation for Document Object Model Level 1.0

- W3C proposed recommendation for Namespaces in XML

- Simple API for XML (SAX) 1.0

- W3C recommendation for XSL Transformations (XSLT)

- W3C recommendation for XML Path Language (XPath)

### Using the Supported Character Sets

The XML Parser for C++ currently supports the following encodings:

- BIG5

- EBCDIC-CP-BE

- EBCDIC-CP-CA

- EBCDIC-CP-CH

- EBCDIC-CP-DK

- EBCDIC-CP-ES

- EBCDIC-CP-FI

- EBCDIC-CP-FR

- EBCDIC-CP-GB

- EBCDIC-CP-HE

- EBCDIC-CP-IS

- EBCDIC-CP-IT

- EBCDIC-CP-NL

- EBCDIC-CP-NO

- EBCDIC-CP-ROECE

- EBCDIC-CP-SE

- EBCDIC-CP-US

- EBCDIC-CP-WT

- EBCDIC-CP-YU

- EUC-JP

- GB2312

- ISO-10646-UCS-2

- ISO-8859-1 through 9

- KOI8-RUTF-8

- SHIFT_JIS

- US-ASCII

- UTF-16

  See Also: Appendix A, Character Sets, of the Oracle9i Globalization and National Language Support Guide, where, in addition, any character set specified in can be used.

To use these encodings, you must have the following set:

- The ORACLE_HOME environment variable must be set and pointing to the location of your Oracle installation.

- The environment variables, ORA_NLS, ORA_NLS32, and ORA_NLS33, must be set to point to the location of the NLS data files.

  - On Unix systems, this is usually`$ORACLE_HOME/ ocommon/nls/admin/data`.

  - On Windows NT, this is usually `$ORACLE_HOME/ nlsrtl/admin/nlsdata`.

The default encoding is UTF-8. It is recommended that you set the default encoding explicitly if using only single byte character sets (such as US-ASCII or any of the ISO-8859 character sets) for performance up to twice as fast as with multibyte character sets, such as UTF-8.

### XML Schema Processor for C++: Provided Software

Table 27-1 lists the supplied files and directories with this release:

##### Table 27-1 XML Schema Processor for C++: Supplied Files

Directory an d Files | Description
--- | ---
license.html | Licensing agreement
readme.html | This file
bin/ | Schema processor executable, "schema"
doc/ | API documentation
include/ | header files
lib/ | XML/XSL/Schema & support libraries
mesg/ | Error message files
sample/ | Example usage of the Schema processor

Table 27-2 lists the included libraries:

##### Table 27-2 XML Schema Processor for C++: Supplied Libraries

Included Library | Description
--- | ---
libxml8.a | XML Parser/XSL Processor
libcore8.a | CORE functions
libnls8.a | National Language Support

## Invoking XML Schema Processor for C++

The XML Schema Processor can be called as an executable by invoking bin/schema in the install area. This takes two arguments:

- XML instance document

- Optionally, a default schema to apply

The Schema processor can also be invoked by writing code using the supplied APIs. The code must be compiled using the headers in the include/ subdirectory and linked against the libraries in the lib/ subdirectory. See Makefile in the sample/ subdirectory for details on how to build your program.

An error message file is provided in the mesg/ subdirectory. Currently, the only message file is in English although message files for other languages may be supplied in future releases.

#### Set Environment Variable OR_XML_MESG to Point to Absolute Path

You should set the environment variable ORA_XML_MESG to point to the "absolute" path of the mesg/ subdirectory. Alternately, if you have an $ORACLE_HOME installed, you may copy the contents of the mesg/ subdirectory to the $ORACLE_HOME/oracore/mesg directory.

## XML Schema Processor for C++ Usage Diagram

Figure 27-1 illustrates the calling sequence of XMl Schema Processor for C++, as follows:

1. XMLSchema.initialize() method initializes the process.

2. The parsed XML document(s) inputs the Schema Processor.

3. XMLSchema.validate() validates the parsed XML document(s) until a success code results.

4. When validation completes, XMLSchema.terminate() method ends the process.

#### Figure 27-1 XML Schema Processor for C++ Usage Diagram

Text description of the illustration adxml093.gif

## Running the Provided XML Schema Sample Application

This directory contains a sample XML Schema application that illustrates how to use Oracle XML Schema Processor with its API. Table 27-3 lists the provided sample files.

##### Table 27-3 XML Schema for C++ Samples Provided

Sample File | Description
--- | ---
Makefile | Makefile to build the sample programs and run them, verifying correct output.
xsdtest.cpp | Trivial program which invokes the XML Schema for C++ API
car.{xsd,xml,std} | Sample Schema, instance document, expected output respectively, after running xsdtest on them. See: "XML Schema for C++ Example 2: car.xsd" "XML Schema for C++ Example 3: car.xml" "XML Schema for C++ Example 4: car.std" .
aq.{xsd,xml,std} | Second sample Schema's, instance document, expected output respectively, after running xsdtest on them. See: "XML Schema for C++ Example 5: aq.xsd" "XML Schema for C++ Example 6: aq.xml" "XML Schema for C++ Example 7: aq.std"
pub.{xsd,xml,std} | Third sample Schema's, instance document, expected output respectively, after running xsdtest on them. See: "XML Schema for C++ Example 8: pub.xsd" "XML Schema for C++ Example 9: pub.xml" "XML Schema for C++ Example 10: pub.std"

To build the sample programs, run 'make'.

To build the programs and run them, comparing the actual output to expected output, run 'make sure'.

### Error Messages are in English

An error message file is provided in the mesg subdirectory. Currently, the only message file is in English although message files for other languages may be supplied in future releases. You should set the environment variable ORA_XML_MESG to point to the absolute path of the mesg subdirectory.

Alternately, if you have an $ORACLE_HOME installed, you can copy the contents of the mesg subdirectory to the $ORACLE_HOME/oracore/mesg directory.

### XML Schema for C++ Example 1: xsdtest.cpp

    // Copyright (c) Oracle Corporation 1999, 2000. All Rights Reserved.

    ///////////////////////////////////////////////////////////////////////////////
    //   NAME validate.cpp
    //   DESCRIPTION Sample usage of C++ XML Schema processor
    ///////////////////////////////////////////////////////////////////////////////

    #include <iostream.h>
    #include <string.h>

    #ifndef ORAXML_CPP_ORACLE
    # include <oraxml.hpp>
    #endif

    #ifndef ORAXSD_CPP_ORACLE
    # include <oraxsd.hpp>
    #endif

    int main(int argc, char **argv)
    {
        XMLSchema   schema;
        XMLParser   parser;
        xmlctx      *ctx;
        char        *doc, *uri;
        uword       ecode;

        cout << "XML C++ Schema processor\n";

        if ((argc < 2) || (argc > 3))
        {
           cout << "usage: validate <xml document> [schema]\n";
           return -1;
        }
        doc = argv[1];
        uri = (argc > 2) ? argv[2] : 0;

        cout << "Initializing XML package...\n";

        if (ecode = parser.xmlinit())
        {
            cout << "Failed to initialize XML parser, error " << ecode;
            return 1;
        }

        cout << "Parsing '" << doc << "'...\n";
        if (ecode = parser.xmlparse((oratext *) doc, (oratext *) 0,
          XML_FLAG_DISCARD_WHITESPACE))
        {
            cout << "Parse failed, error " << ecode << "\n";
            return 2;
        }

        cout << "Initializing Schema package...\n";

        if (ecode = schema.initialize(&parser))
        {
            cout << "Failed, code " << ecode << "!\n";
            return 3;
        }

        cout << "Validating document...\n";
        if (ecode = schema.validate(&parser, (oratext *) uri))
        {
            cout << "Validation failed, error " << ecode << "\n";
            return 4;
        }

        cout << "Document is valid.\n";
        schema.terminate();
        return 0;
    }

### XML Schema for C++ Example 2: car.xsd

    <?xml version="1.0"?>
    <schema xmlns = "http://www.w3.org/1999/XMLSchema"
            targetNamespace = "http://www.CarDealers.com/">
        <element name="Car">
      <complexType>
        <element name="Model">
      <simpleType base="string">
        <enumeration value = "Ford"/>
        <enumeration value = "Saab"/>
        <enumeration value = "Audi"/>
      </simpleType>
        </element>
        <element name="Make">
      <simpleType base="string">
        <minLength value = "1"/>
        <maxLength value = "30"/>
     </simpleType>
        </element>
        <element name="Year">
     <complexType content="mixed">
        <attribute name="PreviouslyOwned" type="string"
           use="required"/>
        <attribute name="YearsOwned" type="integer"
           use="optional"/>
     </complexType>
        </element>
        <element name="OwnerName" type="string"
          minOccurs="0" maxOccurs="unbounded"/>
        <element name="Condition">
     <complexType base="string" derivedBy="extension">
        <attribute name="Automatic">
     <simpleType base="string">
        <enumeration value = "Yes"/>
        <enumeration value = "No"/>
     </simpleType>
        </attribute>
     </complexType>
        </element>
        <element name="Mileage">
     <simpleType base="integer">
        <minInclusive value="0"/>
        <maxInclusive value="2000000"/>
     </simpleType>
        </element>
        <attribute name="RequestDate" type="date"/>
     </complexType>
        </element>
     </schema>

### XML Schema for C++ Example 3: car.xml

    <?xml version="1.0"?>
    <car:Car xmlns:car="http://www.CarDealers.com/"
         xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
         xsi:schemaLocation="http://www.CarDealers.com/ car.xsd"
         RequestDate="2000-12-6">

        <Model>Ford</Model>
        <Make>Explorer</Make>
        <Year PreviouslyOwned="You betcha">1999</Year>
        <OwnerName>Joe Smith</OwnerName>
        <OwnerName>Bob Jones</OwnerName>
        <Condition Automatic="No">Small dent on right bumper.</Condition>
        <Mileage>1999999</Mileage>
    </car:Car>

### XML Schema for C++ Example 4: car.std

    XML C++ Schema processor
    Initializing XML package...
    Parsing 'car.xml'...
    Initializing Schema package...
    Validating document...
    Document is valid.

### XML Schema for C++ Example 5: aq.xsd

    <?xml version="1.0"?>
    <!-- ****************** AQ xml schema  ****************** -->
    <schema xmlns = "http://www.w3.org/1999/XMLSchema"
            targetNamespace = "http://www.oracle.com/AQXmlDocument"
            xmlns:aq = "http://www.oracle.com/AQXmlDocument"
            xmlns:xsd = "http://www.w3.org/1999/XMLSchema"
    	elementFormDefault="qualified">

       <element name="AQXmlDocument">
          <complexType content="mixed">
            <choice>
                  <group ref="aq:client_operation" minOccurs="0"/>
                  <group ref="aq:server_response"/>
            </choice>
          </complexType>
        </element>

       <!-- ****************** Client Operations Group  ****************** -->
       <group name="client_operation">
           <sequence>
              <element ref="aq:client_operation" minOccurs="0" maxOccurs="1"/>
      	    <choice>
                  <element ref="aq:producer_options" maxOccurs="1"/>
                  <element ref="aq:consumer_options" maxOccurs="1"/>
                  <element ref="aq:register_options" maxOccurs="1"/>
                </choice>
              <element ref="aq:message_set" minOccurs="0" maxOccurs="*"/>
           </sequence>
        </group>

       <!-- ****************** Server Response Group ****************** -->
       <group name="server_response">
           <sequence>
              <element ref="aq:server_response" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:receive_result" maxOccurs="1"/>
              <choice  minOccurs="0" >
                  <element ref="aq:send_result" maxOccurs="1"/>
                  <element ref="aq:publish_result" maxOccurs="1"/>
                  <element ref="aq:receive_result" maxOccurs="1"/>
                  <element ref="aq:sequence_num_result" maxOccurs="1"/>
              </choice>
           </sequence>
       </group>

       <!-- ****************** Server Propagation Group ****************** -->
       <group name="server_prop_operation">
           <sequence>
              <element ref="aq:server_prop_operation" minOccurs="0" maxOccurs="1"/>
              <choice>
                  <element ref="aq:push" maxOccurs="1"/>
                  <element ref="aq:notification" maxOccurs="1"/>
                  <element ref="aq:sequence_num_request" maxOccurs="1"/>
              </choice>
           </sequence>
       </group>

       <!-- ****************** Client Operation ****************** -->
       <element name="client_operation">
          <complexType content="mixed">
            <element ref="aq:txid" minOccurs="0"/>
    	<attribute name="opcode" use="required" type="aq:opcode_type"/>
          </complexType>
       </element>

       <!-- ****************** Server Response ****************** -->
       <element name="server_response">
          <complexType content="mixed">
            <element ref="aq:txid" minOccurs="0"/>
            <element ref="aq:status_response" minOccurs="1"/>
    	<attribute name="opcode" use="required" type="aq:opcode_type"/>
          </complexType>
       </element>

       <!-- ****************** Server Propagation Operation ****************** -->
       <element name="server_prop_operation">
          <complexType content="mixed">
            <element ref="aq:txid" minOccurs="0"/>
    	<attribute name="prop_opcode" use="required" type="aq:prop_opcode_type"/>
          </complexType>
       </element>

       <element name="txid" type="string"/>
    ....

       <!-- ****************** Message payload ****************** -->
       <element name="message_payload">
         <complexType>
            <choice>
              <element ref="aq:jms_text_message" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:jms_map_message" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:jms_bytes_message" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:jms_object_message" minOccurs="0" maxOccurs="1"/>
       	  <any minOccurs="0" maxOccurs="*" processContents="skip"/>
            </choice>
         </complexType>
       </element>

       <!-- ****************** User-defined properties ****************** -->
       <element name="user_properties">
          <complexType content="mixed">
            <element ref="aq:property" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

       <!-- ****************** Property  ****************** -->
       <element name="property">
          <complexType content="mixed">
            <element ref="aq:name" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:value" minOccurs="1" maxOccurs="1"/>
    	<attribute name="property_type" type="aq:prop_type"/>
           </complexType>
        </element>

       <!-- ****************** Status response ****************** -->
       <element name="status_response">
          <complexType content="mixed">
            <element ref="aq:acknowledge" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:status_code" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:error_code" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:error_message" minOccurs="0" maxOccurs="1"/>
          </complexType>
       </element>

       <!-- ****************** Send result ****************** -->
       <element name="send_result">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message_id" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

       <!-- ****************** Publish result ****************** -->
       <element name="publish_result">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message_id" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

       <!-- ****************** Receive result ****************** -->
       <element name="receive_result">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message_set" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

    .
    .
       <!-- ****************** JMS text message ****************** -->
       <element name="jms_text_message">
          <complexType content="mixed">
            <element ref="aq:oracle_jms_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:user_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:text_data" minOccurs="1" maxOccurs="1"/>
          </complexType>
       </element>

       <element name="text_data" type="string"/>

       <!-- ****************** JMS map message ****************** -->
       <element name="jms_map_message">
          <complexType content="mixed">
            <element ref="aq:oracle_jms_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:user_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:map_data" minOccurs="1" maxOccurs="1"/>
          </complexType>
       </element>

       <!-- ****************** Map data ****************** -->
       <element name="map_data">
          <complexType content="mixed">
            <element ref="aq:item" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

       <!-- ****************** Map Item  ****************** -->
       <element name="item">
          <complexType content="mixed">
            <element ref="aq:name" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:value" minOccurs="1" maxOccurs="1"/>
    	<attribute name="item_type" type="aq:prop_type"/>
           </complexType>
        </element>

       <!-- ****************** JMS bytes message ****************** -->
       <element name="jms_bytes_message">
          <complexType content="mixed">
            <element ref="aq:oracle_jms_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:user_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:bytes_data" minOccurs="1" maxOccurs="1"/>
          </complexType>
       </element>

       <element name="bytes_data" type="string"/>

       <!-- ****************** JMS object message ****************** -->
       <element name="jms_object_message">
          <complexType content="mixed">
            <element ref="aq:oracle_jms_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:user_properties" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:ser_object_data" minOccurs="1" maxOccurs="1"/>
          </complexType>
       </element>
       <element name="ser_object_data" type="string"/>

    </schema>

### XML Schema for C++ Example 6: aq.xml

    <AQXmlDocument xmlns="http://www.oracle.com/AQXmlDocument"
    	       xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
    	       xsi:schemaLocation="http://www.oracle.com/AQXmlDocument aq.xsd">
        <client_operation opcode="SEND">
            <txid> sdasdfdsf </txid>
        </client_operation>

        <producer_options delivery_mode="PERSISTENT">
            <destination lookup_type="NORMAL"> queue1 </destination>
            <priority>23</priority>
            <recipient_list>
                <recipient> abc </recipient>
                <recipient lookup_type="LDAP"> abc </recipient>
            </recipient_list>
        </producer_options>

        <message_set>
            <message_count>1</message_count>
            <message>
                <message_number>1</message_number>
                <message_header>
                    <correlation>XML_40_NEW_TEST</correlation>
                    <delay>10</delay>
                    <sender_id>scott::home::0</sender_id>
                </message_header>
                <message_payload>
                    <jms_map_message>
                        <oracle_jms_properties>
                            <reply_to>oracle::redwoodshores::100</reply_to>
                            <userid>scott</userid>
                            <appid>AQProduct</appid>
                            <groupid>AQ</groupid>
                        </oracle_jms_properties>
                        <user_properties>
                            <property property_type="STRING">
                                <name>country</name>
                                <value>USA</value>
                            </property>
                            <property property_type="STRING">
                                <name>State</name>
                                <value>california</value>
                            </property>
                        </user_properties>
                        <map_data>
                            <item item_type="STRING">
                                <name>Car</name>
                                <value>Toyota</value>
                            </item>
                            <item item_type="STRING">
                                <name>Color</name>
                                <value>Blue</value>
                            </item>
                            <item item_type="STRING">
                                <name>Shape</name>
                                <value>Circle</value>
                            </item>
                            <item item_type="NUMBER">
                                <name>Price</name>
                                <value>20000</value>
                            </item>
                        </map_data>
                    </jms_map_message>
                </message_payload>
            </message>
        </message_set>
    </AQXmlDocument>

### XML Schema for C++ Example 7: aq.std

    XML C++ Schema processor
    Initializing XML package...
    Parsing 'aq.xml'...
    Initializing Schema package...
    Validating document...
    Document is valid.

### XML Schema for C++ Example 8: pub.xsd

    <?xml version="1.0"?>
    <schema xmlns = "http://www.w3.org/2000/08/XMLSchema"
            targetNamespace = "http://www.somewhere.org/BookCatalogue"
            xmlns:cat = "http://www.somewhere.org/BookCatalogue"
            elementFormDefault="qualified">
        <complexType name="Pub">
          <sequence>
            <element name="Title" type="cat:titleType" maxOccurs="*"/>
            <element name="Author" type="string" maxOccurs="*"/>
            <element name="Date" type="date"/>
          </sequence>
          <attribute name="language" type="string" use="default" value="English"/>
          <anyAttribute namespace="##local"/>
        </complexType>
        <element name="Publication" type="cat:Pub"  abstract="true"/>
        <element name="Book" substitutionGroup="cat:Publication">
            <complexType>
               <complexContent>
                   <extension base="cat:Pub" >
                      <sequence>
                         <element name="ISBN" type="string" default="123456789"/>
                         <element name="Publisher" type="string"/>
                      </sequence>
                   </extension>
               </complexContent>
           </complexType>
        </element>
        <complexType name="titleType">
           <simpleContent>
              <extension base="string" >
                 <attribute name="old" type="string" use="default" value="false"/>
              </extension>
           </simpleContent>
        </complexType>
        <element name="Magazine" substitutionGroup="cat:Publication">
            <complexType>
               <complexContent>
                  <extension base="cat:Pub">
                      <sequence>
                         <element name="Volume" type="cat:VolumeType"/>
                         <element name="htmlTable">
                            <complexType>
                               <any namespace="##other"
                                   processContents="skip"
                                   minOccurs="0" maxOccurs="2"/>
                            </complexType>
                          </element>
                      </sequence>
                  </extension>
               </complexContent>
            </complexType>
        </element>
        <simpleType name="VolumeType">
           <restriction base="integer" >
              <minInclusive value = "1"/>
              <maxInclusive value = "12"/>
           </restriction>
        </simpleType>
        <element name="Catalogue">
            <complexType>
               <sequence>
                 <element ref="cat:Publication" minOccurs="0" maxOccurs="*"/>
               </sequence>
            </complexType>
        </element>
    </schema>

### XML Schema for C++ Example 9: pub.xml

    <?xml version="1.0"?>
    <Catalogue xmlns = "http://www.somewhere.org/BookCatalogue"
    	   xmlns:cat = "http://www.somewhere.org/BookCatalogue"
    	   xmlns:html = "http://www.somewhere.org/HTMLCatalogue"
    	   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
    	   xsi:schemaLocation =
                 "http://www.somewhere.org/BookCatalogue pub.xsd">
            <cat:Magazine>
                    <Title>Natural Health</Title>
                    <Author>October</Author>
                    <Date>1999-12</Date>
                    <Volume>12</Volume>
                    <htmlTable>
                       <table  xmlns = "http://www.somewhere.org/HTMLCatalogue">
                          <tr>....</tr>
                       </table>
                       <html:table>
                          <html:tr>....</html:tr>
                       </html:table>
                    </htmlTable>
            </cat:Magazine>
            <Book>
                    <Title>Illusions The Adventures of a Reluctant Messiah</Title>
                    <Author>Richard Bach</Author>
                    <Date>1977</Date>
                    <ISBN></ISBN>
                    <Publisher>Dell Publishing Co.</Publisher>
            </Book>
            <Book>
                    <Title>The First and Last Freedom</Title>
                    <Author>J. Krishnamurti</Author>
                    <Date>1954</Date>
                    <ISBN>0-06-064831-7</ISBN>
                    <Publisher>Harper &amp; Row</Publisher>
            </Book>
    </Catalogue>

### XML Schema for C++ Example 10: pub.std

    XML C++ Schema processor
    Initializing XML package...
    Parsing 'pub.xml'...
    Initializing Schema package...
    Validating document...
    Document is valid.

| Copyright © 2001, 2003 Oracle Corporation. All Rights Reserved. |
Home | Contents | Index