Using VFP Report Output XML

As delivered by the default ReportOutput Application, Visual FoxPro's base Report XML is transformed by the ReportListener HTML Foundation Class, to provide an HTML facsimile of the original printed report output.

The underlying XML created by the ReportListener XML Foundation Class includes the full data results of the report run, plus additional information from the report table (.frx) required to describe the layout of the report and environmental conditions in place when you ran the report.

The VFP Report XML schema specifies the format of this XML. Because the schema expresses the full details of a report run, your applications can leverage the XML to provide many different results.

This topic discusses the VFP Report XML schema, and provides the full schema document (.xsd).

Note

As you explore the details of this schema, you will notice many optional elements. The inclusion or exclusion of these elements tunes the schema to different uses. For example, the ReportListener HTML Foundation Class requires formatting information to determine the placement of layout elements on an output page, but a report run generating a searchable cache of XML content does not require formatting information. If you use the Report Listener XML Foundation Class to provide a VFP Report XML document, you use various properties of the class to set these options. For more information see ReportListener XML Foundation Class.

VFP Report XML Schema Description

VFP Report XML document design can be broadly described as follows:

A document contains one or multiple representations of VFP Report runs.

Each VFP Report node contains one or both of two possible child nodes:

  • A Layout or report definition (RDL) node, containing the report formatting instructions stored in the report table (.frx) by report design tools, and/or

  • A Data node, with the elements that were generated as the Report Engine moved through the data scope for the report at run time.

When you use ReportListener XML Foundation Class to generate your XML, the class determines which type of information is contained in the VFP Report node using its XMLMode property, as specified in the following table.

XML ReportListener XMLMode value Constant representing XML result Use case

0

OUTPUTXML_DATA_ONLY

The generated data will be used in a presentation not based on the original report layout, such as a Web page using independent design criteria, or for a data-centric (unformatted) translation, such as a generated cache of accounting calculations.

1

OUTPUTXML_RDL_ONLY

The generated report definition will eventually reside on a reporting server. The data will come from a query on the server at run time. The XML RDL serves to define that query as well as the desired output expressions and layout of the result. The original run-time report data, in this scenario, provides a sample set against which the VFP-designed report layout is run to generate the XMl, but it is not used by the server.

2

OUTPUTXML_DATA_RDL

The generated data will be matched against report layout instructions using an external mechanism, such as XSLT, to provide additional output forms.

If the VFP Report node includes the data processed at run time along with its RDL node, you can choose whether you wish to include formatting band data, and, if so, whether you want this data to be integrated with the standard data bands or included as separate collections.

Note

The schema defines Page and Column header and footer bands as formatting bands because they occur at arbitrary, data-independent points during run-time processing. The output of these bands, as well as the exact points at which they occur, change depending on page layout and the page size for the current printer. For some reports and some XML scenarios, the information in these bands is not relevant.

The following diagram provides a high-level view of VFP Report XML and its major components.

Visual FoxPro Reporting XML Overview graphic

VFP-RDL Node

The report definition component of VFP Report XML provides full details of the layout information contained in the report table plus environment conditions during the report run, as detailed in the table below.

Visual FoxPro Reporting XML VFP-RDL graphic

VFP-RDL Element Contents

VFPFRXLayoutObject

A join between report table (.frx) columns, FRXCursor-calculated columns, and some specialized calculated columns for different types of report table records. For more information about the report details provided by FRXCursor, see FRX Cursor Foundation Class.

VFPFRXLayoutNode

A set of elements indicating what element node names are used for different report object types in the data portion of the document, since this is configurable by the user.

VFPDataSource

A description of all open tables in the data session providing data for the report, including their indexes, relationships, filters, and columns. This section is optional.

VFPFRXCommand

A list of the REPORT FORM execution clauses and existing environment conditions, derived from the Listener’s CommandClauses member and other environmental settings. For more information, see CommandClauses Property.

VFPFRXPrintJob

A set of attributes providing printer setup and page layout information used for this report run, such as the page height.

Data Node

The Data node provides a sequence of bands containing the generated results of output processing that were rendered during the report run. As indicated above, reports contain two basic types of bands:

  • Data- and scope- dependent bands. Group and detail bands appear in an order and in numbers wholly dependent on the data scope chosen by the user for this report. Title and Summary bands, if used, appear exactly once at the beginning and end of the chosen scope.

  • Format dependent bands. Page and Column headers and footers are triggered by the Report Engine according to the requirements of the original report’s page dimensions and their interactions with the length of other data in the report.

The contents of data and scope dependent bands will always be contained in the Data node. Instances of these bands will appear in the same order that they do in the actual report output.

Depending on your specifications for formatting bands, this sequence can include formatting bands, omit formatting bands entirely, or include separate collections of formatting bands, as shown in the following diagram.

Visual FoxPro Reporting XML Data Node graphic

Note

You can associate formatting bands with their data- and scope- dependent bands using an id:idref relationship, familiar to Visual FoxPro users as primary and foreign keys. Data- and scope- dependent bands have an idref attribute specifying their original page number, and formatting bands have an id attribute specifying their original page number.

Band Contents

All types of bands represent their rendered content the same way: there is a child element for each rendered layout element in each band instance. Although the following diagram drills down into a detail band, the same element contents could be expanded for the header and footer bands.

Visual FoxPro Reporting XML Detail graphic

Layout element nodes include optional attributes to describe their formatting, such as top and left position on the page.

Note

The schema asserts that attribute processing is lax for layout elements and several other types, to allow custom extensions to the schema to remain valid without explicit declaration. For example, you could add attributes representing dynamic color adjustment on layout elements at run time, and these attributes would not invalid your XML output according to the VFP Report XML schema.

Associating Data and VFP-RDL Elements

All data- and scope- dependent bands as well as layout elements can be cross-referenced with their report-table-based layout descriptions using their id attribute, which contains the RECNO() value from their original record in the report table. For example, the following XML fragment provides a run-time instance of a page footer band containing two Field or Expression elements and one Text or Label element.

   <PF id="1" idref="4">
    <E id="7" c="0" l="0" t="9920" w="650" h="170">8/13/2004</E>
    <T id="8" c="0" l="6980" t="9910" w="400" h="160">Page </T>
    <E id="9" c="0" l="7380" t="9920" w="490" h="170">    1</E>
   </PF>

Below is the VFPLayoutObject node that describes the layout and design of the first Expression element in this page footer band. The frxrecno child element in the VFPLayoutObject below matches the id attribute in the E (expression) node above.

    <VFPFRXLayoutObject>
     <frxrecno>7</frxrecno>
     <platform>WINDOWS</platform>
     <name/>
     <expr>DATE()</expr>
     <offset>0</offset>
     <vpos>7708.333</vpos>
     <hpos>0.000</hpos>
     <height>1875.000</height>
     <objtype>8</objtype>
     <!-- … -->
     <start_band_id>_1AI121WEG</start_band_id>
     <band_offset>2</band_offset>
     <end_band_id>_1AI121WEG</end_band_id>
     <bandstretch>false</bandstretch>
    </VFPFRXLayoutObject>

Tip

Layout elements continued to subsequent pages concatenate a "+" sign to their record-number-based id attribute values. This convention signifies that the node is not a new instance of the layout element. It allows your XML-parsing to consider this information, to concatenate text that was rendered on separate pages in the original printed output.

Formatting bands have a similar relationship with their VFPLayoutObject records, but they use their idref attribute to match the frxrecno value in the appropriate VFPLayoutObject record. As explained in the last section, these bands use their id attribute to represent the original page number on which they appeared. In the XML fragment above, the page footer has an id value of 1, indicating that it occurred on the first page, and you can see that the data elements in this page footer indeed indicate that the footer occurred on page 1 of the report. The page footer has an idref of 4, which indicates that its associated VFPFRXLayoutObject element has an frxrecno value of 4.

Bands' and objects' node names can be configured in the ReportListener XML Foundation Class, to use non-default node names. The VFP-RDL uses VFPFRXLayoutNode elements to associate node names with report table object types dynamically in the XML output result. In the following fragment, the node name E is associated with the object type 8, indicating that report expressions use this element name in the Data portion of the document.

    <VFPFRXLayoutNode>
     <name>E</name>
     <type>8</type>
     <code>0</code>
     <info>Expression object nodename</info>
    </VFPFRXLayoutNode>

Tip

  ReportListener XML Foundation Class includes VFPFRXLayoutNode elements for formatting attributes, so you can dynamically assign these attribute names as well. If your derived class adds more formatting attributes into your version of VFP Report Output XML, add these attributes as properties of your class with the string "attr" as part of the property name. ReportListener XML Foundation Class includes any properties following this naming convention and their values in the list of VFPFRXLayoutNodes and assigns a distinguishing object type.

VFP Report XML Schema Document

The following is the full VFP Report XML schema (.xsd). The XSD document includes annotation elements describing significant aspects of this schema and its use, and directs you to various ReportListener XML Foundation Class properties to specify its optional components.

Note

The VFP Report XML schema uses brief XML node names to describe various reporting elements, such as <PH> for "Page Header." ReportListener XML Foundation Class provides a mechanism to change the default node names, if you prefer longer names for legibility or want to change to other node names that are more consistent with a description of each element in your language. Although the VFP Report XML uses the default node names, the schema also provides a mechanism to describe the names in use for each report table record type and other aspects of a report run.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Reports">
    <xs:annotation>
      <xs:documentation>
This schema describes the Visual FoxPro 9.0  XMLListener base delivery 
format.  As noted in various places, actual element and attribute 
NCNames are user-configurable at runtime, and the schema uses default 
names.
As also noted, many elements of the schema are minOccurs=0.  In some 
cases these elements do not appear at all depending on the 
configuration of the report run or the XMLListener-specific properties 
for that report run. Examples: a SUMMARY report does not have detail 
bands, and if XMLListener.IncludeFormattingInLayoutObjects is .F. no 
formatting attributes appear.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VFP-Report" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFP-Report">
    <xs:annotation>
      <xs:documentation>
Contents of VFP-Report element are determined by XMLListener.XMLMode 
property.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VFP-RDL" minOccurs="0"/>
        <xs:element ref="Data" minOccurs="0"/>
            <xs:element ref="Run" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
   <xs:element name="Run">
      <xs:annotation>
         <xs:documentation>
            Allows runtime data-dependent document attributes, such as
            contents of report variables or other accumulated data
            elements that do not occur in the layout itself, to be 
            added at the conclusion of a report run.
            Content type is set at xs:any deliberately to allow 
            extensions such as cursor-shaped XML for rows.
         </xs:documentation>
      </xs:annotation>
      <xs:complexType mixed="true">
         <xs:sequence maxOccurs="unbounded">
            <xs:element name="property" type="VFP-Property"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:complexType name="VFP-Property" mixed="true">
      <xs:sequence>
         <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required"/>
      <xs:anyAttribute processContents="lax"/>
   </xs:complexType>
  <xs:element name="Data">
    <xs:annotation>
      <xs:documentation>
Contents and structure of Data element are determined by 
XMLListener.includeBreaksInData property.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:group ref="IntegratedFormattingBands"/>
        <xs:group ref="SeparateFormattingBands"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="SeparateFormattingBands">
    <xs:sequence>
      <xs:element name="Title" type="Band" minOccurs="0"/>
      <xs:group ref="GroupedBands" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="Summary" type="Band" minOccurs="0"/>
      <xs:element name="Pages">
        <xs:complexType>
          <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="PH" type="FormattingBand" minOccurs="0"/>
            <xs:element name="PF" type="FormattingBand" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Columns">
        <xs:complexType>
          <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="CH" type="FormattingBand" minOccurs="0"/>
            <xs:element name="CF" type="FormattingBand" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="GroupedBands">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="GH" type="Band" minOccurs="0" maxOccurs="unbounded"/>
      <xs:group ref="DetailBandSet" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="GF" type="Band" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="DetailBandSet">
    <xs:sequence>
      <xs:element name="DH" type="Band" minOccurs="0"/>
      <xs:element name="D" type="Band" minOccurs="0"/>
      <xs:element name="DF" type="Band" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="IntegratedFormattingBands">
    <xs:sequence>
      <xs:element name="Title" type="Band" minOccurs="0"/>
      <xs:group ref="FormattedPageBandSeries" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="Summary" type="Band" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="FormattedPageBandSeries">
    <xs:sequence>
      <xs:element name="PH" type="FormattingBand" minOccurs="0"/>
      <xs:element name="CH" type="FormattingBand" minOccurs="0" maxOccurs="unbounded"/>
      <xs:group ref="GroupedBands" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="CF" type="FormattingBand" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="PF" type="FormattingBand" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="Band">
    <xs:annotation>
      <xs:documentation>
All bands are inherently minOccurs="0" unless 
XMLListener.includeBandsWithNoObjects is .T.
Band id and idref attributes are configurable via associated 
XMLListener properties.  Throughout schema, default attribute 
names are shown.  
      </xs:documentation>
      <xs:documentation>
All band nodenames are configurable, with defaults shown in the schema; 
see annotation for VFPFRXLayoutNode name attribute.
      </xs:documentation>
    </xs:annotation>
    <xs:group ref="LayoutObjects"/>
    <xs:attribute name="id" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation>
Indicates FRXRecno for associated FRX metadata in VFP-RDL, with 
concatenated "+" if this band has been continued.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="idref" type="xs:positiveInteger" use="required">
      <xs:annotation>
        <xs:documentation>
Indicates the associated page number, for non-formatting bands.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <!-- restriction by pattern here? -->
  </xs:complexType>
  <xs:group name="LayoutObjects">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="T" type="LayoutObjectNoContinuation"/>
      <xs:element name="P" type="LayoutObjectNoContinuation"/>
      <xs:element name="S" type="LayoutObject"/>
      <xs:element name="E" type="LayoutObject"/>
      <xs:element name="L" type="LayoutObject"/>
    </xs:choice>
  </xs:group>
  <xs:complexType name="FormattingBand">
    <xs:group ref="LayoutObjects"/>
    <xs:attribute name="idref" type="xs:positiveInteger" use="required">
      <xs:annotation>
        <xs:documentation>
Indicates the FRXRecno for associated metadata, for formatting bands.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="id" type="xs:positiveInteger" use="required">
      <xs:annotation>
        <xs:documentation>
Indicates the associated page number, for formatting bands.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="LayoutObject">
    <xs:annotation>
      <xs:documentation>
All layout objects' nodenames are configurable, with defaults shown in 
the schema; see annotation for VFPFRXLayoutNode name attribute. 
Availability of layout objects' formatting attributes is determined by 
XMLListener.IncludeFormattingInLayoutObjects property.  All attribute 
names, both formatting and non-formatting, are also configurable via  
XMLListener associated properties.
      </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="id" type="xs:string" use="required">
          <xs:annotation>
            <xs:documentation>
Indicates FRXRecno for associated FRX metadata in VFP-RDL, with 
concatenated "+" if this object has been continued from a previous 
page.
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="c" type="xs:byte" default="0"/>
        <xs:attribute name="l" type="xs:integer"/>
        <xs:attribute name="t" type="xs:integer"/>
        <xs:attribute name="w" type="xs:positiveInteger"/>
        <xs:attribute name="h" type="xs:positiveInteger"/>
        <xs:attribute name="img" type="xs:string">
          <xs:annotation>
            <xs:documentation>
Supplies generated filename if this XML is generated by HTMLListener 
subclass and the image comes from a non-filebased image type (general 
field or image control).
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:anyAttribute processContents="lax"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="LayoutObjectNoContinuation">
    <xs:simpleContent>
      <xs:restriction base="LayoutObject">
        <xs:attribute name="c" fixed="0"/>
      </xs:restriction>
    </xs:simpleContent>
  </xs:complexType>
  <xs:element name="VFP-RDL">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VFPDataSet"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPDataSet">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VFPFRXLayoutObject" maxOccurs="unbounded"/>
        <xs:element ref="VFPFRXLayoutNode" maxOccurs="unbounded"/>
        <xs:element ref="VFPDataSource" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="VFPFRXCommand"/>
        <xs:element ref="VFPFRXPrintJob"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPDataSource">
    <xs:annotation>
      <xs:documentation>
The set of VFPDataSource elements represents a snapshot of the  FRX's 
CurrentDataSession, similar to a FoxPro View file in XML 
format.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="the_alias"/>
        <xs:element name="rpt_driver"/>
        <xs:element name="the_dbf"/>
        <xs:element name="the_order"/>
        <xs:element name="order_desc"/>
        <xs:element name="the_filter"/>
        <xs:element name="the_skip"/>
        <xs:element ref="flds" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPFRXCommand">
    <xs:annotation>
      <xs:documentation>
Base attributes are determined by the member properties of the 
XMLListener.CommandClauses object.  Additional user-defined attributes 
are permitted. 
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:attribute name="ASCII" type="xs:boolean" use="required"/>
      <xs:attribute name="DE_NAME" type="xs:string" use="required"/>
      <xs:attribute name="ENVIRONMENT" type="xs:boolean" use="required"/>
      <xs:attribute name="FILE" type="xs:string" use="required"/>
      <xs:attribute name="HEADING" type="xs:string" use="required"/>
      <xs:attribute name="INSCREEN" type="xs:boolean" use="required"/>
      <xs:attribute name="INWINDOW" type="xs:string" use="required"/>
      <xs:attribute name="ISDESIGNERLOADED" type="xs:boolean" use="required"/>
      <xs:attribute name="ISREPORT" type="xs:boolean" use="required"/>
      <xs:attribute name="NOCONSOLE" type="xs:boolean" use="required"/>
      <xs:attribute name="NODIALOG" type="xs:boolean" use="required"/>
      <xs:attribute name="NOEJECT" type="xs:boolean" use="required"/>
      <xs:attribute name="NOPAGEEJECT" type="xs:boolean" use="required"/>
      <xs:attribute name="NORESET" type="xs:boolean" use="required"/>
      <xs:attribute name="NOWAIT" type="xs:boolean" use="required"/>
      <xs:attribute name="OFF" type="xs:boolean" use="required"/>
      <xs:attribute name="OUTPUTTO" type="xs:byte" use="required"/>
      <xs:attribute name="PDSETUP" type="xs:boolean" use="required"/>
      <xs:attribute name="PLAIN" type="xs:boolean" use="required"/>
      <xs:attribute name="PREVIEW" type="xs:boolean" use="required"/>
      <xs:attribute name="PROMPT" type="xs:boolean" use="required"/>
      <xs:attribute name="RANGEFROM" type="xs:boolean" use="required"/>
      <xs:attribute name="RANGETO" type="xs:byte" use="required"/>
      <xs:attribute name="RECORDTOTAL" type="xs:byte" use="required"/>
      <xs:attribute name="SAMPLE" type="xs:boolean" use="required"/>
      <xs:attribute name="SUMMARY" type="xs:boolean" use="required"/>
      <xs:attribute name="TOFILE" type="xs:string" use="required"/>
      <xs:attribute name="TOFILEADDITIVE" type="xs:boolean" use="required"/>
      <xs:attribute name="WINDOW" type="xs:string" use="required"/>
      <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPFRXLayoutNode">
    <xs:annotation>
      <xs:documentation>
Provides metadata specific to XMLListener's base XML 
format.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name">
          <xs:annotation>
            <xs:documentation>
Indicates the current nodename as defined in the XMLListener's 
configuration table, for elements, or as an XMLListener property, for 
attributes.  Names used for layout objects and band types in the Data 
portion of this schema represent only the default values for these 
nodenames; for readability and localization purposes these nodenames 
are configurable and should be looked up from the VFPFRXLayoutNode 
portion of the VFP-RDL at runtime.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="type">
          <xs:annotation>
            <xs:documentation>
Matches FRX.objtype for this nodename
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="code">
          <xs:annotation>
            <xs:documentation>
Matches FRX.objcode for this nodename
      </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="info">
          <xs:annotation>
            <xs:documentation>
      Description of this type of node from XMLListener's configuration 
table (for elements) or a matching XMLListener member property (for 
attributes).
            </xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPFRXLayoutObject">
    <xs:annotation>
      <xs:documentation>
Provides metadata specific to the FRX format, using FRX columns 
directly as well as derived columns from FRXCursor helper object and 
other sources.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
    <xs:element name="frxrecno"/>
    <xs:element name="platform"/>
    <xs:element name="name"/>
    <xs:element name="expr"/>
    <xs:element name="offset"/>
    <xs:element name="vpos"/>
    <xs:element name="hpos"/>
    <xs:element name="height"/>
    <xs:element name="objtype"/>
    <xs:element name="tag"/>
    <xs:element name="tag2"/>
    <xs:element name="pensize"/>
    <xs:element name="penpat"/>
    <xs:element name="fillpat"/>
    <xs:element name="width"/>
    <xs:element name="style"/>
    <xs:element name="picture"/>
    <xs:element name="order"/>
    <xs:element name="comment"/>
    <xs:element name="fillchar"/>
    <xs:element name="penred"/>
    <xs:element name="pengreen"/>
    <xs:element name="penblue"/>
    <xs:element name="fillred"/>
    <xs:element name="fillgreen"/>
    <xs:element name="fillblue"/>
    <xs:element name="fontface"/>
    <xs:element name="fontstyle"/>
    <xs:element name="fontsize"/>
    <xs:element name="mode"/>
    <xs:element name="float"/>
    <xs:element name="stretch"/>
    <xs:element name="stretchtop"/>
    <xs:element name="fontbold"/>
    <xs:element name="fontitalic"/>
    <xs:element name="fontunderline"/>
    <xs:element name="fontstrikethrough"/>
    <xs:element name="unpathedimg"/>
    <xs:element name="pathedimg"/>
    <xs:element name="top"/>
    <xs:element name="bottom"/>
    <xs:element name="norepeat"/>
    <xs:element name="pagebreak"/>
    <xs:element name="colbreak"/>
    <xs:element name="resetpage"/>
    <xs:element name="general"/>
    <xs:element name="spacing"/>
    <xs:element name="swapheader"/>
    <xs:element name="swapfooter"/>
    <xs:element name="ejectbefor"/>
    <xs:element name="ejectafter"/>
    <xs:element name="totaltype"/>
    <xs:element name="resettotal"/>
    <xs:element name="fontcharset"/>
    <xs:element name="supalways"/>
    <xs:element name="supovflow"/>
    <xs:element name="suprpcol"/>
    <xs:element name="supgroup"/>
    <xs:element name="supvalchng"/>
    <xs:element name="supexpr"/>
    <xs:element name="user"/>
    <xs:element name="bandid" minOccurs="0"/>
    <xs:element name="bandtype" minOccurs="0"/>
    <xs:element name="bandlabel" minOccurs="0"/>
    <xs:element name="start" minOccurs="0"/>
    <xs:element name="stop" minOccurs="0"/>
    <xs:element name="band_seq" minOccurs="0"/>
    <xs:element name="rel_band_id" minOccurs="0"/>
    <xs:element name="objid" minOccurs="0"/>
    <xs:element name="objname" minOccurs="0"/>
    <xs:element name="locale_id" minOccurs="0"/>
    <xs:element name="start_band_id" minOccurs="0"/>
    <xs:element name="band_offset" minOccurs="0"/>
    <xs:element name="end_band_id" minOccurs="0"/>
    <xs:element name="bandstretch" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="VFPFRXPrintJob">
    <xs:annotation>
      <xs:documentation>
Provides information specific to this report execution run as available 
in the VFP environment.  These elements determine formatting 
coordinates for instances of the layout objects as the Report Engine 
calculates their placement during the report run.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:attribute name="pagewidth" type="xs:short" use="required"/>
      <xs:attribute name="pageheight" type="xs:short" use="required"/>
      <xs:attribute name="name" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>
Provided by XMLListener.PrintJobName.
          </xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="pagedesign" type="xs:string" use="required"/>
      <xs:attribute name="printresolution" type="xs:short" use="required"/>
    <xs:anyAttribute processContents="lax"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="flds">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="the_alias">
          <xs:annotation>
            <xs:documentation>
            Repeated on the field level for use with SET FIELDS GLOBAL.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="the_field"/>
        <xs:element ref="the_type"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="the_type">
    <xs:annotation>
      <xs:documentation>
      Derived from AFIELDS(), matches VFP codes for various table-based 
datatypes.
      </xs:documentation>
    </xs:annotation>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="C"/>
        <xs:enumeration value="Y"/>
        <xs:enumeration value="D"/>
        <xs:enumeration value="T"/>
        <xs:enumeration value="B"/>
        <xs:enumeration value="F"/>
        <xs:enumeration value="G"/>
        <xs:enumeration value="I"/>
        <xs:enumeration value="L"/>
        <xs:enumeration value="M"/>
        <xs:enumeration value="N"/>
        <xs:enumeration value="Q"/>
        <xs:enumeration value="V"/>
        <xs:enumeration value="W"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xs:schema>

See Also

Reference

ReportListener Object
ListenerType Property

Other Resources

ReportListener Foundation Classes
Extending Report Output Functionality