User's Guide

Creating Mapping Specifications and Mapping DTDs

Mapping specifications are used to map XML elements to Smalltalk objects. You can create mapping specifications in XML using the mapping DTD that is provided.

Using Mapping Specifications

XML consists of elements, which contain attributes and subelements. Smalltalk consists of instances of classes, which have instance variables. The mapping specification enables an element attribute to be mapped to an instance variable or an instance variable to be mapped to an element attribute. The same mapping specification objects can be used for converting parsed DOM objects into business objects and for serializing business objects into XML. For information on the mapping specification classes, see Mapping Specification Classes.

Using the Mapping DTD

A DTD has been created for writing mapping specifications in XML. The mapping specification is defined as an XML document which conforms to the mapping DTD. The XML parser parses the mapping XML into a DOM. The mapping specification can then be created from the DOM.

VisualAge Smalltalk XML Support uses the same document type definition (DTD) for input serialization (converting XML to objects) and output serialization (converting objects to XML). The following DTD, abtxmap.dtd, is provided:

<!ELEMENT XmlMappingSpec (ClassElementMapping)*>
<!ATTLIST XmlMappingSpec
  Name NMTOKEN #IMPLIED>
 
<!ELEMENT ClassElementMapping (AttributeMapping)*>
<!ATTLIST ClassElementMapping
  ElementTagName NMTOKEN #REQUIRED
  NameSpaceURI CDATA #IMPLIED
  ClassName NMTOKEN #REQUIRED>
 
<!ELEMENT AttributeMapping (Attribute | (SubElement, Attribute?)) >
<!ATTLIST AttributeMapping
  ClassAttribute NMTOKEN #REQUIRED
  AttributeClassCreationMethod NMTOKEN #IMPLIED
  StringConversionMethod NMTOKEN #IMPLIED>
  NameSpaceURI CDATA #IMPLIED
  Required (true | false) "false" >
<!ELEMENT Attribute (#PCDATA) >
<!ELEMENT SubElement (#PCDATA) >
<!ATTLIST SubElement
  Key NMTOKEN #IMPLIED>

Creating Smalltalk mapping classes manually

You can manually create the instances of Smalltalk mapping classes. Manually creating Smalltalk mapping classes allows you to map without parsing a mapping XML. However, if your mapping changes, you would then need to change the Smalltalk code instead of just changing the XML mapping specification.

The following Smalltalk code uses the mapping specification classes (AbtXmlMappingSpec, AbtClassElementMapping, and AbtAttributeMapping) to create a mapping specification for a customer order. The XML element Order maps to the JrcOrder class. The orderNumber attribute maps to the class attribute order.

| spec ceMap |
(spec := AbtXmlMappingSpec new)
  name: 'CustomerOrder';
  addMapping:
    ((ceMap := AbtClassElementMapping new)
       elementTagName: 'Order';
       className: 'JrcOrder';
       addAttributeMapping:
         (AbtAttributeMapping new
           classAttribute: 'orderNumber';
           attribute: 'number';
           classElementMapping: ceMap;
           yourself);
       mappingSpec: spec;
       yourself).


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]