Java is een veel gebruikte, platform onafhankelijke programmeertaal, die ook gebruikt wordt in Lotus Notes/Domino applicaties. XML (Extensible Markup Language) is een veel gebruikte standaard om gegevens gestructureerd op te slaan en uit te wisselen. Regelmatig zullen we in applicaties dan ook XML-bestanden willen benaderen met Java.
Hiervoor kunnen we een zogenaamde XML parser gebruiken. In Java hebben we de beschikking over Document Object Model (DOM) parsers en Simple API for XML (SAX) parsers. DOM parsers maken in het geheugen een document object model dat het hele XML document beschrijft, en dat via de DOM API benaderd kan worden. SAX parsers daarentegen lezen het XML document als een seriële data stream.
Ontwikkelen met deze parsers is relatief tijdrovend en de programmatuur is vaak lastig te onderhouden. Een alternatief is het gebruik van "XML data binding". Met deze data binding wordt automatisch de relatie gelegd tussen de elementen in een XML schema en een Java class, zodat een ontwikkelaar met Java objecten kan werken die de verschillende XML elementen representeren.
Het proces dat toegepast wordt om een XML document naar een Java object te converteren noemen we "unmarshal". Het omgekeerde proces wordt "marshal" genoemd.
Schematisch:

Bij het unmarshallen wordt het XML document gevalideerd aan de hand van het bijbehorende XML schema.
Een simpel XML schema kan er bijvoorbeeld als volgt uit zien:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Boeken">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Boek" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="auteur" type="xsd:string"/>
<xsd:element name="bladzijden" type="xsd:int"/>
<xsd:element name="isbn" ...
...
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema> |
Het is niet nodig om zelf de marshal, unmarshal en validatie code te schrijven, er zijn XML data binding frameworks die deze code genereren. Dit kan bijvoorbeeld aan de hand van een XML schema (XSD) of een document type definition (DTD).
De belangrijkste frameworks zijn de Java Architecture for XML Binding (JAXB) van Sun en daarnaast het Apache open source project Castor.
Alle code die u hiermee zelf moet schrijven om een XML bestand uit te lezen,wordt hiermee beperkt tot bijvoorbeeld:
FileReader reader = new FileReader("D:\\Temp\\Boeken.xml");
OphalenBoeken ophBoeken = (OphalenBoeken) Unmarshaller.unmarshal(Ophalenboeken.class, reader);
Collection boekenColl = ophBoeken.getBoeken();
for (Iterator boekenIter = boekenColl.iterator(); boekenIter.hasNext();) {
OphalennBoeken.Boek = (OphalennBoeken.Boek) boekenIter.next();
...
} |
JAXB of Castor kan u dus veel programmeerwerk uit handen nemen en duidelijker, beter onderhoudbare code opleveren.
Meer informatie en links met betekking tot
JAXB en over
Castor.
Een diepgaande reeks artikelen over Castor is te vinden op
IBM developerworks.