Exporting metadata
You can specify that metadata in the form of a DTD or schema
should be exported when you save the DataWindow object. You can
choose to save the metadata with the XML or in a separate
file.
If you export metadata as a schema, you can associate it with
a namespace. See Associating a namespace
with an exported schema.
To specify how metadata should be saved, select a value from
the Meta Data Type drop-down list or set the Export.XML.MetaDataType
property. The possible values are:
-
XMLNone!—No metadata is generated
-
XMLSchema!—An XML schema is generated
-
XMLDTD!—A DTD is generated
If the data item for a column is null or an empty string, an
empty element is created. If you select XMLSchema!, child elements
with null data items are created with the content
“xsi:nil=’true'”.
The metadata is saved into the exported XML itself or into an
associated file, depending on the setting in the SaveMeta Data
drop-down list or the Export.XML.SaveMetaData property. The possible
values are:
-
MetaDataInternal!—The metadata is saved into the generated
XML document or string. To save metadata using the .Data.XML
expression syntax, you must use this value. -
MetaDataExternal!—The metadata is saved as an external
file with the same name as the XML document but with the
extension .xsd (for a schema) or .dtd (for a DTD). A reference
to the name of the metadata file is included in the output XML
document.
Example: internal
metadata
For example, if you select XMLDTD! and MetaDataInternal!, the
header and first row of the exported XML would look like this for a
simple grid DataWindow for the contact table in the PB Demo DB. The
Include Whitespace property has also been selected and the file name
is dtdinternal.xml:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="UTF-16LE" standalone="yes"?> <!DOCTYPE dtdinternal [<!ELEMENT dtdinternal (dtdinternal_row*)> <!ELEMENT dtdinternal_row (id, last_name, first_name, title, street, city, state, zip, phone, fax)> <!ELEMENT id (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT street (#PCDATA)> <!ELEMENT city (#PCDATA)> <!ELEMENT state (#PCDATA)> <!ELEMENT zip (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT fax (#PCDATA)> ]> <dtdinternal> <dtdinternal_row> <id>1</id> <last_name>Hildebrand</last_name> <first_name>Jane</first_name> <title>ma</title> <street>1280 Washington St.</street> <city>Emeryville</city> <state>MI</state> <zip>94608</zip> <phone>5105551309</phone> <fax>5105554209</fax> </dtdinternal_row> |
Example: external
metadata
If you select MetaDataExternal! instead, the generated XML in
dtdexternal.xml looks like this:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?xml version="1.0" encoding="UTF-16LE"?> <!DOCTYPE dtdexternal SYSTEM "dtdexternal.dtd"> <dtdexternal> <dtdexternal_row> <id>1</id> <last_name>Hildebrand</last_name> <first_name>Jane</first_name> <title>ma</title> <street>1280 Washington St.</street> <city>Emeryville</city> <state>MI</state> <zip>94608</zip> <phone>5105551309</phone> <fax>5105554209</fax> </dtdexternal_row> |
The DTD is in dtdexternal.dtd:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="UTF-16LE"?><!ELEMENT dtdexternal (dtdexternal_row*)> <!ELEMENT dtdexternal_row (id, last_name, first_name, title, street, city, state, zip, phone, fax)> <!ELEMENT id (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT street (#PCDATA)> <!ELEMENT city (#PCDATA)> <!ELEMENT state (#PCDATA)> <!ELEMENT zip (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT fax (#PCDATA)> |
MetaDataExternal! not supported for dot notation
The metadata cannot be saved in an external file if you use
dot notation to generate the XML.
Associating a namespace
with an exported schema
If you export metadata in the form of a schema, you can
associate a namespace with the schema. To do so, right-click the
root element in the Export/Import template view and select Schema
Options from the pop-up menu. In the dialog box, specify the
namespace prefix and URI.
When the Meta Data Type property is XMLSchema! and the Save
Meta Data property is MetaDataInternal!, so that the XML schema is
generated inline, you can specify a name for the root element. If
the root element name is specified, it appears in the generated
XML.
In the following example, the root element name is Contacts,
the namespace prefix is po, and the URI is
http://www.example.com/PO1.
The example shows the header and the first row of the
generated XML:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?> <Contacts> <xs:schema xmlns:po="http://www.example.com/PO1" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/PO1" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="d_contact_list"> <xs:complexType> <xs:sequence> <xs:element ref="d_contact_list_row" maxOccurs="unbounded" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="d_contact_list_row"> <xs:complexType> <xs:sequence> <xs:element ref="id"/> <xs:element ref="last_name"/> <xs:element ref="first_name"/> <xs:element ref="city"/> <xs:element ref="state"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="id" type="xs:int"/> <xs:element name="last_name" type="xs:string"/> <xs:element name="first_name" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> </xs:schema> <po:d_contact_list xmlns:po= "http://www.example.com/PO1" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"> <po:d_contact_list_row> <po:id>1</po:id> <po:last_name>Hildebrand</po:last_name> <po:first_name>Jane</po:first_name> <po:city>Emeryville</po:city> <po:state>MI</po:state> </po:d_contact_list_row> |
By default, the generated XML is not associated with a
namespace.