Skip Headers

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

# 25
Using XML Schema Processor for C

This chapter contains the following sections:

- Oracle XML Schema Processor for C

- Invoking XML Schema Processor for C

- XML Schema Processor for C Usage Diagram

- How to Run XML Schema for C Sample Programs

## Oracle XML Schema Processor for C

The XML Schema Processor for C is a companion component to the XML Parser for C. It allows support for simple and complex datatypes in Oracle XML applications.

XML Schema Processor for C supports the W3C 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 21, "Using XML Schema Processor for Java", for more information about XML Schema and why you would want to use XML Schema.

### Oracle XML Schema for C Features

XML Schema Processor for C has the following features:

- Supports simple and complex types

- Built on XML Parser for C v2

- Supports the W3C XML Schema Working Drafts

  See Also: Oracle9i XML Reference Appendix E, "XDK for C: Specifications and Cheat Sheets"

### 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

Oracle XML Parser for C 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 to point 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: Software

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

##### Table 25-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 25-2 lists the included libraries:

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

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

## Invoking XML Schema Processor for C

XML Schema Processor for C 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

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 25-1 describes the calling sequence for the XML Schema Processor for C, as follows:

The sequence of calls to the processor is: initialize, validate, validate,..., validate, terminate.

1. The initialize call is invoked once at the beginning of a session; it returns a Schema context which is used throughout the session.

2. The instance document to be validated is first parsed with the XML parser.

3. The XML context for the instance is then passed to the Schema validate function, along with an optional schema URL.

4. If no explicit schema is defined in the instance document, the default schema will be used.

5. More documents may then be validated using the same schema context.

6. When the session is over, the Schema tear down function is called, which releases all memory allocated by the loaded schemas.

#### Figure 25-1 XMLSchema Processor for C Usage Diagram

Text description of the illustration adxml092.gif

## How to Run XML Schema for C Sample Programs

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

##### Table 25-3 XML Schema for C Samples Provided

Sample File | Description
--- | ---
Makefile | Makefile to build the sample programs and run them, verifying correct output.
xsdtest.c | Trivial program which invokes the XML Schema for C API
car.{xsd,xml,std} | Sample schema, instance document, and 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, instance document, and 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, instance document, and 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'.

#### Make.bat

    :: ##########################################################################
    :: # Batch script to build Oracle XML parser C sample programs
    :: ##########################################################################
    set opt_flg=-Ox -Oy-
    if (%2) == (D) set opt_flg=-Z7 -Od
    if (%2) == (D) set link_dbg=/debug /debugtype:both /pdb:none

    if (%1) == () goto :XSDTEST
    if (%1) == (all) goto :XSDTEST
    if (%1) == (xsdtest) goto :XSDTEST
    if (%1) == (clean) goto :CLEAN
    if (%1) == (sure) goto :SURE
    goto :EOF

    :CLEAN
    del *.obj
    del *.out
    del ..\bin\xsdtest.exe
    goto :EOF

    :XSDTEST
    call :compile xsdtest
    call :link xsdtest
    if (%1) == (xsdtest) goto :EOF

    :SURE
    ..\bin\xsdtest.exe car.xml > car.out
    comp car.std car.out < NUL:
    ..\bin\xsdtest.exe pub.xml > pub.out
    comp pub.std pub.out < NUL:
    ..\bin\xsdtest.exe aq.xml > aq.out
    comp aq.std aq.out < NUL:
    goto :EOF

    :COMPILE
    set filename=%1
    cl -c -Fo%filename%.obj %opt_flg%  /DCRTAPI1=_cdecl /DCRTAPI2=_cdecl /nologo /Zl
    /Gy /DWIN32 /D_WIN32 /DWIN_NT /DWIN32COMMON /D_DLL /D_MT /D_X86_=1 -I.
    -I..\include  %filename%.c
    goto :EOF

    :LINK
    set filename=%1
    link %link_dbg% /out:..\bin\%filename%.exe /libpath:%ORACLE_HOME%\lib
    /libpath:..\lib  %filename%.obj oraxml8.lib oraxsd8.lib oracore8.lib oranls8.lib
    user32.lib kernel32.lib msvcrt.lib ADVAPI32.lib oldnames.lib winmm.lib

    :EOF

### XML Schema for C Example 1: xsdtest.c

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

    /*
       NAME
         validate.c - Sample Schema validation

       DESCRIPTION
         Sample usage of C XML Schema processor
    */

    #include <stdio.h>

    #ifndef ORATYPES
    # include <oratypes.h>
    #endif
    #ifndef ORAXML_ORACLE
    # include <oraxml.h>
    #endif

    #ifndef ORAXSD_ORACLE
    # include <oraxsd.h>
    #endif

    int main(int argc, char **argv)
    {
        xmlctx     *ctx;
        xsdctx     *scctx;
        char       *doc, *schema;
        uword       ecode;

        puts("XML C Schema processor");

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

        puts("Initializing XML package...");

        if (!(ctx = xmlinit(&ecode, (const oratext *) 0,
                            (void (*)(void *, const oratext *, uword)) 0,
                            (void *) 0, (const xmlsaxcb *) 0, (void *) 0,
                            (const xmlmemcb *) 0, (void *) 0,
                            (const oratext *) 0)))
        {
            printf("Failed to initialze XML parser, error %u\n", (unsigned) ecode);
            return 1;
        }

        printf("Parsing '%s' ...\n", doc);
        if (ecode = xmlparse(ctx, (oratext *) doc, (oratext *) 0,
    			 XML_FLAG_DISCARD_WHITESPACE))
        {
            printf("Parse failed, error %u\n", (unsigned) ecode);
            return 2;
        }

        puts("Initializing Schema package...");

        if (!(scctx = schemaInitialize(ctx, &ecode)))
        {
    	printf("Failed, code %u!\n", ecode);
    	return 3;
        }

        puts("Validating document...");
        if (ecode = schemaValidate(scctx, ctx, (oratext *) schema))
        {
            printf("Validation failed, error %u\n", (unsigned) ecode);
            return 4;
        }

        puts("Document is valid.");
        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"?>
    <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 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"/>

       <element name="destination">
         <complexType base='string' derivedBy="extension">
         <attribute name="lookup_type" type="aq:dest_lookup_type"
            	use="default" value="NORMAL"/>
         </complexType>
       </element>

       <!-- **** destination lookup type ******* -->
       <!-- lookup_type can be specified to either lookup LDAP or use  -->
       <!-- the destination directly in NAME::ADDRESS::PROTOCOL format -->
       <simpleType name="dest_lookup_type" base="string">
          <enumeration value="NORMAL"/>
          <enumeration value="LDAP"/>
        </simpleType>

       <!-- ****************** Producer Options ****************** -->
       <element name="producer_options">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:priority" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:expiration" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:recipient_list" minOccurs="0" maxOccurs="1"/>
    	<attribute name="visibility" type="aq:visibility_type"
    	           use="default" value="ON_COMMIT"/>
    	<attribute name="delivery_mode" type="aq:del_mode_type"
    	           use="default" value="PERSISTENT"/>
          </complexType>
        </element>

       <!-- ****************** Consumer Options ****************** -->
       <element name="consumer_options">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:consumer_name" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:wait_time" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:selector" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:batch_size" minOccurs="0" maxOccurs="1"/>

    	<attribute name="visibility" type="aq:visibility_type"
    	           use="default" value="ON_COMMIT"/>
    	<attribute name="dequeue_mode" type="aq:deq_mode_type"
    	           use="default" value="REMOVE"/>
    	<attribute name="navigation" type="aq:nav_mode_type"
    	           use="default" value="NEXT_MESSAGE"/>
           </complexType>
        </element>

       <!-- ****************** Register Options ****************** -->
       <element name="register_options">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:consumer_name" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:notify_url" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:qos" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:batch_size" minOccurs="0" maxOccurs="1"/>
          </complexType>
        </element>

       <element name="recipient_list">
         <complexType content="mixed">
    	<element ref="aq:recipient" minOccurs="1" maxOccurs="*"/>
         </complexType>
       </element>

       <!-- ****************** Message Set ************************* -->
       <element name="message_set">
          <complexType content="mixed">
            <element ref="aq:message_count" minOccurs="1"/>
            <element ref="aq:message" minOccurs="0" maxOccurs="*"/>
          </complexType>
       </element>

       <!-- ****************** Message ************************* -->
       <element name="message">
          <complexType content="mixed">
            <element ref="aq:message_number" minOccurs="0"/>
            <element ref="aq:message_header" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message_payload" minOccurs="0" maxOccurs="1"/>
          </complexType>
       </element>

       <!-- ****************** Message header ****************** -->
       <element name="message_header">
          <complexType content="mixed">
            <element ref="aq:message_id" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:correlation" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:delay" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:priority" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:delivery_count" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:message_state" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:sender_id" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:exception_queue" minOccurs="0" maxOccurs="1"/>
          </complexType>
        </element>

       <!-- ****************** Oracle JMS properties ****************** -->
       <element name="oracle_jms_properties">
          <complexType content="mixed">
            <element ref="aq:type" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:reply_to" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:userid" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:appid" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:groupid" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:group_sequence" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:timestamp" minOccurs="0" maxOccurs="1"/>
            <element ref="aq:recv_timestamp" minOccurs="0" maxOccurs="1"/>
          </complexType>
        </element>

       <!-- ****************** 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>

    ...
       <!-- ****************** 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>

    ....
       <!-- ****************** Push messages *************************** -->
       <element name="push">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:consumer_name" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:sequence_number" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message_set" minOccurs="1" maxOccurs="1"/>
          </complexType>
       </element>

       <!-- ****************** Notification *************************** -->
       <element name="notification">
          <complexType content="mixed">
            <element ref="aq:destination" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:consumer_name" minOccurs="1" maxOccurs="1"/>
            <element ref="aq:message" minOccurs="0" maxOccurs="1"/>
          </complexType>
       </element>

       <element name="priority" type="integer"/>
       <element name="expiration" type="integer"/>
       <element name="consumer_name" type="string"/>
       <element name="wait_time" type="integer"/>
       <element name="batch_size" type="integer"/>
       <element name="qos" type="string"/>
       <element name="notify_url" type="string"/>
       <element name="message_id" type="string"/>
       <element name="message_state" type="string"/>

       <element name="sequence_number" type="integer"/>
       <element name="message_number" type="integer"/>
       <element name="message_count" type="integer"/>

       <element name="correlation" type="string"/>
       <element name="delay" type="integer"/>
       <element name="delivery_count" type="integer"/>
       <element name="exception_queue" type="string"/>

       <element name="type" type="string"/>
       <element name="userid" type="string"/>
       <element name="appid" type="string"/>
       <element name="groupid" type="string"/>
       <element name="group_sequence" type="integer"/>
       <element name="timestamp" type="date"/>
       <element name="recv_timestamp" type="date"/>

       <element name="recipient">
         <complexType base='string' derivedBy="extension">
         <attribute name="lookup_type" type="aq:dest_lookup_type"
    	           use="default" value="NORMAL"/>
         </complexType>
       </element>

       <element name="sender_id">
         <complexType base='string' derivedBy="extension">
         <attribute name="lookup_type" type="aq:dest_lookup_type"
    	           use="default" value="NORMAL"/>
         </complexType>
       </element>

       <element name="reply_to">
         <complexType base='string' derivedBy="extension">
         <attribute name="lookup_type" type="aq:dest_lookup_type"
    	           use="default" value="NORMAL"/>
         </complexType>
       </element>

       <element name="selector">
         <complexType>
    	<choice>
              <element ref="aq:correlation_id" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:message_id" minOccurs="0" maxOccurs="1"/>
              <element ref="aq:complex_selector" minOccurs="0" maxOccurs="1"/>
            </choice>
         </complexType>
       </element>

       <element name="correlation_id" type="string"/>
       <element name="complex_selector" type="string"/>

        <simpleType name="visibility_type" base="string">
          <enumeration value="ON_COMMIT"/>
          <enumeration value="IMMEDIATE"/>
        </simpleType>

       <simpleType name="del_mode_type" base="string">
          <enumeration value="PERSISTENT"/>
          <enumeration value="NONPERSISTENT"/>
        </simpleType>

       <simpleType name="deq_mode_type" base="string">
          <enumeration value="BROWSE"/>
          <enumeration value="LOCKED"/>
          <enumeration value="REMOVE"/>
          <enumeration value="REMOVE_NO_DATA"/>
        </simpleType>

       <simpleType name="nav_mode_type" base="string">
          <enumeration value="FIRST_MESSAGE"/>
          <enumeration value="NEXT_MESSAGE"/>
          <enumeration value="NEXT_TRANSACTION"/>
        </simpleType>

       <simpleType name="opcode_type" base="string">
          <enumeration value="SEND"/>
          <enumeration value="RECEIVE"/>
          <enumeration value="PUBLISH"/>
          <enumeration value="REGISTER"/>
          <enumeration value="COMMIT"/>
          <enumeration value="ROLLBACK"/>
          <enumeration value="SEQ_NUM_REQUEST"/>
       </simpleType>

       <simpleType name="prop_opcode_type" base="string">
          <enumeration value="SEND"/>
          <enumeration value="NOTIFICATION"/>
          <enumeration value="COMMIT"/>
          <enumeration value="ROLLBACK"/>
          <enumeration value="SEQ_NUM_REQUEST"/>
       </simpleType>

       <element name="acknowledge">
         <complexType content="empty">
         </complexType>
       </element>
       <element name="status_code" type="string"/>
       <element name="error_code" type="string"/>
       <element name="error_message" type="string"/>

        <simpleType name="prop_type" base="string">
          <enumeration value="STRING"/>
          <enumeration value="NUMBER"/>
        </simpleType>

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

       <!-- ****************** 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 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"?>
    <?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