It is fairly common to encounter a task to convert data from a legacy format to XML.
Defining the XML schema is one part of the problem. Let’s assume that you want to convert some metadata originally defined in Compact NodeType Definition(CND) used in Java Content Repository 1.x/2.x specification.
Here is an example of such data type:
[rsr:distfile] - rsr:type (STRING) mandatory - rsr:releasenotes (STRING) mandatory
This weird looking section of code actually defines a type called “rsr:distfile” with two attributes “rsr:type” and “rsr: releasenotes”.
A one-to-one attribute to attribute mapping will lead to this snippet of XML schema,
<xs:complexType name="distfile"> <xs:attribute name="type" type="xs:string"/> <xs:attribute name=" releasenotes " type="xs:string"/> </xs:complexType>
However, this simple solution can cause nightmares, because – both the attributes are of string type, and, therefore, can hold any random string in the legacy store. You may have to URL escape the string content before adding them as XML attributes.
On the other hand, attribute-to-element mapping for the above case produces much cleaner XML.
Here is the new schema snippet:
<xs:complexType name="distfile"> <xs:sequence> <xs:element maxOccurs="1" minOccurs="1" name="type" type="xs:string"/> <xs:element maxOccurs="1" minOccurs="1" name=" releasenotes " type="xs:string"/> </xs:sequence> </xs:complexType>
You now also have an option to treat the string content as CDATA.
Here is an example XML produced out of the above schema.
<distfile name="copyservice.wsdl"> <type>wsdl<wsdl> < releasenotes ><[!CDATA[ 1.2.4 Added a new element “<error>” 1.2.5 Removed element “<error>” ]] </ releasenotes > </distfile>